1、 课程设计报告 运动会分数统计系统 1. 系统需求分析 问题描述: 参加运动会有n个学校,学校编号为1,2,···,n,比赛分为m个 男子项目和w个女子项目。项目编号为男子1,2,···,m个,女子m+1个,m+2个,··,m+w。不同的项目取得前五名或前三名积分;取前五名的积分分别为7,5,3,2,1;前三名的积分分别为5,3,2;项目编号为奇数的取前五名,项目编号为偶数的取前三名(m≤20,n≤20)。每个项目结束时,将其编号输入,并按名次顺序输入运动员姓名、学校编号和成绩。 请用C/C++编写一系统,模拟运动会分数统计过程,软件应包括如下几个方面: (一)功能要求
2、 (1)成绩输入: 要求:可以输入各个项目的前三名或前五名的成绩。 (2)成绩查询: 要求:可以按学校编号查询学校各项目情况;可以按项目编号查询取得前三名或前五名的学校。 (3)成绩统计: 要求:能统计各学校总分。 (4)成绩排序: 要求:可以按学校编号、学校总分、男女团体总分排序输出。 (二)其它要求: (1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读; (2)至少采用文本菜单界面(如果能采用图形菜单界面更好); (3)学生可自动增加新功能模块(视情况可另外加分); (4)写出课程设计报告,具体要求见相关说明文档。 2 概要设计 2.1 系
3、统功能设计 根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图1所示。 (1)信息统计模实现信息的输入、统计。 (2)信息输出模块,实现信息的输出。 (3)信息查询实现信息的查询。 图1 系统功能结构图 3.详细设计: 毕业设计有困难?加 QQ 929486211 (1)定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。 //定义项目结点的类型 typedef struct { int itemnum;
4、 //项目编号 int top; //项目取名次的数目,由用户定义3或5 int range[5]; //名次 int mark[5]; //分数 }itemnode; (2)定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。 //定义学校结点类型 struct schoolnode//学校结点的类型 { int schoolnum;//学校的编号 int score;//学校所得的分数 int mscore;//男团所得的分数 int wscore;//女团所得的分数 str
5、uct itemnode c[m+w];//项目结点类型的数组 }; schoolnode h[n];//定义一个学校结点类型的数组 (3)定义学校数组schoolnode h[n]。采用数组结构有利于随机的存储和查询。 函数的设计和实现 在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。 (1)信息输入及分数统计功能 void inputinformation( )为输入信息及分数统计函数。在输入信息的同时进行分数的统计。可以输入各个学校各项目前三名或前五名的成绩。在输入学校的参赛项目时,结
6、果取前三名还是前五名自己定,用一个选择语句实现。利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。并统计团体总分,男团总分和女团总分。其主要功能代码如下:
void inputinformation( ) //输入和统计信息函数
{
int q=0;
int i,j,k,s;
for(i=0;i 7、)
{
do
{
system("color 2A");
cout<<"输入学校的编号:"< 8、
while(h[i].c[j].itemnum>n||h[i].c[j].itemnum<=0);
do
{
system("color 2C");
cout<<"取得前三名还是前五名:"< 9、0;
h[i].c[j].mark[s]=0;
}
if(k<5)
for(s=0;s 10、
case 2: h[i].c[j].mark[s]=3;break;
case 3: h[i].c[j].mark[s]=2;break;
}
else
switch(h[i].c[j].mingci[s])
{
case 0: h[i].c[j].mark[s]=0;break;
case 1: h[i].c[j].mark[s]=7;break;
case 2: h[i].c[j].mark[s]=5;break;
case 3: h[i].c[j].mark[s]=3;break;
11、 case 4: h[i].c[j].mark[s]=2;break;
case 5: h[i].c[j].mark[s]=1;break;
}
h[i].score=h[i].score+h[i].c[j].mark[s];//按取前三名还是取前五名分别记分
if(j<=m-1)
h[i].mscore=h[i].mscore+h[i].c[j].mark[s];//是男子项目则记到男子分数里面去
else
h[i].wscore=h[i].wscore+h[i].c[j].mark[s];//是女子项 12、目则记到女子项目里面去
}
else
cout<<"输入错误"< 13、 choice,i,j,k;
int remember[n];
int sign;
do
{
system("color 1A");
cout<<" ^^^^^^^^^^^^^^^^^^"< 14、 ^"< 15、 学校总分:"< 16、or(j=i+1;j 17、 学校总分:"< 18、 for(i=0;i 19、choolnum< 20、0;i 21、)
{
cout<<" 学校编号:"< 22、< 23、程序流程图
void inquiry() //信息查询
{
int choice;
int i,j,k,s;
system("color 6B");
cout<<" ^^^^^^^^^^^^^^^^"< 24、 ^ 请选择查询的方式 ^"< 25、
cin>>j;
system("color 8A");
if(j>m+w||j==0)
cout<<"没有这个项目"< 26、
}
cout<<"请选择 1 ----> 继续 , 0 ----> 结束"< 27、
else
{
cout<<"取得名次的学校是:"< 28、> 0"< 29、 1.输入信息 *"< 30、 请选择 (*^__^*) *"< 31、 cin>>s;
cout< 32、得4个名次,分别是1、2、3、4名;项目编号2,取前5名,获得0个名次。
输入信息后,会自动存档,并提示存档成功,然后自动返还主菜单,如图5所示。
(2)输出信息
输入2进入输出信息模块,该模块分四项,分别代表一种输出方式,如图6所示。
用户可以按照自己的喜好,选择一种方式输入信息,输入2返回输出信息模块,输入0返回主菜单。如图7~9分别是按照学校编号、学校总分、女团总分输出的情况。
按学校总分输出
按女团总分输出
(3)查询信息
输入3进入信息查询模块,该模块分为两项,如图10所示。
信息查询模块
用户可以选择不同菜单进行查询,如图11 33、和图12分别是按照学校编号和项目编号查询的情况。
按学校编号查询
(4)退出系统
在主菜单下输入4可以退出系统,并有中文提示,如图所示。
退出系统
心得体会
在这次上机过程中遇到过一些问题,但经过不懈努力,解决了部分,还有的现在不能解决,留待日后思考和解决。
比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。
在编写之前,做整体规划和详细设计很重要。只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。
本次集中上机实验,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。但我对于难度一向是以积极迎战的态度来面对,认真积极努力完成这次集中上机的任务。对我来说这是一次很好的机会,同时我也很好的把握了这次机会,认真的完成了此次上机学习的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,在此也对学校安排这样一次学习表示感谢,最后希望自己在数据结构以及计算机的其他学习方面能够得到很好的提高。
6.用户使用手册
1.输入信息(依照提示,确保输入的信息在规定的范围之内)
2.输出信息(按照不同的要求输出)
3.用户查询(提供两种方式)
4.退出系统。
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818