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

上传人:b****6 文档编号:12916272 上传时间:2023-06-09 格式:DOCX 页数:33 大小:355.30KB
下载 相关 举报
运动会分数统计系统课程设计报告.docx_第1页
第1页 / 共33页
运动会分数统计系统课程设计报告.docx_第2页
第2页 / 共33页
运动会分数统计系统课程设计报告.docx_第3页
第3页 / 共33页
运动会分数统计系统课程设计报告.docx_第4页
第4页 / 共33页
运动会分数统计系统课程设计报告.docx_第5页
第5页 / 共33页
运动会分数统计系统课程设计报告.docx_第6页
第6页 / 共33页
运动会分数统计系统课程设计报告.docx_第7页
第7页 / 共33页
运动会分数统计系统课程设计报告.docx_第8页
第8页 / 共33页
运动会分数统计系统课程设计报告.docx_第9页
第9页 / 共33页
运动会分数统计系统课程设计报告.docx_第10页
第10页 / 共33页
运动会分数统计系统课程设计报告.docx_第11页
第11页 / 共33页
运动会分数统计系统课程设计报告.docx_第12页
第12页 / 共33页
运动会分数统计系统课程设计报告.docx_第13页
第13页 / 共33页
运动会分数统计系统课程设计报告.docx_第14页
第14页 / 共33页
运动会分数统计系统课程设计报告.docx_第15页
第15页 / 共33页
运动会分数统计系统课程设计报告.docx_第16页
第16页 / 共33页
运动会分数统计系统课程设计报告.docx_第17页
第17页 / 共33页
运动会分数统计系统课程设计报告.docx_第18页
第18页 / 共33页
运动会分数统计系统课程设计报告.docx_第19页
第19页 / 共33页
运动会分数统计系统课程设计报告.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《运动会分数统计系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统课程设计报告.docx(33页珍藏版)》请在冰点文库上搜索。

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

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

 

运动会分数统计系统

课程设计报告

数据结构

院系:

专业:

班级:

学号:

姓名:

教师:

时间:

一、问题描述

1、功能

项目编

7、5、

),按要

任务:

参加运动会有n个学校,学校编号为1……n。

比赛分成m个男子项目,和w个女子项目。

号为男子1m,女子m+1••…m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:

3、2、1,前三名的积分分别为:

5、3、2;哪些取前五名或前三名由学生自己设定。

(m<=20,nv=20

求实现相应的数据输入、查询、计分等功能。

2、数据

建议输入学校的名称,运动项目的名称等,其余信息学生自行设计;

输岀形式:

有合理的提示,各学校分数为整形;

数据的存储结构自行设计。

建议运动会的相关数据要存储在数据文件中。

3、操作

1)可以输入各个项目的前三名或前五名的成绩;

2)能统计各学校总分,

3)可以按学校编号或名称、学校总分、男女团体总分排序输岀;

4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

4、要求

提供系统菜单,界面友好,提示信息完整。

二、系统分析及设计

1、需求分析

根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:

信息统计模块、信息输岀模块、信息查询模块、信息调用模块。

其系统功能结构图如图所示。

(1)、信息统计模块实现信息的输入、统计、存档。

(2)、信息输岀模块实现信息的输岀。

(3)、信息查询模块实现信息的查询。

(4)、信息调用模块实现信息的调用,即从文件中读岀信息并输岀。

2、概要设计

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

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

(1)、结构体定义如下:

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

typedefstruct

{

charproname[10];〃项目名称

intpronum;//项目编号

inttop;//取前3名或前5名积分,由用户自己定义

intrange[5];//名次

intmark[5];//分数

}Pronode;//项目结点类型定义

2

、定义学校数据类型,用于存放参赛学校的信息,包括学校名称、学校编号、学校总分、男子团体总分、女子团体总分以及项目数组。

输入参赛学校比赛成绩的信息时,采用三重循环,第一重循环控制参赛学校的个数,第二重循环控制各参赛学校的参赛项目个数,第三重循环控制各参赛学校的各参赛项目所获得的名次个数,并依次输入相应信息,根据所输入的名次得岀相对应的分数。

然后分别统计岀各学校的总分、男子团体总分和女子团体总分。

调用文件数据块写函数fwrite将信息写入文件,方便以后调用。

(3)、信息输岀模块的算法设计说明

根据设计要求,实现按学校名称、学校总分、男子团体总分、女子团体总分输岀。

因此选用switch语句实

现此功能。

case1按学校名称输岀时,直接取岀数据进行输岀;case2按学校总分输岀时,采用冒泡排序法进

行排序然后按分数由高到低输岀;case3和case4也均采用冒泡排序法进行排序最后按分数由高到低输岀。

其流程图如图所示:

(5)、信息调用模块的算法设计说明

信息调用,即读取保存在文件里的信息并输岀。

由于采用的是数组存储,可以很方便的一下把文件里的信息全部读取岀来,再利用三重循环依次把各学校各项目所取得的成绩输岀。

3、详细设计

(1)、信息输入及分数统计功能

voidInfolnput()是信息输入及分数统计的函数,在输入信息的同时进行分数统计,可以输入各学校各项目

3、

前3名或前5名的成绩。

结果取前3名还是前5名由用户自己定。

用switch语句将前3名的成绩赋值为5、

2,前5名的成绩赋值为7、5、3、2、1,未取得的成绩则赋为0。

并统计总分、男子团体总分和女子团体总

分。

其主要功能代码如下:

for(m=0;m

{

coutvv"名次:

";

cin>>s[i].a[j].range[m];

if(s[i].a[j].top==3)//匹配各名次对应的分数

{

switch(s[i].a[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];//统计学校总分

if(j<=M-1)

s[i].Mscore=s[i].Mscore+s[i].a[j].mark[m];//统计男团总分

//统计女团总分

else

s[i].Wscore=s[i].Wscore+s[i].a[j].mark[m];

}

(2)、信息输出功能

voidInfoOutput()是信息输出函数。

输出一个总分显示菜单,利用switch语句实现按学校名称输出或按学校总分、男子团体总分、女子团体总分由高到低输出。

采用冒泡排序的方法使之按总分由高到低输出。

利用循环语句while

(1)返回总分显示菜单,break语句终止循环。

其主要功能代码如下:

for(i=0;i

b[i]=i;

for(i=0;i

{for(j=i+1;j

{

if(s[b[i]].score

{

k=b[i];

b[i]=b[j];

b[j]=k;

}

}}

//输出各学校运动会分数信息

for(i=0;i

{

cout<<"

学校名称

cout<<"

学校编号

cout<<"

学校总分

cout<<"

男团总分

cout<<"

女团总分

cout<

3)、信息查询功能

"<

"<

"<

"<

"<

voidInquiry()函数是信息查询函数,显示一个查询菜单,利用switch语句实现按学校编号查询和按项目编号查询,并输出该学校某个项目的情况或某个项目取得前3名或前5名的学校信息。

利用循环语句while

(1)返回

查询菜单,break语句终止循环。

其主要功能代码如下:

按学校编号查询:

}

}

按项目编号查询:

cout<<"要查询的项目编号:

";

cin>>y;

if(y>M+W||y==0)//项目编号超出范围,输出提示信息

cout<<"此次运动会没有这个项目!

"<

else//输出该项目取得名次的学校的成绩

{

cout<<"该项目取前"<

"<

for(i=0;j

if(s[i].a[y-1].range[j]!

=0)

cout<<"学校名称:

"<

"<

"<

if(s[i].a[y-1].mark[j]!

=0)

cout<<"分数:

"<

}

三、

系统实现

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)。

存在问题的思考及算法的改进设想:

1刚开始运行程序时,就是一句一句的显示,界面很不好看,于是想把他弄成菜单的形式,但是两个子菜单要实现与主菜单之间的切换,能够自如返回主菜单。

开始时没有想到要去直接调用实现主菜单操作的函数Menu(),废了好大周折,后来问了同学,顿时茅塞顿开。

2显示的内容堆积在一个屏幕上,看着很混乱,用C语言里的clrscr()函数在VC++里似乎不能用,上网查

了下资料,找到了一个头文件为stdlib.h的清屏函数system(”cls”)。

3调试程序时,遇到了屏幕一闪又回到原来界面的情况,没有输岀想要得到的信息,原来是信息在屏幕上

显示后,程序执行到了清屏函数,所以立马清屏了,为了看到输岀信息,调用system(”pause”)函数,使程序

暂停,以让用户看到输出地信息,然后再按任意键继续执行程序。

4对此程序结构体的定义比较难,要整体考虑全局设置岀结构体,这次课设用到结构体的嵌套,由于对结构体的使用还不是很熟悉,所以做起来时花费了不少时间,但一个课设做下来,还算是得心应手。

5对于读写文件不是很熟悉,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

#defineW1

#defineN2

#defineNULL0

//男子项目个数//女子项目个数//学校个数

voidMenu();typedefstruct

{

charproname[10];intpronum;

inttop;

intrange[5];intmark[5];

}Pronode;

typedefstruct

{

charschname[20];intschnum;

intscore;intMscore;

intWscore;

Pronodea[M+W];}Schnode;

Schnodes[N];voidHead()

//函数声明

//项目名称

//项目编号

//取前3名或前5名积分,由用户自己定义

//名次

//分数

//项目结点类型定义

//学校名称

//学校编号

//总分

//男团体总分

//女团体总分

//项目数组

//学校结点类型定义

//定义一个学校结点类型的结构体数组

//头菜单界面

cout<<"

<

cout<<"

*****

欢迎使用

*****11

 

cout<<"

<

 

cout<

//主菜单界面

}

voidMainMenu()

cout<<"

*************************************************11

<

cout<<"

*****

主菜单

*****"<

cout<<"

*************************************************11

<

cout<<"

*****

1.输入信息

*****"<

cout<<"

*****

2.输出信息

*****"<

cout<<"

*****

3.查询信息

*****"<

cout<<"

*****

4.调用信息

*****"<

cout<<"

*****

5.关于

*****"<

cout<<"

*****

6.退出系统

*****"<

cout<<"

*************************************************11

<

*****注:

第一次运行本程序时请选择1号功能*****"<

 

cout<<"

*************************************************11

<

cout<<"

*****

运动会总分显示菜单

*****11

<

cout<<"

*************************************************11

<

*****11

<

cout<<"

*****

2.按学校总分输出

cout<<"

*****

3.按男团总分输出

cout<<"

*****

4.按女团总分输出

cout<<"

*****

5.退出返回主菜单

cout<<"

*****

6.直接退出本系统

*****11

<

*****11

<

*****11

<

*****11

<

*****11

<

<

}

voidInitSch()

//初始化信息

{

inti;for(i=0;i

s[i].score=0;

s[i].Mscore=0;

s[i].Wscore=0;

}

}

voidInfoInput()

//信息输入模块

cout<<"

*****

1.按学校名称输出

cout<<"

*************************************************11

{

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];

if(j<=M-1)

s[i].Mscore=s[i].Mscore+s[i].a[j].mark[m];//统计男团总分

else

s[i].Wscore=s[i].Wscore+s[i].a[j].mark[m];//统计女团总分

 

Head();//头菜单界面cout<<"运动会各学校信息按学校名称输出如下:

"<

{

 

system("cls");

Head();//头菜单界面

cout<<"运动会各学校信息按学校总分输出如下:

"<

for(i=0;i

{

for(j=i+1;j

{

if(s[b[i]].score

{

k=b[i];

b[i]=b[j];

b[j]=k;

}

}

}

Output(b);//按所记下标的顺序输出各学校运动会分数信息

break;

case3:

//按男团总分输出

system("cls");

Head();

cout<<"运动会各学校信息按男团总分输出如下:

"<

for(i=0;i

for(i=0;i

for(j=i+1;j

if(s[b[i]].Mscore

k=b[i];

b[i]=b[j];

b[j]=k;

}

}

}

Output(b);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2