庞贝贝1104040216课设报告1运动会分数统计.docx
《庞贝贝1104040216课设报告1运动会分数统计.docx》由会员分享,可在线阅读,更多相关《庞贝贝1104040216课设报告1运动会分数统计.docx(17页珍藏版)》请在冰豆网上搜索。
![庞贝贝1104040216课设报告1运动会分数统计.docx](https://file1.bdocx.com/fileroot1/2022-12/12/f9d450dd-41d3-4d33-b2fc-7759d8f9e274/f9d450dd-41d3-4d33-b2fc-7759d8f9e2741.gif)
庞贝贝1104040216课设报告1运动会分数统计
试验报告一
课题名称:
运动会分数统计
班级:
信管112
姓名:
庞贝贝
学号:
1104040216
日期:
2013/7/9
一、需求分析
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、功能要求
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分;
3)可以按学校编号、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
3、规定
输入数据形式和范围:
20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
4、输出形式
有中文提示,各学校分数为整形
5、界面要求
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
6、存储结构
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
7、程序执行的命令
1)输入所需要的各项数据2)对成绩进行排序3)查找成绩4)退出结束
8、测试数据
要求使用
1、全部合法数据;
2、整体非法数据;
3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明
二、概要设计
为了实现程序需要使用串复制和线性表
1、串复制
StrCopy(&T,s)
初始条件:
串S存在
操作结果:
由串复制得串T.
2、线性表
typedefstructLNode
{
ElemType*elem
Intlength
Intlistsize;
}LNode,*linklist;
3、本程序分为3个模块
1)主程序模块
voidmain()
{
while(标志!
=0)
{通过命令菜单选择执行哪项命令;输入要执行命令的编号}
switch(标志)
{
case标志:
命令;break;
case标志:
命令;break;
…….
default:
命令;
}
}
2)赋值模块
fuzhi()
{
for()
{输入学校名称;}
for()
{输入项目名称;}
for()
{输入各个项目前3名或前5名学校序号;}
for()
{统计各个学校总分,男团总分,女团总分}
3)排序模块
voidpaixu1()
{
for()
{按学校排序并输出}
}
voidpaixu2()
{
for()
{按学校总分排序并输出}
}
voidpaixu3()
{
for()
{按男团总分排序并输出}
}
voidpaixu4()
{
for()
{按女团总分排序并输出}
}
4)查询模块
voidchaxun1()//按学校编号查询学校某个项目的情况
{
用户输入学校编号以及待查项目
输出该项目的排名以及成绩
}
voidchaxun2()//按项目编号查询取得前3名或前5名成绩
{
while(标志)
输出前3名成绩
while(标志)
输出前5名成绩
}
各模块之间的关系如下:
主程序模块momokuai
赋值模块
排序模块
查找模块
三、详细设计
#include
#include
#include
#include
#definem8//共8个项目
#definen5//共5个学校
#definep5//共5个男子项目
#defineq3//共3个女子项目
1、学校类型
typedefstructschool1
{
charschoolname[20];//学校名称
Sposports[m];//运动项目
inttotalscore;//学校总分
intmanscore;//男团总分
intwomanscore;//女团总分
}sch;
typedefstructschool2
{
schschool[n];
}*sho,shos;
2、运动项目类型
typedefstructsport
{
charsportname[20];//运动项目名称
intnum,score;//num表示排名,score登记分数
}Spo;
3、赋值
shofuzhi()
{
inti,j;
shol;
l=newshos;
cout<<"输入"<for(i=0;icin>>l->school[i].schoolname;
for(j=0;j
{
cout<<"请输入第"<//输入男子项目名称
cin>>l->school[0].sports[j].sportname;
}
for(j=p;j{
cout<<"请输入第"<//输入女子项目名称
cin>>l->school[0].sports[j].sportname;
}
for(i=0;ifor(j=0;jstrcpy(l->school[i].sports[j].sportname,l->school[0].sports[j].sportname);
for(i=0;ifor(j=0;j{l->school[i].sports[j].score=0;
l->school[i].sports[j].num=0;
}
inta,b,c,d,e;
for(j=0;j
{
cout<<"请依次输入编号为"<cin>>a>>b>>c>>d>>e;
l->school[a].sports[j].score=7;l->school[a].sports[j].num=1;
l->school[b].sports[j].score=5;l->school[b].sports[j].num=2;
l->school[c].sports[j].score=3;l->school[c].sports[j].num=3;
l->school[d].sports[j].score=2;l->school[d].sports[j].num=4;
l->school[e].sports[j].score=1;l->school[e].sports[j].num=5;
}
for(j=p;j{
cout<<"请依次输入编号为"<cin>>a>>b>>c;
l->school[a].sports[j].score=5;l->school[a].sports[j].num=1;
l->school[b].sports[j].score=3;l->school[b].sports[j].num=2;
l->school[c].sports[j].score=2;l->school[c].sports[j].num=3;
}
returnl;
}
voidsum(shol)
{inti,j;
for(i=0;i{
l->school[i].totalscore=0;//各学校总分赋初值为0;
l->school[i].manscore=0;
l->school[i].womanscore=0;
}
for(i=0;ifor(j=0;jl->school[i].totalscore=l->school[i].totalscore+l->school[i].sports[j].score;//各学校的总分
for(i=0;ifor(j=0;j
l->school[i].manscore=l->school[i].manscore+l->school[i].sports[j].score;//各学校男团总分
for(i=0;ifor(j=p;jl->school[i].womanscore=l->school[i].womanscore+l->school[i].sports[j].score;//各学校女团总分
for(i=0;icout<school[i].schoolname<<"总分为"<school[i].totalscore<}
4、排序
voidpaixu1(shol)
{
cout<<"按照学校编号从小到大的顺序排序输出的结果为:
"<for(inti=0;icout<school[i].schoolname<<"";
cout<}
voidpaixu2(shol)
{
typedefstructtscore
{
inttascore;
intnumber;
}tscore;
inti,j;
tscorek,ts[n];
for(i=0;i{
ts[i].tascore=l->school[i].totalscore;
ts[i].number=i;
}
for(i=0;ifor(j=0;jif(ts[j].tascore{
k=ts[j];
ts[j]=ts[j+1];
ts[j+1]=k;
}
cout<<"按照学校总分从高到低排序输出的结果为:
"<for(i=0;icout<school[ts[i].number].schoolname<<"";
cout<}
voidpaixu3(shol)
{
typedefstructmscore
{
intmascore;
intnumber;
}mscore;
inti,j;
mscorek,ms[n];
for(i=0;i{
ms[i].mascore=l->school[i].manscore;
ms[i].number=i;
}
for(i=0;ifor(j=0;jif(ms[i].mascore{
k=ms[i];
ms[i]=ms[i+1];
ms[i+1]=k;
}
cout<<"按照学校男团总分从高到低排序输出的结果为:
"<for(i=0;icout<school[ms[i].number].schoolname<<"";
cout<}
voidpaixu4(shol)
{
typedefstructwscore
{
intwascore;
intnumber;
}wscore;
inti,j;
wscorek,ws[n];
for(i=0;i{
ws[i].wascore=l->school[i].womanscore;
ws[i].number=i;
}
for(i=0;ifor(j=0;jif(ws[i].wascore{
k=ws[i];
ws[i]=ws[i+1];
ws[i+1]=k;
}
cout<<"按照学校女团总分从高到低排序输出的结果为:
"<for(i=0;icout<school[ws[i].number].schoolname<<"";
cout<}
5、查找
voidchaxun1(shol)//按学校编号查询学校某个项目的情况
{
inti,j=0,a;
cout<<"请输入学校编号:
"<cin>>i;
cout<<"请输入待查项目编号"<cin>>a;
if(a>m)
cout<<"项目编号输入有误";
else
{
cout<<"编号为"<school[i].sports[a].num<cout<<"编号为"<school[i].sports[a].score<}
}
voidchaxun2(shol)//按项目编号查询取得前3名或前5名成绩
{
inti,k,j;
cout<<"请输入要查询项目的项目编号"<cin>>i;
if(i<0||i>=m)cout<<"您输入的编号有误"<else
{if(i>p-1)
{for(j=1;j<=3;j++)
{
for(k=0;l->school[k].sports[i].num!
=j;)
k++;
if(kcout<<"在该项目上取得第"<school[k].schoolname<}
}
else
{for(j=1;j<=5;j++)
{
for(k=0;l->school[k].sports[i].num!
=j;)
k++;
if(kcout<<"在该项目上取得第"<school[k].schoolname<}
}
}
}
6、主函数及其他代码的算法
voidmain()
{
shol;
inta,fg=1;
while(fg!
=0)
{cout<<"----------------------------------------------------------------------------"<cout<<"请选择要执行的命令:
1.赋值2.输出各校总分3.按学校编号排序4.按学校总分排序"<cout<<"5.按男团总分排序6.按女团总分排序7.按学校编号查询8.按项目编号查询9.退出"<cout<<"请输入所要执行命令的代码:
"<cin>>a;
switch(a)
{
case1:
system("cls");l=fuzhi();break;
case2:
system("cls");sum(l);break;
case3:
system("cls");paixu1(l);break;
case4:
system("cls");paixu2(l);break;
case5:
system("cls");paixu3(l);break;
case6:
system("cls");paixu4(l);break;
case7:
system("cls");chaxun1(l);break;
case8:
system("cls");chaxun2(l);break;
case9:
system("cls");cout<<"谢谢使用"<default:
cout<<"您输入的选择代码有错误,请重新输入";
}
}
}
7、函数调用关系图
四、调试分析
1、本程序采用结构体的形式定义,为学校设结构体,每个学校包括若干项目、总分、男团总分、女团总分,每个项目又设结构体,包括项目名称、排名、分数等。
分类清晰,可以方便地表示各项之间的相互关系。
便于各学校之间比较,方便用户查找。
2、由于学校的个数和运动项目的个数不是很多,所以在查找的选择上没有使用其他计较麻烦的查找方式而是直接使用比较简便的、针对查找对象较少的情况下使用的直接查找法
3、本程序的模块的划分也十分的合理,根据题目的要求,将模块十分情绪的分成四个大的模块,由于数据对象并比较少,所以都是采用最简便最有效的方式。
然后通过主函数直接调用这些函数已达到完成所需要的命令。
4、算法时空分析,本算法基本上采用for循环语句,实现简便,时间复杂度基本上为O(n)、O(m)、O(n*m)。
五、用户手册
1、本程序的运行环境为windows7操作系统。
2、进入程序后显示界面。
3、首先由输入端输入1,然后按回车键,按照提示赋值。
4、根据提示选择2中的其它命令,按照相关提示查询。
六、测试结果
1、赋值操作
2、求各校总分
3、按学校编号排序
4、按学校总分排序
5、按男团总分排序
6、按女团总分排序
7、按学校编号查询
8、按项目编号查询
9、退出
七、附录:
源文件名清单
iostream.h
malloc.h
string.h
stdlib.h