#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define n 2
#define m 1
#define w 1
typedef struct
{
int top;
int range[5];
int mark[5];
int itemnum;}
itemnode;
typedef struct
{
int schoolnum;
int score;
int mscore;
int wscore;
itemnode c[m+w];
}
headnode;
headnode h[n];
void input()
{
int i,j,k,s;
for(i=0;i<n;i++)
{
h[i].schoolnum=0;
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0;
}
for(i=0;i<n;i++)
{
printf("\n运动队编号:");
scanf("%d",&h[i].schoolnum);
for(j=0;j<m+w;j++)
{
printf("\n项 目 编 号:");
scanf("%d",&h[i].c[j].itemnum);
printf("\n取前3或前5名:");
scanf("%d",&h[i].c[j].top);
while(h[i].c[j].top!=3&&h[i].c[j].top!=5)
{printf("\n输入错误, 请重新输入!:");
scanf("%d",&h[i].c[j].top);break;}
printf("\n获得几个名次:");
scanf("%d",&k);
for(s=0;s<5;s++)
h[i].c[j].range[s]=0;
for(s=0;s<k;s++)
{
l:printf("\n名 次:");
scanf("%d",&h[i].c[j].range[s]);
if(h[i].c[j].top==3)
switch(h[i].c[j].range[s])
{
case 0:h[i].c[j].mark[s]=0;
break;
case 1:h[i].c[j].mark[s]=5;
break;
case 2:h[i].c[j].mark[s]=3;
break;
case 3:h[i].c[j].mark[s]=2;
break;
default:{puts(" 输入错误!请重新输入!");
goto l;}
}
else
switch(h[i].c[j].range[s])
{
case 0:h[i].c[j].mark[s]=0;
break;
case 1:h[i].c[j].mark[s]=7;
break;
case 2:h[i].c[j].mark[s]=5;
break;
case 3:h[i].c[j].mark[s]=3;
break;
case 4:h[i].c[j].mark[s]=2;
break;
case 5:h[i].c[j].mark[s]=1;
break;
default:{puts("输入错误!请重新输入!");
goto l;}
}
h[i].score=h[i].score+h[i].c[j].mark[s];
if(j<=m-1)
h[i].mscore=h[i].mscore+h[i].c[j].mark[s];
else
h[i].wscore=h[i].wscore+h[i].c[j].mark[s];
}
printf("\n");
}
}
}
void output()
{
int choice,i,j,t;
int a[n];
int sign;
do
{printf("\n********1.按运动队编号输出*****\n");
printf("**********2.按运动队总分输出********\n");
printf("**********3.按男团总分輸出**********\n");
printf("**********4.按女团总分输出**********\n");
printf("*******请根据提示迸行操作!:");
scanf("%d",&choice);
printf("\n");
switch(choice)
{
case 1:for(i=0;i<n;i++)
{
printf("\n运动队编号:%d\n",h[i].schoolnum);
printf("运动队总分:%d\n",h[i].score);
printf("男团总分:%d\n",h[i].mscore);
printf("女团总分:%d\n",h[i].wscore);
printf("\n");
}
break;
case 2:for(i=0;i<n;i++)
a[i]=i;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(h[a[i]].score<h[j].score)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<n;i++)
{
printf("\n运动队编号:%d\n",h[a[i]].schoolnum);
printf("\n运动队总分:%d\n",h[a[i]].score);
printf("\n男团总分:%d\n",h[a[i]].mscore);
printf("\n女团总分:%d\n",h[a[i]].wscore);
printf("\n");
}
break;
case 3:for(i=0;i<n;i++)
a[i]=i;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(h[a[i]].mscore<h[j].mscore)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<n;i++)
{
printf("\n运动队编号:%d\n",h[a[i]].schoolnum);
printf("\n运动队总分:%d\n",h[a[i]].score);
printf("\n男团总分:%d\n",h[a[i]].mscore);
printf("\n女团总分:%d\n",h[a[i]].wscore);
printf("\n");
}
break;
case 4:for(i=0;i<n;i++)
a[i]=i;
for(i=0;i<0;i++)
{
for(j=i+1;i<n;i++)
if(h[i].wscore<h[j].wscore)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<n;i++)
{
printf("\n运动队编号:%d\n",h[a[i]].schoolnum);
printf("\n运动队总分:%d\n",h[a[i]].score);
printf("\n 男团总分:%d\n",h[a[i]].mscore);
printf("\n女团总分:%d\n",h[a[i]].wscore);
printf("\n");
}
break;
}
printf("是否继续操作(1/0) ?:");
scanf("%d",&sign);
printf("\n");
}
while(sign==1);
}
void chaxun()
{
int choice;
int i,j,k,s;
printf("\n*****1.按运动队编号查询\n");
printf("\n*****2.按项目编号查询\n");
printf("\n*****选择查询方式:");
scanf("%d",&choice);
switch(choice)
{
case 1:
do
{
printf("要查询的运动队编号:");
scanf("%d",&i);
if((i>n)||(i<=0))
printf("错误:这个运动队没有参加此次运动会!\n");
else
{
printf("*********要查询的项目编号:");
scanf("%d",&j);
if(j>m+w||j==0)
printf(" ******此次运动会没有这个项目*******\n");
else
{
printf("这个项目取前%d名,该运动队的成绩如下:\n", h[0].c[j-1].top);
for(k=0;k<5;k++)
if(h[i-1].c[j-1].range[k]!=0)
printf("名次:%\n",h[i-1].c[j-1].range[k]);
}
}
printf("是否继续操作(1/0) ?:");
scanf("%d",&s);
printf("\n");
}while(s==1);
break;
case 2:
do
{
printf("要查询的项目编号:");
scanf("%d",&s);
if(s>m+w||s==0)
printf("此次运动会不包括这个项目\n");
else
{
printf("该项目取前%d名,取得名次的运动队\n" ,h[0].c[s-1].top);
for(i=0;i<n;i++)
for(j=0;j<5;j++)
if(h[i].c[s-1].range[j]!=0)
printf("运动队编号:%d,名次:%d\n",h[i].schoolnum,h[i].c[s-1].range[j]);
}
printf("是否继续操作(1/0) ?:");
scanf("%d",&i);
printf("\n");
}while(i==1);
break;
}
}
void write()
{
int i,j,s;
FILE *fp;
if((fp=fopen("sportsdata结果.txt","a+" ))==NULL)
{
printf("不能打开文件\n");
exit(1);
}
fputs("运动队编号 运动队总分 男子总分 女子总分",fp);
fputs("\n",fp);
for(i=0;i<n;i++)
{
fprintf(fp,"%2d\t\t",h[i].schoolnum);
fprintf(fp,"%2d\t\t",h[i].score);
fprintf(fp,"%2d\t\t" ,h[i].mscore);
fprintf(fp,"%2d",h[i].wscore);
fputs("\n",fp);
}
fclose(fp);
}
void read()
{
FILE *fp;
int i,j,s;
if((fp=fopen("sportsdata.txt","r"))==NULL)
{
printf("文件不存在,不能打开文件!\n");
exit(1);
}
for(i=0;i<n;i++)
{
fscanf(fp,"%d",&h[i].schoolnum);
//for(j=0;j<m+w;j++)
//{
fscanf(fp,"%d",&h[i].c[j].itemnum);
fscanf(fp,"%d",&h[i].c[j].top);
// for(s=0;s<5;s++)
//{
fscanf(fp,"%d",&h[i].c[j].range[s]);
// }
//}
}
fclose(fp);
}
int main()
{ FILE *fp;
int choice;
int flag1=1,flag2=1;
system("cls");
do
{
printf("\n####*************欢迎使用程序**************####\n" );
printf("\n####*********校级运动会分数统计系统********####\n" );
printf("\n\n ####^^^^^^^^^^1.录入信息^^^^^^^^^^^^^^^####\n");
printf("\n\n ####^^^^^^^^^^2.读取信息^^^^^^^^^^^^^^^####\n" );
printf("\n\n ####^^^^^^^^^^3.显示信息^^^^^^^^^^^^^^^####\n");
printf("\n\n ####^^^^^^^^^^4.查询信息^^^^^^^^^^^^^^^####\n");
printf("\n\n ####^^^^^^^^^^5.退出程序^^^^^^^^^^^^^^^####\n");
printf("\n####*****************************************####\n");
printf("\n\n请根据提示选择操作!:");
scanf("%d",&choice);
if(choice==1)
flag1=0;
else
if((fp=fopen("sportsdata.txt","r"))!=NULL)
flag2=0;
else
{
system("cls");
printf("没有信息,请你录入信息!\n");
}
}while(flag1&&flag2);
switch(choice)
{
case 1:
printf("\n==========请输入信息========\n");
input();
write();
printf("==========信息已存入档=========\n");
main();
case 2:
read();
write;
break;
case 3:
printf("==========输出信息===========\n");
if(flag1)
read();
output();
main();
case 4:
printf("===========查询信息==========\n");
if(flag1)
read();
chaxun();
main();
case 5:
printf("\n退出系统!谢谢使用!\n\n" ); exit(0);
default:
printf("输入错误!\n");
exit(0);
}}