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

付费下载

下载本文档

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

文档简介

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

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

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

4、入的,而其他三项内容将由系统进行自动统计。typedefstruct(intschoolnum;/intscore;/intmscore;/intwscore;/itemnodecm+w;学校编号学校总分男团体总分女团体总分/项目数组headnode;/定义头结点类型(3)单项数据表:本数据表是对各个学校的报名情况及成绩进行汇总,为了操作方便,本数据表只包含了学校的编号、项目的编号以及其在比赛中的成绩。typedefstruct/*单项成绩*/(intschoolnum;intitemnum;/*intxmch;/*danx;danxdxY;/*学校编号*/项目编号*/项目成绩*/这三个数据表

5、之间由项目编号和学校编号进行相关联接,形成一个整体三、详细设计源代码:#include<stdio.h>#include<math.h>#include<conio.h>#include<process.h># definen2/学校数目# definem1/男子项目数目# definew1/女子项目数目# definenull0typedefstruct(intitemnum;/项目编号inttop;/取名次的数目intrange5;/名次intmark5;/分数itemnode;/定义项目结点的类型typedefstruct(intschoo

6、lnum;/学校编号intscore;/学校总分intmscore;/男团体总分intwscore;/女团体总分itemnodecm+w;/项目数组headnode;/定义头结点类型headnodehn;/定义一个头结点数组voidinputinformation()/输入信息,建立系统(inti,j,k,s;for(i=0;i<n;i+)(hi.score=0;hi.mscore=0;hi.wscore=0;/for(i=0;i<n;i+)(printf("*学校编号:”);scanf("%d",&hi.schoolnum);/for(j=0

7、;j<m+w;j+)(printf("*项目编号:”);scanf("%d",&hi.cj.itemnum);printf("*取前3名or前5名:");scanf("%d",&hi.cj.top);printf("*获得几个名次:");scanf("%d",&k);/for(s=0;s<5;s+)hi.cj.ranges=0,hi.cj.marks=0;/for(s=0;s<k;s+)(printf("*名次:“);scanf(&q

8、uot;%d",&hi.cj.ranges);/if(hi.cj.top=3)switch(hi.cj.ranges)(case0:hi.cj.marks=0;break;case1:hi.cj.marks=5;break;case2:hi.cj.marks=3;break;初始化头结点输入头结点信息输入项目信息初始化排名和分数输入所获名次信息case3:hi.cj.marks=2;break;)elseswitch(hi.cj.ranges)(case0:hi.cj.marks=0;break;case 1: hi.cj.marks=7;break;case 2: hi.c

9、j.marks=5;break;case 3: hi.cj.marks=3;break;case 4: hi.cj.marks=2;break;case5: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;/是女子项目则记到女子项目里面去)printf("n");)voidoutput()/输出函数(

10、intchoice,i,j,k;intremembern;intsign;doprintf(”*1.printf(”*2.printf(”*3.printf(”*4.printf("nn*按学校编号输出按学校总分输出按男团总分输出按女团总分输出请选择编号*n");*n");*n");*n");*nn:");scanf("%d",&choice);switch(choice)(case1:for(i=0;i<n;i+)(printf("nn*学校编号:dn",hi.schoolnum

11、);printf("*学校总分:dn",hi.score);printf("*男团总分:dn",hi.mscore);printf("*女团总分:dnnn",hi.wscore);/按编号顺序输出break;case 2:for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)(for(j=i+1;j<n;j+)if(hrememberi.score<hj.score)k=rememberi;rememberi=rememberj,rememberj=k;/用冒泡排序方法,用辅助数组

12、记住头结点下标for(i=0;i<n;i+)(printf("nn*学校编号:dn",hrememberi.schoolnum);printf("*学校总分:dn",hrememberi.score);printf("*男团总分:dn",hrememberi.mscore);printf("*女团总分:dnnn",hrememberi.wscore);/按所记下标顺序输出/按学校总分输出break;case 3:for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)(

13、for(j=i+1;j<n;j+)if(hrememberi.mscore<hj.mscore)k=rememberi;rememberi=rememberj;rememberj=k;for(i=0;i<n;i+)(printf("nn*学校编号:dn",hrememberi.schoolnum);printf("*学校总分:dn",hrememberi.score);printf("*男团总分:dn",hrememberi.mscore);”*)break;女团总分:%dnnn",hrememberi.w

14、score);/按男团总分输出case4:for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(hrememberi.wscore<hj.wscore)k=rememberi;rememberi=rememberj;rememberj=k;)for(i=0;i<n;i+)printf("nn*学校编号:dn",hrememberi.schoolnum);printf("*学校总分:dn",hrememberi.score);printf("*男团

15、总分:dn",hrememberi.mscore);printf("*女团总分:%dnnn",hrememberi.wscore);)break;/按女团总分输出)printf("请选择2继续,0跳出n");scanf("%d",&sign);while(sign=2);/)循环执行输出语句voidinquiry。/intchoice;查询函数printf("n*1:按学校编号查询n");printf("n*2:按项目编号查询n");printf("nn*请选择查询方

16、式:");/提供两种查询方式inti,j,k,s;scanf("%d",&choice);switch(choice)case1:doprintf("要查询的学校编号:");scanf("%d",&i);if(i>n)printf("错误:这个学校没有参加此次运动会!nnn");else(printf("要查询的项目编号:");scanf("%d",&j);if(j>m+w|j=0)printf("此次运动会没有这个项目

17、nnn");/学校编号超出范围,则输出警告else(printf("这个项目取前d名,该学校的成绩如下:n",h0.cj-1.top);for(k=0;k<5;k+)if(hi-1.cj-1.rangek!=0)printf("名次:%dn",hi-1.cj-1.rangek);/输出要查询学校项目的成绩printf("请选择2继续,0跳出n");scanf("%d",&s);printf("nnn");while(s=2);/循环执行输出语句break;case2:do

18、(printf("要查询的项目编号:");scanf("%d",&s);if(s>m+w|s=0)printf("此次运动会不包括这个项目.nnn");/项目编号超出范围则输出警告else(printf("该项目取前dg,取得名次的学校n",h0.cs-1.top);for(i=0;i<n;i+)for(j=0;j<5;j+)if(hi.cs-1.rangej!=0)printf("学校编号:d,名次:dn",hi.schoolnum,hi.cs-1.rangej);/

19、输出该项目取得名次学校的成绩printf("nnn继续2,跳出0n");scanf("%d",&i);printf("nnn");while(i=2);break;voidwritedata()/(FILE*report;inti;if(report=fopen("sportsdata.txt","w")=null)(printf("不能打开文件n");exit(1);for(i=0;i<n;i+)fwrite(&hi,sizeof(headnode),

20、1,report);fclose(report);/voidreaddata()/(FILE*report;inti,j,k,s;if(report=fopen("sportsdata.txt","r")=null)(printf("filecannotbeopenedn");exit(1);for(i=0;i<n;i+)(printf("*学校编号:");fread(&k,sizeof(int),1,report);printf("%dn",k);printf("*学校

21、总分:");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("nn'n"

22、;);getch();for(j=0;j<m+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;s<5;s+)(fread(&k,sizeof(int),1,report);if(k!=0)printf("*名次:"),pri

23、ntf("%dn",k);for(s=0;s<5;s+)(fread(&k,sizeof(int),1,report);if(k!=0)printf("*分数:"),printf("%dn",k);printf("nn'n");getch();fclose(report);/关闭文件/按照读一个数据就输出一个数据的方式显示数据内容voidmain()intchoice;printf("=printf("nn*printf("nn*1.=欢迎使用=n");

24、运动会分数统计系统*n");输入信息*n");printf(printf("*2"*3输出信息查询信息*n");*n");printf(printf(printf("="*4"*5调用信息退出系统*n");*nnn");nn");printf("*请选择要实现步骤的编号:nn");scanf("%d",&choice);switch(choice)(case 1:inputinformation();writedata();re

25、addata();main();case 2:output();main();case 3:inquiry();main();case 4:readdata();main();case 5:exit(0);default:exit(0);四、调试分析1 .调试过程中出现的问题和处理方式:为了使系统具有一点的容错性,当输入错误信息时应给出相应提示以正确输入数据,如:printf("要查询的项目编号:");scanf("%d",&s);if(s>m+w|s=0)printf("此次运动会不包括这个项目.nnn");想在每次查

26、询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如:switch(choice)case 1:inputinformation();whtedata();readdata();main();case 2:output();main();case 3:inquiry();main();case 4:readdata();main();程序出现语法错误,发现是输入名次信息的地方忘带地址符&,或是程序不完整,只写了一个大括号。如:printf("*名次:");scanf("%d”,&hi.cj.ranges);

27、2 .调试分析:(1),函数调用。函数调用是语言中一块十分重要部分,它可以把一个程序分成若干部分,然后进行配置,所以这块内容对我们很重要。(2),对结构体的不熟练。刚开始对结构体不太了解,使调试程序时费了我不少的时间。结构体的嵌套使我很费力气,通过长时间的运用,终于可以得心应手。结构体在我的实习中站了很大的比重,我也很重视它。通过与线性表,循环等的有机搭配,我完成了实习任务。(3),循环的问题。这是我很苦恼,大量的循环语句的应用,分析。使我很头疼,循环是计算机语言中很重要的部分,什么程序也离不开循环,这个问题的解决使我有了坚实的基础。对多层循环的应用也有了深刻的理解。3,调试结果:(1)首先运

28、行文件运动会统计分数系统CA"dA我的文档'桌面渐建文件夹遍动会统计分数7口曲喈运动“三欢迎使用=与“与"与*=MMMXMMMXMMMXMMXX打空动"会,T*奉攵W充j十系W充WMMXWMMXWXMXWXmOOtMXMK1O<MK1O<MK1O<MK1O<MK1OC2.息息自心息统.信信信信短入出询思(2)输入信息:程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。输入1得到进入输入信息模块。请选择要实现步骤的编号二扁角七比233J.»»-校目舞次次学项名名:02诳次里”名号而障扁至L33-J:目

29、舞次项名-2algs-:0Z0PR名Ewgo个.扁扁空比133ff:校目4舞次次学项名34-HrMr*项目编号:002前3名。产前5名将几个名次工次二2,wwwwJ卯口"MR|jLAJHH"/'mT7)匚kkkkir=1“、b>>接回车键可得到学校的得分信息和按编号获得的所以信息(3)输出信息:输入2进入输出信息模块,该模块分四项:*询选择要实现步骤的编TT:算XHXXH第XHXMH第XHXMHXl.口!刀分分编总总总女XXHXXXXXHXXXXXHXXXXKXKMMKMMiCMlMXMXMMK情j先Ji首KN耳过K首MNMMKXMN-MXKMXMM按学

30、校编号输出MllKX苒KMlIXX苒KMlIXmi11尢,至三而"J=TM*,*XH*XHXNH*X有*N防*XJ:i*女团*««女团369185217-:口1万分分口W分分编总总总编日盲心总请选择2继续再跳出按学校总分输出:MMMMKMXMXHKMMMX苴薜MK1青j先编MXXXMN注XKJC:2口算分分编总总总3185口杀分分编总总忌鬟团团常重女请选择2继续日跳出按男团总分输出:69217:口引分分编总总总卷团团女ZEJI刀分分编昌心总请选择2继续再跳出按女团总分输出:XXXXMXXXX川XXXXXXXMX请j因择编号XX川XXXXMXXXX川XXXX胴:4箱团团意富女口不分分编总总总胤*MT!KMM*女团团nxR分分编总总总输入2返回输出信息模块,输入0返回主菜单(4)查询信息:输入3进入信息查询模块:按学校编号查询*2:按项目编号查询*请选择查询方式:按学校编号查询按项目编号查

温馨提示

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

评论

0/150

提交评论