运动会分数统计系统实验报告.docx
- 文档编号:27529677
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:24
- 大小:444.66KB
运动会分数统计系统实验报告.docx
《运动会分数统计系统实验报告.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
运动会分数统计系统实验报告
运动会分数统计系统的实现
09计科
(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].schoolscore); 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].schoolscore); 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->schname);} 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("1.录入各项目的成绩\n"); printf("2.统计各学校分数\n"); printf("3.按学校编号顺序输出\n"); printf("4.按学校总分顺序输出\n"); printf("5.按男女团体总分顺序输出\n"); printf("6.按学校编号查询学校某项目情况\n"); printf("7.按项目编号查询取得前三名或前五名的学校\n"); printf("0.退出系统\n"); printf("***********************欢迎使用运动会分数统计系统***********************\n"); printf("请选择功能0-7: "); scanf("%d",&menu); switch(menu){ case1: L=creatLink();printf("各项目的成绩录入完毕! \n");break; case2: schoolScore(L);printf("统计各学校成绩完毕! \n");break; 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("功能选项错误,请重新输入! "); } printf("\n"); } return0; } 七、用户手册 (1)本程序执行文件为“运动会分数统计系统演示.exe”。 (2)进入本程序之后,就会进入系统主菜单界面,用户可在该界面下输入各子菜单前对应的数字并按回车,执行相应子菜单命令。 如有侵权请联系告知删除,感谢你们的配合!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计 系统 实验 报告