运动会分数统计系统实验报告doc.docx
- 文档编号:4193349
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:20
- 大小:18.62KB
运动会分数统计系统实验报告doc.docx
《运动会分数统计系统实验报告doc.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统实验报告doc.docx(20页珍藏版)》请在冰豆网上搜索。
运动会分数统计系统实验报告doc
运动会分数统计系统的实现
9计科
(2)班
E10914044
杨素传
一、设计要求
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)。
2、需求分析
(1)可以输入各个项目的前三名或前五名成绩;
(2)能统计各学校成绩;
(3)可以按学校编号、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某项目情况,可以按项目编号查询取得前三名或前五名的学校。
二、概要设计
1、主界面设计
为了实现运动会分数统计系统,设计一个含有多个菜单项的主控菜单子程序以连接系
统的各项子程序,方便用户使用本程序。
本系统主控菜单运行界面图1所示。
图1运动会分数统计系统程序主菜单
2、存储结构设计
本程序采用链式存储类型(LNode)存储运动会分数统计系统的节点信息。
运动会分数
统计系统的链表中的结点包括8个域:
项目编号域(objnum)、项目类型(objtype)、运动
员编号(athnum)、运动员姓名(athname[20])、学校编号(schnum)、校名(schname[30])、运动员分数(athscore)和指向下一个节点的指针欲(structLNode*next)。
3、系统功能设计
本系统设置了8个子功能菜单。
8个子功能的设计描述如下:
(1)录入各项目的成绩。
由函数creatLink()实现。
当用户选择该功能时,系统会以用户输入的数据运动会分数统计链表。
(2)统计各学校分数。
由函数schoolScore()实现。
当用户选择该功能时,系统会统计各学校分数。
(3)按学校编号顺序输出。
由函数printfSchoolNumber()实现。
当用户选择该功能时,
系统会按学校编号顺序输出数据。
(4)按学校总分顺序输出。
由函数printfSchoolScore()实现。
当用户选择该功能时,系统会按学校总分顺序输出数据。
(5)按男女团体总分顺序输出。
由函数printfManWomanScore()实现。
当用户选择该功能时,系统会按男女团体总分顺序输出数据。
(6)按学校编号查询学校某项目情况。
由函数printfSchoolObject()实现。
当用户选择
该功能时,系统会按学校编号输出学校某项目情况。
(7)按项目编号查询取得前三名或前五名的学校。
由函数printfObjectSchool()实现。
当用户选择该功能时,系统会按项目编号查询取得前三名或前五名的学校情况。
(8)退出。
由exit(0)函数实现。
三、模块设计
1、模块设计
本程序包含两个模块:
主程序模块和工作区选择模块。
其调用关系如图2所示。
主程序模块工作区选择模块
图2模块调用示意图
2、系统子程序及功能设计
本系统共设置个6子程序,各子程序的函数名及功能说明如下。
(1)
LinkListcreatLink()
//创建链表(录入各项目的成绩)
(2)
intschoolScore(LinkListL)
//统计各学校总分
(3)
voidprintfSchoolNumber()
//按学校编号顺序输出
(4)
voidprintfSchoolScore()
//按学校总分顺序输出
(5)
voidprintfManWomanScore(LinkListL
//按男女团体总分排序输出
(6)
voidprintfSchoolObject(LinkListL)
//按学校编号查询学校某项目情况
(7)
voidprintfObjectSchool(LinkListL)
//按项目编号查询取得前三名或前五
名的学校
(8)
intmain()
//主函数
3、函数主要调用关系图
本系统6个子系统之间的主要调用关系如图
3所示,图中数字是各函数的编号。
8main()
1
2
3
4
5
6
7
图3
系统函数调用关系图
四、详细设计
1、数据类型定义
(1)本系统采用链式结构存储运动会分数统计的结点。
节点定义如下:
typedefstructLNode{//链表节点数据结构
intobjnum;
charobjtype;
intathnum;
charathname[20];
intschnum;
charschname[30];
intathscore;
structLNode*next;
}LNode,*LinkList;
(2)各学校情况数据结构的结构定义成结构体数组形式。
定义如下:
structSchool{
intschoolnumber;
charschoolname[30];
intschoolscore;
}school[30];
2、系统主要子程序详细设计
(1)创建链表(录入各项目的成绩)子程序设计
LinkListcreatLink(){
LinkListL=(LinkList)malloc(LEN);
LinkListp,q;
intnum,objnum,n;
charobjtype;
L->next=NULL;
p=L;
printf("请输入男女项目总个数:
");
scanf("%d",&num);
while(num--){
printf("请输入项目编号:
");
scanf("%d",&objnum);
printf("请输入项目类型:
");
getchar();
objtype=getchar();
printf("请输入3(代表取前三名)或5(代表取前五名):
");
scanf("%d",&n);
printf("
请按名次顺序输入运动员编号
姓名,学校编号
校名和成绩
\n");
while(n--){
q=(LinkList)malloc(LEN);
q->objnum=objnum;
q->objtype=objtype;
printf("
请输入运动员编号
:
");
scanf("%d",&q->athnum);
printf("
请输入运动员姓名
:
");
getchar();
scanf("%s",q->athname);
printf("请输入学校编号:
");
scanf("%d",&q->schnum);
printf("
请输入校名
:
");
getchar();
scanf("%s",q->schname);
printf("
请输入成绩
:
");
scanf("%d",&q->athscore);
q->next=NULL;
p->next=q;
p=q;
}
}
return(L);
}
(2)统计各学校总分子程序设计
intschoolScore(LinkListL){
LinkListp;
inti;
p=L->next;
for(i=0;i<20;i++){
school[i].schoolscore=0;
school[i].schoolnumber=-1;
}
while(!
p==NULL){
for(i=0;i<20;i++){
if(school[i].schoolnumber==-1){
strcpy(school[i].schoolname,p->schname);
school[i].schoolnumber=p->schnum;
school[i].schoolscore=p->athscore;
p=p->next;
break;
}
elseif(school[i].schoolnumber==p->schnum){
school[i].schoolscore+=p->athscore;
p=p->next;
break;
}
}
}
return0;
}
五、测试分析
1、创建链表(录入各项目的成绩)
在主菜单下,用户输入1并回车,然后输入数据结点的个数并回车,再输入数据,运行结果如图4所示。
图4链表建立(录入各项目的成绩)
2、统计各学校总分
在主菜单下,用户输入2并回车,运行结果如图5所示。
图5统计各学校总分
3、按学校编号顺序输出
在主菜单下,用户输入3并回车,运行结果如图6所示。
图6按学校编号顺序输出的数据
4、按学校总分顺序输出
在主菜单下,用户输入4并回车,运行结果如图7所示。
图7按学校总分顺序输出的数据
5、按男女团体总分排序输出
在主菜单下,用户输入5并回车,运行结果如图
8所示。
图8按男女团体总分排序输出的数据
6、按学校编号查询学校某项目情况
在主菜单下,用户输入6并回车,再输入学校编号回车,然后输入项目编号,运行结果如图9所示。
图9按学校编号查询学校某项目情况
6、按项目编号查询取得前三名或前五名的学校
在主菜单下,用户输入7并回车,再输入项目编号回车,然后输入取名规则,运行结果如图10所示。
图10按项目编号查询取得前三名或前五名的学校
8、退出
在主菜单下,用户输入0并回车,运行结果如图11所示。
图11退出程序
六、源程序清单
#include
#include
#include
#defineNULL0
#defineLENsizeof(LNode)
typedefstructLNode{//链表节点数据结构
intobjnum;
charobjtype;
intathnum;
charathname[20];
intschnum;
charschname[30];
intathscore;
structLNode*next;
}LNode,*LinkList;
//学校情况数据结构
structSchool{
intschoolnumber;
charschoolname[30];
intschoolscore;
}school[30];
//创建链表
LinkListcreatLink(){
LinkListL=(LinkList)malloc(LEN);
LinkListp,q;
intnum,objnum,n;
charobjtype;
L->next=NULL;
p=L;
printf("请输入男女项目总个数:
");
scanf("%d",&num);
while(num--){
printf("请输入项目编号:
");
scanf("%d",&objnum);
printf("请输入项目类型:
");
getchar();
objtype=getchar();
printf("请输入3(代表取前三名)或5(代表取前五名):
");
scanf("%d",&n);
printf("
请按名次顺序输入运动员编号
姓名,学校编号
校名和成绩
\n");
while(n--){
q=(LinkList)malloc(LEN);
q->objnum=objnum;
q->objtype=objtype;
printf("
请输入运动员编号
:
");
scanf("%d",&q->athnum);
printf("
请输入运动员姓名
:
");
getchar();
scanf("%s",q->athname);
printf("请输入学校编号:
");
scanf("%d",&q->schnum);
printf("
请输入校名
:
");
getchar();
scanf("%s",q->schname);
printf("
请输入成绩
:
");
scanf("%d",&q->athscore);
q->next=NULL;
p->next=q;
p=q;
}
}
return(L);
}
//统计各学校总分
intschoolScore(LinkListL){
LinkListp;
inti;
p=L->next;
for(i=0;i<20;i++){
school[i].schoolscore=0;
school[i].schoolnumber=-1;
}
while(!
p==NULL){
for(i=0;i<20;i++){
if(school[i].schoolnumber==-1){
strcpy(school[i].schoolname,p->schname);
school[i].schoolnumber=p->schnum;
school[i].schoolscore=p->athscore;
p=p->next;
break;
}
elseif(school[i].schoolnumber==p->schnum){
school[i].schoolscore+=p->athscore;
p=p->next;
break;
}
}
}
return0;
}
//按学校编号顺序输出
voidprintfSchoolNumber(){
inti,j,num,flag;
printf("学校编号校名学校总分\n");
for(i=0;;i++){
if(school[i].schoolnumber==-1)break;
num=school[0].schoolnumber;
flag=0;
for(j=1;;j++){
if(school[j].schoolnumber==-1)break;
if(school[j].schoolnumber } printf("%8d%10s%12d\n",school[flag].schoolnumber,school[flag].schoolname,school[flag].s choolscore); school[flag].schoolnumber=35565; } } //按学校总分顺序输出 voidprintfSchoolScore(){ inti,j,sco,flag; printf("学校编号校名学校总分\n"); for(i=0;;i++){ if(school[i].schoolscore==0)break; sco=school[0].schoolscore; flag=0; for(j=1;;j++){ if(school[j].schoolscore==0)break; if(school[j].schoolscore>sco){sco=school[j].schoolscore;flag=j;} } printf("%8d%10s%12d\n",school[flag].schoolnumber,school[flag].schoolname,school[flag].s choolscore); school[flag].schoolscore=-1; } } //按男女团体总分排序输出 voidprintfManWomanScore(LinkListL){ LinkListp; intmanscore=0,womanscore=0; p=L->next; while(! p==NULL){ if(p->objtype=='m')manscore+=p->athscore; elsewomanscore+=p->athscore; p=p->next; } printf("团体总分\n"); if(manscore>=womanscore){ printf("男生%8d\n",manscore); printf("女生%8d\n",womanscore); } else{ printf("女生%8d\n",womanscore); printf("男生%8d\n",manscore); } } //按学校编号查询学校某项目情况 voidprintfSchoolObject(LinkListL){ LinkListp; intscnum,obnum,sum=0; charscname[30]; p=L->next; printf("请输入要查看的学校编号: "); scanf("%d",&scnum); printf("请输入项目编号: "); scanf("%d",&obnum); while(p! =NULL){ if(p->schnum==scnum&&p->objnum==obnum){sum+=p->athscore;strcpy(scname,p->schna me);} p=p->next; } printf("学校编号校名项目编号获得总分\n");printf("%8d%10s%12d%12d\n",scnum,scname,obnum,sum); } //按项目编号查询取得前三名或前五名的学校 voidprintfObjectSchool(LinkListL){ LinkListp; intobnum,n,i; p=L->next; printf("请输入要查看的项目编号: "); scanf("%d",&obnum); printf("请输入3(前三名)或5(前五名): "); scanf("%d",&n); for(i=20;i<30;i++){ school[i].schoolscore=0; school[i].schoolnumber=-1; } while(p! =NULL){ for(i=20;i<30;i++){ if(school[i].schoolnumber==-1&&p->objnum==obnum){ strcpy(school[i].schoolname,p->schname); school[i].schoolnumber=p->schnum; school[i].schoolscore=p->athscore; p=p->next; break; } elseif(school[i].schoolnumber==p->schnum&&p->objnum==obnum){school[i].schoolscore+=p->athscore; p=p->next; break; } else{p=p->next;break;} } } printf("项目编号学校编号校名学校总分\n"); /*i=20; while(n--){ if(school[i].schoolscore! =0){ printf("%8d%12d%10s%12d\n",obnum,school[i].schoolnumber,school[i].schoolname,school [i].schoolscore); i++; } elsebreak; }*/ p=L->next; while(p->objnum! =obnum)p=p->next; while(n--){ printf("%8d%12d%10s%12d\n",obnum,p->schnum,p->schname,p->athscore);p=p->next; } } //主函数 intmain(){ LinkListL; intmenu; while(menu! =0){ printf("*********************** 欢迎使用运动会 分数统 计系统 ***********************\n"); printf(" printf(" printf(" printf(" printf(" printf(" printf(" 1.录入各项目的成绩\n"); 2.统计各学校分数\n"); 3.按学校编号顺序输出\n"); 4.按学校总分顺序输出\n"); 5.按男女团体总分顺序输出\n"); 6.按学校编号查询学校某项目情况\n"); 7.按项目编号查询取得前三名或前五名的学校 \n"); printf(" printf("*********************** 0.退出系统\n"); 欢迎使用运 动会分数统计系统 ***********************\n"); printf("请选择功能0-7: "); scanf("%d",&menu); switch(menu){ case1: L=creatLink();printf("各项目的成绩录入完毕 case2: schoolScore(L);printf("统计各学校成绩完毕 case3: printfSchoolNumber();break; case4: schoolScore(L);printfSchoolScore();break; case5: printfManWomanScore(L);break; case6: printfSchoolObject(L);break; case7: printfObjectSchool(L);break; case0: printf("退出系统成功,欢迎使用! \n");exit(0); default: printf("功能选项错误,请重新输入! "); ! \n");break; ! \n");break; } printf("\n"); } return0; } 七、用户手册 (1)本程序执行文件为“运动会分数统计系统演示.exe”。 (2)进入本程序之后,就会进入系统主菜单界面,用户可在该界面下输入各子菜单前对应的数字并按回车,执行相应子菜单命令。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计 系统 实验 报告 doc
![提示](https://static.bdocx.com/images/bang_tan.gif)