#include<iostream>
#include<cstring>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#define LEN sizeof(struct School)
using namespace std;
struct xm_item{
int item; //项目编号
char name[20]; //项目名称
int count; //该项目得分人的数量
}Xm_item[10];
struct Student{
char name[20]; //姓名
int score; //得分成绩
int range; //得分名次
char item[20]; //得分项目
int sex; //性别 “0”代表男性 “1”代表女性
};
struct School
{
int count; //计算实际运动员个数
int serial; //学校编号
char name[20]; //学校名称
int menscore; //男子团体总分
int womenscore; //女子团体总分
int jifeng; //学校积分
struct Student student[20]; //参赛运动员
struct School *next; //下一个参赛学校
};
int main()
{
int CreatXm_item();//比赛项目信息初始化
struct School *CreatSchool(int n);//比赛信息统计
void LookInformation(struct School * A);//比赛信息查询
void CorrectInformation(struct School *B);//修改比赛信息
void SortSchool(struct School * C);//学校排名查询
void SortStudent(struct School *D);//学生排名查询
struct School *head;
printf("请输入项目初始化信息:\n\n");
int m;
m=CreatXm_item();
printf("比赛信息统计\n");
head=CreatSchool(m);
printf("请输入你要进行的操作:\n");
printf("------------------------------操作菜单------------------------------\n");
printf(" 信息查询 请按“1” \n");
printf(" 修改信息 请按“2” \n");
printf(" 学校排名 请按“3” \n");
printf(" 学生排名 请按“4” \n");
printf(" 结束操作 请按“5” \n");
printf("--------------------------------------------------------------------\n");
int ch;
while(cin>>ch)
{
switch(ch)
{
case 1:LookInformation(head);break;
case 2:CorrectInformation(head);break;
case 3:SortSchool(head);break;
case 4:SortStudent(head);break;
case 5:printf("程序已经自动关闭,欢迎您下次继续使用\n");break;
default:printf("输入错误,请重新输入\n");break;
}
printf("请输入你要进行的操作:\n");
printf("------------------------------操作菜单------------------------------\n");
printf(" 信息查询 请按“1” \n");
printf(" 修改信息 请按“2” \n");
printf(" 学校排名 请按“3” \n");
printf(" 学生排名 请按“4” \n");
printf(" 结束操作 请按“5” \n");
printf("--------------------------------------------------------------------\n");
}
return 0;
}
int CreatXm_item()//比赛项目信息初始化
{
int n,i;
printf("请输入此次运动会的项目个数:\n");
cin>>n;
printf("请输入项目信息:\n");
printf("----------------------------项目信息--------------------------\n");
for(i=0;i<n;i++)
{
printf("项目编号 项目名称 项目得分人数量\n");
scanf("%d%s%d",&Xm_item[i].item,&Xm_item[i].name,&Xm_item[i].count);
}
printf("--------------------------------------------------------------\n");
return n;
}
struct School * CreatSchool(int n)//比赛信息统计
{
int i,num,j=0;
struct School *p,*q;
q=p=(struct School *)malloc(LEN);
printf("请输入学校的个数:\n");
cin>>num;
for(i=1;i<num;i++)
{
p->next=(struct School *)malloc(LEN);
p=p->next;
}
p->next=NULL;
p=q;
for(i=0;i<num;i++)
{
printf("参赛运动员个数 学校编号 学校名称\n");
scanf("%d%d%s",&p->count,&p->serial,&p->name);
p=p->next;
}
p=q;
while(n--)
{
printf("项目%s信息情况如下:\n",Xm_item[j].name);
printf("项目编号 项目名称 项目得分人数量\n");
printf("%-15d%-15s%-15d\n",Xm_item[j].item,Xm_item[j].name,Xm_item[j].count);
p=q;
while(num--)
{
p->jifeng=0;
p->menscore=0;
p->womenscore=0;
for(i=(p->count)*j;i<(p->count)*(j+1);i++)
{
printf("学生姓名 得分名次 得分成绩 得分项目 性别\n");
scanf("%s%d%d%s%d",&p->student[i].name,&p->student[i].range,&p->student[i].score,&p->student[i].item,&p->student[i].sex);
if(p->student[i].sex==0)
p->menscore=p->menscore+p->student[i].score;
else
p->womenscore=p->womenscore+p->student[i].score;
}
p->jifeng=p->menscore+p->womenscore;
printf("%d\n%d\n%d\n",p->menscore,p->womenscore,p->jifeng);
p=p->next;
}
j++;
}
return q;
}
void LookInformation(struct School *A)//比赛信息查询
{
int xmitem,num,i;
char name1[20];
struct School *p;
p=A;
printf("请输入你要查询的学生的学校编号:\n");
cin>>num;
printf("请输入你要查询的学生的项目编号:\n");
cin>>xmitem;
printf("请输入你要查询的学生的姓名:\n");
cin>>name1;
while(p->serial!=num)
{
if(p==NULL)
{
printf("输入错误,请重新输入\n");
break;
}
p=p->next;
}
for(i=(p->count)*(xmitem-1);i<(p->count)*xmitem;i++)
{
if(strcmp(p->student[i].name,name1)==0)
{
printf("您要查询的学生的信息情况如下:\n");
printf("学生姓名 得分成绩 得分名次 得分项目 性别\n");
printf("%s %d %d %s %d\n",p->student[i].name,p->student[i].score,p->student[i].range,p->student[i].item,p->student[i].sex);
break;
}
}
}
void CorrectInformation(struct School * B)//修改比赛信息
{
int xmitem,num,i;
char name1[20];
struct School *p;
p=B;
printf("请输入你要修改的学生的学校编号:\n");
cin>>num;
printf("请输入你要修改的学生的项目编号:\n");
cin>>xmitem;
printf("请输入你要修改的学生的姓名:\n");
cin>>name1;
while(p->serial!=num)
{
if(p==NULL)
{
printf("输入错误,请重新输入\n");
break;
}
p=p->next;
}
for(i=(p->count)*(xmitem-1);i<(p->count)*xmitem;i++)
{
if(strcmp(p->student[i].name,name1)==0)
{
printf("您要修改的学生的信息情况如下:\n");
printf("学生姓名 得分名次 得分成绩 得分项目 性别\n");
scanf("%s%d%d%s%d",&p->student[i].name,&p->student[i].range,&p->student[i].score,&p->student[i].item,&p->student[i].sex);
break;
}
}
}
void SortSchool(struct School *C)//学校排名查询
{
int number[100],i,n,j;
struct School *p,*q;
printf("各学校的排名情况如下:\n");
printf("--------------------------------------------------------------\n");
p=C;
q=C;
i=0;
while(p!=NULL)
{
number[i]=p->jifeng;
p=p->next;
i++;
}
sort(number,number+i);
n=i;
j=1;
while(n--)
{
p=q;
while(p!=NULL)
{
if(number[i-1]==p->jifeng)
{
printf("第%d名:\n",j);
printf("学校名称 学校编号 学生个数 男子总分 女子总分 团体总分\n");
printf("%-10s%-10d%-10d%-10d%-10d%-10d\n",p->name,p->serial,p->count,p->menscore,p->womenscore,p->jifeng);
break;
}
p=p->next;
}
i--;
j++;
}
printf("--------------------------------------------------------------\n");
}
void SortStudent(struct School *D)//学生排名查询
{
int n,Score[100],i,j,k,m;
struct School *p,*q;
printf("请输入你要查询的学生的项目编号:\n");
cin>>n;
p=D;
q=D;
j=0;
while(p!=NULL)
{
for(i=p->count*(n-1);i<p->count*n;i++)
{
Score[j]=p->student[i].score;
j++;
}
p=p->next;
}
printf("11111111\n");
sort(Score,Score+j);
p=q;
printf("项目:%s的排名情况如下\n",Xm_item[n-1].name);
printf("--------------------------------------------------------------\n");
printf("项目编号 项目名称 项目得分人数量\n");
printf("%-15d%-15s%-15d\n",Xm_item[n-1].item,Xm_item[n-1].name,Xm_item[n-1].count);
k=1;
m=j;
while(m--)
{
p=q;
while(p!=NULL)
{
for(i=p->count*(n-1);i<p->count*n;i++)
{
if(p->student[i].score==Score[j-1])
{
printf("第%d名:\n",k);
printf("学生姓名 得分成绩 得分名次 得分项目 性别\n");
printf("%-15s%-15d%-15d%-15s%-15d\n",p->student[i].name,p->student[i].score,p->student[i].range,p->student[i].item,p->student[i].sex);
break;
}
}
p=p->next;
j--;
}
}
printf("--------------------------------------------------------------\n");
}