运动会管理系统

#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");
}

原文地址:https://www.cnblogs.com/xiohao/p/2921042.html