学校运动会.docx
- 文档编号:1615051
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:25
- 大小:173.77KB
学校运动会.docx
《学校运动会.docx》由会员分享,可在线阅读,更多相关《学校运动会.docx(25页珍藏版)》请在冰点文库上搜索。
学校运动会
数据结构课程设计之一运动会分数统计
一、任务描述
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和k个女子项目。
项目编号为男子1……m,女子m+1……m+k。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
二、问题分析
1、设计基础:
要掌握查找法和排序。
2、分析设计课题的要求,要求编程实现六个功能:
功能包括:
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
三、数据结构和功能设计。
开始菜单
输入共有多少个学校参赛
输入有几个男子组参加
输入有几个女子组参加
主菜单
1
2
3
4
5
6
7
8
9
输入成绩
统计各学校的总分
按学校编号输出
按学校总分排序输出
按男团体总分排序输出
按女团体总分排序输出
按学校编号查询学校某个项目的成绩
按项目编号查询取得前三或者前五的学校
退出
1、输入成绩
输入成绩
输入项目编码
选择前5或前3
依次输出获奖名次的学校
2、统计显示各学校总分
继续y
退出n
3、按学校编码排序输出各学校的成绩
继续y
退出n
4、按学校总分排序输出
继续y
退出n
5、按男团体总分排序输出
继续y
退出n
6、按女团体总分排序输出
继续y
退出n
7、按学校编码查询学校某个项目的成绩
继续y
退出n
四、程序结构分析:
1、程序模块结构
●输入函数
●选择函数
●单个体函数
●标号函数
●总分函数
●男总函数
●女总函数
●学校函数
●项目函数
●输出函数
2、程序的主要结构(函数调用方式)
图1中的流程的名称解释如下——main()是主函数,负责调用其他所有的函数,exit()负责输出各个数据和提示,choose()用于选择菜单的选项,input()函数用于录入项目成绩,each()输出各学校总分,biaohao()输出按学校编码排序输出各学校的成绩,zongfen()输出学校总分排序,nanzong()输出男团体总分排序,nvzong()输出女团体总分排序,xuexiao()输出学校总分排序,xiangmu()按学校编码查询学校某个项目的成绩,
五、程序运行结果:
1、原文件内容:
#include
inta,b,c,d,i,j;
structnode
{
intnum;
};
structnode*f[22];
voidexit0()
{
FILE*fp;
intk;
alp:
if((fp=fopen("sore.txt","w"))==NULL)
{
printf("创建文件失败\n");
printf("1*****重试\n");
printf("2*****强制退出,数据不保存\n");
printf("3*****回到主菜单\n");
alj:
scanf("%d",&k);
if(k==1)
gotoalp;
elseif(k==2)
exit(0);
elseif(k==3)
return;
else
{
printf("输入有误重新输入:
");
gotoalj;
}
}
fprintf(fp,"\n\n");
fprintf(fp,"运动会分数统计表\n\n\n");
fprintf(fp,"项目代号");
for(i=1;i<=c+d;i++);
fprintf(fp,"%5d",i);
fprintf(fp,"");
fprintf(fp,"\n学校代号\n");
for(i=1;i<=a;i++)
{
fprintf(fp,"%10d",i);
for(b=1;b<=c+d;b++)
{
fprintf(fp,"%5d",f[i][b].num);
}
fprintf(fp,"\n");
}
fprintf(fp,"\n\n");
fprintf(fp,"本次运动会有%d个学校参赛\n\n",a);
fprintf(fp,"其中1~%d组是男子组,%d~%d组诗女子组\n",c,c+1,c+d);
printf("\n比赛成绩已保存到当前路径下的“sore.txt”文件中\n\n");
fclose(fp);
exit
(1);
}
intchoose()
{
intchoo;
printf("\n\n1*****输入成绩\n");
printf("2******统计各学校的总分\n");
printf("3******按学校编号排序输出\n");
printf("4******按学校总分排序输出\n");
printf("5******按男团体总分排序输出\n");
printf("6******按女团体总分排序输出\n");
printf("7******按学校编号查询学校某个项目的成绩\n");
printf("8******按项目编号查询取得前三名或者前五名的学校\n");
printf("9******退出\n\n");
printf("请选择");
scanf("%d",&choo);
return(choo-1);
}
voidinput()
{
intab,ac,ae,af,g=1,get[5]={0,0,0,0,0};
printf("请输入项目代码:
");
ale:
scanf("%d",&ab);
if(ab>c+d||ab<1)
{
printf("\n此项目代号不存在,重新输入\n");
gotoale;
}
ae=0;
for(i=0;i<=a;i++)
{
if(f[i][ab].num!
=0)
{
ae=1;
break;
}
}
if(ae==1)
{
al2:
printf("\n此项目成绩曾经已被录入过,重新录入:
\n");
printf("1+++重新录入\n");
printf("2++++待查证后再录入\n\n");
scanf("%d",&af);
if(af==2)
{
printf("您已取消录入!
!
!
!
\n");
return;
}
elseif(af==1)
{
for(i=1;i<=a;i++)
{
if(f[i][ab].num!
=0)
{
f[i][0].num=f[i][0].num-f[i][ab].num;
if(ab<=c)
f[i][c+d+1].num=f[i][c+d+1].num-f[i][ab].num;
else
f[i][c+d+2].num=f[i][c+d+2].num-f[i][ab].num;
}
f[i][ab].num=0;
}
}
else
gotoal2;
}
al:
printf("此项目前几名胜出\n\n");
printf("3------前3\n");
printf("5------前5\n\n");
scanf("%d",&ac);
if(ac==3)
{
printf("请依次输入获胜学校代号:
");
af=5;
for(i=0;i<3;i++)
{
alq:
scanf("%d",&ae);
if(ae>a||ae<1)
{
printf("%d学校代码不存在,重新输入第%d名的学校代号\n",ae,g);
gotoalq;
}
for(b=0;b<5;b++)
{
if(ae==get[b])
{
printf("同一个学校不能在同一个项目中有两个名次,请重新输入第%d名的学校代号\n",g);
gotoalq;
}
else
get[b]=ae;
}
f[ae][0].num=f[ae][0].num+af;
f[ae][ab].num=af;
if(ab<=c)
f[ae][c+d+1].num=f[ae][c+d+1].num+af;
else
f[ae][c+d+2].num=f[ae][c+d+2].num+af;
if(af>3)
af=af-2;
else
af--;
g++;
}
}
elseif(ac==5)
{printf("请依次输入获胜学校代号:
");
af=7;
for(i=0;i<5;i++)
{
alw:
scanf("%d",&ae);
if(ae>a||ae<1)
{
printf("%d学校代码不存在,重新输入第%d名的学校代号\n",ae,g);
gotoalw;
}
for(b=0;b<5;b++)
{
if(ae==get[b])
{
printf("同一个学校不能在同一个项目中有两个名次,请重新输入第%d名的学校代号\n",g);
gotoalw;
}
else
get[b]=ae;
}
f[ae][0].num=f[ae][0].num+af;
f[ae][ab].num=af;
if(ab<=c)
f[ae][c+d+1].num=f[ae][c+d+1].num+af;
else
f[ae][c+d+2].num=f[ae][c+d+2].num+af;
if(af>3)
af=af-2;
else
af--;
g++;
}
}
else
gotoal;
printf("\n\n输入完成!
!
!
\n");
}
voideach()
{
printf("\n对应的格式为:
学校代号:
团体总成绩\n\n");
for(i=1;i<=a;i++)
{
printf("%2d:
%3d",i,f[i][0].num);
if(i%3==0)
printf("\n");
}
}
voidbiaohao()
{
printf("\n项目代号");
for(i=1;i<=c+d;i++)
{
if(i>9)
printf("%4d",i);
else
printf("%5d",i);
}
printf("\n");
printf("学校代号\n");
for(i=1;i<=a;i++)
{
printf("%d",i);
for(b=1;b<=c+d;b++)
{
if(f[i][b].num>9)
printf("%6d",f[i][b].num);
else
printf("%7d",f[i][b].num);
}
printf("\n");
}
}
voidzongfen()
{
structnod
{
intke;
intnum;
};
intha;
structnod*de;
de=(structnod*)malloc(sizeof(structnod)*a+1);
printf("\n按学校编号排序输出\n\n");
printf("学校代号总分\n\n");
for(i=1;i<=a;i++)
{
de[i].ke=i;
de[i].num=f[i][0].num;
}
for(i=1;i<=a;i++)
{
for(b=i;b { if(de[b].num>de[i].num) { ha=de[b].ke; de[b].ke=de[i].ke; de[i].ke=ha; ha=de[b].num; de[b].num=de[i].num; de[i].num=ha; } } } for(i=1;i<=a;i++) { printf("%13d%8d\n",de[i].ke,de[i].num); } } voidnanzong() { structnod { intke; intnum; }; intha; structnod*de; de=(structnod*)malloc(sizeof(structnod)*a+1); printf("\n按男子团体总分排序输出\n\n"); printf("学校代码男子团体总分\n\n"); for(i=1;i<=a;i++) { de[i].ke=i; de[i].num=f[i][c+d+1].num; } for(i=1;i<=a;i++) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学校 运动会