运动会分数统计
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Score{
char AthleteName [20];
char SchoolName [20];
int SchoolCode;
int Rank;
char Achievement [10];
}Score;
typedef struct Match{
int MatchCode;
char MatchName[10];
int Top;
Score *RankList;
}Match,*Event;
typedef struct Record{
int MatchCode;
char MatchName[10];
int Rank;
char Achievement [10];
char AthleteName [20];
int GetScore;
}Record;
typedef struct School{
char SchoolName [20];
int num;
int ptr;
Record *RecordList;
}School,*SchoolSheet;
typedef struct Team{
int SchoolCode;
char SchoolName [20];
int ManTotal;
int WomanTotal;
int TeamTotal;
}Team,*All;
int n,m,w,t;
Event A;
SchoolSheet B;
All C;
int ScoreList [8]={5,3,2,7,5,3,2,1};
void Start()
{
printf("<<<<<<<<---------------------------------------------------->>>>>>>>>>
");
printf(" 欢迎使用运动会分数统计系统
");
printf("<<<<<<<<---------------------------------------------------->>>>>>>>>>
");
return;
}
void Function()
{
printf("
<<<<<<<<<<<<----功能选择---->>>>>>>>>>>>>>>
");
printf("-------------1.登录初始化
");
printf("-------------2.清零
");
printf("-------------3.录入各项比赛成绩
");
printf("-------------4.产生学校成绩单
");
printf("-------------5.产生团体总分报表
");
printf("-------------6.结果显示
");
printf("-------------7.返回主界面
");
printf("-------------0.退出系统
");
return;
}
void login()
{
char Passpord [12]="yzc5201314";
printf("请输入密码:
");
char Key[12];
scanf("%s",Key);
while(1){
if(strcmp(Passpord,Key)==0)
break;
else
{
printf("请再次输入密码:
");
scanf("%s",Key);
}
}
printf("参加运动会的学校个数: ");
scanf("%d",&n);
printf("运动会的男子项目个数: ");
scanf("%d",&m);
printf("运动会的女子项目个数: ");
scanf("%d",&w);
A=(Event)malloc((w+m)*sizeof(Match));
B=(SchoolSheet)malloc(n*sizeof(School));
C=(All)malloc(n*sizeof(Team));
if(!A)
exit(1);
if(!B)
exit(1);
if(!C)
exit(1);
return;
}
void Clear()
{
for(int i=0;i<n;i++){
(B+i)->num=0;
(B+i)->ptr=0;
(B+i)->RecordList=NULL;
(C+i)->SchoolCode=0;
(C+i)->ManTotal=0;
(C+i)->WomanTotal=0;
(C+i)->TeamTotal=0;
}
for(int j=0;j<(m+w);j++){
(A+j)->Top=0;
(A+j)->MatchCode=0;
(A+j)->RankList=NULL;
}
return;
}
void Input(){
int num=0;
for(int i=0;i<(m+w);i++)
{
(A+i)->MatchCode=i+1;
scanf("%d%s",&(A+i)->Top,(A+i)->MatchName);
num=(A+i)->Top;
(A+i)->RankList=(Score*)malloc(num*sizeof(Score));
Score *R=(A+i)->RankList;
for(int j=0;j<num;j++)
{
(R+j)->Rank=j+1;
scanf("%s", (R+j)->AthleteName);
scanf("%s", (R+j)->SchoolName);
scanf("%d",&(R+j)->SchoolCode);
(B+(R+j)->SchoolCode-1)->num++;
scanf("%s", (R+j)->Achievement);
}
}
return;
}
void SchoolScoreSheet()
{
for(int j=0;j<n;j++)
{
int c=(B+j)->num;
(B+j)->RecordList=(Record *)malloc( c*sizeof(Record));
}
int num=0;
for(int i=0;i<(m+w);i++)
{
Score *R=(A+i)->RankList;
num=(A+i)->Top;
for(int j=0;j<num;j++)
{
int k=0, h=0;
k=(R+j)->SchoolCode-1;
strcpy( (B+k)->SchoolName,(R+j)->SchoolName);
h=(B+k)->ptr;
Record *L=(B+k)->RecordList;
(L+h)->MatchCode=i+1;
(L+h)->Rank=(R+j)->Rank;
strcpy( (L+h)->MatchName,(A+i)->MatchName);
strcpy( (L+h)->AthleteName,(R+j)->AthleteName);
strcpy( (L+h)->Achievement,(R+j)->Achievement);
if((A+i)->Top!=3)
(L+h)->GetScore=ScoreList[(R+j)->Rank+2];
else
(L+h)->GetScore=ScoreList[(R+j)->Rank-1];
(B+k)->ptr++;
}
}
return;
}
void TeamScoreSheet()
{
for(int i=0;i<n;i++)
{
(C+i)->SchoolCode=i+1;
strcpy( (C+i)->SchoolName,(B+i)->SchoolName);
Record * L=(B+i)->RecordList;
for(int j=0;j<(B+i)->num;j++)
{
if((L+j)->MatchCode<=m)
(C+i)->ManTotal=(C+i)->ManTotal+(L+j)->GetScore;
else
(C+i)->WomanTotal= (C+i)->WomanTotal+(L+j)->GetScore;
}
(C+i)->TeamTotal=(C+i)->ManTotal+(C+i)->WomanTotal;
}
return;
}
void Show(){
for(int i=0;i<n;i++)
{
printf("
%s的成绩单:
",(B+i)->SchoolName);
printf("
项目号 项目名 姓名 名次 成绩 得分
");
int k=(B+i)->num;
Record *L=(B+i)->RecordList;
for(int j=0;j<k;j++)
{
printf(" %d %s %s %d %s %d
",(L+j)->MatchCode,(L+j)->MatchName,(L+j)->AthleteName,(L+j)->Rank,(L+j)->Achievement, (L+j)->GetScore);
}
}
printf("
团体总分报表:
");
printf("
校号 学校名称 男子团体总分 女子团体总分 团体总分
");
for(int i=0;i<n;i++)
{
printf(" %d %-20s%d %d %d
",(C+i)->SchoolCode,(C+i)->SchoolName,(C+i)->ManTotal, (C+i)->WomanTotal, (C+i)->TeamTotal);
}
return;
}
void logoff() //退出系统
{
printf("
>>>>>>>>Welcome back!!<<<<<<<<<
");
exit(0);
}
void Home()
{
Function();
while(1){
printf("请输入选择的功能:");
scanf("%d",&t);
while(t!=0&&t!=1&&t!=2&&t!=3&&t!=4&&t!=5&&t!=6&&t!=7)
{
printf("输入有误,请重新选择:");
scanf("%d",&t);
}
switch(t)
{
case 1: login();break;
case 2: Clear();break;
case 3: Input();break;
case 4: SchoolScoreSheet();break;
case 5: TeamScoreSheet();break;
case 6: Show();break;
case 7: Home();break;
case 0: logoff();break;
}
}
return;
}
int main()
{
system("Color 1e");
Start();
Home();
return 0;
}