版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. . . . 1 引言本文首先对运动会分数统计系统进行了问题分析和任务定义,如系统可以正确输入各项目的前三名或前五名成绩,能统计各学校的总分,可以按学校编号或名称,学校总分,男女团体总分排序输出,并能按学校编号查询学校某个项目的情况和按项目编号查询取得前三名或前五名的学校。相关数据存入文件并能随时查询。第二部分定义了运动员的有序表的抽象数据类型,并对此系统进行了逻辑设计。第三部分是详细设计,并设计了函数执行流程图。第四部分要的程序编码。第五部分是程序调试和测试结果,具体有调试过程主窗口的展示和测试的数据。并分析解决了调试过程的具体问题。第六部分是本次课程设计的总结。包括课设过程的收获,遇到问
2、题解决问题的思考,程序调试的思考,对数据结构这门课的思考,以与对C语言的认识。2 问题分析本程序设计中,可以输入各项目的前三名或前五名成绩,能统计各学校的总分。演示程序以用户和计算机对话方式进行,在输入数据之后,用户可以进行查询成绩的操作,包括:按学校编号查询项目、按项目编号查询学校成绩;用户 可以分别按学校编号、学校总分、男女团体总分排序输出数据,然后进行数据保存操作。本程序以一个项目为一个结点,建立带头结点的运动会统计系统单链表。每个项目结点中包括项目编号和运动员结构两个元素,运动员结点中包括运动员,所属学校两个元素,运动员的得分由程序按照要求自动赋值。单链表的建立方式为边建立边输入结点元
3、素;分解操作的进行方式为,输入执行的命令编号,然后分步显示每一个操作的结果。程序执行的命令包括: 1)构造线性表; 2)构造基本操作以与主函数; 3)分步输入数据; 4)储存个项目信息; 5)结束。3逻辑设计3.1 抽象数据类型定义ADT Sport 数据对象:D= ai|1<=i<=n,n>=0,ai属int类型 数据关系:R= <ai,ai+1>|ai,ai+1属于D,i=1,n-1 基本运算:exit() /创建文件,数据读入文件,以便随时查询choose() /选择菜单input() /输入项目代号,成绩,前几名胜出者与获胜学校代号并显示输入完成each(
4、) /统计各学校团体总分bianhao() /项目代号zongfen() /统计学校总分nanzong() /男团体总分nvzong() /女团体总分xuexiao() /按学校编号查询项目情况xiangmu() /按项目编号查询学校3.2文件模块当程序运行完后,桌面上会自动生成“sore.txt”文件,方便用户在以后对运动会分数统计系统进行成绩查询和操作,这也是此程序最精彩的部分。下面是创建文件的算法:void exit0()FILE *fp;int k;alp:if(fp=fopen("sore.txt","w")=NULL) printf(&quo
5、t; 创建文件失败n"); printf("1*重试n"); printf("2*退出n"); printf("3*回到主菜单n");alj:scanf("%d",&k);if(k=1)goto alp;else if(k=2)exit(0);else if(k=3)return;elseprintf("输入错误,请重新输入");goto alj;fprintf(fp,"nn");fprintf(fp,"运动会分数统计表"); fprin
6、tf(fp,"项目代号");for(i=0;i<=c+d;i+)fprintf(fp,"%5d",i); fprintf(fp," "); fprintf(fp,"n学校代号n"); for(i=1;i<=a;i+) fprintf(fp,"%10d",i); for(b=1;b<=c+d;b+) fprintf(fp,"%5d",fib.num); fprintf(fp,"n"); fprintf(fp,"nn");
7、 fprintf(fp,"本次运动会有%d个学校参赛nn",a); fprintf(fp,"第1-%d是男子组,第%d-%d是女子组n",c,c+1,c+d); printf("n成绩保存在 “sore.txt”文件中nn"); fclose(fp); exit(1);3.3排序输出成绩模块当输入参赛学校总分,男女团体获得总分后,需要对其进行排序输出。当输入格式不对时,系统会自动提示您修改您输入的数据,重新输入。系统具备很好的容错功能,下面介绍排序输出过程:void nanzong()struct nodint ke;int num;
8、int ha;struct nod *de;de=(struct nod *)malloc(sizeof(struct nod)*a+1);printf("n按男子总分排序输出nn");printf("学校代号,男子团体总分nn");for(i=1;i<=a;i+)dei.ke=i;dei.num=fic+d+1.num;for(i=1;i<=a;i+)for(b=i;b<a;b+)if(deb.num>dei.num)ha=deb.ke;deb.ke=dei.ke;dei.ke=ha;ha=deb.num;deb.num=dei
9、.num;dei.num=ha;for(i=1;i<=a;i+)printf("%13d%12dn",dei.ke,dei.num);3.4主函数模块在正确定义了各个函数后,主函数分别调用各个函数,返回相应的值,在主函数中,应该正确输入参赛学校的数目和男女团体的数目。下面是主函数调用过程:void main()int choos;printf("nn * * * 运动会分数统计 * * *nnn");printf("有多少学校参加:");scanf("%d",&a);while(a<=0|a&g
10、t;20) if(a<=0)printf("n参加学校数目必须大于零nn");printf("共有多少个学校参赛:");scanf("%d",&a); if(a>20)printf("n参赛学校个数不能大于20nn");printf("有多少学校参赛:");scanf("%d",&a); printf("有几个男子组:"); scanf("%d",&c); printf("有几个女子组:&q
11、uot;); scanf("%d",&d); for(i=0;i<=a;i+)fi=(struct node * )malloc(sizeof(struct node)*(c+d+3);for(j=0;j<=c+d+2;j+)fij.num=0; choos=choose();while(1)while(choos<0|choos>8)choos=choose();(*gchoos)();printf("end");choos=choose();3.5函数之间的调用关系zongfen函数nvzong函数main函数gcho
12、os 函数input函数each函数bianhao函数nanzong函数xuexiao函数Xiangmu函数图 1 函数调用关系图4 详细设计4.1表格设计(1) 开始菜单要输入参赛学校个数,参加男女组数。表1 开始菜单开始菜单输入共有多少个学校参赛输入有几个男子组参加输入有几个女子组参加主菜单123456789输入成绩统计各学校的总分按学校编号排序输出各学校成绩按学校总分排序输出按男团体总分排序输出按女团体总分排序输出按学校编号查询某个项目的成绩按项目编号查询取得前三名或前五名的学校退出(2)各个具体菜单一览表。表 2 主菜单(3)输入成绩,项目代号,输出获得名次的学校表 3 输入成绩输入成
13、绩输入成绩输入项目编码选择前3或前5依次输出获得名次的学校(4)按学校编号排序输出各学校成绩。表4 按编号输人成绩按学校编号排序输出各学校成绩继续y退出n(5)按学校总分排序输出表5 按总分输出成绩按学校总分排序输出继续y退出n(6)按女团体总分排序输出表 6 按女团体输出成绩按女团体总分排序输出继续y退出n(7)按学校编号查询某个项目的成绩按学校编号查询继续y退出n表7 按学校编号查询注:以下三页在流程图文档里5 程序编码#include<stdio.h>#include<stdlib.h>int a,b,c,d,i,j;struct nodeint num;stru
14、ct node *f22;void exit0()FILE *fp;int k;alp:if(fp=fopen("sore.txt","w")=NULL) printf(" 创建文件失败n"); printf("1*重试n"); printf("2*退出n"); printf("3*回到主菜单n");alj:scanf("%d",&k);if(k=1)goto alp;else if(k=2)exit(0);else if(k=3)return;e
15、lseprintf("输入错误,请重新输入");goto alj;fprintf(fp,"nn");fprintf(fp,"运动会分数统计表"); fprintf(fp,"项目代号");for(i=0;i<=c+d;i+)fprintf(fp,"%5d",i); fprintf(fp," "); fprintf(fp,"n学校代号n"); for(i=1;i<=a;i+) fprintf(fp,"%10d",i); for(
16、b=1;b<=c+d;b+) fprintf(fp,"%5d",fib.num); fprintf(fp,"n"); fprintf(fp,"nn"); fprintf(fp,"本次运动会有%d个学校参赛nn",a); fprintf(fp,"第1-%d是男子组,第%d-%d是女子组n",c,c+1,c+d); printf("n成绩保存在 “sore.txt”文件中nn"); fclose(fp); exit(1);int choose()int choo;print
17、f("nn1*输入成绩n");printf("2*统计各学校总分n");printf("3*按学校编号排序输入n");printf("4*按学校总分排序输出n"); printf("5*按男团体总分排序输出n");printf("6*按女团体总分排序输出n");printf("7*按学校编号查询某个项目成绩n");printf("8*按项目编号查询取得前五名前三名的学校n");printf("9*退出nn");pri
18、ntf("请选择序号");scanf("%d",&choo);return(choo-1);void input()int ab,ac,ae,af,g=1,get5=0,0,0,0,0;printf("n请输入项目代号:"); ale:scanf("%d",&ab);if(ab>c+d|ab<1)printf("n此项目代号不存在,请重新输入n"); goto ale;ae=0;for(i=0;i<=a;i+)if(fiab.num!=0)ae=1;break;
19、if(ae=1) al2:printf("n成绩已经录入,重新输入:n"); printf("1*重新录入n"); printf("2*待查证后再录入nn");scanf("%d",&af);if(af=2) printf("你已经取消录入!n");return;else if(af=1)for(i=1;i<=a;i+)if(fiab.num!=0)fi0.num=fi0.num-fiab.num;if(ab<=c)fic+d+1.num=fic+d+1.num-fiab.n
20、um;fiab.num=0;elsegoto al2;al:printf("n前几名胜出者:nn");printf("3-前三名n");printf("5-前五名nn");scanf("%d",&ac);if(ac=3)printf("n请输入获胜学校代号:");af=5;for(i=0;i<3;i+)alq:scanf("%d",&ae);if(ae>a|ae<1)printf("%d学校代号不存在,请重新输入n",ae
21、,g);goto alq;for(b=0;b<5;b+)if(ae=getb)printf("一个学校不能在一个项目中有两个名次,重新输入!n",g);goto alq;elsegetb=ae;fae0.num=fae0.num+af;faeab.num=af;if(ab<=c)faec+d+1.num=faec+d+1.num+af;elsefaec+d+2.num=faec+d+2.num+af;if(af>3)af=af-2;elseaf-;g+;else if(ac=5)printf("请输入获胜学校代号:");af=7;for
22、(i=0;i<5;i+)alw:scanf("%d",&ae);if(ae>a|ae<1)printf("%d学校代号不存在,请重新输入n",ae,g);goto alw;for(b=0;b<5;b+)if(ae=getb)printf("同一个学校不能在同一个项目中有两个名次,请重新输入!n",g);goto alw;elsegetb=ae;fae0.num=fae0.num+af;faeab.num=af;if(ab<=c)faec+d+1.num=faec+d+1.num+af;elsefa
23、ec+d+2.num=faec+d+2.num+af;if(af>3)af=af-2;elseaf-;g+;elsegoto al;printf("nn输入完成!n");void each()printf("n对应格式为:n学校代号为:团体总成绩为:nn");for(i=1;i<=a;i+)printf("%2d:%3d",i,fi0.num);if(i%3=0)printf("n");void bianhao()printf("n项目代号");for(i=1;i<=c+d;i
24、+)if(i>9)printf("%4d",i);elseprintf("%5d",i);printf("n");printf("schooln");for(i=1;i<=a;i+)printf("%d",i);for(b=1;b<=c+d;b+)if(fib.num>9)printf("%6d",fib.num);elseprintf("%7d",fib.num);printf("n");void zongfe
25、n()struct nodint ke;int num;int ha;struct nod *de;de=(struct nod *)malloc(sizeof(struct nod)*a+1);printf("按学校编号排序输出nn");printf("学校代号总分nnn");for(i=1;i<=a;i+)dei.ke=i;dei.num=fi0.num;for(i=1;i<=a;i+)for(b=i;b<a;b+)if(deb.num>dei.num)ha=deb.ke;deb.ke=dei.ke;dei.ke=ha;ha=
26、deb.num;deb.num=dei.num;dei.num=ha;for(i=1;i<=a;i+)printf("%13d%8dn",dei.ke,dei.num);void nanzong()struct nodint ke;int num;int ha;struct nod *de;de=(struct nod *)malloc(sizeof(struct nod)*a+1);printf("n按男子总分排序输出nn");printf("学校代号,男子团体总分nn");for(i=1;i<=a;i+)dei.ke=
27、i;dei.num=fic+d+1.num;for(i=1;i<=a;i+)for(b=i;b<a;b+)if(deb.num>dei.num)ha=deb.ke;deb.ke=dei.ke;dei.ke=ha;ha=deb.num;deb.num=dei.num;dei.num=ha;for(i=1;i<=a;i+)printf("%13d%12dn",dei.ke,dei.num);void nvzong()struct nodint ke;int num;int ha;struct nod *de;de=(struct nod *)malloc
28、(sizeof(struct nod)*a+1);printf("女子团体总分排序输出nn");printf("学校编号,女子团体总分nn");for(i=1;i<=a;i+)dei.ke=i;dei.num=fic+d+2.num;for(i=1;i<=a;i+)for(b=i;b<a;b+)if(deb.num>dei.num)ha=deb.ke;deb.ke=dei.ke;dei.ke=ha;ha=deb.num;deb.num=dei.num;dei.num=ha;for(i=1;i<=a;i+)printf(&qu
29、ot;%15d%13dn",dei.ke,dei.num);void xuexiao()int dr,dt;printf("n请输入要查询的学校代号:");aly:scanf("%d",&dr);if(dr>a|dr<1)printf("学校代号不存在,重新输入n");goto aly;printf("要查询的项目代号:");alo:scanf("%d",&dt);if(dt>c+d|dt<1)printf("项目不存在,重新输入n&q
30、uot;);goto alo;printf("nn学校第%3d个项目的成绩为%3dn",dr,dt,fdrdt.num);void xiangmu()int ge,sedy=0;printf("n 请输入要查询的项目代号:");all:scanf("%d",&ge);printf("end");if(ge>c+d|ge<1)printf("项目代号不存在,重新输入n");goto all;for(i=1;i<=a;i+)if(fbge.num=2)sedy=1;if(s
31、edy=0)printf("此项目没有录入成绩n");return;for(i=1;i<=a;i+)if(fige.num=7)printf("此项目取前5名获奖者n");break;if(i=a+1)printf("此项目取前3名获奖者n");printf("n 获胜成绩由高到底依次为:nn");for(i=7;i>0;i-)for(b=1;b<=a;b+)if(fbge.num=i)printf("%5d",b);void(*g)()=input,each,bianhao,
32、zongfen,nanzong,nvzong,xuexiao,xiangmu,exit0;void main()int choos;printf("nn * * * 运动会分数统计 * * *nnn");printf("有多少学校参加:");scanf("%d",&a);while(a<=0|a>20) if(a<=0)printf("n参加学校数目必须大于零nn");printf("共有多少个学校参赛:");scanf("%d",&a);
33、if(a>20)printf("n参赛学校个数不能大于20nn");printf("有多少学校参赛:");scanf("%d",&a); printf("有几个男子组:"); scanf("%d",&c); printf("有几个女子组:"); scanf("%d",&d); for(i=0;i<=a;i+)fi=(struct node * )malloc(sizeof(struct node)*(c+d+3);for
34、(j=0;j<=c+d+2;j+)fij.num=0; choos=choose();while(1)while(choos<0|choos>8)choos=choose();(*gchoos)();printf("end");choos=choose();6 程序调试和测试6.1 程序测试过程(1) 测试开始时,输入参赛学校数目,参赛男子组数和女子组数。图5 成绩录入(2)当选择菜单2后,统计各个学校团体总分。图6 统计总分(3)当输入菜单4后,按学校编号排序输入。图7按学校编号排序输出(4)当输入菜单6后,输出女团体总分。图8按女团体总分排序输出(5)
35、当选择菜单7和8时,按学校编号查询某个项目成绩并排序输出。图9 成绩查询(6)最后文件被保存。图10文件保存6.2程序调试过程(1) “printf”语句中的双引号要在中文状态下输入,此错误很隐蔽。(2) “scanf”写成了“scang”。(3) “scanf”后边的左括号丢了。(4) 程序结尾丢了“”,导致main函数没有正确定义。(5) 定义结构体时最后丢了“;”。(6) “sore.txt”文件出错。(7) “ printf”中的“p”大写了,导致未被定义。7心得与体会课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的
36、具体训练和考察过程。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一周的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年首都医科大学附属北京朝阳医院医护人员招聘考试试题附答案详解
- 2026年无锡市精神卫生中心医护人员招聘笔试备考题库及答案详解
- 2026年遂宁市人民医院医护人员招聘考试参考试题及答案详解
- 2026年烟台市中医医院医护人员招聘考试备考试题及答案详解
- 2026年陕西中医药大学附属医院医护人员招聘考试备考试题及答案详解
- 2026年浙江医科大学附属第一医院医护人员招聘考试备考试题及答案详解
- 2026年自贡市第四人民医院医护人员招聘考试备考题库及答案详解
- 2026年玉溪市人民医院医护人员招聘笔试参考题库及答案详解
- 2026年咸宁市中心医院医护人员招聘笔试参考题库及答案详解
- (2026年)消毒供应中心的质量监测制度
- 2025年重庆轨道交通集团招聘笔试参考题库含答案解析
- 2023年广西高一学业水平合格性考试化学试卷真题(含答案详解)
- 水力发电设备防腐涂料施工合同
- 四川省凉山州2022-2023学年五年级下学期数学期末试卷(含答案)
- 汽车保险理赔(第四版)课件 项目7 车险事故车辆损失评估
- 多图中华民族共同体概论课件第十一讲 中华一家与中华民族格局底定(清前中期)根据高等教育出版社教材制作
- 商品和服务税收分类编码解析(45号公告)
- Cook球囊放置操作规程
- 小学道德与法治人教部编版(新)五年级下册(2020)-红军不怕远征难1.0-公开课
- 部编版道德与法治五年级下册期末综合测试卷含答案(共6套)
- 【电气专业】15D501建筑物防雷设施安装
评论
0/150
提交评论