数据结构课程设计—运动会分数统计系统[1]课案_第1页
数据结构课程设计—运动会分数统计系统[1]课案_第2页
数据结构课程设计—运动会分数统计系统[1]课案_第3页
数据结构课程设计—运动会分数统计系统[1]课案_第4页
数据结构课程设计—运动会分数统计系统[1]课案_第5页
已阅读5页,还剩23页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、运动会分数统计系统一、需求分析为了简便地对运动会的报名、成绩的录入和统计,本组设计开发了本系统, 以解决需求。当然,本系统只是一个较为简单的系统,仍然存在着一些操作上 以及显示上的问题,本组将在以后的学习中进行完善。问题描述:参加运动会有n个学校,学校编号为1n。比赛 分成m个男子项目,和w个女子项目。项目编号为男子1m, 女子m+1 m+w。不同的项目取前五名或前三名积分;取前五名 的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2 ; 哪些取前五名或前三名由学生自己设定。(m=20,*=20)功能要求:1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以

2、按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询 取得前三或前五名的学校。输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可 以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会 的相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据进行程序测试,以保证程序的稳定。、概要设计1.本系统的流程图如下:2.本系统采用的存储结构为结构化设计理念,这是数据库的最基本的设计要求,主要包括三个数据表:(1) 项目数据表:运动会

3、开始前必须详细制定本次运动会所需的参赛项 目为接下来报名、场地的准备提供依据。本数据表根据要求设计存 储每个项目的编号、名称、要取的名次以及各个名次对应的学校的 编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名 次对应的学校编号将由系统自动统计。这也有利于以后项目情况的查询。typedef structint item num; / 项目编号int top; /取名次的数目int ran ge5; / 名次int mark5; / 分数ite mn ode; /定义项目结点的类型(2) 学校数据表:本数据表储存了各个参赛学校的总体情况,包括学校的编号、名称、男子团体总分、女子团体总分

4、和学校总分。其中学 校编号和名称是提前输入的,而其他三项内容将由系统进行自动统 计。typedef structint school num; /学校编号int score; /学校总分int mscore; /男团体总分int wscore; /女团体总分ite mn ode cm+w; / 项目数组head no de;/ 定义头结点类型(3) 单项数据表:本数据表是对各个学校的报名情况及成绩进行汇总,为了操作方便,本数据表只包含了学校的编号、项目的编号以及其在比赛中的成绩。typedef struct /* int scho olnum;in t ite mnum;/*int xmch;

5、da nx;da nx dxY;单项成绩*/*/*学校编号*/项目编号*/项目成绩*/这三个数据表之间由项目编号和学校编号进行相关联接,形成一个整体。三、详细设计源代码:#in clude#in clude#in clude #in clude #defi ne n 2 #defi ne m 1 #defi ne w 1 #defi ne null 0typedef structint ite mnum; / int top; / int ran ge5; / int mark5; /ite mno de; /typedef structint scho olnum;学校数目 男子项目数目 女

6、子项目数目项目编号取名次的数目名次分数定义项目结点的类型/ 学校编号初始化头结点输入头结点信息输入项目信息初始化排名和分数输入所获名次信息int score; /学校总分int mscore; /男团体总分int wscore; /女团体总分ite mn ode cm+w; /项目数组head no de;/ 定义头结点类型head node hn ;/定义一个头结点数组void in put in formatio n() /输入信息,建立系统int i,j,k,s;for(i=0;i n ;i+)hi.score=0;hi.mscore=0;hi.wscore=0; /for(i=0;i

7、n ;i+)printf(* 学校编号:);scan f(%d,&hi.school nu m);/for(j=0;jm+w;j+)printf(*项目编号:);scan f(%d, &hi.cj.item nu m);printf(*取前 3 名 or 前 5 名:);scan f(%d,& hi.cj.top);prin tf(*获得几个名次:”);scan f(%d, &k);/for(s=0;s5;s+)hi.cj.ra nges=0, hi.cj.marks=O; /for(s=0;sk;s+)printf(* 名次:);scan f(%d,&hi.cj.ra nges);/if(h

8、i.cj.top=3)switch(hi.cj.ra nges)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;elseswitch(hi.cj.ra nges)case 0: hi.cj.marks=O; break; case 1: hi.cj.marks=7; break; case 2: hi.cj.marks=5; break; case 3: hi.cj.marks=3; break; case 4:

9、 hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks;/按取前三名还是取前五名分别记分if(j=m-1)hi.mscore=hi.mscore+hi.cj.marks;/是男子项目则记到男子分数里面去elsehi.wscore=hi.wscore+hi.cj.marks;/是女子项目则记到女子项目里面去prin tf(n);void output() /输出函数int choice,i,j,k;int remember n;int sig n;doprin tf(*1按学 校六编.号

10、输出* n)prin tf(*2按学校总分输出*门)prin tf(*3按男团总分输出*门)prin tf(*4按女团总分输出* n)请选择编号printf(nn* *nn:);scan f(%d,&choice); switch(choice)case 1:for(i=0;i n;i+)prin tf(nn *学校编号:%dn,hi.schoolnum);printf(*学校总分:dn ,hi.score);printf(*男团总分:%dn,hi.mscore);printf(*女团总分:%dnnn”,hi.wscore);/按编号顺序输出break;case 2:for(i=0;i n;i

11、+)rememberi=i;for(i=0;i n ;i+)for(j=i+1;j n;j+)if(hrememberi.scorehj.score)k=rememberi;for(i=0;i n ;i+)prin tf(nn*prin tf(*prin tf(*prin tf(*/按所记下标顺序输出rememberi=rememberj,rememberj=k;/用冒泡排序方法,用辅助数组记住头结点下标学校编号:%dn,hrememberi.school num); 学校总分:dn ,hrememberi.score);男团总分:%dn,hrememberi.mscore);女团总分:dnn

12、n,hrememberi.wscore);/按学校总分输出 break;case 3:for(i=0;i n;i+)rememberi=i;for(i=0;i n ;i+)for(j=i+1;j n;j+)if(hrememberi.mscorehj.mscore) k=rememberi;rememberi=rememberj;rememberj=k;for(i=0;i n ;i+)printf(nn*学校编号:%dn,hrememberi.schoolnum);prin tf(*学校总分:dn ,hrememberi.score);prin tf(* prin tf(*男团总分 女团总分:

13、%dn,hrememberi.mscore);:%dnnn ”,hrememberi.wscore);/按男团总分输出break;case 4:for(i=0;i n ;i+)rememberi=i;for(i=0;i n;i+)for(j=i+1;j n ;j+) if(hrememberi.wscorehj.wscore) k=rememberi;rememberi=rememberj;rememberj=k;for(i=0;i n)prin tf(错误:这个学校没有参加此次运动会!nnn ”);elseprin tf(”要查询的项目编号:”);scan f(%d,&j);if(jm+w|

14、j=O)prin tf(此次运动会没有这个项目nnn);/学校编号超出范围,则输出警告elseprintf(” 这个项目取前 %d名,该学校的成绩如下:n, h0.cj-1.top); for(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.ra ngej!=0)printf( 学校编号:%d,名次:%dn,hi.schoolnum, hi.cs-1.ra ngej

15、);/输出该项目取得名次学校的成绩printf(nnn继续 2,跳出 0n);scan f(%d,&i);prin tf(nnn);while(i=2);break;void writedata()/FILE *report;int i;if(report=fope n( sportsdata.txt,w)=n ull) printf(不能打开文件n);exit(1);for(i=0;i n;i+)fwrite(&hi,sizeof(head no de),1,report);fclose(report); /void readdata()/FILE *report;int i,j,k,s;i

16、f(report=fope n(sportsdata.txt,r)=nu II) prin tf(file can not be ope nedn);exit(1);for(i=0;i n ;i+)printf(*学校编号:);fread(&k,sizeof( in t),1,report);prin tf(%dn,k);printf(*学校总分:);fread(&k,sizeof( in t),1,report);prin tf(%dn,k);printf(*男团总分:);fread(&k,sizeof( in t),1,report);prin tf(%dn,k);printf(*女团总分

17、:);fread(&k,sizeof( in t),1,report);prin tf(%dn,k);prin tf(nnn);getch();把数据存储在文件中按头结点块写入读出文件中数据的函数for(j=0;jm+w;j+)printf(*项目编号:”);fread(&k,sizeof(i nt),1,report);prin tf(%dn,k);printf(*所取名次数量:);fread(&k,sizeof(i nt),1,report);prin tf(%dn,k);for(s=0;s5;s+)fread(&k,sizeof(i nt),1,report);if(k!=0)print

18、f(”*名次:),prin tf(%dn,k);for(s=0;sm+w|s=O)printf(此次运动会不包括这个项目.nnn);想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用 main()函数,如:switch(choice)case 1:in puti nformatio n();writedata();readdata();mai n();case 2:output();ma in();case 3:in quiry();mai n();case 4:readdata();ma in();程序出现语法错误,发现是输入名次信息的地方忘带地址符 &,或

19、是程序不完整,只写了一个大括号。如:*名次:);sea nf(%d,&hi.cj.ra nges);2. 调试分析:(1) .函数调用。函数调用是语言中一块十分重要部分, 它可以把一个程序 分成若干部分,然后进行配置,所以这块内容对我们很重要。(2) .对结构体的不熟练。刚开始对结构体不太了解,使调试程序时费了我 不少的时间。结构体的嵌套使我很费力气,通过长时间的运用,终于可以得 心应手。结构体在我的实习中站了很大的比重,我也很重视它。通过与线性表,循环等的有机搭配,我完成了实习任务。(3) .循环的问题。这是我很苦恼,大量的循环语句的应用,分析。使我很 头疼,循环是计算机语言中很重要的部分,

20、什么程序也离不开循环,这个问题的解决使我有了坚实的基础。对多层循环的应用也有了深刻的理解。3. 调试结果:(1)首先运行文件运动会统计分数系统(2)输入信息:程序首先赋初值,定义学校的个数为 2,男生项目为1,女生项目为1。输入1 得到进入输入信息模块请选择妾实现步骤的编号二筒廉厲贰筒厲贰筒置筒負厲贰算置筒負厲贰算:01 :00134-HrM肯冇细个 扁常咱m 2 33 r/ - 狡旦曇次次 学项名*关兴P51 名 霜次 議名 号秫 扁令I 33 -J : 目聲次 项尊个名- 2algs- :0嘗喀6-名1 33 r/ : 校亘聲次次 学项名F*项旦编号= 002 - 前凉叶前5名 得几个名次

21、:K = 2_ w w w w J,:4T* Pe jf.貝“_ 厂jj y v d.N 站童./mT7 匸具尺興貝K 广t匕片百B訂按回车键可得到学校的得分信息和按编号获得的所以信息(3)输出信息:输入2进入输出信息模块,该模块分四项:涉骤的编号皐 ! 12 3 4IHHItElthlHH 口弄分分 编总总吕心 X X KX X 斜 X X KX X 斜 X X 鞫 X X:M JtX貝良耳貝豐託貝 按学校编号输出MiK lt Mi Wt lt Mi it lt Mi Wt li Mi iCMXM K lf j 靑先石I: jX :K K U M: K K M: KM K K M: K M:

22、 K 3CJ:1WK员ZI分分 编总总总 套团团 畫黃女 M M:1:8:5 :3*女团口界分分 编总总总167请选择2继续跳出 按学校总分输出:请选择编冇*:2:2167口X刀分分 编总总总 叢团团 瓷事女 H H *3 18 5 口屛分分 编总总总团团 二* 蜀 X* * 二 * * 二 二药W】请选择2继续跳出 按男团总分输出:生扌辛盘用号-KE X X X X X KK X X KK:36 92 17冥入分分编总总总叢团团机女ZZ口I刀分分编亶总鑿团团* 齐牺* 按女团总分输出:MXXHKXHKXXXXXHKXXKX 请 j先挣编号 mzmtOOiKXXHXXM6 92 1 7口零分分

23、编总总总饕团团筈勇女MMMM.0Z刀分分 编总总总 籍团团 输入2返回输出信息模块,输入0返回主菜单(4)查询信息:输入3进入信息查询模块:匸按学校编号查询*?二按项目编号查询*请选择查询方式= 按学校编号查询请选择查诃方式壮却敬学校编|:ai,查询的项目编4 = 002这个项目取前E名,该学校的成绩如下:请选暮2继续,0跳出 按项目编号查询:22 名 式盹得 亍:晏3 2 g 5 可月:;= 畫晒略笆名名若 辛 L11L . - - U h - kF a m.+次次次次目豺8-附尉 *查项咬咬咬咬醴续碁跳出0 输入错误信息时给出提示:*按学校编号查询耒簞震覆薯嚳加此次运动会昔误匸这*2匚按项目编号查询请选择2继续 0跳出*按学校编号查询*2:按项目编号查询此次运动会不包括这个项目继续2一跳岀0 输入2继续查询,输入0返回主菜单4、总结(1).调试中所遇到的较重要问题的回顾:c语言,就1) 提出问题:所有输入输出内容只能在一屏内显示,学过知道”n”是换行”f”是换屏的,可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论