数据结构课程设计之一 运动会分数统计
一、 任务描述
参加运动会有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、程序的主要结构(函数调用方式)
图1中的流程的名称解释如下——main()是主函数,
负责调用其他所有的函数,exit()负责输出各个数据和提示,choose()用于选择菜单的选项,input()函数用于录入项目成绩,each()输出各学校总分,biaohao()输出按学校编码排序输出各学校的成绩,zongfen()输出学校总分排序,nanzong()输出男团体总分排序,nvzong()输出女团体总分排序,xuexiao()输出学校总分排序,xiangmu()按学校编码查询学校某个项目的成绩,
五、程序运行结果:
1、 原文件内容:
#include int a,b,c,d,i,j; struct node {
int num; };
struct node *f[22]; void exit0() {
FILE *fp; int k;
alp:if((fp=fopen("sore.txt","w"))==NULL) {
printf("创建文件失败\n"); printf("1*****重试\n"); printf("3*****回到主菜单\n");
printf("2*****强制退出,数据不保存\n"); alj: scanf("%d",&k); if(k==1) goto alp; else if(k==2) exit(0); else if(k==3) return; else
{
printf("输入有误重新输入:"); goto alj; } }
fprintf(fp,"\n\n");
fprintf(fp,"运动会分数统计表\n\n\n"); fprintf(fp,"项目代号"); for(i=1;i
fprintf(fp,"\n 学校代号\n"); for(i=1;i
fprintf(fp,"%10d",i); for(b=1;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); }
int choose() { }
int choo;
printf("\n\n 1*****输入成绩\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);
void input() { int ab,ac,ae,af,g=1,get[5]={0,0,0,0,0}; printf("请输入项目代码:"); ale:scanf("%d",&ab); if(ab>c+d||ab
ae=0;
for(i=0;i
if(f[i][ab].num!=0) {
ae=1; break;
printf("\n此项目代号不存在,重新输入\n"); goto ale;
}
} if(ae==1) {
al2:printf("\n此项目成绩曾经已被录入过,重新录入:\n"); printf("1+++重新录入\n");
printf("2++++待查证后再录入\n\n"); scanf("%d",&af); if(af==2) {
printf("您已取消录入!!!!\n"); return; }
else if(af==1) {
for(i=1;i
if(f[i][ab].num!=0) { }
f[i][0].num=f[i][0].num-f[i][ab].num; if(ab
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
goto al2;
}
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
alq:scanf("%d",&ae); if(ae>a||ae
printf("%d学校代码不存在,重新输入第%d名的学校代号\n",ae,g);
goto alq; }
for(b=0;b
if(ae==get[b]) {
printf("同一个学校不能在同一个项目中有两个名次,请重新输入第%d名的学校代号\n",g);
goto alq; } else get[b]=ae; }
f[ae][0].num=f[ae][0].num+af; f[ae][ab].num=af;
if(ab
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 if(ac==5)
{printf("请依次输入获胜学校代号:"); af=7;
for(i=0;i
alw:scanf("%d",&ae); if(ae>a||ae
printf("%d学校代码不存在,重新输入第%d名的学校代号\n",ae,g); goto alw; }
for(b=0;b
if(ae==get[b]) {
printf("同一个学校不能在同一个项目中有两个名次,请重新输入第%d
名的学校代号\n",g);
goto alw; } else
get[b]=ae;
}
f[ae][0].num=f[ae][0].num+af; f[ae][ab].num=af; if(ab
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
goto al;
printf("\n\n 输入完成!!!\n"); }
void each() { printf("\n 对应的格式为: 学校代号: for(i=1;i
}
}
void biaohao()
{
printf("\n项目代号"); for(i=1;i9) printf("%4d",i); else
printf("%5d",i);
}
\n\n"); 团体总成绩
printf("\n");
printf("学校代号\n"); for(i=1;i
for(b=1;b
printf("\n");
if(f[i][b].num>9) printf("%6d",f[i][b].num); else
printf("%7d",f[i][b].num);
}
void zongfen() {
struct nod {
int ke; int num;
};
int ha;
struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1); printf("\n按学校编号排序输出\n\n"); printf("学校代号总分\n\n"); for(i=1;i
de[i].num=f[i][0].num;
for(i=1;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
printf("%13d%8d\n",de[i].ke,de[i].num);
}
void nanzong() {
struct nod {
int ke; int num;
};
int ha;
struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1); printf("\n 按男子团体总分排序输出\n\n"); printf("学校代码 男子团体总分\n\n"); for(i=1;i
de[i].ke=i;
de[i].num=f[i][c+d+1].num;
for(i=1;i
for(b=i;bde[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
printf("%13d%12d\n",de[i].ke,de[i].num);
}
void nvzong() {
struct nod { };
int ke; int num;
int ha; struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1); printf("按女子团体总分排序输出\n\n"); printf("学校代号 女子团体总分\n\n"); for(i=1;i
de[i].ke=i;
de[i].num=f[i][c+d+2].num;
for(i=1;i
for(b=i;bde[i].num) { } } }
for(i=1;i
void xuexiao() {
int dr,dt; printf("\n请输入您要查询的学校代号: "); aly:scanf("%d",&dr);
printf("%15d%13d\n",de[i].ke,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;
if(dr>a||dr
{
printf("学校代号不存在,请重新输入\n");
goto aly;
}
printf("请输入您要查询的项目代号: ");
alo:scanf("%d",&dt);
if(dt>c+d||dt
{
printf("项目代号不存在,重新输入\n");
goto alo;
}
printf("\n\n %3d 学校%3d
绩%3d\n",dr,dt,f[dr][dt].num);
}
void xiangmu()
{
int ge,sedy=0;
printf("\n查询的项目代号:\n");
all:scanf("%d",&ge);
printf("end");
if(ge>c+d||ge
{
printf("没有此项目代号,重新输入\n");
goto all;
}
for(i=1;i
{
if(f[b][ge].num==2)
sedy=1;
}
if(sedy==0)
{
printf("此项目没有录入成绩\n");
return;
}
for(i=1;i
{
if(f[i][ge].num==7)
{
printf("此项目取得前5名的获胜者\n");
break;
} 项目成
}
if(i==a+1)
printf("此项目取前3名获奖者\n");
printf("\n获胜名单成绩高到低依次为:\n\n");
for(i=7;i>0;i--)
{ } for(b=1;b
}
void(*g[])
()={input,each,biaohao,zongfen,nanzong,nvzong,xuexiao,xiangmu,exit0};
void main()
{
} int choo; printf("\n\n***运动会分数统计***\n\n\n"); printf("共有多少学校参赛: "); scanf("%d",&a); while(a20) { if(a20) { printf("\n参赛学校个数不能大于20\n"); printf("共有多少学校参赛: \n"); scanf("%d",&a);
printf("有几个男子组: ");
scanf("%d",&c);
printf("有几个女子组: ");
scanf("%d",&d);
for(i=0;i
{
} f[i]=(struct node *)malloc(sizeof(struct node)*(c+d+3)); for(j=0;j
choo=choose();
while(1)
{
while(choo8)
choo=choose();
}
}
2、 本程序是在VC++环境下实现,下面将演示该软件的使用方法。
输入学校参加数:8
输入男运动员项目:5
女运动员项目:
4
(*g[choo])(); printf("end"); choo=choose();
主菜单界面
输入成绩,项目编码,选择前5或前3,依次输出获得名次的学校
输出各学校所得的分数
按学校编号排序输出
按学校总分排序输出
按男团体总分排序输出
按女团体总分排序输出
按学校编号查询学校某个项目的成绩
按项目编号查询取得前3或前五的学校
六、 收获和体会 运动会管理系统实现运动会管理自主化、智能化,达到提高管理效率和质量,满足不同层次学校的不同要求,节省人力资源的目的。
本系统的主要目的是提高运动会管理的效率;实现整个运动会的集中管理,另一个重要特点是界面友好、易于操作.
数据结构课程设计之一 运动会分数统计
一、 任务描述
参加运动会有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、程序的主要结构(函数调用方式)
图1中的流程的名称解释如下——main()是主函数,
负责调用其他所有的函数,exit()负责输出各个数据和提示,choose()用于选择菜单的选项,input()函数用于录入项目成绩,each()输出各学校总分,biaohao()输出按学校编码排序输出各学校的成绩,zongfen()输出学校总分排序,nanzong()输出男团体总分排序,nvzong()输出女团体总分排序,xuexiao()输出学校总分排序,xiangmu()按学校编码查询学校某个项目的成绩,
五、程序运行结果:
1、 原文件内容:
#include int a,b,c,d,i,j; struct node {
int num; };
struct node *f[22]; void exit0() {
FILE *fp; int k;
alp:if((fp=fopen("sore.txt","w"))==NULL) {
printf("创建文件失败\n"); printf("1*****重试\n"); printf("3*****回到主菜单\n");
printf("2*****强制退出,数据不保存\n"); alj: scanf("%d",&k); if(k==1) goto alp; else if(k==2) exit(0); else if(k==3) return; else
{
printf("输入有误重新输入:"); goto alj; } }
fprintf(fp,"\n\n");
fprintf(fp,"运动会分数统计表\n\n\n"); fprintf(fp,"项目代号"); for(i=1;i
fprintf(fp,"\n 学校代号\n"); for(i=1;i
fprintf(fp,"%10d",i); for(b=1;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); }
int choose() { }
int choo;
printf("\n\n 1*****输入成绩\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);
void input() { int ab,ac,ae,af,g=1,get[5]={0,0,0,0,0}; printf("请输入项目代码:"); ale:scanf("%d",&ab); if(ab>c+d||ab
ae=0;
for(i=0;i
if(f[i][ab].num!=0) {
ae=1; break;
printf("\n此项目代号不存在,重新输入\n"); goto ale;
}
} if(ae==1) {
al2:printf("\n此项目成绩曾经已被录入过,重新录入:\n"); printf("1+++重新录入\n");
printf("2++++待查证后再录入\n\n"); scanf("%d",&af); if(af==2) {
printf("您已取消录入!!!!\n"); return; }
else if(af==1) {
for(i=1;i
if(f[i][ab].num!=0) { }
f[i][0].num=f[i][0].num-f[i][ab].num; if(ab
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
goto al2;
}
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
alq:scanf("%d",&ae); if(ae>a||ae
printf("%d学校代码不存在,重新输入第%d名的学校代号\n",ae,g);
goto alq; }
for(b=0;b
if(ae==get[b]) {
printf("同一个学校不能在同一个项目中有两个名次,请重新输入第%d名的学校代号\n",g);
goto alq; } else get[b]=ae; }
f[ae][0].num=f[ae][0].num+af; f[ae][ab].num=af;
if(ab
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 if(ac==5)
{printf("请依次输入获胜学校代号:"); af=7;
for(i=0;i
alw:scanf("%d",&ae); if(ae>a||ae
printf("%d学校代码不存在,重新输入第%d名的学校代号\n",ae,g); goto alw; }
for(b=0;b
if(ae==get[b]) {
printf("同一个学校不能在同一个项目中有两个名次,请重新输入第%d
名的学校代号\n",g);
goto alw; } else
get[b]=ae;
}
f[ae][0].num=f[ae][0].num+af; f[ae][ab].num=af; if(ab
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
goto al;
printf("\n\n 输入完成!!!\n"); }
void each() { printf("\n 对应的格式为: 学校代号: for(i=1;i
}
}
void biaohao()
{
printf("\n项目代号"); for(i=1;i9) printf("%4d",i); else
printf("%5d",i);
}
\n\n"); 团体总成绩
printf("\n");
printf("学校代号\n"); for(i=1;i
for(b=1;b
printf("\n");
if(f[i][b].num>9) printf("%6d",f[i][b].num); else
printf("%7d",f[i][b].num);
}
void zongfen() {
struct nod {
int ke; int num;
};
int ha;
struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1); printf("\n按学校编号排序输出\n\n"); printf("学校代号总分\n\n"); for(i=1;i
de[i].num=f[i][0].num;
for(i=1;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
printf("%13d%8d\n",de[i].ke,de[i].num);
}
void nanzong() {
struct nod {
int ke; int num;
};
int ha;
struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1); printf("\n 按男子团体总分排序输出\n\n"); printf("学校代码 男子团体总分\n\n"); for(i=1;i
de[i].ke=i;
de[i].num=f[i][c+d+1].num;
for(i=1;i
for(b=i;bde[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
printf("%13d%12d\n",de[i].ke,de[i].num);
}
void nvzong() {
struct nod { };
int ke; int num;
int ha; struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1); printf("按女子团体总分排序输出\n\n"); printf("学校代号 女子团体总分\n\n"); for(i=1;i
de[i].ke=i;
de[i].num=f[i][c+d+2].num;
for(i=1;i
for(b=i;bde[i].num) { } } }
for(i=1;i
void xuexiao() {
int dr,dt; printf("\n请输入您要查询的学校代号: "); aly:scanf("%d",&dr);
printf("%15d%13d\n",de[i].ke,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;
if(dr>a||dr
{
printf("学校代号不存在,请重新输入\n");
goto aly;
}
printf("请输入您要查询的项目代号: ");
alo:scanf("%d",&dt);
if(dt>c+d||dt
{
printf("项目代号不存在,重新输入\n");
goto alo;
}
printf("\n\n %3d 学校%3d
绩%3d\n",dr,dt,f[dr][dt].num);
}
void xiangmu()
{
int ge,sedy=0;
printf("\n查询的项目代号:\n");
all:scanf("%d",&ge);
printf("end");
if(ge>c+d||ge
{
printf("没有此项目代号,重新输入\n");
goto all;
}
for(i=1;i
{
if(f[b][ge].num==2)
sedy=1;
}
if(sedy==0)
{
printf("此项目没有录入成绩\n");
return;
}
for(i=1;i
{
if(f[i][ge].num==7)
{
printf("此项目取得前5名的获胜者\n");
break;
} 项目成
}
if(i==a+1)
printf("此项目取前3名获奖者\n");
printf("\n获胜名单成绩高到低依次为:\n\n");
for(i=7;i>0;i--)
{ } for(b=1;b
}
void(*g[])
()={input,each,biaohao,zongfen,nanzong,nvzong,xuexiao,xiangmu,exit0};
void main()
{
} int choo; printf("\n\n***运动会分数统计***\n\n\n"); printf("共有多少学校参赛: "); scanf("%d",&a); while(a20) { if(a20) { printf("\n参赛学校个数不能大于20\n"); printf("共有多少学校参赛: \n"); scanf("%d",&a);
printf("有几个男子组: ");
scanf("%d",&c);
printf("有几个女子组: ");
scanf("%d",&d);
for(i=0;i
{
} f[i]=(struct node *)malloc(sizeof(struct node)*(c+d+3)); for(j=0;j
choo=choose();
while(1)
{
while(choo8)
choo=choose();
}
}
2、 本程序是在VC++环境下实现,下面将演示该软件的使用方法。
输入学校参加数:8
输入男运动员项目:5
女运动员项目:
4
(*g[choo])(); printf("end"); choo=choose();
主菜单界面
输入成绩,项目编码,选择前5或前3,依次输出获得名次的学校
输出各学校所得的分数
按学校编号排序输出
按学校总分排序输出
按男团体总分排序输出
按女团体总分排序输出
按学校编号查询学校某个项目的成绩
按项目编号查询取得前3或前五的学校
六、 收获和体会 运动会管理系统实现运动会管理自主化、智能化,达到提高管理效率和质量,满足不同层次学校的不同要求,节省人力资源的目的。
本系统的主要目的是提高运动会管理的效率;实现整个运动会的集中管理,另一个重要特点是界面友好、易于操作.