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.
267 lines
6.9 KiB
267 lines
6.9 KiB
#include<stdio.h>
|
|
#include<math.h>
|
|
#include <conio.h>
|
|
#include <process.h>
|
|
#include <iostream>
|
|
#define n 2
|
|
#define m 1
|
|
#define w 1
|
|
#define null 0
|
|
struct itemnode{
|
|
int itemnum;
|
|
int top;
|
|
int range[5];
|
|
int mark[5];
|
|
char name[8];
|
|
};
|
|
struct headnode{
|
|
int schoolnum;
|
|
int score;
|
|
int mscore;
|
|
int wscore;
|
|
itemnode c[m+w];
|
|
};
|
|
headnode h[n];
|
|
void inputinformation()
|
|
{
|
|
int i,j,k,s;
|
|
char ch;
|
|
for(i=0;i<n;i++)
|
|
{
|
|
h[i].score=0;
|
|
h[i].mscore=0;
|
|
h[i].wscore=0;
|
|
printf("====参赛学校编号:");
|
|
scanf("%d",&h[i].schoolnum);
|
|
for(j=0;j<m+w;j++)
|
|
{
|
|
printf(" 参赛项目编号:");
|
|
scanf("%d",&h[i].c[j].itemnum);
|
|
printf(" 取前3名or前5名:");
|
|
scanf("%d",&h[i].c[j].top);
|
|
printf(" 所取名次数量:");
|
|
scanf("%d",&k);
|
|
for(s=0;s<k;s++)
|
|
{
|
|
h[i].c[j].range[s]=0;
|
|
h[i].c[j].mark[s]=0;
|
|
printf(" 所获得的名次:");
|
|
scanf("%d",&h[i].c[j].range[s]);
|
|
printf(" 该运动员姓名:");
|
|
ch=getchar();
|
|
gets(h[i].c[j].name);
|
|
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;
|
|
}
|
|
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;
|
|
}
|
|
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");
|
|
}
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
void output()
|
|
{
|
|
int choice,i,j,k;
|
|
int remember[n];
|
|
int sign;
|
|
do
|
|
{
|
|
printf("*******************1.按参赛学校编号输出.*******************\n");
|
|
printf("*******************2.按参赛学校总分输出.*******************\n");
|
|
printf("\n*********************** 请选择编号*************************\n:");
|
|
scanf("%d",&choice);
|
|
switch(choice)
|
|
{
|
|
case 1:
|
|
for(i=0;i<n;i++)
|
|
{
|
|
printf("\n\n*****学校编号:%d",h[i].schoolnum);
|
|
printf("*****学校总分:%d" ,h[i].score);
|
|
printf("*****男团总分:%d",h[i].mscore);
|
|
printf("*****女团总分:%d ",h[i].wscore);
|
|
}
|
|
break;
|
|
case 2:
|
|
for(i=0;i<n;i++)
|
|
remember[i]=i;
|
|
for(i=0;i<n;i++)
|
|
{
|
|
for(j=i+1;j<n;j++)
|
|
if(h[remember[i]].score<h[j].score)
|
|
{
|
|
k=remember[i];
|
|
remember[i]=remember[j];
|
|
remember[j]=k;
|
|
}
|
|
}
|
|
for(i=0;i<n;i++)
|
|
{
|
|
printf("\n\n*****学校总分:%d",h[remember[i]].score);
|
|
printf("*****学校编号:%d" ,h[remember[i]].schoolnum);
|
|
printf("*****男团总分:%d",h[remember[i]].mscore);
|
|
printf("*****女团总分:%d ",h[remember[i]].wscore);
|
|
|
|
}
|
|
break;
|
|
}
|
|
printf("\n");
|
|
printf("请选择 2 继续,0 跳出\n");
|
|
scanf("%d",&sign);
|
|
}while(sign==2);
|
|
printf("\n\n\n");
|
|
}
|
|
|
|
void inquiry()
|
|
{
|
|
int choice;
|
|
int i,j,k,s;
|
|
printf("\n*****按学校编号查询*****\n");
|
|
do{
|
|
printf("要查询的参赛学校编号:");
|
|
scanf("%d",&i);
|
|
if(i>n)
|
|
printf("错误:这个学校没有参加此次运动会!");
|
|
else
|
|
{
|
|
printf("所要查询的参赛项目编号:");
|
|
scanf("%d",&j);
|
|
if(j>m+w||j==0)
|
|
printf("此次运动会没有这个项目\n\n");
|
|
else
|
|
{
|
|
printf("\n这个项目取前%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("\n");
|
|
printf("请选择 2 继续 , 0 跳出\n");
|
|
scanf("%d",&s);
|
|
printf("\n\n");
|
|
}while(s==2);
|
|
}
|
|
|
|
void writedata()
|
|
{
|
|
FILE *report;
|
|
int i;
|
|
if((report=fopen("sportsdata.txt","w"))==null)
|
|
{
|
|
printf("不能打开文件\n");
|
|
exit(1);
|
|
}
|
|
for(i=0;i<n;i++)
|
|
fwrite(&h[i],sizeof(headnode),1,report);
|
|
fclose(report);
|
|
}
|
|
|
|
void readdata()
|
|
{
|
|
FILE *report;
|
|
int i,j,k,s;
|
|
if((report=fopen("sportsdata.txt","r"))==null)
|
|
{
|
|
printf("file can not be opened\n");
|
|
exit(1);
|
|
}
|
|
for(i=0;i<n;i++)
|
|
{
|
|
printf("学校编号:");
|
|
fread(&k,sizeof(int),1,report);
|
|
printf("%d\n",k);
|
|
printf("学校总分:");
|
|
fread(&k,sizeof(int),1,report);
|
|
printf("%d\n",k);
|
|
printf("男团总分:");
|
|
fread(&k,sizeof(int),1,report);
|
|
printf("%d\n",k);
|
|
printf("女团总分:");
|
|
fread(&k,sizeof(int),1,report);
|
|
printf("%d\n",k);
|
|
printf("\n\n\n");
|
|
getch();
|
|
|
|
for(j=0;j<m+w;j++)
|
|
{
|
|
printf("项目编号:");
|
|
fread(&k,sizeof(int),1,report);
|
|
printf("%d\n",k);
|
|
printf("所取得的名次数量:");
|
|
fread(&k,sizeof(int),1,report);
|
|
printf("%d\n",k);
|
|
for(s=0;s<5;s++)
|
|
{
|
|
fread(&k,sizeof(int),1,report);
|
|
if(k!=0)
|
|
printf("名次:");
|
|
printf("%d\n",k);
|
|
}
|
|
for(s=0;s<5;s++)
|
|
{
|
|
fread(&k,sizeof(int),1,report);
|
|
if(k!=0)
|
|
printf("分数:");
|
|
printf("%d\n",k);
|
|
}
|
|
}
|
|
printf("\n\n\n");
|
|
getch();
|
|
}
|
|
fclose(report);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int choice;
|
|
printf("\n ╔===================★ welcome ★======================╗\n");
|
|
printf("\n ******************运动会比赛计分系统*******************\n");
|
|
printf("\n\n ********************1.输入比赛信息*********************\n");
|
|
printf(" ********************2.输出比赛信息*********************\n");
|
|
printf(" ********************3.查询比赛信息*********************\n");
|
|
printf(" ********************4. 退出系统 *********************\n\n");
|
|
printf(" ╚======================================================╝\n\n\n");
|
|
printf("请选择要实现步骤的编号:\n\n");
|
|
scanf("%d",&choice);
|
|
switch(choice)
|
|
{
|
|
case 1:
|
|
inputinformation();
|
|
writedata();
|
|
main();
|
|
case 2:
|
|
output();
|
|
main();
|
|
case 3:
|
|
inquiry();
|
|
main();
|
|
case 4:
|
|
exit(0);
|
|
default:
|
|
exit(0);
|
|
}
|
|
}
|