运动会分数统计

来源:互联网 发布:奥数中最优化方法 编辑:程序博客网 时间:2024/03/29 01:56
#include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <iostream> #include <string>using namespace std;int n,b,m,w,i,j; char school_name[20][30];char sport_name[100][30];struct node {     int num; }; struct node *f[22]; void exit() {     FILE *fp;     if((fp=fopen("score.txt","w"))==NULL)     {         cout<<"打开文件失败!"<<endl;    }         fprintf(fp,"%d\t%d\t%d\t\n",n,m,w);        for (int x = 0; x < n; x++) {    fprintf(fp,"%s\t",school_name[x]);    }    fprintf(fp,"\n");        for (int y = 0; y < m + w; y++) {    fprintf(fp,"%s\t",sport_name[y]);    }    fprintf(fp,"\n");        for(i = 0; i <= m+w; i++) {fprintf(fp,"%d\t",i);     }    fprintf(fp,"\n");    for(i = 1; i <= n; i++)     {         fprintf(fp,"%d\t",i);         for(b = 1; b <= m + w; b++)         {             fprintf(fp,"%d\t",f[i][b].num);         }         fprintf(fp,"\n");     }         cout<<endl<<"\t比赛成绩已保存到当前路径下的“score.txt“文件中"<<endl;     fclose(fp);     //exit(1); } int loadFile(){FILE *fl;int k; int flag = 1;    A:if((fl=fopen("score.txt","r"))==NULL)     {         cout<<endl<<"\t初次进入系统!"<<endl;        flag = 0;        return flag;    } else {fscanf(fl,"%d%d%d",&n,&m,&w); for (int x = 0; x < n; x++) {    fscanf(fl,"%s",&school_name[x]);    }        for (int y = 0; y < m + w; y++) {    fscanf(fl,"%s",&sport_name[y]);    }int i, j;for(i=0;i<=n;i++)  {   f[i]=(struct node *)malloc(sizeof(struct node)*(m + w + 3));     for(j = 0; j <= m + w + 2; j++) {     f[i][j].num = 0;       }   }    for(i = 0; i <= m + w; i++) {fscanf(fl,"%d",&j);     }        for(i = 1; i <= n; i++)     {         fscanf(fl,"%d",&j);         int sum  = 0;        for(b = 1; b <= m + w; b++)         {             fscanf(fl,"%d",&j);             f[i][b].num = j;sum += j;         }        f[i][0].num = sum;        int sum1 = 0;        for (int j = 1; j <= m; j++) {        sum1 += f[i][j].num ;        }        f[i][m + w + 1].num = sum1;        int sum2 = sum - sum1;        f[i][m + w + 2].num = sum2;    }       }     fclose(fl);return flag;}void input() {     int ab,ac,ae,af,g=1,get[5]={0,0,0,0,0};     printf("\n\t请输入项目代号:\t");         while (true) {    if (scanf("\t%d",&ab) != 1) {    cout<<"\n\t非法字符!重新输入:\t";        fflush(stdin);    continue;    }    if(ab > m + w || ab < 1)     {    printf("\n\t此项目代号不存在,重新输入:\t");    fflush(stdin);     } else {    break;     }     } ae = 0;    for(i = 0; i <= n; i++)    {     if(f[i][ab].num != 0)      {       ae = 1;         break;          }      } if(ae == 1)  {      printf("\n\t此项目成绩曾经已被录入过!\n");    return ; }     while (true) {    printf("\t选择评分标准:(3.前三名,5.前五名):\t");                         //scanf("%d",&ac); while (true) {if (scanf("%d",&ac) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }                        if(ac==3)             {                 printf("\n\t请依次输入获胜学校代号:\t");                 af=5;                 for(i=0;i<3;i++)                 {                    alq: //scanf("\t%d",&ae);while (true) {if (scanf("\t%d",&ae) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }                        if(ae > n || ae < 1)                         {                            printf("%d\t学校代号不存在,重新输入第%d名的学校代号:\n",ae,g);                             goto alq;                         }                         for(b = 0;b < 5; b++)                         {                             if(ae == get[b])                             {                                 printf("\t同一个学校不能在同一项目中有两个名次,请重新输入第%d名的学校代号!!!\n",g);                                 goto alq;                             }                             else                                 get[b] = ae;                         }                         f[ae][0].num = f[ae][0].num + af;                         f[ae][ab].num=af;                         if(ab <= m)                             f[ae][m+w+1].num = f[ae][m+w+1].num+af;                         else                             f[ae][m+w+2].num = f[ae][m+w+2].num+af;                         if(af>3)                             af = af-2;                         else                             af--;                         g++;                 }                 break;            }                         if(ac == 5)             {                 printf("\t请依次输入获胜学校代号:\t");                 af = 7;                 for(i=0;i<5;i++)                 {                     alw: //scanf("\t%d",&ae); while (true) {if (scanf("\t%d",&ae) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }                         if(ae>n||ae<1)                          {                              printf("\t%d学校代号不存在,重新输入第%d名的学校代号\n",ae,g);                              goto alw;                          }                         for(b=0;b<5;b++)                          {                              if(ae==get[b])                              {                                  printf("\t同一个学校不能在同一项目中有两个名次,请重新输入第%d名的学校代号!!!\n",g);                                  goto alw;                              }                              else                                  get[b]=ae;                          }                          f[ae][0].num=f[ae][0].num+af;                          f[ae][ab].num=af;                          if(ab<=m)                              f[ae][m+w+1].num=f[ae][m+w+1].num+af;                          else                              f[ae][m+w+2].num=f[ae][m+w+2].num+af;                          if(af>3)                              af=af-2;                          else                             af--;                          g++;                                          }                 break;    }     }    printf("\n\t>>输入完成 !\n"); } void number_() {     printf("\n项目代号");     for(i=1;i<=m+w;i++)     {         if(i>9)             printf("%6d",i);         else             printf("%6d",i);     }     printf("\n学校代号\n");    for(i=1;i<=n;i++)     {         printf("%d\t",i);         for(b=1;b<=m+w;b++)         {             if(f[i][b].num>9)                 printf("%6d",f[i][b].num);             else                 printf("%6d",f[i][b].num);         }         printf("\n");     }     printf("\t表格中 (0~%d)是男子项目 (%d~%d)是女子项目!\n", m, w, m + w);} void sum_() {     struct nod     {         int ke;         int num;     };     struct nod *de;     de=(struct nod *)malloc(sizeof(struct nod)*n + 1);     printf("\n\t按学校编号排序输出\n\n");     printf("\t学校代号\t总分\n\n");     for(i = 1; i <= n; i++)    {         de[i].ke = i;         de[i].num = f[i][0].num;     }         for(i = 1; i <= n - 1; i++)      {         for(b = i; b <= n; b++)         {             if(de[b].num > de[i].num)             {                 int temp = de[b].ke;                 de[b].ke = de[i].ke;                de[i].ke = temp;                                 temp = de[b].num;                 de[b].num = de[i].num;                 de[i].num = temp;             }         }     }        for(i=1;i<=n;i++)     {         printf("\t%d\t%d\n",de[i].ke,de[i].num);     }}  void sport_boy()  {      struct nod      {          int ke;          int num;      };           struct nod *de;      de=(struct nod *)malloc(sizeof(struct nod)*n+1);      printf("\n\t按男子团体总分排序输出\n\n");      printf("\t学校代号\t男子团体总分\n\n");      for(i = 1;i <= n; i++)      {          de[i].ke = i;          de[i].num = f[i][m+w+1].num;      }      for(i = 1; i <= n - 1;i++)      {          for(b = i; b <= n;b++)          {               if(de[b].num>de[i].num)              {                  int temp = de[b].ke;                  de[b].ke = de[i].ke;                  de[i].ke = temp;                                   temp = de[b].num;                  de[b].num = de[i].num;                  de[i].num = temp;              }          }      }      for(i = 1; i <= n; i++)      {          printf("%13d%12d\n",de[i].ke,de[i].num);      }  } void sport_girl() {     struct nod     {         int ke;         int num;     };     int ha;     struct nod *de;     de=(struct nod *)malloc(sizeof(struct nod)*n+1);     printf("\t按女子团体总分排序输出\n\n");     printf("\t学校代号\t女子团体总分\n\n");     for(i=1;i<=n;i++)     {         de[i].ke=i;         de[i].num=f[i][m+w+2].num;     }     for(i = 1; i <= n - 1; i++)     {         for(b = i; b <= n; b++)         {             if(de[b].num > de[i].num)             {                 int temp = de[b].ke;                 de[b].ke=de[i].ke;                 de[i].ke=temp;                                 temp=de[b].num;                 de[b].num=de[i].num;                 de[i].num=temp;             }         }     }     for(i=1;i<=n;i++)     {         printf("%15d%13d\n",de[i].ke,de[i].num);     } } void school_num() {     int school,sport;     cout<<endl<<"\t请输入您要查询的学校代号:\t"; while (true) {//cin>>school;while (true) {if (scanf("\t%d",&school) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }    if(school > n || school < 1)     {         cout<<"\t学校代号不存在,重新输入:\t";         continue ;     }     break;}    cout<<endl;        cout<<"\t请输入您要查询的项目代号:\t"; while (true) {//cin>>sport; while (true) {if (scanf("\t%d",&sport) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }    if(sport > m + w || sport < 1)     {         cout<<"\t项目代号不存在,重新输入:\t";;         continue ;      }     break;}    printf("\n\n\t%d\t学校的\t%d\t项目成绩为\t%d\n",school,sport,f[school][sport].num); } void sport_num() {     int ge,sedy=0;     cout<<endl<<"\t请输入您要查询的项目代号:";     all:    //cin>>ge;while (true) {if (scanf("\t%d",&ge) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }        if(ge > m + w || ge < 1)         {             printf("\t没有此项目代号,重新输入\n");             goto all;         }         for(i = 1; i <= n; i++)         {             if(f[i][ge].num != 0) {            sedy = 1;             break;            }        }         if(sedy == 0)         {             printf("\t此项目没有录入成绩\n");            return;         }                        for(i = 1; i <= n; i++)         {             if(f[i][ge].num == 7)             {                 printf("\t此项目取前5名获奖者\n");                 break;             }         }         if(i == n + 1) {        printf("\t此项目取前3名获奖者\n");         }        printf("\n\t获胜名单由成绩高到低依次为:\n\n");         for(i = 7; i > 0; i--)         {             for(b = 1; b <= n; b++)             {                 if(f[b][ge].num == i) {                printf("\t%d",b);                 }            }         } } int choose() {     int choose_;     cout<<endl<<"\t*********************************************************";    cout<<endl<<"\t*\t1.输入成绩*";     cout<<endl<<"\t*\t2.按学校编号排序输出*";     cout<<endl<<"\t*\t3.按学校总分排序输出*";     cout<<endl<<"\t*\t4.按男团体总分排序输出*";     cout<<endl<<"\t*\t5.按女团体总分排序输出*";    cout<<endl<<"\t*\t6.按学校编号查询学校某个项目的成绩*";      cout<<endl<<"\t*\t7.按项目编号查询取得前三或前五名的学校*";      cout<<endl<<"\t*\t0.退出*";      cout<<endl<<"\t*********************************************************"<<endl;    cout<<endl<<"\t请选择:\t";     //cin>>choose_;while (true) {if (scanf("\t%d",&choose_) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }    return (choose_ ); } int main() { cout<<endl<<"\t*  *  *  *  *  *  *   运动会分数统计  *  *  *  *  *  *  *"<<endl;        cout<<endl;       int flag = loadFile();        if (n != 0) {       cout<<"\t上次统计结果为:"<<endl;  cout<<"\t共有"<<n<<"个学校:"<<endl;       for (int x = 0; x < n; x++) {       printf("\t%d\t%s\n",x + 1, &school_name[x]);       }     cout<<"\t共有"<<m<<"个男子组项目:"<<endl;;       for (int y = 0; y < m; y++) {       printf("\t%d\t%s\n",y + 1, &sport_name[y]);       }    cout<<"\t共有"<<w<<"个女子组项目:"<<endl;       for (int z = 0; z < w; z++) {       printf("\t%d\t%s\n",z + 1, &sport_name[z + m]);       }       }            if (flag == 0) {     cout<<"\t输入参赛学校个数(5 - 20):\t";        //cin>>n;       while (true) {if (scanf("\t%d",&n) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }       while(n < 5 || n > 20)        {            if(n <= 5)            {                cout<<endl<<"\t参赛学校个数不能小于5个!!!"<<endl;                cout<<"\t输入参赛学校个数(5 - 20):\t";        //cin>>n;    while (true) {if (scanf("\t%d",&n) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }           } else {                cout<<endl<<"\t参赛学校个数不能大于20!!!!"<<endl;                cout<<"\t输入参赛学校个数(5 - 20):\t";                //cin>>n;   while (true) {if (scanf("\t%d",&n) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }           } }        for (int x = 0; x < n; x++) {       cout<<"学校"<<(x + 1)<<":\t";       scanf("%s",&school_name[x]);        }             while (true) {       while (true) {       cout<<"\t输入参赛男子组个数:\t";       //cin>>m;while (true) {if (scanf("\t%d",&m) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }       if (m >= 0) {       break;    }cout<<"error!!!"<<endl;}              while (true) {       cout<<"\t输入参赛女子组个数:\t";       //cin>>w;while (true) {if (scanf("\t%d",&w) != 1) {cout<<"\n\t非法字符!重新输入:\t";fflush(stdin);continue;} else {break;} }       if (w >= 0) {       break;       }    cout<<"error!!!"<<endl;       }       if (!(m == 0 && w == 0)) {   break;       }       cout<<"\t参赛男女组数不可同时为 0 !\n"<<endl;       }             for (int y = 0; y < m; y++) {     cout<<"男子项目"<<(y + 1)<<":\t";     scanf("%s",&sport_name[y]);      }      cout<<endl;       for (int z = 0; z < w; z++) {     cout<<"女子项目"<<(z + 1)<<":\t";     scanf("%s",&sport_name[z + m]);      }             for(i=0;i<=n;i++)        {            f[i]=(struct node *)malloc(sizeof(struct node)*(m + w + 3));            for(j = 0; j<=m + w + 2; j++) {               f[i][j].num=0;            }       }       }        bool _flag = true;       int choose_;        while (_flag) {      choose_ = choose();      switch (choose_) {      case 1:{input(); break;}      case 2:{number_(); break;}      case 3:{sum_(); break;}      case 4:{sport_boy(); break;}      case 5:{sport_girl(); break;}      case 6:{school_num(); break;}      case 7:{sport_num(); break;}      case 0:{    system("cls");  exit();   _flag = false;  break;  }      default :      cout<<"\t重新选择!!!"<<endl;      break;       }       }return 0;}

原创粉丝点击