C++运动会分数统计系统word文档良心出品.docx
《C++运动会分数统计系统word文档良心出品.docx》由会员分享,可在线阅读,更多相关《C++运动会分数统计系统word文档良心出品.docx(19页珍藏版)》请在冰豆网上搜索。
C++运动会分数统计系统word文档良心出品
课程设计报告
运动会分数统计系统
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++编写一系统,模拟运动会分数统计过程,软件应包括如下几个方面:
(一)功能要求:
(1)成绩输入:
要求:
可以输入各个项目的前三名或前五名的成绩。
(2)成绩查询:
要求:
可以按学校编号查询学校各项目情况;可以按项目编号查询取得前三名或前五名的学校。
(3)成绩统计:
要求:
能统计各学校总分。
(4)成绩排序:
要求:
可以按学校编号、学校总分、男女团体总分排序输出。
(二)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读;
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好);
(3)学生可自动增加新功能模块(视情况可另外加分);
(4)写出课程设计报告,具体要求见相关说明文档。
2概要设计
2.1系统功能设计
根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:
信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图1所示。
(1)信息统计模实现信息的输入、统计。
(2)信息输出模块,实现信息的输出。
(3)信息查询实现信息的查询。
图1系统功能结构图
3.详细设计:
毕业设计有困难?
加 QQ 929486211
(1)定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。
//定义项目结点的类型
typedefstruct
{
intitemnum;//项目编号
inttop;//项目取名次的数目,由用户定义3或5
intrange[5];//名次
intmark[5];//分数
}itemnode;
(2)定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。
//定义学校结点类型
structschoolnode//学校结点的类型
{
intschoolnum;//学校的编号
intscore;//学校所得的分数
intmscore;//男团所得的分数
intwscore;//女团所得的分数
structitemnodec[m+w];//项目结点类型的数组
};
schoolnodeh[n];//定义一个学校结点类型的数组
(3)定义学校数组schoolnodeh[n]。
采用数组结构有利于随机的存储和查询。
函数的设计和实现
在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。
(1)信息输入及分数统计功能
voidinputinformation()为输入信息及分数统计函数。
在输入信息的同时进行分数的统计。
可以输入各个学校各项目前三名或前五名的成绩。
在输入学校的参赛项目时,结果取前三名还是前五名自己定,用一个选择语句实现。
利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。
并统计团体总分,男团总分和女团总分。
其主要功能代码如下:
voidinputinformation()//输入和统计信息函数
{
intq=0;
inti,j,k,s;
for(i=0;i{
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0;
}
for(i=0;i{
do
{
system("color2A");
cout<<"输入学校的编号:
"<cin>>h[i].schoolnum;
}
while(h[i].schoolnum>n||h[i].schoolnum<=0);
for(j=0;j{
do
{
system("color2B");
cout<<"输入项目编号:
(注意分清是男团编号还是女团编号)"<cin>>h[i].c[j].itemnum;
}
while(h[i].c[j].itemnum>n||h[i].c[j].itemnum<=0);
do
{
system("color2C");
cout<<"取得前三名还是前五名:
"<cin>>h[i].c[j].top;
}while(h[i].c[j].top!
=3&&h[i].c[j].top!
=5);
cout<<"获得几个名次:
"<cin>>k;
for(s=0;s<5;s++)//初始化分数和名次都为零
{
h[i].c[j].mingci[s]=0;
h[i].c[j].mark[s]=0;
}
if(k<5)
for(s=0;s{
system("color2B");
cout<<"请输入名次:
";
cin>>h[i].c[j].mingci[s];
if(h[i].c[j].top==3)//计算得分
switch(h[i].c[j].mingci[s])
{
case0:
h[i].c[j].mark[s]=0;break;
case1:
h[i].c[j].mark[s]=5;break;
case2:
h[i].c[j].mark[s]=3;break;
case3:
h[i].c[j].mark[s]=2;break;
}
else
switch(h[i].c[j].mingci[s])
{
case0:
h[i].c[j].mark[s]=0;break;
case1:
h[i].c[j].mark[s]=7;break;
case2:
h[i].c[j].mark[s]=5;break;
case3:
h[i].c[j].mark[s]=3;break;
case4:
h[i].c[j].mark[s]=2;break;
case5:
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];//是女子项目则记到女子项目里面去
}
else
cout<<"输入错误"<}
}
}
(2)信息输出功能
voidoutput()为输出函数。
列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。
利用辅助数组remember[]和冒泡排序的方法使之按分数的由高到低输出。
利用循环语句dowhile()当输入2时返回输出目录,输入0是跳出循环返回主菜单。
其流程图如图2所示。
图2输出信息模块流程图
voidoutput()//输出信息函数
{
intchoice,i,j,k;
intremember[n];
intsign;
do
{
system("color1A");
cout<<"^^^^^^^^^^^^^^^^^^"<cout<<"^1.按学校编号输出^"<cout<<"^2.按学校总分输出^"<cout<<"^3.按男团总分输出^"<cout<<"^4.按女团总分输出^"<cout<<"^请选择编号^"<cout<<"^^^^^^^^^^^^^^^"<cin>>choice;
switch(choice)
{
case1:
//按学校编号输出
system("color2B");
for(i=0;i{
cout<<"学校编号:
"<cout<<"学校总分:
"<cout<<"男团总分:
"<cout<<"女团总分:
"<}
break;
case2:
//按学校总分输出
for(i=0;iremember[i]=i;
for(i=0;i{
for(j=i+1;jif(h[remember[i]].score{
k=remember[i];
remember[i]=remember[j];
remember[j]=k;
}
}
system("color3B");
for(i=0;i{
cout<<"学校编号:
"<cout<<"学校总分:
"<cout<<"男团总分:
"<cout<<"女团总分:
"<}
break;
case3:
//按男团总分输出
for(i=0;iremember[i]=i;
for(i=0;i{
for(j=i+1;jif(h[remember[i]].score{
k=remember[i];
remember[i]=remember[j];
remember[j]=k;
}
}
system("color4D");
for(i=0;i{