数据结构课程设计-运动会分数统计.docx
淮海工学院计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:运动会分数统计姓名:学号:专业班级:系(K):设计时间:设计地点:成绩:指导教师评语:签名:1.课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。2,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3 .提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4 .训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2 .课程设计任务及要求:课程设计题目运动会分数统计任务参加运动会有n个学校,学校编号为1no比赛分成m个男子项目,和W个女子项目。项目编号为男子1m,女子m+1m+wo不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(水=20,n<=20)要求:(1)可以输入各个项目的前三名或前五名的成绩;(2)能统计各学校总分;(3)可以按学校编号、学校总分、男女团体总分排序输出;(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;(5)各学校分数为整型,学校名称、运动项目的名称为字符型;(6)界面友好,有中文提示。3 .课程设计说明书一需求分析生命在于运动,为了让我们的生活更加精彩,国家、社会、学校开办了许多运动会,身为学生的我们也参加了学校开办的运动会,然而运动会中那么多项目,得分不同,参加人员也不同,只靠人统计分数是很麻烦的,因此就需要设计一个程序来帮我们更好、更快、更精确的统计分数。该程序主要用于统计运动会中各个学校所得总分以及各校在男子和女子项目中所得分数,并提供查询功能。该程序需要具备以下功能:1.创建信息:创建学校名称、运动项目(字符型);输入运动会中各个项目前三名或前五名的成绩(成绩为整数型)。2 .信息处理:统计各个学校在运动会中取得的总分;3 .信息输出:能够按学校编号、学校总分、男女团体总分排序输出;4 .信息查询:可以按学校编号查询学校某个项目的情况也可以按项目编号查询取得前三或前五名的学校;5 .此程序要求界面友好并且有中文提示。二概要设计1.逻辑结构:采用线性结构一一结构中的数据元素之间存在着一对一的线性关系;主要采用线性表。2 .存储结构:主要采用线性表的顺序存储;输入操作:输入各个学校的名称、运动项目;输入运动会上前三或前五名成绩。结构体定义查找操作:1.按学校编号2.按运动项目编号3 .主要核心算法:CreateinformationO,/创建学校、运动会项目,输入运动会中前三名或前五名的成绩。OutputSchnum(),按学校编号排序输出总分。OutputSchscore(),按学校总分排序输出总分。OutputBoyscore(),按男子团体总分排序输出总分。OutputGirlscore(),按女子团体总分排序输出总分。SearchSchname(),按学校编号各个学校情况。SearchPronum(),按运动项目查询各个学校情况。按女子团体总分排序输出总按学校编号各个学校情况信息查询按运动项目各个学校情况三详细设计创建信息:voidCreateInformation()创建信息(inti,a,b;cout*请输入学校个数:;while(1)(Cin>>n;输入学校个数n/if(n>=l&&n<=20)判断学校个数是否在120之间,不在则重新输入break;elseCOUt。输入数据有误,请重新输入:;for(i=l;i<=n;i+)(cout"请输入第<<i<<个学校名称:;Cin>>schi.name;输入学校名称(字符型)schi.score=0;将学校总分、男女团体总分初始化为0schi.boyscore=0;schi.girlscore=0;schi.num=i;学校的编号cout<<请输入男子团体项目个数和女子团体项目个数:;:Cin>>m>>w;输入男女团体项目数目if(01<二20&&111>=1&&帔=20&&川>二1)判断男女团体项目数目是否符合标准(for(i=l;i<=m+w;i÷+)(cout<<请输入第<<i«个项目的名称:;cin>>proi.name;输入项目名称cout<<请输入第<<i«个项目有前三名还是有前五名(输入3或5):.9while(1)(cin>>c;proi.rank=c;if(c=3c=5)break;elsecout<<输入有误,请重新输入:;cout<<请输入第<<i<<个项目的前<<c<<名学校编号:<<endl;for(a=l;a<=c;a+)(B:COUt<<第<<a<<"名学校编号:;Cin>>b;输入第a名学校编号if(b>=lftb<=n)(if(c=5)判断项目有前三名还是有前五名(Proi.numa=b;第i个项目的第a名编号schb.Score=Schb.SCOre+result5aT;统计学校总分if(i<=m)判断此项目是男团体还是女团体(schb.boyscore=schb.boyscore+result5a-l;/统计男团体的总分elseschb.girlscore=schb.girlscore+result5a-l;统计女团体总分elsePrOi.numa=b;第i个项目的第a名编号/schb.score=schb.SCOre+result3aT;统计学校总分if(i<=m)判断此项目是男团体还是女团体(schb.boyscore=schb.boyscore+result3a-l;/统计男团体的总分elseschb.girlscore=schb.girlscore+result3a-l;统计女团体总分)else(cout<<你输入有误,请重新输入:;gotoB;Jcout<<endl;else(cout<<你输入有误,请重新输入:;gotoA;)信息处理:voidOUtPUtSChnUn)()按学校编号排序,选用简单选择排序(inti,j,k;school1;for(i=l;i<=n-l;+i)(k=i;在i开始的n-i+1个记录中选关键码最小的记录for(j=i÷l;j<=n;+j)if(schj.num<schk.num)k=jk中存放关键码最小记录的下标/if(k!=i)关键码最小的记录及第i个记录交换l=schi;schi=schk;schk=l;)COUt<<按学校编号排列:*endl;CoU学校编号名称总分男子总分女子总分<<endl;for(i=l;i<=n;i+)(cout<<zz,z<<schi.num<<z,z,<<schi.name<<z,zz<<schi.score<</zz"<<schi.boyscore<</,yz<<schi.girlscore<<endl;cout<<endl;voidOUtPUtSChSCore()按学校总分排序,选择直接插入排序(inti,j;for(i=2;i<=n;i+÷)(schO=schi;将待插入记录存放到监视哨r0中j=iT;从前一个数开始比较while(schO.score<schj.score)寻找插入位置schj+l=schj;j=j-l;)schj+l=schO:将待插入记录插入到已排序的序列中)COUt<<“按学校总分排列:"<<endl;男子总分女子总分 <<endl;“<<schi. name<<7zyz<<schi. boyscore<<z,COUt<<学校编号名称总分for(i=l;i<=n;i+÷)(COUt,<<schi.num<<z,yz<<schi.score<<zz“<<schi.girlscore<<endl;cout<<endl;)voidOUtPUtBoySCOre()按男子团体总分排序输出,采用冒泡排序intchange,i,j;schoolk;change=TRUE;for(i=l;i<=n-l&&change;+i)change=FLSE;for(j=l;j<=n-i;+j)if(schj.boyscore>schj+l.boyscore)/如果schj比前面aschjT的小,则交换向上浮交换数组schj和schj-l/k=schj;schj=schj+l;schj+l=k;Change=TRUE;)CoUt按男子团体总分排列:"<<endl;COUt«学校编号名称总分男子总分女子总分<<endl;for(i=l;i<=n;i+)(COUt,<<schi.num<<z,z<<schi.name<<,zyz<<schi.score<<zz?z<<schi.boyscore<<z,“<<schi.girlscore<<endl;)cout<<endl;)voidOUtPUtGirlSCOre()按女子团体总分排列输出,简单选择排序(inti,j,k;school1;for(i=l;i<=n-l;+i)(k=i;for(j=i+l;j<=n+j)if(schj.girlscore<schk.girlscore)k=j;if(k!=i)(l=schi;schi=schk;schk=l;)CoUt<<“按女子团体总分排列:"<<endl;COUt«学校编号名称总分男子总分女子总分<<endl;for(i=l;i<=n;i+)(COUt,<<schi.num<<z,z<<schi.name<<,zyz<<schi.score<<zz?z<<schi.boyscore<<z,zz<<schi.girlscore<<endl;cout<<endl;信息查询:voidSearChSChnUm()按学校编号查询(intX,i;cout<<请输入你要查询的学校编号:;while(1)(cin>>x;输入要查询的学校编号if(x>=l&&x*n)判断输入的学校编号是否存在break;elseCOUt