11运动会分数统计
时间:2020-10-12 12:27:19 来源:勤学考试网 本文已影响 人
#include<stdio.h>
#include<math.h>
#include <process.h>
#define N 20 /*学校最大数目*/
#define M 20 /*男子项目最大数目*/
#define W 20 /*女子项目最大数目*/
typedef struct
{
int inum; /*项目编号*/
int top; /*取名次的数目*/
int range[5]; /*名次*/
int mark[5]; /*分数*/
}itemnode; /*存放项目信息*/
typedef struct
{
int snum; /*学校编号*/
int score; /*学校总分*/
int mscore; /*男团体总分*/
int wscore; /*女团体总分*/
itemnode t[M+W]; /*项目数组*/
}snode; /*存放学校信息*/
snode a[N]; /* 定义一个学校数组*/
void menu(int n,int m,int w) /*菜单函数*/
{
int c;
void input(int n,int m,int w);
void output(int n,int m,int w);
void sortput(int n,int m,int w);
void search(int n,int m,int w);
printf(\ \t\t欢迎使用\t\t\t\t\n\n);
printf(\ ***********运动会分数统计系统***********\n\n);
printf(\ \t*******1.信息输入*******\n);
printf(\ \t*******2.统计输出*******\n);
printf(\ \t*******3.排序输出*******\n);
printf(\ \t*******4.信息查询*******\n);
printf(\ \t*******0.退出系统*******\n\n);
printf(=======================================================\n\n);
牰湩晴尨请选择要实现步骤的编号(0--4):);
scanf(%d,&c);
switch(c)
{
case 1:
input(n,m,w);break;
case 2:
output(n,m,w);break;
case 3:
sortput(n,m,w);break;
case 4:
search(n,m,w);break;
case 0:
牰湩晴尨谢谢使用,再见!\n);
exit(0);
default:
牰湩晴尨输入错误,请重试!\n);
menu(n,m,w);
}
}
void savetofile() /*信息存入文件file*/
{
FILE *fp;
int i;
if((fp=fopen(\,w))==NULL)
{
printf(cannot open the file\n);
return;
}
for(i=0;i<N;i++)
{
if(a[i].snum!='\0')
if(fwrite(&a[i],sizeof(snode),1,fp)!=1)
{
printf( error\n);
return;
}
}
fclose(fp);
}
void readfromfile() /*信息从文件file中取出*/
{
int i;
FILE *fp;
if((fp=fopen(\,
b))==NULL)
{
printf(cannot open the file\n);
return;
}
for(i=0;i<N;i++)
fread(&a[i],sizeof(snode),1,fp);
fclose(fp);
}
void input(int n,int m,int w) /*1.信息输入*/
{
int i,j,s,k,q=0;
for(i=0;i<n;i++)
{
牰湩晴尨学校编号:);
scanf(%d,&a[i].snum); /*输入学校信息*/
for(j=0;j<m+w;j++)
{
牰湩晴尨项目编号:);
scanf(%d,&a[i].t[j].inum);
牰湩晴尨项目取前3名或前5名(3或者5):);
scanf(%d,&a[i].t[j].top);
if(a[i].t[j].top==3)
牰湩晴尨获得名次个数(1--3):);
else
牰湩晴尨获得名次个数(1--5):);
scanf(%d,&k); /*输入项目信息*/
for(s=0;s<k;s++)
{
if(a[i].t[j].top==3)
牰湩晴尨所获名次(1--3):);
else
牰湩晴尨所获名次(1--5):);
scanf(%d,&a[i].t[j].range[s]); /*输入所获名次信息*/
}
printf(\
);
- 1 -
}
}
for(i=0;i<n;i++)
{
a[i].score=0;
a[i].mscore=0;
a[i].wscore=0;
} /*初始化分数*/
for(i=0;i<n;i++)
for(j=0;j<m+w;j++)
for(s=0;s<5;s++)
{
if(a[i].t[j].top==3)
switch(a[i].t[j].range[s])
{
case 0: a[i].t[j].mark[s]=0; break;
case 1: a[i].t[j].mark[s]=5; break;
case 2: a[i].t[j].mark[s]=3; break;
case 3: a[i].t[j].mark[s]=2; break;
}
else if(a[i].t[j].top==5)
switch(a[i].t[j].range[s])
{
case 0: a[i].t[j].mark[s]=0; break;
case 1: a[i].t[j].mark[s]=7; break;
case 2: a[i].t[j].mark[s]=5; break;
case 3: a[i].t[j].mark[s]=3; break;
case 4: a[i].t[j].mark[s]=2; break;
case 5: a[i].t[j].mark[s]=1; break;
}
else
{
牰湩晴尨信息有误!);
printf(\
);
exit(0);
}
a[i].score=a[i].score+a[i].t[j].mark[s]; /*记学校总分*/
if(j<=m-1)
a[i].mscore=a[i].mscore+a[i].t[j].mark[s]; /*记男子团体总分*/
else
a[i].wscore=a[i].wscore+a[i].t[j].mark[s]; /*记女子团体总分*/
}
牰湩晴尨输入完毕!返回? 1是 2否\n); /*返回菜单*/
scanf(%d,&q);
printf(\
);
if(q!=1)
牰湩晴尨不能再添加信息!);
printf(\
);
savetofile(); /*将信息存入文件file*/
menu(n,m,w);
}
void output(int n,int m,int w) /*2.统计输出*/
{
readfromfile();
int i,j,s,q=0;
for(i=0;i<n;i++) /*显示结果*/
{
牰湩晴尨学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n,a[i].snum,a[i].score,a[i].mscore,a[i].wscore);
- 2 -
for(j=0;j<m+w;j++)
{
牰湩晴尨项目编号:%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)
牰湩晴尨名次:%d 分数:%d\n,a[i].t[j].range[s],a[i].t[j].mark[s]);
}
}
printf(\
);
}
printf(\
);
牰湩晴尨统计完毕!返回? 1是 2否); /*返回菜单*/
scanf(%d,&q);
printf(\
);
if(q!=1)
牰湩晴尨统计已经结束!);
printf(\
);
menu(n,m,w);
}
void sortput(int n,int m,int w) /*3.排序输出*/
{
readfromfile();
int c,i,j,k,q=0;
int temp[N];
printf(\ **************排序输出系统**************\n\n);
printf(\ \t****1.按学校编号输出****\n);
printf(\ \t****2.按学校总分输出****\n);
printf(\ \t****3.按男团总分输出****\n);
printf(\ \t****4.按女团总分输出****\n);
printf(=======================================================\n\n);
do
{
?牰湩晴尨请选择要实现功能的编号(1--4):);
scanf(%d,&c);
switch(c)
{
case 1:
for(i=0;i<n;i++)
temp[i]=i;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(a[temp[i]].snum>a[j].snum)
{
k=temp[i];
temp[i]=temp[j];
temp[j]=k;
}
} /* 用冒泡排序方法排序*/
for(i=0;i<n;i++)
{
牰湩晴尨学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n,a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);
} /*按学校编号输出*/
break;
case 2:
for(i=0;i<n;i++)
temp[i]=i;
- 3 -
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(a[temp[i]].score<a[j].score)
{
k=temp[i];
temp[i]=temp[j];
temp[j]=k;
}
} /* 用冒泡排序方法排序*/
for(i=0;i<n;i++)
{
牰湩晴尨学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n,a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);
} /*按学校总分输出*/
break;
case 3:
for(i=0;i<n;i++)
temp[i]=i;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(a[temp[i]].mscore<a[j].mscore)
{
k=temp[i];
temp[i]=temp[j];
temp[j]=k;
}
} /* 用冒泡排序方法排序*/
for(i=0;i<n;i++)
{
牰湩晴尨学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n,a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);
} /*按男团总分输出*/
break;
case 4:
for(i=0;i<n;i++)
temp[i]=i;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(a[temp[i]].wscore<a[j].wscore)
{
k=temp[i];
temp[i]=temp[j];
temp[j]=k;
}
} /* 用冒泡排序方法排序*/
for(i=0;i<n;i++)
{
牰湩晴尨学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n,a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);
} /*按女团总分输出*/
break;
default:
牰湩晴尨输入错误,请重试!\n);
}
牰湩晴尨请选择 1 返回主菜单 0继续); /*返回菜单或继续排序*/
scanf(%d,&q);
- 4 -
printf(\
);
}
while(q==0);
printf(\
);
if(q!=0)
menu(n,m,w);
}
void search(int n,int m,int w) /*查询函数*/
{
readfromfile();
int c,i,j,k,d,l,q=0;
printf(\ ****************查询系统****************\n\n);
printf(\ \t****1.按学校编号查询****\n);
printf(\ \t****2.按项目编号查询****\n);
printf(=======================================================\n\n);
do
{
k=-1;d=-1;l=-1;
牰湩晴尨请选择要实现功能的编号(1--2):);
scanf(%d,&c);
switch(c)
{
case 1:
牰湩晴尨要查询的学校编号:); /*查找学校编号下标*/
scanf(%d,&c);
for(i=0;i<n;i++)
{
if(a[i].snum==c)
k=i;
}
if(k==-1)
牰湩晴尨错误:这个学校没有参加此次运动会!\n);
else
{
牰湩晴尨要查询的项目编号:); /*查找项目编号下标*/
scanf(%d,&c);
for(j=0;j<m+w;j++)
{
if(a[k].t[j].inum==c)
d=j;
}
if(d==-1)
牰湩晴尨此次运动会没有这个项目\n);
else /*显示结果*/
{
牰湩晴尨这个项目取前 %d名,该学校的成绩如下:\n, a[k].t[d].top);
for(i=0;i<5;i++)
if(a[k].t[d].range[i]!=0)
牰湩晴尨名次:%d\n,a[k].t[d].range[i]);
}
}
break;
case 2:
牰湩晴尨要查询的项目编号:); /*查找项目编号下标*/
scanf(%d,&c);
for(i=0;i<n;i++)
for(j=0;j<m+w;j++)
if(a[i].t[j].inum==c)
l=j;
- 5 -
if(l==-1)
牰湩晴尨此次运动会没有这个项目\n);
else /*显示结果*/
{
牰湩晴尨该项目取前 %d名,取得名次的学校\n,a[0].t[l].top);
for(i=0; i<n;i++)
for(j=0;j<5;j++)
if(a[i].t[l].range[j]!=0)
瀠楲瑮?学校编号:%d,名次:%d\n,a[i].snum,a[i].t[l].range[j]);
}
break;
default:
牰湩晴尨输入错误,请重试!\n);
}
牰湩晴尨请选择:1.返回主菜单 0.继续); /*返回菜单或继续查询*/
scanf(%d,&q);
printf(\
);
}
while(q==0);
printf(\
);
if(q!=0)
menu(n,m,w);
}
void main() /*主函数*/
{
int n,m,w;
printf(\ \t\t欢迎使用\t\t\t\t\n\n);
printf(\ ***********运动会分数统计系统***********\n\n);
牰湩晴尨请先输入运动会主要信息\n); /*设计运动会主要数据个数*/
牰湩晴尨输入学校个数:);
scanf(%d,&n);
牰湩晴尨输入男子项目个数:);
scanf(%d,&m);
牰湩晴尨输入女子项目个数:);
scanf(%d,&w);
menu(n,m,w);
}
- 6 -