You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

365 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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(" 学校总分:%d \n",h[a[i]].score);
printf(" 男团总分:%d \n",h[a[i]].mscore);
printf(" 女团总分:%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(" 学校编号:%d \n",h[a[i]].schoolnum);
printf(" 学校总分:%d \n",h[a[i]].score);
printf(" 男团总分:%d \n",h[a[i]].mscore);
printf(" 女团总分:%d \n",h[a[i]].wscore);
printf("\n");
}
break;
case 4:for(i=0;i<n;i++)
a[i]=i;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
if(h[i].wscore<h[j].wscore)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<n;i++)
{
printf(" 学校编号:%d \n",h[a[i]].schoolnum);
printf(" 学校总分:%d \n",h[a[i]].score);
printf(" 男团总分:%d \n",h[a[i]].mscore);
printf(" 女团总分:%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("名次:%d\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(0);
}
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);
}
if(fclose(fp))
{
printf("不能关闭文件\n");
exit(0);
}
}
void read()
{
FILE *fp;
int i,j,s;
if((fp=fopen("sportsdata.txt","r"))==NULL)
{
printf("文件不存在,不能打开文件!\n");
exit(0);
}
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]);
}
}
}
if(fclose(fp))
{
printf("不能关闭文件\n");
exit(0);
}
}
int main()
{ FILE *fp;
system("color CF");
int choice;
int flag1=1,flag2=1;
system("cls");
do
{
printf("\n*************************************************************\n");
printf("\n** 运动会计分系统 **\n");
printf("\n** 1.录入信息 **\n");
printf("\n** 2.显示信息 **\n");
printf("\n** 3.查询信息 **\n");
printf("\n** 4.退出程序 **\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("==========信息已存入档=========");
main();
case 2:
printf("===========输出信息==========\n");
if(flag1)
read();
output();
main();
case 3:
printf("===========查询信息==========\n");
if(flag1)
read();
chaxun();
main();
case 4:
printf("\n谢谢您的使用"); exit(0);
default:
printf("请根据提示输入选择操作\n"); exit(0);
}}