运动会分数统计.docx
- 文档编号:5339361
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:20
- 大小:204.11KB
运动会分数统计.docx
《运动会分数统计.docx》由会员分享,可在线阅读,更多相关《运动会分数统计.docx(20页珍藏版)》请在冰豆网上搜索。
运动会分数统计
一、问题描述及要求
【问题描述】参加运动会有n个学校,学校编号为1~n。
比赛分成m个男子项目和w个女子项目。
项目编号为男子1~m和女子m+1~m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
【功能要求】
(1)可以输入各个项目的前三名或前五名的成绩;
(2)能统计各学校总分,
(3)可以按学校编号、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
【规定】
输入数据形式和范围:
20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
【输出形式】
有中文提示,各学校分数为整形
【界面要求】
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
【存储结构】
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
【测试数据】
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明。
二、需求分析
根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:
信息统计模块、信息输出模块、信息查询模块、信息调用模块。
(1)、信息统计模块实现信息的输入、统计、存档。
(2)、信息输出模块实现信息的输出。
(3)、信息查询模块实现信息的查询。
(4)、信息调用模块实现信息的调用,即从文件中读出信息并输出
三、数据结构
(1)项目数据表:
运动会系统先制定本次运动会所需的参赛项目。
本数据表根据要求设计存储每个项目的编号、要取的名次、各个名次名称及各名次对应的分数。
用于对以后项目情况的统计已及查询。
typedefstruct
{
intinum;/*项目编号*/
inttop;/*取名次的数目*/
intrange[5];/*名次*/
intmark[5];/*分数*/
}itemnode;/*存放项目信息*/
(2)学校数据表:
本数据表根据要求储存了各个参赛学校的总体情况,包括学校的编号、学校总分、男子团体总分、女子团体总分,并且包括项目数据数组t[n]。
其中snum和t[n]中部分数据由输入信息输入,而其他三项内容score,mscore,wscore将由系统进行自动统计。
typedefstruct
{
intschoolnum;/*学校编号*/
intschoolcore;/*学校总分*/
intmanscore;/*男团体总分*/
intwomanscore;/*女团体总分*/
itemnodet[m0+w0];/*项目数组*/
}snode;/*存放学校信息*/
snodea[n0];/*定义一个学校数组*/
这二个数据表相关联接,a[n]中包括t[n],形成一个整体。
四、源代码
#include
#include
#include
#definen020
#definem020
#definew020
typedefstruct
{
intinum;
inttop;
intrange[5];
intmark[5];
}itemnode;
typedefstruct
{
intschoolnum;
intschoolcore;
intmanscore;
intwomanscore;
itemnodet[m0+w0];
}snode;
snodea[n0];
voidmenu(intn,intm,intw)
{
intc;
voidinput(intn,intm,intw);
voidoutput(intn,intm,intw);
voidsortput(intn,intm,intw);
voidsearch(intn,intm,intw);
printf("==========运动会分数统计系统==========\n");
printf("*******1.信息输入*******\n");
printf("*******2.统计输出*******\n");
printf("*******3.排序输出*******\n");
printf("*******4.信息查询*******\n");
printf("*******0.退出系统*******\n\n");
printf("请选择要实现步骤的编号(0—4):
");
scanf("%d",&c);
switch(c)
{
case1:
input(n,m,w);break;
case2:
output(n,m,w);break;
case3:
sortput(n,m,w);break;
case4:
search(n,m,w);break;
case0:
printf("谢谢使用,再见!
\n");
exit(0);
}
}
voidsavetofile()
{
FILE*fp;
inti;
if((fp=fopen("file.txt","w"))==NULL)
{
printf("cannotopenthefile\n");
return;
}
for(i=0;i { if(a[i].schoolnum! ='\0') if(fwrite(&a[i],sizeof(snode),1,fp)! =1) { printf("filewriteerror\n"); return; } } fclose(fp); } voidreadfromfile() { inti; FILE*fp; if((fp=fopen("file.txt","rb"))==NULL) { printf("cannotopenthefile\n"); return; } for(i=0;i fread(&a[i],sizeof(snode),1,fp); fclose(fp); } voidinput(intn,intm,intw) { inti,j,s,k,q=0; for(i=0;i { printf("学校编号: "); scanf("%d",&a[i].schoolnum); for(j=0;j { printf("项目编号: "); scanf("%d",&a[i].t[j].inum); printf("取名次个数(3或者5): "); scanf("%d",&a[i].t[j].top); printf("获得名次个数(1—5): "); scanf("%d",&k); for(s=0;s { printf("所获名次(1—5): "); scanf("%d",&a[i].t[j].range[s]); } printf("\n"); } } for(i=0;i { a[i].schoolcore=0; a[i].manscore=0; a[i].womanscore=0; } for(i=0;i for(j=0;j for(s=0;s<5;s++) { if(a[i].t[j].top==3) switch(a[i].t[j].range[s]) { case0: a[i].t[j].mark[s]=0;break; case1: a[i].t[j].mark[s]=5;break; case2: a[i].t[j].mark[s]=3;break; case3: a[i].t[j].mark[s]=2;break; } elseif(a[i].t[j].top==5) switch(a[i].t[j].range[s]) { case0: a[i].t[j].mark[s]=0;break; case1: a[i].t[j].mark[s]=7;break; case2: a[i].t[j].mark[s]=5;break; case3: a[i].t[j].mark[s]=3;break; case4: a[i].t[j].mark[s]=2;break; case5: a[i].t[j].mark[s]=1;break; } a[i].schoolcore=a[i].schoolcore+a[i].t[j].mark[s]; if(j<=m-1) a[i].manscore=a[i].manscore+a[i].t[j].mark[s]; else a[i].womanscore=a[i].womanscore+a[i].t[j].mark[s]; } while(q! =1) { printf("输入完毕! 返回? 1是2否"); scanf("%d",&q); printf("\n"); } printf("\n"); savetofile(); menu(n,m,w); } voidoutput(intn,intm,intw) { readfromfile(); inti,j,s,q=0; for(i=0;i { printf("学校编号: %d学校总分: %d男团总分: %d女团总分: %d\n",a[i].schoolnum,a[i].schoolcore,a[i].manscore,a[i].womanscore); for(j=0;j { printf("项目编号: %d所取名次数量: %d\n",a[i].t[j].inum,a[i].t[j].top); for(s=0;s<5;s++) { if(a[i].t[j].range[s]! =0) printf("名次: %d分数: %d\n",a[i].t[j].range[s],a[i].t[j].mark[s]); } } printf("\n"); } printf("\n"); while(q! =1) { printf("统计完毕! 返回? 1是2否"); scanf("%d",&q); printf("\n"); } printf("\n"); menu(n,m,w); } voidsortput(intn,intm,intw) { readfromfile(); intc,i,j,k,q=0; inttemp[n0]; printf("===========排序输出系统==========\n\n"); printf("****1.按学校编号输出****\n"); printf("****2.按学校总分输出****\n"); printf("****3.按男团总分输出****\n"); printf("****4.按女团总分输出****\n\n"); do { printf("请选择要实现功能的编号(1—4): "); scanf("%d",&c); switch(c) { case1: for(i=0;i temp[i]=i; for(i=0;i { for(j=i+1;j if(a[temp[i]].schoolnum>a[j].schoolnum) { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } } for(i=0;i { printf("学校编号: %d学校总分: %d男团总分: %d女团总分: %d\n",a[temp[i]].schoolnum,a[temp[i]].schoolcore,a[temp[i]].manscore,a[temp[i]].womanscore); } break; case2: for(i=0;i temp[i]=i; for(i=0;i { for(j=i+1;j if(a[temp[i]].schoolcore { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } } for(i=0;i { printf("学校编号: %d学校总分: %d男团总分: %d女团总分: %d\n",a[temp[i]].schoolnum,a[temp[i]].schoolcore,a[temp[i]].manscore,a[temp[i]].womanscore); } break; case3: for(i=0;i temp[i]=i; for(i=0;i { for(j=i+1;j if(a[temp[i]].manscore { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } } for(i=0;i { printf("学校编号: %d学校总分: %d男团总分: %d女团总分: %d\n",a[temp[i]].schoolnum,a[temp[i]].schoolcore,a[temp[i]].manscore,a[temp[i]].womanscore); } break; case4:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计