数据结构课程设计报告学生作业完成情况管理系统.docx

上传人:b****6 文档编号:16778824 上传时间:2023-07-17 格式:DOCX 页数:34 大小:367.50KB
下载 相关 举报
数据结构课程设计报告学生作业完成情况管理系统.docx_第1页
第1页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第2页
第2页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第3页
第3页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第4页
第4页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第5页
第5页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第6页
第6页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第7页
第7页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第8页
第8页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第9页
第9页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第10页
第10页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第11页
第11页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第12页
第12页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第13页
第13页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第14页
第14页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第15页
第15页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第16页
第16页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第17页
第17页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第18页
第18页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第19页
第19页 / 共34页
数据结构课程设计报告学生作业完成情况管理系统.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计报告学生作业完成情况管理系统.docx

《数据结构课程设计报告学生作业完成情况管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告学生作业完成情况管理系统.docx(34页珍藏版)》请在冰点文库上搜索。

数据结构课程设计报告学生作业完成情况管理系统.docx

数据结构课程设计报告学生作业完成情况管理系统

2.概要设计……………………………………………………………………………………………2

2.1学生作业完成情况管理系统………………………………………………………2

2.1.1程序设计说明……………………………………………………………………2

2.1.2数据结构类型……………………………………………………………………4

2.2图的建立及存储…………………………………………………………………………4

2.2.1程序设计说明……………………………………………………………………4

2.2.2数据结构类型……………………………………………………………………4

3.1算法流程图…………………………………………………………………………………5

3.1.1学生作业完成情况管理系统………………………………………………5

3.1.2图的建立及存储…………………………………………………………………6

4.2图的建立及存储…………………………………………………………………………30

 

1.需求分析

(一)学生作业完成情况管理系统

假设某门课程一学期要留10次作业,每次老师要进行批改,给出分数后还要进行登记。

学期期末要根据每次作业的成绩计算出最终的平时成绩(满分100)。

该程序应该具有下列功能:

(1)输入信息;

(2)输出信息;

(3)给定条件,修改、删除相应信息;

(4)按条件统计。

(二)图的建立及存储

建立图的存储结构(图的类型可以是有向图、无向图),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。

应用环境设定给定某类图的顶点和边的相关信息,要求输出该图的邻接矩阵。

用户界面命令行界面,用户选择所要建立的图的类型,输入相关顶点和边的信息,然后输出该图的邻接矩阵。

输入方式首先输入所要建立的图形类型的代码,然后输入顶点vexnum和边的数量arcnum,再输入顶点信息,边的2个端点v1和v2,如果建立的是网则还要输入权值w。

输出方式输出的是一个邻接矩阵,采用for循环嵌套,输出该图的邻接矩阵。

数据存储方式全部在内存存放,不使用硬盘上的文件或其他数据源,程序执行过程中和结束后不保存数据。

程序功能:

1.输入图的类型;

2.输入相应的图的顶点和边的相关信息;

3.得到图的邻接矩阵。

 

2.概要设计

2.1学生作业完成情况管理系统

2.1.1程序设计说明

程序整体分为登录部分、获得数据部分、数据处理及处理信息反馈部分、数据导出保存部分,如下结构图1、2所示:

 

图1

 

 

 

图2

 

该程序具有下列功能:

(1)输入信息;

(2)输出信息;

(3)给定条件,修改、删除相应信息;

(4)按条件统计。

2.1.2数据结构类型

typedefstructstudent//学生信息链表

{

charname[10];

intschoolnumber;

intclassnumber;

floatscore[10];

structstudent*next;

}stu,*stupt;

stuptst=NULL;//学生信息的头指针

stuptqt=NULL;//学生信息的尾指针

FILE*fp;//文件指针

2.2图的建立及存储

2.2.1程序设计说明

本程序通过输入有向图与无向图的顶点、边、权值等信息,存储至用数组建立的邻接矩阵,并输出该邻接矩阵图。

2.2.2数据结构类型

基本操作:

typedefenum

{

DG,UDG

}GraphKind;//有向图,无向图

typedefstructArcCell

{

VrTypeadj;//顶点关系类型。

对无权图,用1或0表示相邻否;对带权图,则为权值类型。

InfoType*info;//该弧相关信息的指针

}ArcCell,AdjMatrix[20][20];

typedefstruct

{

VertexTypevertex[20];//顶点向量

AdjMatrixarcs;//邻接矩阵

intvexnum,arcnum;//图的当前顶点数和弧(边)数

GraphKindkind;//图的种类标志

}MGraph;

CreateGraph(MGraph&G)

     初始条件:

图G未创建。

     操作结果:

创建一个图G。

  CreateUDG(MGraph&G);

     初始条件:

无向图G未创建。

     操作结果:

创建一个无向图并求出其邻接矩阵。

  CreateDG(MGraph&G);

     初始条件:

有向图G未创建。

     操作结果:

创建一个有向图并求出其邻接矩阵。

DDisplay(MGraphG)

初始条件:

图G已创建。

     操作结果:

输出图G的邻接矩阵。

3.详细设计

3.1算法及流程图

3.1.1学生作业完成情况管理系统

程序算法:

手动输入学生信息:

voidinpu(stuptp)

{

intn;

intm=0;

intflag;

while(m<10)//成绩初始化为0

{

p->score[m]=0;

m++;

}

printf("请输入:

姓名:

");

scanf("%s",p->name);

clear();

printf("请输入:

学号:

");

scanf("%d",&p->schoolnumber);

clear();

printf("请输入:

班级(如:

101):

");

scanf("%d",&p->classnumber);

clear();

do

{

printf("请输入:

第几次作业(1~10):

");

scanf("%d",&n);

clear();

printf("请输入:

该次作业成绩:

");

scanf("%f",&p->score[n-1]);

clear();//清空缓冲区

printf("是否继续输入该生成绩,退出请按q,其他键继续:

");

flag=getchar();

clear();//清空缓冲区堆积

}

while(flag!

='q');

}

从文件中导入学生信息:

voidread&st,FILE*fp)

{

charflag,flag_1;

char[90];

printf("如导入前有过手动输入,请先导出至文件后再进行导入,否则输入部分的数据将丢失!

\n");

printf("任意键继续,退出请按q:

");

flag_1=getchar();//等待接收一个字符

clear();

if(flag_1=='q')

{

return;

}

lab_2:

printf("请选择:

a.程序默认路径导入(之前导出时需要是默认导出)b.自定义导入路径(请确保导入路径合法):

");

flag=getchar();

clear();

if(flag=='b')

{

printf("请输入导入路径(请确保导入路径合法!

)(如c:

.\\student_homework_infor.txt):

");

scanf("%s",);

clear();

if(access()==1)//确定文件或文件夹的访问权限即检查文件的存取方式,如果存取方式有效,则返回0,否则返回1

{

printf("路径不合法或文件不存在,请重新选择!

\n");

gotolab_2;

}

fp=fopen(,"rb");

if(fp==NULL)

{

printf("打开%s文件失败,请返回主菜单重试!

\n",);

return;

}

else

(st,fp);//导入文件

fclose(fp);

}

elseif(flag=='a')

{

fp=fopen("student_homework_infor.txt","r");

if(access("student_homework_infor.txt",0)==1)

{

printf("文件不存在!

\n");

}

if(fp==NULL)

{

printf("打开程序所在目录下的student_homework_infor.txt文件失败,请返回上层菜单重试!

\n");

return;

}

else

(st,fp);

fclose(fp);

}

else

{

printf("非法输入!

程序将返回上层菜单...\n");

}

}

查询某学生作业完成情况:

voidsearch_1(stupt&st,intsnum)

{

stuptp,q;

if(st==NULL)

{

printf("未建立学生信息表,请返回上层菜单输入或导入所有学生的信息\n");

return;

}

else

{

p=st;

q=p->next;

}

if(p->schoolnumber==snum)

{

printf_score(p);//查找成功输出并返回上级函数

return;

}

while(q!

=NULL)

{

if(q->schoolnumber==snum)

{

printf_score(q);//查找成功输出并返回上级函数

return;

}

q=q->next;//下一个

}

printf("查询失败,该学号学生信息不存在\n");

}

查询某班级所有学生成绩:

voidsearch_2(stuptst,intclnum)

{

stuptp,q;

intf=0;

if(st==NULL)

{

printf("未建立学生信息表,请返回主菜单输入所有学生的信息\n");

return;

}

else

{

p=st;

q=p->next;

}

printf("班级姓名学号成绩1成绩2成绩3成绩4成绩5成绩6成绩7成绩8成绩9成绩10\n");

printf("──────────────────────────────────────\n");

if(p->classnumber==clnum)

{

printf_infor(p);

f++;

}//查找成功输出

while(q!

=NULL)

{

if(q->classnumber==clnum)

{

printf_infor(q);

f++;

}//查找成功输出

q=q->next;//下一个

}

if(f==0)

{

printf("没有该班级学生信息\n");

}

}

修改学生信息:

voidchange(stupt&p)

{

chara;

printf_help_2();

while((a=getchar())!

='0')

{

clear();

printf("班级姓名学号成绩1成绩2成绩3成绩4成绩5成绩6成绩7成绩8成绩9成绩10\n");

printf("──────────────────────────────────────\n");

printf_infor(p);

switch(a)

{

case'1':

{

printf("您选择了:

1.修改姓名\n");

change_name(p);

break;

}

case'2':

{

printf("您选择了:

2.修改班级\n");

change_class(p);

break;

}

case'3':

{

printf("您选择了:

3.修改成绩\n");

change_score(p);

break;

}

default:

{

printf("非法输入,请重新选择!

\n");

break;

}

}

printf_help_2();

}

if(a=='0')

{

clear();

printf("您选择了:

0.返回\n");

}

}

删除学生信息:

voiddelete_pt(stupt&st,intsnum)

{

stuptp,q;

if(st==NULL)

{

printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n");

return;

}

else

{

p=st;

q=p->next;

}

if(p->schoolnumber==snum)

{

st=q;//查找成功删除并返回上级函数

printf("班级姓名学号成绩1成绩2成绩3成绩4成绩5成绩6成绩7成绩8成绩9成绩10\n");

printf("──────────────────────────────────────\n");

printf_infor(p);

free(p);

printf("上面信息删除成功!

\n");

return;

}

while(q!

=NULL)

{

if(q->schoolnumber==snum)

{

p->next=q->next;//查找,成功删除并返回上级函数

printf("班级姓名学号成绩1成绩2成绩3成绩4成绩5成绩6成绩7成绩8成绩9成绩10\n");

printf("──────────────────────────────────────\n");

printf_infor(q);

free(q);

printf("上面信息删除成功!

\n");

return;

}

else//下一个

{

p=q;

q=p->next;

}

}

printf("删除失败,该学号学生信息不存在\n");

}

显示各项统计数据:

voidstatistics_result(stupt&st)//统计结果

{

charflag;

printf_help_3();

while((flag=getchar())!

='0')

{

clear();

switch(flag)

{

case'1':

{

printf("您选择了:

1.按学号查看学生平均成绩\n");

snum_check_aver(st);

break;

}

case'2':

{

printf("您选择了:

2.按班级查看学生平均成绩\n");

cnum_check_aver(st);

break;

}

case'3':

{

printf("您选择了:

3.查看学生平均成绩降序序列\n");

descending_order_check(st);

break;

}

default:

{

printf("非法输入,请重新选择!

\n");

clear();

break;

}

}

printf_help_3();

}

if(flag=='0')

{

printf("您选择了:

0.返回主菜单\n");

clear();

Printf_help_1();

}

}

导出信息至文件:

voidcreat_files(stuptst,FILE*&fp)

{

charflag;

char[90];

lab_1:

printf("请选择:

a.默认路径保存(为当前目录下的student_homework_infor.txt)b.自定义保存路径:

");

flag=getchar();

clear();//清除缓存中的回车

if(flag=='b')

{

printf("请输入文件名及保存路径(如c:

student_homework_infor.txt):

");

scanf("%s",);

clear();

if(access()==1)

{

printf("路径不合法,请重新输入!

\n");

gotolab_1;

}

fp=fopen(,"ab+");

if(fp==NULL)

{

printf("创建文件至%s失败,请返回主菜单重试!

\n",);

return;

}

else(st,fp);

fclose(fp);

}

elseif(flag=='a')

{

fp=fopen(".\\student_homework_infor.txt","a");

if(fp==NULL)

{

printf("创建文件至程序所在目录下的student_homework_infor.txt文件失败,请返回主菜单重试!

");

return;

}

else(st,fp);

fclose(fp);

}

else

{

printf("非法输入!

程序将返回主菜单...\n");

}

}

 

 

学生作业完成情况管理程序流程概图

3.1.2图的建立及存储

邻接矩阵表示法:

  设G=(V,E)是一个图,其中V={V1,V2,V3…,Vn}。

G的邻接矩阵是一个具有下述性质的n阶方阵:

若(Vi,Vj)∈E或者∈E,则A[i,j]=1反之为0;

图5-2中有向图G1和无向图G2的邻接矩阵分别为M1和M2:

M1=┌0101┐

│1010│

│1001│

└0000┘

M2=┌0111┐

│1010│

│1101│

└1010┘

  注意无向图的邻接是一个对称矩阵,例如M2。

  用邻接矩阵表示法来表示一个具有n个顶点的图时,除了用邻接矩阵中的n*n个元素存储顶点间相邻关系外,往往还需要另设一个向量存储n个顶点的信息。

因此其类型定义如下:

 VertexTypevertex[MAX_VERTEX_NUM];//顶点向量

AdjMatrixarcs;//邻接矩阵

intvexnum,arcnum;//图的当前顶点数和弧(边)数

GraphKindkind;//图的种类标志  

若图中每个顶点只含一个编号i(1≤i≤vnum),则只需一个二维数组表示图的邻接矩阵。

此时存储结构可简单说明如下:

 typeadjmatrix=array[1..vnum,1..vnum]ofadj;

  利用邻接矩阵很容易判定任意两个顶点之间是否有边(或弧)相联,并容易求得各个顶点的度。

  对于无向图,顶点Vi的度是邻接矩阵中第i行元素之和,即

        n      

    D(Vi)=∑A[i,j]         

j=1     

  对于有向图,顶点Vi的出度OD(Vi)为邻接矩阵第i行元素之和,顶点Vi的入度ID(Vi)为第i列元素之和。

        n        n

    OD(Vi)=∑A[i,j],ID(Vi)=∑A[j,i])

       j=1        j=1    

用邻接矩阵也可以表示带权图,只要令

 

   Wij,若(Vi,Vj)∈或者∈E其中Wij为或(Vi,Vj)上的权值  

A[i,j]={

    0,否则

 

1、无向图邻接矩阵的建立算法如下:

 

procedurebuild-graph;{建立无向图的邻接矩阵}

begin

fori:

=1tondoread(G.vertex[i]);{读入n个顶点的信息}

fori:

=1tondo

forj:

=1toedo

G.arcs[i][j]=0;

{将邻接矩阵的每个元素初始化成0}

fork:

=1toedo{e为边的数目}

[read(i,j,w){读入边和权}G.arcs[i][j]:

=w]

G.arcs[i][j]=G.arcs[i][i]{置对称弧}

end;

该算法的执行时间是O(n+n2+e),其中消耗在邻接矩阵初始化操作上的时间是O(n2),而e

2、有向图邻接矩阵的建立算法如下:

 

procedurebuild-graph;{建立有向图的邻接矩阵}

begin

fori:

=1tondoread(G.vertex[i]);{读入n个顶点的信息}

fori:

=1tondo

forj:

=1toedo

G.arcs[i][j]=0;

{将邻接矩阵的每个元素初始化成0}

fork:

=1toedo{e为边的数目}

[read(i,j,w){读入边和权}G.arcs[i][j]:

=w]

G.arcs[i][j]=G.arcs[i][i]{置对称弧}

end;

该算法的执行时间是O(n+n2+e),其中消耗在邻接矩阵初始化操作上的时间是O(n2),而e

1)头文件:

#include////包含了getchar();printf();feof();fopen()FILE声明

#include////包含了malloce();exit()

#include////包含access()

#include////包含strcmp()

#include////包含了getch()

程序算法:

输出邻接矩阵:

voidDisplay(MGraphG)

{

//输出图的邻接矩阵

inti,j;

printf("该图的邻接矩阵为:

\n");

for(i=0;i

{

for(j=0;j

{

printf("%5d",G.arcs[

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2