c语言

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<process.h>
#define N 20     /*学校最大数目*/
#define M 20     /*男子项目最大数目*/
#define W 20     /*女子项目最大数目*/
typedef struct
{
 int inum;   //项目编号
 int top;   //取得名次的数目
 int pai[5];   //名次
 int grade[5]; //分数
} itemnode;

typedef struct
{
 int snum;    //学校编号
 int score;  //学校总分
 int mscore; //男团总分
 int wscore; //女团总分
 itemnode t[M+W];//项目数组
} schoolnode;
schoolnode a[N];
void menu(int n,int m,int w)
{
 int b,j,k,q;
 int c,x,f,i;
 int temp[N];
 void input (int n,int m,int w);
 void sortput (int n,int m,int w);
 void inqurey (int n,int m,int w);
 void output (int n,int m,int w);
 void savetofile();
 void readformfile();
 printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
 printf("\t*\t\t欢迎使用运动会管理系统\t\t\t*\n");
 printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
 printf("\t*\t\t1.管理员管理系统     \t\t\t*\n");
 printf("\t*\t\t\t\t\t\t        * \n");
 printf("\t*\t\t2.查看系统         \t\t\t*\n");
 printf("\t*\t\t\t\t\t\t        * \n");
 printf("\t*\t\t0.退出          \t\t\t*\n");
 printf("\t*\t\t\t\t\t\t        * \n");
      printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
 printf("请选择要实现编码功能的编号(0--2):");
 scanf("%d",&c);
 if(c==1)    //进入管理员系统
 {
  printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
    printf("\t*\t\t欢迎使用运动会管理系统\t\t\t*\n");
  printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
    printf("\t*\t\t主菜单          \t\t\t*\n");
    printf("\t*\t\t\t\t\t\t        * \n");
    printf("\t*\t\t1.信息输入       \t\t\t*\n");
    printf("\t*\t\t\t\t\t\t        * \n");
       printf("\t*\t\t2.排序输出       \t\t\t*\n");
       printf("\t*\t\t\t\t\t\t        * \n");
       printf("\t*\t\t3.信息查询       \t\t\t*\n");
       printf("\t*\t\t\t\t\t\t        * \n");
  printf("\t*\t\t4.统计输出       \t\t\t*\n");
  printf("\t*\t\t\t\t\t\t        * \n");
       printf("\t*\t\t0.退出系统       \t\t\t*\n");
       printf("\t*\t\t\t\t\t\t        * \n");
      printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
       printf("请选择要实现步骤的编号(0-4):");
     scanf("%d",&b);
     switch(b)
  {
   case 1:
    input(n,m,w);
    break;
   
    case 2:
    sortput(n,m,w);
    break;
   
    case 3:
    inqurey(n,m,w);
    break;
   
    case 4:
    output(n,m,w);
    break;
   
    case 0:
    printf("确定要退出系统?1是 2否\n");
         scanf("%d",&x);
        if(x==1)
   {
    printf("感谢你的使用,再见!\n");
   }
   else if(x==2)
   {
    printf("\n");
             savetofile();
              menu(n,m,w);
   }
    break;
   
    default:
    printf("输入错误,请重试!\n");
    menu(n,m,w);
  }
 }
   
    else if(c==2)
    {
     printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
     printf("\t*\t\t欢迎使用运动会管理系统\t\t\t*\n");
  printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
    printf("\t*\t\t\t菜单\t\t\t\t*\n");
    printf("\t*\t\t\t\t\t\t        * \n");
       printf("\t*\t\t1.学校编号查询      \t\t\t*\n");
  printf("\t*\t\t\t\t\t\t        * \n");
  printf("\t*\t\t2.男团成绩总成绩查询\t\t\t*\n");
  printf("\t*\t\t\t\t\t\t        * \n");
  printf("\t*\t\t3.女团成绩总成绩查询\t\t\t*\n");
  printf("\t*\t\t\t\t\t\t        * \n");
       printf("\t*\t\t4.退出系统\t\t\t\t*\n");
       printf("\t*\t\t\t\t\t\t        * \n");
      printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
       printf("请选择要实现步骤的编号(1-4):");
    scanf("%d",&f);
    switch(f)
  {
   case 1:
    for(i=0;i<n;i++)
    temp[i]=i;
    for(i=0;i<n;i++)
    {
     for(j=i+1;j<n;j++)
     if(a[temp[i]].snum>a[j].snum)
     {
      k=temp[i];
      temp[i]=temp[j];
      temp[j]=k;
     }
    }
    for(i=0;i<n;i++)
    {
     printf("学校编号:%d  学校总分:%d  男团总分:%d  女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);  
    }
    break;
   
    case 2:
    for(i=0;i<n;i++)
    temp[i]=i;
    for(i=0;i<n;i++)
    {
     for(j=i+1;j<n;j++)
     if(a[temp[i]].mscore<a[j].mscore)
     {
      k=temp[i];
      temp[i]=temp[j];
      temp[j]=k;
     }
    }
    for(i=0;i<n;i++)
    {
     printf("学校编号:%d  学校总分:%d  男团总分:%d  女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);  
    }
    break;
   
    case 3:
    for(i=0;i<n;i++)
    temp[i]=i;
    for(i=0;i<n;i++)
    {
     for(j=i+1;j<n;j++)
     if(a[temp[i]].wscore<a[j].wscore)
     {
      k=temp[i];
      temp[i]=temp[j];
      temp[j]=k;
     }
    }
    for(i=0;i<n;i++)
    {
     printf("学校编号:%d  学校总分:%d  男团总分:%d  女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);  
    }
    break;
   
    case 0:
    printf("确定要退出系统?1是 2否\n");
         scanf("%d",&x);
        if(x==1)
   {
    printf("感谢你的使用,再见!\n");
   }
   else if(x==2)
   {
    printf("\n");
             savetofile();
              menu(n,m,w);
   }
  
    defult:
    printf("输入错误,请重试!\n");
   
  }
 }  
  else if(c==4)
  {
   printf("确定要退出系统?1是 2否\n");
   scanf("%d",&x);
   if(x==1)
   {
    printf("感谢你的使用,再见!\n");
   }
   else if(x==2)
   {
    printf("\n");
             savetofile();
              menu(n,m,w);
   }
  }  
void savetofile()
{
 FILE *fp;
 int i;
 if((fp=fopen("file.txt","w"))==NULL)
 {
  printf("cannot open the file\n");
  return;
 }
 for(i=0;i<N;i++)
 {
  if(a[i].snum!='\0')
  if(fwrite(&a[i],sizeof(schoolnode),1,fp)!=1)
  {
   printf("file write error\n");
   
  }
 }
 fclose(fp); 
}
void readfromfile()
{
 int i;
 FILE *fp;
 if((fp=fopen("file.txt","rb"))==NULL)
 {
  printf("cannot open the file\n");
  return;
 }
 for(i=0;i<N;i++)
 fread(&a[i],sizeof(schoolnode),1,fp);
 fclose(fp);
}
//信息输入
void input(int n,int m,int w)
{
 int i,j,s,k,q=0;
 for(i=0;i<n;i++)
 {
 printf("学校编号:");
 scanf("%d",&a[i].snum);
 for(j=0;j<m+w;j++)
 {
  printf("项目编号:");
  scanf("%d",&a[i].t[j].inum);
  printf("项目取前3名或前5名:");
   scanf("%d",&a[i].t[j].top);
   if(a[i].t[j].top==3)
   printf("获得名次个数(1--3):");
   else
   printf("获得名次个数(1--5):");
   scanf("%d",&k);
   for(s=0;s<k;s++)
   {
    if(a[i].t[i].top==3)
    printf("所获得的名次(1--3):");
   
   else
   printf("所获名次(1--5):");
   scanf("%d",&a[i].t[j].pai[s]);
   }
   printf("\n");
 }
 }
 for(i=0;i<n;i++)
 {
  a[i].score=0;
  a[i].mscore=0;
  a[i].wscore=0;
 }
 for(i=0;i<n;i++)
 for(j=0;j<m+w;j++)
 for(s=0;s<5;s++)
 {
  if(a[i].t[i].top==3)
  switch(a[i].t[j].pai[s])
  {
   case 0:a[i].t[j].grade[s]=0;
   break;
   case 1:a[i].t[j].grade[s]=5;
   break;
   case 2:a[i].t[j].grade[s]=3;
   break;
   case 3:a[i].t[j].grade[s]=2;
   break;
   
  }
  else if(a[i].t[i].top==5)
  switch(a[i].t[i].pai[s])
  {
   case 0:a[i].t[j].grade[s]=0;
   break;
   case 1:a[i].t[j].grade[s]=7;
   break;
   case 2:a[i].t[j].grade[s]=5;
   break;
   case 3:a[i].t[j].grade[s]=3;
   break;
   case 4:a[i].t[j].grade[s]=2;
   break;
   case 5:a[i].t[j].grade[s]=1;
   break;
   
  }
  else
  {
   printf("信息有误!");
   printf("\n");
  return;
  }
  a[i].score=a[i].score+a[i].t[j].grade[s];
  if(j<=m-1)
  a[i].mscore=a[i].mscore+a[i].t[j].grade[s];
  else
  a[i].wscore=a[i].wscore+a[i].t[j].grade[s];
 }
 printf("输入完毕!返回? 1是 2否\n");
 scanf("%d",&q);
 printf("\n");
 if(q!=1)
 printf("不能再添加信息!");
 printf("\n");
 savetofile();
 menu(n,m,w);
}
void output(int n,int m,int w)
{
 readfromfile();
 int i,j,s,q=0;
 for(i=0;i<n;i++)
 {
  printf("学校的编号:%d  学校的总分:%d  男团的总分:%d  女团的总分:%d\n",a[i].snum,a[i].score,a[i].mscore,a[i].wscore);
  for(j=0;j<m+w;j++)
  {
   printf("项目编号:%d  所取的名次数量:%d\n",a[i].t[j].inum,a[i].t[j].inum,a[i].t[j].top);
   for(s=0;s<5;s++)
   {
    if(a[i].t[j].pai[s]!=0)
    printf("名次:%d  分数:%d\n",a[i].t[j].pai[s],a[i].t[j].grade[s]);
   }
  }
  printf("\n");
 }
 printf("统计完毕!返回? 1是 2否");
 scanf("%d",&q);
 printf("\n");
 if(q!=1)
 printf("统计已经结束!");
 printf("\n");
 menu(n,m,w);
}
void sortput(int n,int m,int w)
 {
  readfromfile();
  int c,i,j,k,q=0;
  int temp[N];
  printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
  printf("\t*\t\t排序输出系统               \t\t*\n");
  printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
  printf("\t*\t\t1.按学校编号输出           \t\t*\n");
  printf("\t*\t\t\t\t\t\t        * \n");
  printf("\t*\t\t2.按学校总分输出           \t\t*\n");
  printf("\t*\t\t\t\t\t\t        * \n");
  printf("\t*\t\t3.按男团总分输出           \t\t*\n");
  printf("\t*\t\t\t\t\t\t        * \n");
  printf("\t*\t\t4.按女团总分输出           \t\t*\n");
  printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
  printf("===================================================================\n\n");
 
  do
  {
   printf("请选择要实现编码功能的编号(1--4):");
   scanf("%d",&c);
   switch(c)
   {
    case 1:
    for(i=0;i<n;i++)
    temp[i]=i;
    for(i=0;i<n;i++)
    {
     for(j=i+1;j<n;j++)
     if(a[temp[i]].snum>a[j].snum)
     {
      k=temp[i];
      temp[i]=temp[j];
      temp[j]=k;
     }
    }
    for(i=0;i<n;i++)
    {
     printf("学校编号:%d  学校总分:%d  男团总分:%d  女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);  
    }
    break;
   
    case 2:
     for(i=0;i<n;i++)
    temp[i]=i;
    for(i=0;i<n;i++)
    {
     for(j=i+1;j<n;j++)
     if(a[temp[i]].score<a[j].score)
     {
      k=temp[i];
      temp[i]=temp[j];
      temp[j]=k;
     }
    }
    for(i=0;i<n;i++)
    {
     printf("学校编号:%d  学校总分:%d  男团总分:%d  女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);  
    }
    break;
   
     case 3:
     for(i=0;i<n;i++)
    temp[i]=i;
    for(i=0;i<n;i++)
    {
     for(j=i+1;j<n;j++)
     if(a[temp[i]].mscore<a[j].mscore)
     {
      k=temp[i];
      temp[i]=temp[j];
      temp[j]=k;
     }
    }
    for(i=0;i<n;i++)
    {
     printf("学校编号:%d  学校总分:%d  男团总分:%d  女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);  
    }
    break;
   
    case 4:
     for(i=0;i<n;i++)
    temp[i]=i;
    for(i=0;i<n;i++)
    {
     for(j=i+1;j<n;j++)
     if(a[temp[i]].wscore<a[j].wscore)
     {
      k=temp[i];
      temp[i]=temp[j];
      temp[j]=k;
     }
    }
    for(i=0;i<n;i++)
    {
     printf("学校编号:%d  学校总分:%d  男团总分:%d  女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);  
    }
    break;
   
    defult:
    printf("输入错误,请重试!\n");
   }
   printf("请选择 1 返回主菜单 0 继续");
   scanf("%d",&q);
   printf("\n");
  }
  while(q==0);
  printf("\n");
  if(q!=0)
  menu(n,m,w);
 
 }
void inqurey(int n,int m,int w)
{
 readfromfile();
 int c,i,j,k,d,l,q=0;
 printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
 printf("\t*\t\t\t查询系统\t\t\t*\n\n");
 printf("\t*\t\t\t\t\t\t        * \n");
 printf("\t*\t\t1.按学校编号查询\t\t\t*\n");
 printf("\t*\t\t\t\t\t\t        * \n");
 printf("\t*\t\t1.按项目编号查询\t\t\t*\n");
 printf("\t*\t\t\t\t\t\t        * \n");
 printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
 
 do
 {
  k=-1;d=-1;l=-1;
  printf("请选择要实现的功能编码(1--2):");
  scanf("%d",&c);
  switch(c)
  {
   case 1:
    printf("要查询的学校编号:");
    scanf("%d",&c);
    for(i=0;i<n;i++)
    {
     if(a[i].snum==c)
     k=i;
    }
    if(k==1)
    printf("错误:这个学校没有参加此次运动会!\n");
    else
    {
     printf("要查询的项目编号:");
     scanf("%d",&c);
     for(j=0;j<m+w;j++)
     {
     if(a[k].t[j].inum==c)
     d=j; 
     }
     if(d==1)
     printf("此次运动会没有这个项目\n");
     else
     {
      printf("这个项目取前%d名,该学校的成绩如下:\n",a[k].t[d].top);
      for(i=0;i<5;i++)
      if(a[k].t[d].pai[i]!=0)
      printf("名次:%d\n",a[k].t[d].pai[i]);
     }
    }
    break;
    case 2:
     printf("要查询的项目编号:");
     scanf("%d",&c);
     for(i=0;i<n;i++)
     for(j=0;j<m+w;j++)
     if(a[i].t[j].inum==c)
     l=j;
     if(l==-1)
     printf("此次运动会没有这个项目\n");
     else
     {
      printf("该项目取前%d名,取得名次的学校\n",a[0].t[1].top);
      for(i=0;i<n;i++)
      for(j=0;j<5;j++)
      if(a[i].t[1].pai[j]!=0)
      printf("学校编号:%d,名次:%d\n,a[i].snum,a[i]");
     }
     break;
     default:
      printf("输入错误,请重试!\n");
  }
  printf("请选择:1.返回主菜单 0.继续");
  scanf("%d",&q);
  printf("\n");
  
 }
 while(q==0);
 printf("\n");
 if(q!=0)
 menu(n,m,w);
}
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
 
 int n,m,w;
 printf("\t\t\t欢迎使用\t\t\t\t\n\n");
 printf("请先输入运动会主要信息\n");
 printf("输入学校个数:");
 scanf("%d",&n);
 printf("输入男子项目个数:");
 scanf("%d",&m);
 
 printf("输入女子项目个数:");
 scanf("%d",&w);
 menu(n,m,w);
 return 0;
}
posted @ 2019-05-22 22:48  袁玉霖  阅读(254)  评论(0编辑  收藏  举报