Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2226499
  • 博文数量: 556
  • 博客积分: 11457
  • 博客等级: 上将
  • 技术积分: 5973
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-24 22:33
文章分类

全部博文(556)

文章存档

2013年(22)

2012年(74)

2011年(460)

分类: C/C++

2011-07-08 13:10:40

很失败的一次课设!以后多多复习C语言和数据结构!

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<string.h>

  4. int a,b,c,d,i,j; //全局变量(很多函数中都要用到)

  5. struct node
  6. {
  7.    int num; //每个项目的分数
  8. };

  9. struct node *f[22]; //指针数组 用以指向每个系院
  10. void exit() //退出保存函数
  11. {
  12.        FILE *fp;
  13.        int k;
  14.    Loop1:
  15.      if((fp=fopen("score.txt","w"))==NULL)
  16.      {
  17.         printf("创建文件失败\n");
  18.         printf(" 1*****重试\n");
  19.         printf(" 2*****强制退出(数据将不会保存到文件)\n");
  20.         printf(" 3*****回到主菜单\n");
  21.     Loop2:
  22.         scanf("%d",&k);
  23.         if(k==1)
  24.            goto Loop1;

  25.         else if(k==2)
  26.             exit(0);

  27.           else if(k==3)
  28.                return;
  29.             else
  30.             {
  31.                 printf("输入错误,请重新输入:");
  32.                 goto Loop2;
  33.             }
  34.     }

  35.     fprintf(fp,"\n\n");
  36.     fprintf(fp,"运动会分数统计表\n\n\n");
  37.     fprintf(fp,"项目代号");
  38.     for(i=1;i<=c+d;i++)
  39.     fprintf(fp,"%5d",i);
  40.     fprintf(fp," ");
  41.     fprintf(fp,"\n 院系代号\n");
  42.     for(i=1;i<=a;i++)
  43.     {
  44.       fprintf(fp,"%10d",i);
  45.       for(b=1;b<=c+d;b++)
  46.       {
  47.           fprintf(fp,"%5d",f[i][b].num); //f[i][b].[num]指的是每个项目的分数
  48.       }
  49.       fprintf(fp,"\n");
  50.     }
  51.     fprintf(fp,"\n\n");
  52.     fprintf(fp," 注:本次运动会有%d个院系参赛\n\n",a);
  53.     fprintf(fp," 其中1 ~ %d组是男子组,%d ~ %d组是女子组\n",c,c+1,c+d);
  54.     printf("\n比赛成绩已保存到当前路径下的score.txt文件中\n\n");
  55.     fclose(fp);
  56.     exit(1);
  57. }
  58. int choose()
  59. {
  60.   int sel;
  61.   printf("\n\n 1*输入成绩\n");

  62. printf(" 2*统计各院系的总分\n");

  63. printf(" 3*按院系编号排序输出\n");

  64. printf(" 4*按院系总分排序输出\n");

  65. printf(" 5*按男团体总分排序输出\n");

  66. printf(" 6*按女团体总分排序输出\n");

  67. printf(" 7*按院系编号查询该院系某个项目的成绩\n");

  68. printf(" 8*按项目编号查询取得前三或前五名的院系\n");

  69. printf(" 9*退出\n\n");

  70. printf("请选择:");

  71. scanf("%d",&sel);

  72. return(sel-1);

  73. }

  74. void input()
  75. {

  76. int itemnum,ac,ae,af,g=1,get[5]={0,0,0,0,0};

  77. printf("\n请输入项目代号:");

  78. loop:scanf("%d",&itemnum);

  79. if(itemnum>c+d||itemnum<1)

  80.   {

  81.      printf("\n此项目代号不存在,重新输入\n");

  82.      goto loop;

  83.    }

  84.     ae=0;

  85. for(i=0;i<=a;i++)

  86.   {

  87.      if(f[i][itemnum].num!=0)

  88.        {

  89.         ae=1; //ae只是一个标识符号,判断是否分数是否已存在

  90.         break;

  91.        }

  92.    }

  93. if(ae==1)

  94.   {

  95.      loop2:
  96.      printf("\n此项目成绩曾经已被录入过,是否要重新录入(您输入的项目代号可能有误,强烈建议您查证后再录入):\n");

  97.      printf(" 1++++重新录入(若重新录入,以前的该项目成绩将被删除)\n");

  98.       printf(" 2++++不要,待查证后再录入\n\n");

  99.      scanf("%d",&af);

  100.       if(af==2)

  101.         {

  102.           printf("您已取消录入!!!!!\n");

  103.           return;

  104.         }

  105.        else if(af==1)

  106.           {

  107.             for(i=1;i<=a;i++)

  108.              {

  109.                 if(f[i][itemnum].num!=0)

  110.                    {

  111.                         f[i][0].num=f[i][0].num-f[i][itemnum].num;

  112.                        if(itemnum<=c)

  113.                           f[i][c+d+1].num=f[i][c+d+1].num-f[i][itemnum].num;

  114.                        else

  115.                           f[i][c+d+2].num=f[i][c+d+2].num-f[i][itemnum].num;

  116.                 }

  117.                 f[i][itemnum].num=0;

  118.                 }

  119.           }

  120.    else

  121.    goto loop2;

  122.   }

  123. al: printf("\n此项目是以前几名为胜出者:\n\n");

  124.   printf(" 3-------以前三名\n");

  125.   printf(" 5-------以前五名\n\n");

  126.   scanf("%d",&ac);

  127.   if(ac==3)
  128.    {
  129.        printf("\n请依次输入获胜院系代号:"); //ae院系代号
  130.         af=5;
  131.           for(i=0;i<3;i++)
  132.           {
  133.              alq: scanf("%d",&ae);
  134.                if(ae>a||ae<1)
  135.                {
  136.                       printf("%d院系代号不存在,重新输入第%d名的院系代号\n",ae,g);
  137.                       goto alq;
  138.                }
  139.             for(b=0;b<5;b++)
  140.             {
  141.                  if(ae==get[b])
  142.                  {
  143.                        printf("同一个院系不能在同一项目中有两个名次,请重新输入第%d名的院系代号!!\n",g);
  144.                        goto alq;
  145.                  }
  146.                   else
  147.                   get[b]=ae;
  148.             }
  149.          f[ae][0].num=f[ae][0].num+af;
  150.          f[ae][itemnum].num=af;

  151.            if(itemnum<=c)
  152.                f[ae][c+d+1].num=f[ae][c+d+1].num+af;
  153.            else
  154.                f[ae][c+d+2].num=f[ae][c+d+2].num+af;
  155.            if(af>3)
  156.                af=af-2;
  157.            else
  158.               af--;
  159.          g++; //名次
  160.           }
  161.    }
  162.    else if(ac==5)
  163.    {
  164.        printf("请依次输入获胜院系代号:");
  165.        af=7;
  166.     for(i=0;i<5;i++)
  167.     {
  168.       alw: scanf("%d",&ae);
  169.       if(ae>a||ae<1)
  170.       {
  171.          printf("%院系代号不存在,重新输入第%d名的院系代号\n",ae,g);
  172.            goto alw;
  173.       }
  174.      for(b=0;b<5;b++)
  175.      {
  176.               if(ae==get[b])
  177.               {
  178.                     printf("同一个院系不能在同一项目中有两个名次,请重新输入第%d名的院系代号!!!\n",g);
  179.                     goto alw;
  180.               }
  181.              else
  182.                get[b]=ae;
  183.      }
  184.        f[ae][0].num=f[ae][0].num+af;
  185.        f[ae][itemnum].num=af;
  186.         if(itemnum<=c)
  187.         f[ae][c+d+1].num=f[ae][c+d+1].num+af;
  188.      else
  189.        f[ae][c+d+2].num=f[ae][c+d+2].num+af;
  190.      if(af>3)
  191.        af=af-2;
  192.          else
  193.            af--;
  194.             g++;
  195.            }
  196.     }
  197.   else
  198.      goto al;
  199.       printf("\n\n 输入完成 ! ! ! ! \n");
  200. }

  201. void each() //统计各院系的总分
  202. {
  203.    printf("\n 对应的格式为:\n 院系代号:团体总成绩\n\n ");
  204.    for(i=1;i<=a;i++)
  205.    {
  206.      printf("%2d:%3d ",i,f[i][0].num);
  207.      if(i%5==0)
  208.       printf("\n ");
  209.     }
  210. }

  211. void bianhao()
  212. {
  213.    printf("\n项目代号 ");
  214.    for(i=1;i<=c+d;i++)
  215.    {
  216.      if(i>9)
  217.        printf("%4d ",i);
  218.      else
  219.         printf("%5d ",i);
  220.    }
  221.   printf("\n");
  222.   printf("院系代号 \n");
  223.   for(i=1;i<=a;i++)
  224.   {
  225.      printf(" %4d ",i);
  226.      for(b=1;b<=c+d;b++)
  227.      {
  228.       if(f[i][b].num>9)
  229.       printf("%4d",f[i][b].num);
  230.       else
  231.       printf("%5d",f[i][b].num);
  232.      }
  233.     printf("\n");
  234.    }
  235. }

  236. void zongfen()
  237. {
  238.   struct nod
  239.   {
  240.         int ke;
  241.         int num;
  242.   };
  243.   int h;
  244.   struct nod *de;
  245.   de=(struct nod *)malloc(sizeof(struct nod)*a+1);
  246.   printf("\n 按院系编号排序输出\n\n");
  247.   printf(" 院系代号 总分\n\n");
  248.    for(i=1;i<=a;i++)
  249.    {
  250.      de[i].ke=i;
  251.      de[i].num=f[i][0].num;
  252.    }
  253.    for(i=1;i<=a;i++)
  254.    {
  255.     for(b=i;b<=a;b++)
  256.     {
  257.      if(de[b].num>de[i].num)
  258.      {
  259.           h=de[b].ke;
  260.           de[b].ke=de[i].ke;
  261.           de[i].ke=h;
  262.           h=de[b].num;
  263.           de[b].num=de[i].num;
  264.           de[i].num=h;
  265.       }
  266.    }
  267.  }

  268.     for(i=1;i<=a;i++)
  269.     {
  270.       printf("%13d%8d\n",de[i].ke,de[i].num);
  271.     }
  272.   }
  273. void nanzong()
  274. {

  275.    struct nod
  276.    {
  277.          int ke;
  278.           int num;
  279.    };
  280.     int ha;
  281.     struct nod *de;
  282.     de=(struct nod *)malloc(sizeof(struct nod)*a+1);
  283.     printf("\n 按男子团体总分排序输出\n\n");
  284.     printf(" 院系代号 男子团体总分\n\n");
  285.     for(i=1;i<=a;i++)
  286.     {
  287.       de[i].ke=i;
  288.       de[i].num=f[i][c+d+1].num;
  289.     }
  290.     for(i=1;i<=a;i++)
  291.     {
  292.      for(b=i;b<=a;b++)
  293.      {
  294.        if(de[b].num>de[i].num)
  295.      {
  296.          ha=de[b].ke;
  297.          de[b].ke=de[i].ke;
  298.          de[i].ke=ha;
  299.          ha=de[b].num;
  300.          de[b].num=de[i].num;
  301.          de[i].num=ha;
  302.      }
  303.    }
  304.  }
  305.     for(i=1;i<=a;i++)
  306.     {
  307.      printf("%13d%12d\n",de[i].ke,de[i].num);
  308.     }
  309. }

  310. void nvzong() //选择排序
  311. {
  312.    struct nod
  313.    {
  314.        int ke;
  315.        int num;
  316.    };
  317.    int ha;
  318.    struct nod *de;
  319.    de=(struct nod *)malloc(sizeof(struct nod)*a+1);
  320.    printf(" 按女子团体总分排序输出\n\n");
  321.    printf(" 院系代号 女子团体总分\n\n");
  322.    for(i=1;i<=a;i++)
  323.    {
  324.       de[i].ke=i;
  325.       de[i].num=f[i][c+d+2].num;
  326.    }
  327.    for(i=1;i<=a;i++)
  328.    {
  329.      for(b=i;b<=a;b++)
  330.      {
  331.            if(de[b].num>de[i].num)
  332.            {
  333.               ha=de[b].ke;
  334.               de[b].ke=de[i].ke;
  335.               de[i].ke=ha;
  336.               ha=de[b].num;
  337.               de[b].num=de[i].num;
  338.               de[i].num=ha;
  339.              }
  340.         }
  341. }

  342.    for(i=1;i<=a;i++)
  343.    {
  344.      printf("%15d%13d\n",de[i].ke,de[i].num);
  345.    }
  346. }

  347. void xueyuan()
  348. {
  349.   int dr,dt;
  350.   printf("\n请输入您要查询的院系代号:");
  351.   aly:scanf("%d",&dr);
  352.   if(dr>a||dr<1)
  353.   {
  354.     printf("院系代号不存在,重新输入\n");
  355.      goto aly;
  356.   }
  357.   printf("请输入您要查询的项目代号:");
  358.   alo:scanf("%d",&dt);
  359.   if(dt>c+d||dt<1)
  360.   {
  361.     printf("项目代号不存在,重新输入\n");
  362.     goto alo;
  363.   }
  364.   printf("\n\n %3d 院系的%3d 项目成绩为%3d\n",dr,dt,f[dr][dt].num);
  365. }

  366. void xiangmu()
  367. {
  368.   int ge,sedy=0;
  369.   printf("\n 请输入您要查询的项目代号:");
  370.   all:scanf("%d",&ge);
  371.   printf("\n");
  372.   if(ge>c+d||ge<1)
  373.   {
  374.      printf("没有此项目代号,重新输入\n");
  375.      goto all;
  376.   }
  377.   for(i=1;i<=a;i++)
  378.   {
  379.     if(f[b][ge].num==2)
  380.     sedy=1;
  381.   }
  382.   if(sedy==0)
  383.   {
  384.     printf("此项目没有录入成绩\n");
  385.     return;
  386.   }
  387.   for(i=1;i<=a;i++)
  388.   {
  389.      if(f[i][ge].num==7)
  390.      {
  391.          printf(" 此项目取前5名获奖者\n");
  392.          system("pause");
  393.          break;
  394.      }
  395.   }
  396.   if(i==a+1)
  397.   printf(" 此项目取前3名获奖者\n");
  398.   printf("\n 获胜名单由成绩高到低依次为:\n\n ");
  399.   for(i=7;i>0;i--)
  400.   {
  401.      for(b=1;b<=a;b++)
  402.      {
  403.          if(f[b][ge].num==i)
  404.          printf("%5d",b);
  405.      }
  406.   }
  407. }

  408. void(*g[])()={input,each,bianhao,zongfen,nanzong,nvzong,xueyuan,xiangmu,exit};
  409. void main()
  410. {
  411.    system("color 58");
  412.    int choos;
  413.    printf("\n\n * * * 运动会分数统计 * * *\n\n\n");
  414.    printf("共有多少个院系参赛:");
  415.    scanf("%d",&a);
  416.    while(a<=0||a>20)
  417.    {
  418.      if(a<=0)
  419.      {
  420.         printf("\n 参赛院系个数不能是负数或零\n\n");
  421.         printf("共有多少个院系参赛:");
  422.          scanf("%d",&a);
  423.      }
  424.       if(a>20)
  425.       {
  426.            printf("\n 参赛院系个数不能大于20\n\n");
  427.            printf("共有多少个院系参赛:");
  428.            scanf("%d",&a);
  429.       }
  430.    }
  431.     printf("有几个男子组:");
  432.     scanf("%d",&c);
  433.     printf("有几个女子组:");
  434.     scanf("%d",&d);
  435.     for(i=0;i<=a;i++)
  436.     {
  437.       f[i]=(struct node *)malloc(sizeof(struct node)*(c+d+3));
  438.        for(j=0;j<=c+d+2;j++)
  439.          f[i][j].num=0;
  440.     }
  441.     choos=choose();
  442.      while(1)
  443.      {
  444.          while(choos<0||choos>8)
  445.            choos=choose();
  446.            (*g[choos])();
  447.          printf("\n");
  448.             choos=choose();
  449.      }
  450. }

附件:

 数据结构课设.zip   

阅读(787) | 评论(0) | 转发(0) |
0

上一篇:我们是谁

下一篇:Flex开发者必备

给主人留下些什么吧!~~