📄 lvx.cpp
字号:
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define fps "%-16d%-8d%-8d%-30s\n"
FILE *fp;
void main()
/*先建立一个结构体数组,再全赋0值 根据项目号判断是否输出*/
/*每项成绩的项目号、(名次)、成绩、姓名和得分*/
{
void swap(int x,int y);
void print(int g,int b[],int c[],int d[],char e[20][20]);
void save(int g,int b[],int c[],int d[],char e[20][20]);
struct
{
int sn[50][5]; //项目号
int score[50][5]; //成绩
int zsore[50]; //该项总得分
}school[20];
int q,q1,q2,q3,k[20];
/*输入有多少学校,男子女子项目 */
printf("\n\n\n\n\n");
printf("\n\n\n ------------------------\n");
printf(" ---运动会分数统计系统---\n");
printf(" ------------------------");
getch();
system("cls");
printf("\n\n\n声明:\n本系统只适用于20个学校以内,男子项目不超过30个,女子项目不超过20个的,只取前三名或前五名的体育比赛。\n\n");
int n,m,w,i;
int a,b,c,d,e,f=0;
int t,t1[20],t2[20][50][5];
char ydh[50];
getch();
system("cls");
printf("\n\n\n请输入运动会名称、日期\n");
scanf("%s",ydh);
system("cls");
do
{
printf("\n\n\n输入学校数,男子项目数,女子项目数。\n");
printf("如:输入4,2,1回车(即输入4个学校,2个男子项目数,1个女子项目数)。\n");
printf("输入错误的话,可以根据提示按1键重新输入。\n");
getch();
printf("开始输入\n");
scanf("%d,%d,%d",&n,&m,&w);
printf("输入错误请按 1\n继续输入请按其它\n");
}
while(getch()=='1');
for(q1=0;q1<n;q1++)
for(q2=0;q2<m+w;q2++)
school[q1].zsore[q2]=0;
system("cls");
/*输入运动员姓名及学校名 运动员编号1从到N, 学校编号从0 到n-1*/
printf("\n\n\n");
printf("输入运动员姓名及学校名。\n程序会根据上一步的输入自动进行编号,学校编号从0 到n-1,\n");
printf("运动员编号为:n×100+k (n为该运动员所在学校的编号,k为运动员序数)\n");
printf("如:0号学校的第4个运动员编号为4,5号学校的第4个运动员编号就为404。\n");
getch();
printf("\n\n\n");
char dn[20][100][20],shn[20][20];
int u,u1,u2[20];
for(u=0;u<20;u++)u2[u]=0;//u2[u]为第u号学校的学生数
for(u=0;u<n;u++)
{l5:{ //l5所在处
printf("请输入%d号学校名:\n",u);
scanf("%s",shn[u]);
for(u1=1;u1<100;u1++)
{
printf("请输入%d号学生名\n",u1+u*100);
scanf("%s",dn[u][u1]);u2[u]+=1;
printf("该学校学生已输入完毕(y or n)?\n");
if(getch()=='y'||getch()=='Y')break;
}
}
printf("输入错误请按 1\n继续输入请按其它\n");
if(getch()=='1')goto l5;//l5在"请输入%d学校名的首端"
}
printf("请进行最后一次核对\n重新输入请按 1\n输入比赛信息请按其它\n");
if(getch()=='1')goto l5;//l5在"请输入%d学校名"的首端
system("cls");
/*输入比赛成绩.先男子后女子 */
printf("\n\n\n");
printf("输入比赛成绩。\n前m个项目为男子项目,后w个项目为女子项目。\n");
printf("输入每个项目成绩前,根据提示按1或2键回车决定取前三名还是取前五名。\n");
printf("然后依次按第一名到第末名的顺序,输入运动员编号。\n如:1号项目取前5名,其第3名为运动员301,那么在程序出现:\n");
printf("\"1号项目的比赛成绩\n取前三名请按 1\n取前五名请按 2\"时,输入1回车。\n");
printf("然后在程序出现:\n\"请输入No.3的运动员编号\"时,输入301回车。\n输入错误的话,可在整体输完后单独修改。\n");
printf("若输入不存在的运动员编号,系统会报错,并要求重新输入。");
getch();
printf("\n\n\n");
printf("开始输入\n");
for(i=0;i<m+w;i++)
{ l4:{ // l4 所在处
for(q1=0;q1<n;q1++)
{
for(q3=0;q3<5;q3++)
{
school[q1].sn[i][q3]=0;
school[q1].score[i][q3]=0;
}
}
printf("%d号项目的比赛成绩\n",i+1);
printf("取前三名请按 1\n取前五名请按 2\n");
scanf("%d",&q1);
if(q1%2)
{
printf("请输入No.1的运动员编号\n");
scanf("%d",&a);
if(a-a/100*100>u2[a/100]||a-a/100*100==0)
{
printf("输入错误\n");
goto l4;
}
school[a/100].sn[i][0]=a-a/100*100;
school[a/100].score[i][0]+=5;
t2[a/100][i][0]=5;
printf("请输入No.2的运动员编号\n");
scanf("%d",&b);
if(b-b/100*100>u2[b/100]||b-b/100*100==0)
{
printf("输入错误\n");
goto l4;
}
school[b/100].sn[i][1]=b-b/100*100;
school[b/100].score[i][1]+=3;
t2[b/100][i][1]=3;
printf("请输入No.3的运动员编号\n");
scanf("%d",&c);
if(c-c/100*100>u2[c/100]||c-c/100*100==0)
{
printf("输入错误\n");
goto l4;
}
school[c/100].sn[i][2]=c-c/100*100;
school[c/100].score[i][2]+=2;
t2[c/100][i][2]=2;
continue;
}
else
{
printf("请输入No.1的运动员编号\n");
scanf("%d",&a);
if(a-a/100*100>u2[a/100]||a-a/100*100==0)
{
printf("输入错误\n");
goto l4;
}
school[a/100].sn[i][0]=a-a/100*100;
school[a/100].score[i][0]+=7;
t2[a/100][i][0]=7;
printf("请输入No.2的运动员编号\n");
scanf("%d",&b);
if(b-b/100*100>u2[b/100]||b-b/100*100==0)
{
printf("输入错误\n");
goto l4;
}
school[b/100].sn[i][1]=b-b/100*100;
school[b/100].score[i][1]+=5;
t2[b/100][i][1]=5;
printf("请输入No.3的运动员编号\n");
scanf("%d",&c);
if(c-c/100*100>u2[c/100]||c-c/100*100==0)
{
printf("输入错误\n");
goto l4;
}
school[c/100].sn[i][2]=c-c/100*100;
school[c/100].score[i][2]+=3;
t2[c/100][i][2]=3;
printf("请输入No.4的运动员编号\n");
scanf("%d",&d);
if(d-d/100*100>u2[d/100]||d-d/100*100==0)
{
printf("输入错误\n");
goto l4;
}
school[d/100].sn[i][3]=d-d/100*100;
school[d/100].score[i][3]+=2;
t2[d/100][i][3]=2;
printf("请输入No.5的运动员编号\n");
scanf("%d",&e);
if(e-e/100*100>u2[e/100]||e-e/100*100==0)
{
printf("输入错误\n");
goto l4;
}
school[e/100].sn[i][4]=e-e/100*100;
school[e/100].score[i][4]+=1;
t2[e/100][i][4]=1;
}
}
}
printf("请进行最后一次核对,修改请按 1\n进入主菜单请按其它\n");
if(getch()=='1')
while(f<2)
{
printf("输入要修改的项目号,名次,错误的选手编号,正确的选手编号。\n");
printf("如:要将第4号项目的no.3处的运动员编号503改为201,就只要输入:\n");
printf("4,3,503,201回车即可。\n");
printf("开始输入:\n");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
school[c/100].sn[a-1][b-1]=0;
school[d/100].sn[a-1][b-1]=d-d/100*100;
school[c/100].score[a-1][b-1]-=t2[c/100][a-1][b-1];
school[d/100].score[a-1][b-1]+=t2[c/100][a-1][b-1];
printf("修改成功。\n继续修改请按 1回车\n退出请按 2回车\n");
scanf("%d",&f);
}
system("cls");
/*算每项总分*/
for(q1=0;q1<n;q1++)
{
for(q2=0;q2<m+w;q2++)
{
for(q3=0;q3<5;q3++)
school[q1].zsore[q2]+=school[q1].score[q2][q3];
}
}
//主菜单
l0:{ //l0所在处
printf("\t\t查看比赛结果请按 1\n\t\t退出请按其他\n");
switch(getch())
{
case '1':break;
default:goto l8;
}
}
/*产生团体总分报表,内容包括校号、男子团体总分scm、女子团体总分scw和团体总分sc*/
int scm[20],scw[20],sc[20];
for(i=0;i<20;i++)
scm[i]=scw[i]=sc[i]=0;
for(q1=0;q1<n;q1++)
{
for(q2=0;q2<m;q2++)
scm[q1]+=school[q1].zsore[q2];
}
for(q1=0;q1<n;q1++)
{
for(q2=m;q2<m+w;q2++)
scw[q1]+=school[q1].zsore[q2];
}
for(i=0;i<n;i++)
sc[i]=scm[i]+scw[i];
//排序
int ms[20];//男子排名分
int ws[20];//女子排名分
int zs[20];//总排名分
int max;
for(i=0;i<n;i++)
{
ms[i]=scm[i];ws[i]=scw[i];zs[i]=sc[i];
}
for(q1=0;q1<n-1;q1++)
for(q2=q1+1;q2<n;q2++)
if(ms[q1]<ms[q2])swap(ms[q1],ms[q2]);
for(q1=0;q1<n-1;q1++)
for(q2=q1+1;q2<n;q2++)
if(ws[q1]<ws[q2])swap(ws[q1],ws[q2]);
for(q1=0;q1<n-1;q1++)
for(q2=q1+1;q2<n;q2++)
if(zs[q1]<zs[q2])swap(zs[q1],zs[q2]);
/*输出 每项成绩的项目号、名次、成绩、姓名和得分 项目编号从0到w+m*/
for(q1=0;q1<n;q1++)
{
printf("%d号学校--%s成绩\n",q1,shn[q1]);
printf("得分项目编号\t名次\t成绩\t运动员姓名\n");
for(q2=0;q2<m+w;q2++)
{
for(q3=0;q3<5;q3++)
{
if(school[q1].sn[q2][q3]!=0)
{
t=school[q1].sn[q2][q3];
printf(fps,q2+1,q3+1,school[q1].score[q2][q3],dn[q1][t]);
}
}
}
}
//输出团体总分报表
//输出男子团体排名
printf("\n\n\n男子比赛排名\n\n\n\n");
printf("名次 \t成绩\t学校号\t校名\n");
print(n,ms,scm,k,shn);
//输出女子团体排名
printf("\n\n\n女子比赛排名\n\n\n\n");
printf("名次 \t成绩\t学校号\t校名\n");
print(n,ws,scw,k,shn);
//输出总分排名
printf("\n\n\n总分排名\n\n\n\n");
printf("名次 \t成绩\t学校号\t校名\n");
print(n,zs,sc,k,shn);
goto l0;
//保存各校成绩
l8:{ printf("保存记录请按 1 键\n按其它键退出系统\n");
if(getch()=='1')
{fp=fopen("比赛记录.txt","a+");
fprintf(fp,"\n\n\n%s\n",ydh);
for(q1=0;q1<n;q1++)
{
fprintf(fp,"\n\n%d号学校--%s成绩\n\n\n",q1,shn[q1]);
fprintf(fp,"得分项目编号\t名次\t成绩\t运动员姓名\n");
for(q2=0;q2<m+w;q2++)
for(q3=0;q3<5;q3++)
if(school[q1].sn[q2][q3]!=0)
{
t=school[q1].sn[q2][q3];
fprintf(fp,fps,q2+1,q3+1,school[q1].score[q2][q3],dn[q1][t]);
}
}
fprintf(fp,"\n\n\n男子比赛排名\n\n\n\n");
save(n,ms,scm,k,shn);
fprintf(fp,"\n\n\n女子比赛排名\n\n\n\n");
save(n,ws,scw,k,shn);
fprintf(fp,"\n\n\n总分排名\n\n\n\n");
save(n,zs,sc,k,shn);
printf("保存完毕!");
getch();
fclose(fp);
}
exit(0);
}
}
void swap(int x,int y)
{
int temp;
temp= x;
x= y;
y=temp;
}
void save(int g,int b[],int c[],int d[],char e[20][20])
{
fprintf(fp,"名次 \t成绩\t学校号\t校名\n");
int n1,n2,n3,a=1;
for(n3=0;n3<g;)
{
n2=0;
for(n1=0;n1<g;n1++)
if(b[n3]==c[n1])
{
++n2;d[n3]=n1;
fprintf(fp,fps,a,b[n3],d[n3],e[d[n3]]);
}
n3+=n2;a++;
}
}
void print(int g,int b[],int c[],int d[],char e[20][20])
{
int n1,n2,n3,a=1;
for(n3=0;n3<g;)
{
n2=0;
for(n1=0;n1<g;n1++)
if(b[n3]==c[n1])
{
++n2;d[n3]=n1;
printf(fps,a,b[n3],d[n3],e[d[n3]]);
}
n3+=n2;a++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -