《数据结构课程设计运动会分数统计1.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计运动会分数统计1.doc(16页珍藏版)》请在三一办公上搜索。
1、目录:1.需求分析:4功能要求:4性能需求:42.概要设计:41.存储结构设计:42.流程图设计:63.详细设计:104.菜单窗口:191.主菜单窗口192. 输入各个项目成绩并存储文件193. 统计各学校总分224. 按学校编号排序输出235. 按学校总分排序输出236. 按男团体总分排序输出247. 按女团体总分排序输出248. 按学校编号查询学校某个项目情况259. 按项目编号查询取得名次的学校2510退出255.课程设计总结与体会:266.致谢:261. 需求分析:1 运动会分数统计(难度*)任务:参加运动会有10个学校,学校编号为110。比赛分成18个男子项目,和12个女子项目。项目
2、编号为男子118,女子1930。不同的项目取前三名积分,前三名的积分分别为:5、3、2。功能要求:b) 可以输入各个项目的前三名的成绩;c) 能统计各学校总分;d) 可以按学校编号或名称、学校总分、男女团体总分排序输出;e) 数据存入文件并能随时查询 f) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整型存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在java语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据:测试数据及测试结果请在上交的
3、资料中写明;性能需求:输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。2.概要设计:1.流程图设计: Main()函数流程图开始int t!g2|!g1exit(1);system(cls);选择操作编号123456789 Funct1()函数流程图School *p1和Items *p2!p1|!p2exit(1);YPrintf();w20NYYYPrintf(“输入有误”)Printf(“输入有误”)Printf(“输入有误”)NN
4、NY请选择1.前三名2.前五名!1&!2Printf(“输入有误请重新输入”)n20m20!1输入前三名学校名称输入前五名学校名称输入工程项目名称(如:1)0YYNNN结束开始Save()函数流程图 Funct2()函数流程图 funct3()函数流程图 funct4()函数流程图 Funct5()函数流程图 Funct6()函数流程图 funct7()函数流程图 funct8()函数流程图3.详细设计:#include#include#include #include#include #define n 2/学校数目 #define m 1/男子项目数目 #define w 1/女子项目数目
5、#define null 0typedef struct int itemnum; /项目编号 int top; /取名次的数目 int range3; /名次 int mark3; /分数itemnode; /定义项目结点的类型typedef structint schoolnum; /学校编号 int score; /学校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; /项目数组headnode;/定义头结点类型headnode hn;/定义一个头结点数组void inputinformation() /输入信息,建立系统in
6、t i,j,k,s; for(i=0;in;i+) hi.score=0; hi.mscore=0; hi.wscore=0; /初始化头结点 for(i=0;in;i+) printf(*学校编号:); scanf(%d,&hi.schoolnum); /输入头结点信息 for(j=0;jm+w;j+) printf(*项目编号:); scanf(%d,&hi.cj.itemnum); printf(*取前3名n); /scanf(%d,&hi.cj.top); printf(*获得几个名次:); scanf(%d,&k); /输入项目信息 for(s=0;s3;s+) hi.cj.rang
7、es=0, hi.cj.marks=0; /初始化排名和分数 for(s=0;sk;s+) printf(*名次:); scanf(%d,&hi.cj.ranges); /输入所获名次信息 if(hi.cj.top=3) switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=5; break; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; hi.score=hi.score+hi.cj.marks;/按取前三名 if(j=m-1)hi
8、.mscore=hi.mscore+hi.cj.marks;/是男子项目则记到男子分数里面去 else hi.wscore=hi.wscore+hi.cj.marks;/是女子项目则记到女子项目里面去 printf(n); void output() /输出函数 int choice,i,j,k;int remembern;int sign; do printf(*1.按学校编号输出.*n); printf(*2.按学校总分输出.*n); printf(*3.按男团总分输出.*n); printf(*4.按女团总分输出.*n); printf(nn* 请选择编号*nn:); scanf(%d,
9、&choice); switch(choice) case 1:for(i=0;in;i+) printf(nn*学校编号:%dn,hi.schoolnum); printf(*学校总分:%dn ,hi.score); printf(*男团总分:%dn,hi.mscore); printf(*女团总分: %dnnn,hi.wscore); /按编号顺序输出 break; case 2: for(i=0;in;i+)rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+)if(hrememberi.scorehj.score) k=rememberi;rememb
10、eri=rememberj,rememberj=k; / 用冒泡排序方法,用辅助数组记住头结点下标 for(i=0;in;i+) printf(nn*学校编号:%dn,hrememberi.schoolnum); printf(*学校总分:%dn ,hrememberi.score); printf(*男团总分:%dn,hrememberi.mscore); printf(*女团总分: %dnnn,hrememberi.wscore);/按所记下标顺序输出 /按学校总分输出 break; case 3: for(i=0;in;i+) rememberi=i; for(i=0;in;i+) fo
11、r(j=i+1;jn;j+)if(hrememberi.mscorehj.mscore)k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;in;i+) printf(nn*学校编号:%dn,hrememberi.schoolnum); printf(*学校总分:%dn ,hrememberi.score); printf(*男团总分:%dn,hrememberi.mscore); printf(*女团总分: %dnnn,hrememberi.wscore); /按男团总分输出 break; case 4: for(i=0;in;i+) r
12、ememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(hrememberi.wscorehj.wscore) k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;in)printf(错误:这个学校没有参加此次运动会!nnn); elseprintf(要查询的项目编号:); scanf(%d,&j); if(jm+w|j=0) printf(此次运动会没有这个项目nnn);/学校编号超出范围,则输出警告 else printf(这个项目取前 %d名,该学校的成绩如下:n, h0.cj-1.top); f
13、or(k=0;km+w|s=0)printf(此次运动会不包括这个项目.nnn);/项目编号超出范围则输出警告elseprintf(该项目取前 %d名,取得名次的学校n,h0.cs-1.top);for(i=0; in;i+) for(j=0;j5;j+) if(hi.cs-1.rangej!=0) printf(学校编号:%d,名次:%dn,hi.schoolnum,hi.cs-1.rangej); /输出该项目取得名次学校的成绩 printf(nnn继续 2,跳出 0n);scanf(%d,&i);printf(nnn);while(i=2); break;void writedata()
14、 /把数据存储在文件中 FILE *report; int i; if(report=fopen(sportsdata.txt,w)=null) printf(不能打开文件n); exit(1); for(i=0;in;i+)fwrite(&hi,sizeof(headnode),1,report); fclose(report); /按头结点块写入 void readdata() /读出文件中数据的函数 FILE *report; int i,j,k,s; if(report=fopen(sportsdata.txt,r)=null) printf(file can not be opene
15、dn); exit(1); for(i=0;in;i+) printf(*学校编号:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*学校总分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*男团总分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*女团总分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(nnn); getch(
16、); for(j=0;jm+w;j+) printf(*项目编号:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*所取名次数量:); fread(&k,sizeof(int),1,report); printf(%dn,k); for(s=0;s5;s+) fread(&k,sizeof(int),1,report); if(k!=0) printf(*名次:), printf(%dn,k); for(s=0;s5;s+) fread(&k,sizeof(int),1,report); if(k!=0) printf(*分数:
17、), printf(%dn,k); printf(nnn); getch(); fclose(report); /关闭文件 /按照读一个数据就输出一个数据的方式显示数据内容int main() int choice;printf(=欢迎使用=n); printf(nn*运动会分数统计系统*n); printf(nn*1.输入信息*n);printf(*2.输出信息*n);printf(*3.查询信息*n); printf(*4.调用信息*n); printf(*5.退出系统*nnn);printf(=nn);printf(*请选择要实现步骤的编号:nn);scanf(%d,&choice);s
18、witch(choice) case 1: inputinformation();writedata();readdata();main(); case 2: output();main(); case 3: inquiry();main(); case 4: readdata();main(); case 5: exit(0); default: exit(0); 4程序运行结果系统总界面:当选择1时,根据提示输入学校信息和项目编号当输入完各项数据后可选择查询和输出,下图选择3选择2时可输出信息,如下图5.课程设计总结与体会:在这次的课程设计过程中,我学到的不仅是知识,我还认识到许多事情。这次设计使我的编程水平提高了一大步,使我充分的认识到合作的可贵。由于这次设计主要涉及到数据结构中的链表结构,我学到了学到了不少关于数据链表的知识,对链表的操作有了进一步的了解。这次设计对我的综合能力是一次很好的锻炼,但是我必须承认自己的能力和知识还很肤浅。所以今后我的学习道路还是很漫长的。最后,在这里由于我水平有限,加之时间短暂,故运动会分数统计系统中还有许多不足之处,请老师批评指正,我会在以后的制作中不断改进,不断完善。