当前位置:文档之家› 运动会分数统计系统课程设计报告

运动会分数统计系统课程设计报告

运动会分数统计系统课程设计报告数据结构院系:专业:班级:学号:姓名:教师:时间:一、问题描述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)、信息查询模块实现信息的查询。

2、概要设计此系统采用顺序存储结构存储,定义了一个结构体数组存放参赛学校的信息。

之所以采用顺序存储结构,是因为用它来实现信息的存储、查询比较方便,节省时间,效率高,而且也方便把信息写入文件以及读取文件。

(1)、结构体定义如下:①、定义运动项目数据类型,用于存放运动项目的信息,包括项目名称、项目编号、用户自己定义的取前3名还是前5名的积分、名次、分数。

typedef struct{char proname[10];[j].range[m];if(s[i].a[j].top==3) [j].range[m]){case 0: s[i].a[j].mark[m]=0; break;case 1: s[i].a[j].mark[m]=5; break;case 2: s[i].a[j].mark[m]=3; break;case 3: s[i].a[j].mark[m]=2; break;}}else{switch(s[i].a[j].range[m]){case 0: s[i].a[j].mark[m]=0; break;case 1: s[i].a[j].mark[m]=7; break;case 2: s[i].a[j].mark[m]=5; break;case 3: s[i].a[j].mark[m]=3; break;case 4: s[i].a[j].mark[m]=2; break;case 5: 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)、信息查询功能void Inquiry()函数是信息查询函数,显示一个查询菜单,利用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进入总分显示菜单界面。

用户可根据自己喜好选择按学校名称输出、按学校总分输出、按男团总分输出、按女团总分输出或者退出返回主菜单、直接退出系统。

相关主题