⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ydh.txt

📁 在c语言平台
💻 TXT
字号:
# include<stdio.h>
# define MAX 50
# define NULL 0
typedef struct node1{ int school;  /*学校编号*/
                   int record;  /*项目成绩*/
                   struct node1 *next;  /*链域*/ }Schools;
typedef struct { int item;  /*项目编号*/
              Schools *firstschool; /*链域指向链表中第一个结点*/  }ITEM;
typedef struct { int z; /* 项目总数 */
              ITEM a[MAX];}ALLitems;

typedef struct node2 { int item;  /*该学校获奖的项目*/
int record;  /*项目成绩*/
                    struct node2 *next;  /*链域*/ }Items;
typedef struct { int school;  /*学校编号*/
int score;  /*学校总分*/

 int boys;  /*男团体总分*/
 int girls;  /*女团体总分*/
               Items *firstitem; /*链域指向链表中第一个获奖项目的结点*/ }SCHNode;
typedef struct { int n; /* 学校总数 */
              SCHNode b[MAX];}ALLNode;
ALLitems *g1;
ALLNode *g2;

void funct1(ALLitems *g1,ALLNode *g2)                    /* 输入各个项目成绩 */
{ Schools *p1;
  Items *p2;
  int i,j,k,m,w,h,x;
  printf("\n*** 输入各个项目成绩 ***\n");
  printf("输入男子项目总数m:");
  scanf("%d",&m);
  if(m<0||m>20) 
   { printf("输入有误,m是20以内的整数,请重新输入:");
     scanf("%d",&m);
   }
  printf("输入女子项目总数w:");
  scanf("%d",&w);
  if(w<0||w>20) 
   { printf("输入有误,w是20以内的整数,请重新输入:");
     scanf("%d",&w);
   }
  printf("输入参加运动会的学校总数n:");
  scanf("%d",&g2->n);
  if(g2->n<0||g2->n>20) 
   { printf("输入有误,n是20以内的整数,请重新输入:");
     scanf("%d",&g2->n);
   }
  g1->z=m+w;
  printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);
  printf("\n\n**记录运动会成绩**\n(输入0标志结束)");
  for(k=1;k<=g1->z;k++)             /* 对两个邻接表置初态 */
   { g1->a[k].item=k;
     g1->a[k].firstschool=NULL;
   }
  for(k=1;k<=g2->n;k++)
   { g2->b[k].school=k;
     g2->b[k].firstitem=NULL; 
     g2->b[k].score=g2->b[k].boys=g2->b[k].girls=NULL;
   }
     g2->b[0].score=g2->b[0].boys=g2->b[0].girls=NULL;
  while(i!=0)
   { printf("\n项目:");
     scanf("%d",&i);
     if(i!=0)
     { printf("1.前三名   2.前五名\n");
       printf("请选择:"); 
       scanf("%d",&j);
       if(j!=1&&j!=2)
        { printf("输入有误,请重新选择:");
          scanf("%d",&j);
        }
      if(j==1)               /* 该项目只有前三名时执行此语句 */
       { h=3; 
         do{ printf("第%d名:学校(学校编号为数字)",h);
             scanf("%d",&x);
             p1=(Schools *)malloc(sizeof(Schools));
             p1->school=x;
             p2=(Items *)malloc(sizeof(Items));
             p2->item=i;
             if(h==3) p2->record=p1->record=2;
             if(h==2) p2->record=p1->record=3;
             if(h==1) p2->record=p1->record=5;
             p1->next=g1->a[i].firstschool;
             g1->a[i].firstschool=p1;
             p2->next=g2->b[x].firstitem;
             g2->b[x].firstitem=p2;
             g2->b[x].score=g2->b[x].score+p2->record;        /* 累计总分 */
             if(i<=m) g2->b[x].boys=g2->b[x].boys+p2->record;  /* 累计男团体总分 */
             else  g2->b[x].girls=g2->b[x].girls+p2->record;   /* 累计女团体总分 */ 
             h--;
           }while(x!=0&&h!=0);
       }
      if(j==2)              /* 该项目有前五名时执行此语句 */
       { h=5; 
         do{ printf("第%d名:学校",h);
             scanf("%d",&x);
             p1=(Schools *)malloc(sizeof(Schools));
             p1->school=x;
             p2=(Items *)malloc(sizeof(Items));
             p2->item=i;
             if(h==5) p2->record=p1->record=1;
             if(h==4) p2->record=p1->record=2;
             if(h==3) p2->record=p1->record=3;
             if(h==2) p2->record=p1->record=5;
             if(h==1) p2->record=p1->record=7;
             p1->next=g1->a[i].firstschool;
             g1->a[i].firstschool=p1;
             p2->next=g2->b[x].firstitem;
             g2->b[x].firstitem=p2;
             g2->b[x].score=g2->b[x].score+p2->record;        /* 累计总分 */
             if(i<=m) g2->b[x].boys=g2->b[x].boys+p2->record;  /* 累计男团体总分 */
             else  g2->b[x].girls=g2->b[x].girls+p2->record;   /* 累计女团体总分 */
             h--;
           }while(x!=0&&h!=0);
       }
     }    
   }
}

void save()                                /* 存储数据文件 */
{ FILE *fp1,*fp2;
  if((fp1=fopen("sports1","wb"))==NULL)
   { printf("cannot open file.\n");
     return;
   }
  if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1)
   printf("file write error.\n");
  fclose(fp1);
  if((fp2=fopen("sports2","wb"))==NULL)
   { printf("cannot open file.\n");
     return;
   }
  if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1)
   printf("file write error.\n");
  fclose(fp2);
}

void funct2(ALLNode *g2)                                 /* 输出各学校总分 */
{ int k;
  printf("\n\n\t\t*** 输出各学校总分 ***\n");  
  printf("学校编号\t总分\n");
  for(k=1;k<=g2->n;k++)
   printf("  %d\t\t %d\n",k,g2->b[k].score);
printf("\n");
} 

void funct3(ALLNode *g2)                                /* 按学校编号排序输出 */
{ int k;
  Items *p2;
  printf("\n\n\t\t*** 按学校编号排序输出 ***\n");
  printf("学校编号\t\t\t获奖情况\n");
  for(k=1;k<=g2->n;k++)
  { printf("  %d\t",k);
    p2=g2->b[k].firstitem;
    while(p2!=NULL)
    { printf("项目%d:得%d分 ",p2->item,p2->record);
      p2=p2->next;
    }
    printf("\n");
  }
  printf("\n");
}

void funct4(ALLNode *g2)                               /* 按学校总分排序输出 */
{ int i,j,k;
  printf("\n\n\t\t*** 按学校总分排序输出 ***\n");
  printf("学校编号\t总分\n");
  for(i=2;i<=g2->n;i++)
  { g2->b[0].score=g2->b[i].score;
    g2->b[0].boys=g2->b[i].boys;
    g2->b[0].girls=g2->b[i].girls;
    g2->b[0].school=g2->b[i].school;
    j=i-1;
    while(g2->b[0].score<g2->b[j].score&&j>0)
    { g2->b[j+1].score=g2->b[j].score;
      g2->b[j+1].boys=g2->b[j].boys;
      g2->b[j+1].girls=g2->b[j].girls;
      g2->b[j+1].school=g2->b[j].school;
      j--;
    }
    g2->b[j+1].score=g2->b[0].score;
    g2->b[j+1].boys=g2->b[0].boys;
    g2->b[j+1].girls=g2->b[0].girls;
    g2->b[j+1].school=g2->b[0].school;
  }
  for(k=1;k<=g2->n;k++)
   printf("  %d \t\t%d\n",g2->b[k].school,g2->b[k].score);
}


void funct5(ALLNode *g2)                             /* 按男团体总分排序输出 */
{ int i,j,k;
  printf("\n*** 按男团体总分排序输出 ***\n");
  printf("学校编号\t男团体总分\n");
  for(i=2;i<=g2->n;i++)
  { g2->b[0].score=g2->b[i].score;
    g2->b[0].boys=g2->b[i].boys;
    g2->b[0].girls=g2->b[i].girls;
    g2->b[0].school=g2->b[i].school;
    j=i-1;
    while(g2->b[0].boys<g2->b[j].boys&&j>0)
    { g2->b[j+1].score=g2->b[j].score;
      g2->b[j+1].boys=g2->b[j].boys;
      g2->b[j+1].girls=g2->b[j].girls;
      g2->b[j+1].school=g2->b[j].school;
      j--;
    }
    g2->b[j+1].score=g2->b[0].score;
    g2->b[j+1].boys=g2->b[0].boys;
    g2->b[j+1].girls=g2->b[0].girls;
    g2->b[j+1].school=g2->b[0].school;
  }
  for(k=1;k<=g2->n;k++)
   printf("  %d\t\t   %d\n",g2->b[k].school,g2->b[k].boys);
}

void funct6(ALLNode *g2)                             /* 按女团体总分排序输出 */
{ int i,j,k;
  printf("\n*** 按女团体总分排序输出 ***\n");
  printf("学校编号\t女团体总分\n");
  for(i=2;i<=g2->n;i++)
  { g2->b[0].score=g2->b[i].score;
    g2->b[0].boys=g2->b[i].boys;
    g2->b[0].girls=g2->b[i].girls;
    g2->b[0].school=g2->b[i].school;
    j=i-1;
    while(g2->b[0].girls<g2->b[j].girls&&j>0)
    { g2->b[j+1].score=g2->b[j].score;
      g2->b[j+1].boys=g2->b[j].boys;
      g2->b[j+1].girls=g2->b[j].girls;
      g2->b[j+1].school=g2->b[j].school;
      j--;
    }
    g2->b[j+1].score=g2->b[0].score;
    g2->b[j+1].boys=g2->b[0].boys;
    g2->b[j+1].girls=g2->b[0].girls;
    g2->b[j+1].school=g2->b[0].school;
  }
  for(k=1;k<=g2->n;k++)
   printf("  %d\t\t   %d\n",g2->b[k].school,g2->b[k].girls);
}

void funct7(ALLNode *g2)                    /* 按学校编号查询学校某个项目情况 */
{ int i,j,k;
  Items *p2;
  printf("\n *** 按学校编号查询学校某个项目情况 ***\n");
  printf("输入要查询的学校编号:");
  scanf("%d",&i);  
  printf("输入要查询的项目编号:");
  scanf("%d",&j);         
  p2=g2->b[i].firstitem;
  while(p2!=NULL)
  { if(p2->item==j)
    printf("学校编号:%d\t项目%d:得%d分\n",i,p2->item,p2->record);
    p2=p2->next;
  }
  printf("\n");
}

void funct8(ALLitems *g1)                    /* 按项目编号查询取得名次的学校 */
{ int i,k;   
  Schools *p1;
  printf("\n*** 按项目编号查询取得名次的学校 ***\n");
  printf("输入要查询的项目编号:");
  scanf("%d",&i);
  printf("项目编号\t\t\t取得名次的学校\n");
  printf("  %d\t",i);
  p1=g1->a[i].firstschool;
  while(p1!=NULL)
   { printf(" 学校%d:得%d分  ",p1->school,p1->record);
     p1=p1->next;
   }
  printf("\n\n");
} 

main()
{ int t;
  ALLitems *g1;
  ALLNode *g2;
  while(1) 
  { printf("运动会分数统计\n");
    printf("* * * * * * * * * * * * * * * * * * * * * *\n");
    printf("3105005879 信管6班 陈定佳\n");
    printf("1.输入各个项目成绩并存储文件\n");
    printf("2.统计各学校总分\n");
    printf("3.按学校编号排序输出\n");
    printf("4.按学校总分排序输出\n");
    printf("5.按男团体总分排序输出\n");
    printf("6.按女团体总分排序输出\n");
    printf("7.按学校编号查询学校某个项目情况\n");
    printf("8.按项目编号查询取得名次的学校\n");
    printf("0.退出\n");
    printf("* * * * * * * * * * * * * * * * * * * * * *\n");
    printf("请选择(0-8):");
    loop:scanf("%d",&t);
    clrscr();
    switch(t)
    { case 1:funct1(g1,g2);save();break;
      case 2:funct2(g2);break;
      case 3:funct3(g2);break;
      case 4:funct4(g2);break;
      case 5:funct5(g2);break;
      case 6:funct6(g2);break;
      case 7:funct7(g2);break;
      case 8:funct8(g1);break;
      case 0:exit(0);
      default:{ printf("输入有误,请重新选择:");
                goto loop;}
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -