版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(
运动会分数统计系统课程设计报告>数据结构院系:专业:班级:学号:$姓名:教师:时间:一、问题描述|1、功能任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20),按要求实现相应的数据输入、查询、计分等功能。2、数据建议输入学校的名称,运动项目的名称等,其余信息学生自行设计;输出形式:有合理的提示,各学校分数为整形;数据的存储结构自行设计。建议运动会的相关数据要存储在数据文件中。3、操作$1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。4、要求提供系统菜单,界面友好,提示信息完整。}二、系统分析及设计1、需求分析 根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:信息统计模块、信息输出模块、信息查询模块、信息调用模块。其系统功能结构图如图所示。(1)、信息统计模块实现信息的输入、统计、存档。(2)、信息输出模块实现信息的输出。(3)、信息查询模块实现信息的查询。(4)、信息调用模块实现信息的调用,即从文件中读出信息并输出。?信息输入运动会分数统计系统?信息输入运动会分数统计系统信息统计模块信息输出模块信息查询模块信息调用模块分数统计信息存档…2、概要设计此系统采用顺序存储结构存储,定义了一个结构体数组存放参赛学校的信息。之所以采用顺序存储结构,是因为用它来实现信息的存储、查询比较方便,节省时间,效率高,而且也方便把信息写入文件以及读取文件。(1)、结构体定义如下:①、定义运动项目数据类型,用于存放运动项目的信息,包括项目名称、项目编号、用户自己定义的取前3名还是前5名的积分、名次、分数。typedefstruct{ charproname[10]; 开始】总分显示菜单界面开始】总分显示菜单界面按学校名称输出按学校总分输出按男团总分输出按女团总分输出退出返回主菜单直接退出本系统主菜单$结束输入功能序号开始信息查询界面选择查询方式按学校编号查询按项目编号查询退出返回主菜单<直接退出本系统主菜单结束 if(s[i].a[j].top==3)[j].range[m]) { case0:s[i].a[j].mark[m]=0;break; case1:s[i].a[j].mark[m]=5;break; case2:s[i].a[j].mark[m]=3;break;· case3:s[i].a[j].mark[m]=2;break; }} else { switch(s[i].a[j].range[m]) { case0:s[i].a[j].mark[m]=0;break;! case1:s[i].a[j].mark[m]=7;break; case2:s[i].a[j].mark[m]=5;break; case3:s[i].a[j].mark[m]=3;break; case4:s[i].a[j].mark[m]=2;break; case5:s[i].a[j].mark[m]=1;break; } } s[i].score=s[i].score+s[i].a[j].mark[m];score=s[i].Mscore+s[i].a[j].mark[m];score=s[i].Wscore+s[i].a[j].mark[m];core<s[j].score)? { k=b[i]; b[i]=b[j]; b[j]=k; } }}@for(i=0;i<N;i++)chname<<endl; cout<<" 学校编号:"<<s[b[i]].schnum<<endl; cout<<" 学校总分:"<<s[b[i]].score<<endl; cout<<" 男团总分:"<<s[b[i]].Mscore<<endl; cout<<" 女团总分:"<<s[b[i]].Wscore<<endl; cout<<endl;} (3)、信息查询功能> voidInquiry()函数是信息查询函数,显示一个查询菜单,利用switch语句实现按学校编号查询和按项目编号查询,并输出该学校某个项目的情况或某个项目取得前3名或前5名的学校信息。利用循环语句while(1)返回查询菜单,break语句终止循环。其主要功能代码如下:按学校编号查询:cout<<" 要查询的学校编号:";cin>>i;if(i>N)[j-1].top<<"名,该学校的成绩如下:"<<endl; for(k=0;k<5;k++) {: if(s[i-1].a[j-1].range[k]!=0) cout<<" 名次:"<<s[i-1].a[j-1].range[k]; if(s[i-1].a[j-1].mark[k]!=0) cout<<" 分数:"<<s[i-1].a[j-1].mark[k]<<endl; } }}按项目编号查询:—cout<<" 要查询的项目编号:";cin>>y;if(y>M+W||y==0)[y-1].top<<"名,取得该名次的学校:"<<endl; for(i=0;j<N;i++) for(j=0;j<5;j++) { if(s[i].a[y-1].range[j]!=0) cout<<" 学校名称:"<<s[i].schname<<" 学校编号:"<<s[i].schnum<<" 名次:"<<s[i].a[y-1].range[j];% if(s[i].a[y-1].mark[j]!=0) cout<<" 分数:"<<s[i].a[y-1].mark[j]<<endl; }}三、系统实现1、完整源代码 见附录。2、调试分析[ 运行程序,进入主菜单界面,用户可以选择输入信息、输出信息、查询信息、调用信息、关于或退出系统。测试数据:学校名称:武汉理工大学;学校编号:1;项目名称:男子100米;项目编号:1;取前5名;获得1个名次,第5名。项目名称:女子100米;项目编号:2;取前3名,获得3个名次,分别是第1、2、3名。学校名称:湖北经济学院;学校编号:2;项目名称:男子跳远;项目编号:1;取前5名,获得4个名次,分别是第1、2、3、4名。项目名称:女子跳高;项目编号:2;取前5名,获得一个名次,第3名。测试输出的结果:①按学校名称输出:学校名称:武汉理工大学;学校编号:1;学校总分:11;男团总分:1;女团总分:10。学校名称:湖北经济学院;学校编号:2;学校总分:20;男团总分:17;女团总分:3。|②按学校总分输出:学校名称:湖北经济学院;学校编号:2;学校总分:20;男团总分:17;女团总分:3。学校名称:武汉理工大学;学校编号:1;学校总分:11;男团总分:1;女团总分:10。③按男团总分输出:学校名称:湖北经济学院;学校编号:2;学校总分:20;男团总分:17;女团总分:3。学校名称:武汉理工大学;学校编号:1;学校总分:11;男团总分:1;女团总分:10。④按女团总分输出:学校名称:武汉理工大学;学校编号:1;学校总分:11;男团总分:1;女团总分:10。:学校名称:湖北经济学院;学校编号:2;学校总分:20;男团总分:17;女团总分:3。时间复杂度分析:用户输入信息时,采用三重循环进行输入,因此信息输入函数的时间复杂度为O(N*(M+W)*k)。利用冒泡排序法进行排序,采用二重循环,时间复杂度为O(N*N)。采用顺序存储结构,信息存放在数组的相应内存单元里,因此查询函数的时间复杂度为O(1)。写信息时可以一次全部写进去,读信息时也可以一次全部读出来,因此写文件函数和读文件函数的时间复杂度都为O(1)。存在问题的思考及算法的改进设想:①刚开始运行程序时,就是一句一句的显示,界面很不好看,于是想把他弄成菜单的形式,但是两个子菜单要实现与主菜单之间的切换,能够自如返回主菜单。开始时没有想到要去直接调用实现主菜单操作的函数Menu(),废了好大周折,后来问了同学,顿时茅塞顿开。②显示的内容堆积在一个屏幕上,看着很混乱,用C语言里的clrscr()函数在VC++里似乎不能用,上网查了下资料,找到了一个头文件为的清屏函数system(”cls”)。③调试程序时,遇到了屏幕一闪又回到原来界面的情况,没有输出想要得到的信息,原来是信息在屏幕上显示后,程序执行到了清屏函数,所以立马清屏了,为了看到输出信息,调用system(”pause”)函数,使程序暂停,以让用户看到输出地信息,然后再按任意键继续执行程序。④对此程序结构体的定义比较难,要整体考虑全局设置出结构体,这次课设用到结构体的嵌套,由于对结构体的使用还不是很熟悉,所以做起来时花费了不少时间,但一个课设做下来,还算是得心应手。>⑤对于读写文件不是很熟悉,fread和fwrite函数不是很会用,在读出文件里的信息并输出时花了很长时间,不过,最后总算是会用了。3、输出界面 运行程序,进入主菜单界面,用户可以选择输入信息、输出信息、查询信息、调用信息、关于或退出系统。注意:第一次运行本程序时,请选择输入信息。以后再运行时,为了避免再次输入大量信息,可以先选择调用信息,将以前输入的信息重新显示在屏幕上,再进行后续操作。》&主菜单界面如图所示:(1)、输入信息~选择1号功能进入输入信息模块,根据提示信息将以下信息输入系统中。学校名称:武汉理工大学;学校编号:1;项目名称:男子100米;项目编号:1;取前5名;获得1个名次,第5名。项目名称:女子100米;项目编号:2;取前3名,获得3个名次,分别是第1、2、3名。学校名称:湖北经济学院;学校编号:2;项目名称:男子跳远;项目编号:1;取前5名,获得4个名次,分别是第1、2、3、4名。项目名称:女子跳高;项目编号:2;取前5名,获得一个名次,第3名。输入信息后,信息会自动存档,并自动返回到主菜单。—【输入信息如图所示:(2)、输出信息输入2进入总分显示菜单界面。用户可根据自己喜好选择按学校名称输出、按学校总分输出、按男团总分输出、按女团总分输出或者退出返回主菜单、直接退出系统。#总分显示菜单界面如图所示:"用户可根据自己喜好选择按哪种方式输出,信息输出后,按任意键返回总分显示菜单界面。输入5则返回主菜单,输入6则退出系统。以下是分别按照学校名称、学校总分、男团总分、女团总分输出的情况。按学校名称输出:|按学校总分输出:按男团总分输出:@按女团总分输出:】(3)、查询信息 输入3进入信息查询界面,用户可根据自己喜好选择按学校编号查询、按项目编号查询或者退出返回主菜单、直接退出系统。信息查询界面如图所示:用户可根据自己喜好选择按哪种方式查询,查询结束后,按任意键返回信息查询界面。输入3则返回主菜单,输入4则退出系统。以下是分别按照学校编号、项目编号查询的情况。-按学校编号查询:按项目编号查询:[(4)、调用信息为了避免每次运行程序时都要输入大量数据,在第一次运行程序后,就已经将信息自动存档,再次运行时,可以先直接调用信息,按任意键返回主菜单,再进行后续操作。]。调用的信息如图所示:(5)关于界面自行设计(6)退出系统 输入6则退出系统,并有中文提示。如图所示:|四、设计总结 在课程设计的过程中,虽然遇到了很多问题,但最终差不多也都一一解决了。有的时候是一些很小的逻辑错误,需要的是细心。同学之间互相帮助,多个人思考多个力量,遇到自己解决不了的问题,向同学求助,能更好的帮我们解决所面临的难题。由于此次课程设计用到数据文件的知识,而这些知识老师都没讲,自学起来稍微有点困难,但也不是完全看不懂,只是对一些函数的应用不太熟悉,经过此次课程设计,对文件的读写有了更深的了解,也相应的培养了我的自学能力。经过C语言和数据结构的学习,我发现数据结构与C语言有很大的不同,C语言不需要考虑存储结构之类的,只需要定义个变量或数组,集中精力于算法之上,而数据结构前期的整体规划和构思非常重要,先确立合理的存储结构,再来编写算法,实际上一旦存储结构确立了,算法的实现相对来说简单很多,难就难在如何确立合理的存储结构。能够把此次课程设计做出来,是一个很大的挑战,但我经过自己的不懈努力,终于完成了,看着自己的作品,心里还是说不出的高兴,虽然做的过程很艰难。人生就是要把困难踩在脚下。附录:!源代码:#include<>#include<>#include<>#defineM1入信息*****"<<endl; cout<<" *****2.输出信息*****"<<endl; cout<<" *****3.查询信息*****"<<endl;: cout<<" *****4.调用信息*****"<<endl; cout<<" *****5.关于*****"<<endl; cout<<" *****6.退出系统*****"<<endl; cout<<" *************************************************"<<endl; cout<<" *****注:第一次运行本程序时请选择1号功能*****"<<endl; cout<<" *************************************************"<<endl;}~voidSubMenu()学校名称输出*****"<<endl; cout<<" *****2.按学校总分输出*****"<<endl; cout<<" *****3.按男团总分输出*****"<<endl; cout<<" *****4.按女团总分输出*****"<<endl; cout<<" *****5.退出返回主菜单*****"<<endl; cout<<" *****6.直接退出本系统*****"<<endl; cout<<" *************************************************"<<endl;}'voidInitSch()core=0; s[i].Mscore=0; s[i].Wscore=0; }}voidInfoInput()chname;、 cout<<" 学校编号:"; cin>>s[i].schnum; for(j=0;j<M+W;j++)[j].proname; cout<<" 项目编号:"; cin>>s[i].a[j].pronum; cout<<" 取前3名还是前5名:"; cin>>s[i].a[j].top; cout<<" 此项目获得的名次个数:";【 cin>>k; for(m=0;m<5;m++)[j].range[m]=0; s[i].a[j].mark[m]=0; } for(m=0;m<k;m++)[j].range[m]; if(s[i].a[j].top==3)[j].range[m]) { case0:s[i].a[j].mark[m]=0;break;/ case1:s[i].a[j].mark[m]=5;break; case2:s[i].a[j].mark[m]=3;break; case3:s[i].a[j].mark[m]=2;break; } } else { switch(s[i].a[j].range[m])( { case0:s[i].a[j].mark[m]=0;break; case1:s[i].a[j].mark[m]=7;break; case2:s[i].a[j].mark[m]=5;break; case3:s[i].a[j].mark[m]=3;break; case4:s[i].a[j].mark[m]=2;break; case5:s[i].a[j].mark[m]=1;break; }— } s[i].score=s[i].score+s[i].a[j].mark[m];score=s[i].Mscore+s[i].a[j].mark[m];score=s[i].Wscore+s[i].a[j].mark[m];chname<<endl; cout<<" 学校编号:"<<s[b[i]].schnum<<endl; cout<<" 学校总分:"<<s[b[i]].score<<endl; cout<<" 男团总分:"<<s[b[i]].Mscore<<endl; cout<<" 女团总分:"<<s[b[i]].Wscore<<endl; cout<<endl; } ~ system("pause");chname<<endl; cout<<" 学校编号:"<<s[i].schnum<<endl; cout<<" 学校总分:"<<s[i].score<<endl; cout<<" 男团总分:"<<s[i].Mscore<<endl; cout<<" 女团总分:"<<s[i].Wscore<<endl; cout<<endl; } system("pause");core<s[j].score)! { k=b[i]; b[i]=b[j]; b[j]=k; } } } Output(b);score<s[j].Mscore)| { k=b[i]; b[i]=b[j]; b[j]=k; } } } Output(b);score<s[j].Wscore)< { k=b[i]; b[i]=b[j]; b[j]=k; } } } Output(b);学校编号查询*******"<<endl;— cout<<" *****2.按项目编号查询*******"<<endl; cout<<" *****3.退出返回主菜单*******"<<endl; cout<<" *****4.直接退出本系统*******"<<endl; cout<<" *************************************************"<<endl; }voidInquiry()[j-1].top<<"名,该学校的成绩如下:"<<endl; for(k=0;k<5;k++)? { if(s[i-1].a[j-1].range[k]!=0) cout<<" 名次:"<<s[i-1].a[j-1].range[k]; if(s[i-1].a[j-1].mark[k]!=0) cout<<" 分数:"<<s[i-1].a[j-1].mark[k]<<endl; } } }, system("pause"); system("cls"); break; case2:[y-1].top<<"名,取得该名次的学校:"<<endl; for(i=0;j<N;i++) for(j=0;j<5;j++) { if(s[i].a[y-1].range[j]!=0)¥ cout<<" 学校名称:"<<s[i].schname<<" 学校编号:"<<s[i].schnum<<" 名次:"<<s[i].a[y-1].range[j]; if(s[i].a[y-1].mark[j]!=0) cout<<" 分数:"<<s[i].a[y-1].mark[j]<<endl; } } system("pause"); system("cls"); break;& case3:chname<<endl; cout<<" 学校编号:"<<s[i].schnum<<endl; for(j=0;j<M+W;j++) { cout<<" 项目名称:"<<s[i].a[j].proname<<endl; cout<<" 项目编号:"<<s[i].a[j].pronum<<endl; cout<<" 取前3名还是前5名:"<<s[i].a[j].top<<endl; for(m=0;m<5;m++)¥ { fread(&s[i].a[j].range[m],sizeof(int),1,fp); if(s[i].a[j].range[m]!=0) cout<<" 名次:"<<s[i].a[j].range[m]; fread(&s[i].a[j].mark[m],sizeof(int),1,fp); if(s[i].a[j].mark[m]!=0) cout<<" 分数:"<<s[i].a[j].mark[m]<<endl; }' cout<<endl; } } fclose(fp);//关闭文件}voidMenu()//主菜单函数{" intnumber; do { Head(); MainMenu(); cout<<" 请选择:"; cin>>number; switch(number) { case1://输入信息 system("cls"); Head(); cout<<" 请输入运动会各学校信息:"<<endl; InfoInput();//信息输入模块 fsave();//保存信息 system("cls"); break; case2://输出信息 system("cls"); InfoOutput();//信息输出模块 break; case3:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四年级数学(四则混合运算带括号)计算题专项练习与答案
- 绿植租摆协议书(2篇)
- 南京工业大学浦江学院《移动通信技术产品及物联网应用》2022-2023学年第一学期期末试卷
- 南京工业大学浦江学院《社会企业》2022-2023学年第一学期期末试卷
- 分数的产生说课稿
- 蹲踞式跳远说课稿
- 南京工业大学浦江学院《计算机网络课程设计》2023-2024学年期末试卷
- 《线段的垂直平分线》说课稿
- 幼儿课件图画教学课件
- 南京工业大学《虚拟仪器设计》2023-2024学年第一学期期末试卷
- 砌筑工-技能评分记录表3
- 司索工安全操作规程
- 人教版数学五年级上册课本习题(题目)
- 钢筋合格证(共6页)
- BIM技术全过程工程管理及应用策划方案
- 弯扭构件制作工艺方案(共22页)
- 水利工程填塘固基、堤身加固施工方法
- 中医针灸的骨边穴怎样定位
- 人教版八年级上册英语单词表默写版(直接打印)
- 电脱水、电脱盐讲解
- 违约损失率(LGD)研究
评论
0/150
提交评论