运动会分数统计设计报告_第1页
运动会分数统计设计报告_第2页
运动会分数统计设计报告_第3页
运动会分数统计设计报告_第4页
运动会分数统计设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构课程实验 实 验 报 告实验二 运动会分数统计专业: 计算机科学与技术 班级: 姓名: 学号: 完成日期: 目 录一、题目描述3二、需求分析3三、概要设计4四、详细设计8五、调试分析12六、总结16一、题目描述 参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2。写一个统计程序产生的各种成绩和得分报表。基本要求:产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括

2、校号、男子团体总分、女子团体总分和团体总分。实验提示: 可以假设n=20,m=30,w=20,姓名长度不超过20个字符,每个项目结束时,将其编号、类型符(区分取前3名还是前5名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。二、需求分析1.在该程序中,参赛学校编号为1n(n=20)。比赛分成m(m=30)个男子项目和w(w=20)个女子项目,分别编号为1m和m+1m+w,姓名长度不超过20个字符;2.输入各个项目信息的详细信息,包括项目号,姓名,性别,学校和名次。3.对于项目编号为奇数的取前五名,得分顺序为7,5,3,2,1;为偶数的取前三名,得分顺序为5,3,2。4.程序执行的命令包括:

3、可以输入各个项目的前三名或前五名的成绩;能统计各学校总分;可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。三、概要设计本程序中学校的存储结构为链表:Prev school1 next头结点Prev school(最后) next其中school类为:class school:public athlete /*学校*/ public: int count; /*学校获奖数*/ int serial; /*学校编号*/ int menscore; /*男选手总分*/ int womenscore; /*女选手总分*/

4、int totalscore; /*总分*/ athlete athMaxSize; /*获奖运动员信息数组,包括分数,名次,项目*/ school *prev;/前指针 school *next; /后指针;其中部分主要的函数:添加操作add(school* &head)查询操作checkFunc(school *head,int &n)文件保存save(school *head)总分快速排序tquicksort(vector& v, int first, int last)总分基数排序 tbaseSort(vector& v, int d) 2.关键算法 添加项目号for ( i = 1

5、; i serial =要添加的编号) (first-athfirst-count).item =要添加的项目号;(first-athfirst-count).range =i(名次) First指向的学校的项目加一;更新总分break;first = first-next;流程图:开始输入项目编号temp是数字NY0temp18NY输出“项目不存在”学校遍历结束temp存在YNNext schoolNtemp是奇数 NY取5名取3名输入获奖的学校编号se1senext;输出向量中的内容1. 所有学校总分统计表2. 学校成绩查询3. 项目情况查询4. 返回主菜单1. 按学校编号统计2. 按学校

6、名次统计3. 按男团总分统计4. 按女团总分统计5. 返回查询菜单6. 返回主菜单/按学校编号顺序输出所有参赛学校运动会成绩void serialSort(vector& v)for(int i=0;iv.size();i+)cout*vi;四、详细设计输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。主函数代码:int main() /规定男生项目前三名分别积分、,女生项目前五名分别积分、 /规定没有名次则积分为,不考虑并列的情况 /请正确输入各学校对应项目的积分 int n,m,w,i,j; school a20; int

7、 summscore20,sumwscore20,sumscore20;/定义存储各个学校男团、女团、总分 RedType d20;/定义排序所需的数组为RedType型 SqList L,Lm,Lw;/定义存放各个学校总分、男团、女团积分的顺序线性表 List Lr;/定义积分排序所需的顺序线性表 InitList(L);/初始化各线性表 InitList(Lm); InitList(Lw); cout请输入参加运动会的学校数目(20):n; while(n20) cout输入学校数目有误,请重新输入!endl; cout请输入参加运动会的学校数目(20):n; cout请分别输入男生、女生

8、的项目数目(20):mw; cout规定男生项目前三名分别积分、endl; cout女生项目前五名分别积分、endl; cout没有名次则积分为,且本程序不涉及并列排名的情况!endl; cout请正确输入各学校对应项目的积分!nendl; for(i=1;i=n;i+) ai-1.schnum=i;/赋给学校对应的编号 printf(请输入学校%d 男生各个项目的成绩:n,i); for(j=1;jai-1.mscorej-1; printf(请输入学校%d 女生各个项目的成绩:n,i); for(j=1;jai-1.wscorej-1; for(i=0;in;i+) summscorei=

9、ai.mscore0; for(j=1;jm;j+) summscorei+=ai.mscorej;/求出学校男团总分并存储到数组中对应位置 ListInsert(Lm,i+1,summscorei);/将学校男团总分插入存放在线性表对应位置 sumwscorei=ai.wscore0; for(j=1;jch; switch(ch) case 1:/查看各学校总分统计,并按学校编号排序输出查看 for(i=0;in;i+) printf(学校编号:%d 学校总分:%dn,i+1,L.elemi); break;case 2:/按学校总分排序输出查看 Lr.length=n; for(i=0;

10、in;i+) di.key=L.elemi; di.otherinfo=i+1; Lr.ri+1=di; InsertSort(Lr); cout按学校总分排序后以(名次,学校编号,学校总分)形式输出为:endl; print(Lr); break;case 3:/按男团总分排序输出查看 Lr.length=n; for(i=0;in;i+) di.key=Lm.elemi; di.otherinfo=i+1; Lr.ri+1=di; InsertSort(Lr); cout按男团总分排序后以(名次,学校编号,男团总分)形式输出为:endl; print(Lr); break; case 4:

11、/按女团总分排序输出查看 Lr.length=n; for(i=0;in;i+) di.key=Lw.elemi; di.otherinfo=i+1; Lr.ri+1=di; InsertSort(Lr); cout按女团总分排序后以(名次,学校编号,女团总分)形式输出为:endl; print(Lr); break;case 5:/按学校编号查询学校某个项目的情况 int s,t; cout请输入要查询的学校编号:s; while(sn)/输入学校编号不在初始定义范围之内 cerr输入学校编号有误,请重新正确输入!endl; cout请输入要查询的学校编号:s;/重新输入 i=0; whil

12、e(ai.schnum!=s) +i;/通过循环找到输入编号的对应学校在数组a中的位置 cout请输入要查询的项目序号:t; while(tm+w)/输入项目序号不在初始定义范围之内 cout输入项目序号有误,请重新正确输入!endl; cout请输入要查询的项目序号:t;/重新输入 if(t=m)/该项目属于男生项目 printf(该学校该项目积分为:%dn,ai.mscoret-1);/从学校男生项目积分数组里输出 else /该项目属于女生项目 printf(该学校该项目积分为:%dn,ai.wscoret-m-1);/从学校女生项目积分数组里输出 break; case 6:/按项目编

13、号查询取得前三或前五名的学校 cout请输入要查询的项目序号:t; while(tm+w)/输入项目序号不在初始定义范围之内 cout输入项目序号有误,请重新正确输入!endl; cout请输入要查询的项目序号:t;/重新输入 if(t=m)/该项目属于男生项目 i=0; while(ai.mscoret-1!=5) +i;/通过循环找到该项目第一名学校在a中的位置 printf(获得该项目第一名的是学校:%d 号n,i+1); i=0; while(ai.mscoret-1!=3) +i;/通过循环找到该项目第二名学校在a中的位置 printf(获得该项目第二名的是学校:%d 号n,i+1)

14、; i=0; while(ai.mscoret-1!=2) +i;/通过循环找到该项目第三名学校在a中的位置 printf(获得该项目第三名的是学校:%d 号n,i+1); else/该项目属于女生项目 i=0; while(ai.wscoret-m-1!=7) +i;/通过循环找到该项目第一名学校在a中的位置 printf(获得该项目第一名的是学校:%d 号n,i+1); i=0; while(ai.wscoret-m-1!=5) +i;/通过循环找到该项目第二名学校在a中的位置 printf(获得该项目第二名的是学校:%d 号n,i+1); i=0; while(ai.wscoret-m-

15、1!=3) +i;/通过循环找到该项目第三名学校在a中的位置 printf(获得该项目第三名的是学校:%d 号n,i+1); i=0; while(ai.wscoret-m-1!=2) +i;/通过循环找到该项目第四名学校在a中的位置 printf(获得该项目第四名的是学校:%d 号n,i+1); i=0; while(ai.wscoret-m-1!=1) +i;/通过循环找到该项目第五名学校在a中的位置 printf(获得该项目第五名的是学校:%d 号n,i+1); break; default:flag=0;printf(程序结束,按任意键退出!n);/退出程序 getchar();五、调

16、试分析1.输入数据2.查看学校总分排序统计,并按学校编号排号输出3.按学校总分排序输出查看4.按男团总分排序输出查看5.按女团总分排序输出查看6.按学校编号查询学校某个项目的情况7.按项目编号查询取得前三或前五名的学校8.退出程序六、总结(1).函数调用。函数调用是语言中一块十分重要部分,它可以把一个程序分成若干部分,然后进行配置,所以这块内容对我们很重要。(2).对结构体的不熟练。刚开始对结构体不太了解,使调试程序时费了我不少的时间。结构体的嵌套使我很费力气,通过长时间的运用,终于可以得心应手。结构体在我的实习中站了很大的比重,我也很重视它。通过与线性表,循环等的有机搭配,我完成了实习任务。(3) 在这个实验中,我们提高了 C 语言编程的能力。在程序设计过程中,需要经过反复地编写,调试,运行,发现问题并解决问题,在这

温馨提示

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

评论

0/150

提交评论