很失败的一次课设!以后多多复习C语言和数据结构!
- #include <stdio.h>
- #include <stdlib.h>
- #include<string.h>
- int a,b,c,d,i,j; //全局变量(很多函数中都要用到)
- struct node
- {
- int num; //每个项目的分数
- };
- struct node *f[22]; //指针数组 用以指向每个系院
- void exit() //退出保存函数
- {
- FILE *fp;
- int k;
- Loop1:
- if((fp=fopen("score.txt","w"))==NULL)
- {
- printf("创建文件失败\n");
- printf(" 1*****重试\n");
- printf(" 2*****强制退出(数据将不会保存到文件)\n");
- printf(" 3*****回到主菜单\n");
- Loop2:
- scanf("%d",&k);
- if(k==1)
- goto Loop1;
- else if(k==2)
- exit(0);
- else if(k==3)
- return;
- else
- {
- printf("输入错误,请重新输入:");
- goto Loop2;
- }
- }
- fprintf(fp,"\n\n");
- fprintf(fp,"运动会分数统计表\n\n\n");
- fprintf(fp,"项目代号");
- for(i=1;i<=c+d;i++)
- fprintf(fp,"%5d",i);
- fprintf(fp," ");
- fprintf(fp,"\n 院系代号\n");
- for(i=1;i<=a;i++)
- {
- fprintf(fp,"%10d",i);
- for(b=1;b<=c+d;b++)
- {
- fprintf(fp,"%5d",f[i][b].num); //f[i][b].[num]指的是每个项目的分数
- }
- fprintf(fp,"\n");
- }
- fprintf(fp,"\n\n");
- fprintf(fp," 注:本次运动会有%d个院系参赛\n\n",a);
- fprintf(fp," 其中1 ~ %d组是男子组,%d ~ %d组是女子组\n",c,c+1,c+d);
- printf("\n比赛成绩已保存到当前路径下的score.txt文件中\n\n");
- fclose(fp);
- exit(1);
- }
- int choose()
- {
- int sel;
- printf("\n\n 1*输入成绩\n");
- printf(" 2*统计各院系的总分\n");
- printf(" 3*按院系编号排序输出\n");
- printf(" 4*按院系总分排序输出\n");
- printf(" 5*按男团体总分排序输出\n");
- printf(" 6*按女团体总分排序输出\n");
- printf(" 7*按院系编号查询该院系某个项目的成绩\n");
- printf(" 8*按项目编号查询取得前三或前五名的院系\n");
- printf(" 9*退出\n\n");
- printf("请选择:");
- scanf("%d",&sel);
- return(sel-1);
- }
- void input()
- {
- int itemnum,ac,ae,af,g=1,get[5]={0,0,0,0,0};
- printf("\n请输入项目代号:");
- loop:scanf("%d",&itemnum);
- if(itemnum>c+d||itemnum<1)
- {
- printf("\n此项目代号不存在,重新输入\n");
- goto loop;
- }
- ae=0;
- for(i=0;i<=a;i++)
- {
- if(f[i][itemnum].num!=0)
- {
- ae=1; //ae只是一个标识符号,判断是否分数是否已存在
- break;
- }
- }
- if(ae==1)
- {
- loop2:
- printf("\n此项目成绩曾经已被录入过,是否要重新录入(您输入的项目代号可能有误,强烈建议您查证后再录入):\n");
- printf(" 1++++重新录入(若重新录入,以前的该项目成绩将被删除)\n");
- printf(" 2++++不要,待查证后再录入\n\n");
- scanf("%d",&af);
- if(af==2)
- {
- printf("您已取消录入!!!!!\n");
- return;
- }
- else if(af==1)
- {
- for(i=1;i<=a;i++)
- {
- if(f[i][itemnum].num!=0)
- {
- f[i][0].num=f[i][0].num-f[i][itemnum].num;
- if(itemnum<=c)
- f[i][c+d+1].num=f[i][c+d+1].num-f[i][itemnum].num;
- else
- f[i][c+d+2].num=f[i][c+d+2].num-f[i][itemnum].num;
- }
- f[i][itemnum].num=0;
- }
- }
- else
- goto loop2;
- }
- al: printf("\n此项目是以前几名为胜出者:\n\n");
- printf(" 3-------以前三名\n");
- printf(" 5-------以前五名\n\n");
- scanf("%d",&ac);
- if(ac==3)
- {
- printf("\n请依次输入获胜院系代号:"); //ae院系代号
- af=5;
- for(i=0;i<3;i++)
- {
- alq: scanf("%d",&ae);
- if(ae>a||ae<1)
- {
- printf("%d院系代号不存在,重新输入第%d名的院系代号\n",ae,g);
- goto alq;
- }
- for(b=0;b<5;b++)
- {
- if(ae==get[b])
- {
- printf("同一个院系不能在同一项目中有两个名次,请重新输入第%d名的院系代号!!\n",g);
- goto alq;
- }
- else
- get[b]=ae;
- }
- f[ae][0].num=f[ae][0].num+af;
- f[ae][itemnum].num=af;
- if(itemnum<=c)
- f[ae][c+d+1].num=f[ae][c+d+1].num+af;
- else
- f[ae][c+d+2].num=f[ae][c+d+2].num+af;
- if(af>3)
- af=af-2;
- else
- af--;
- g++; //名次
- }
- }
- else if(ac==5)
- {
- printf("请依次输入获胜院系代号:");
- af=7;
- for(i=0;i<5;i++)
- {
- alw: scanf("%d",&ae);
- if(ae>a||ae<1)
- {
- printf("%院系代号不存在,重新输入第%d名的院系代号\n",ae,g);
- goto alw;
- }
- for(b=0;b<5;b++)
- {
- if(ae==get[b])
- {
- printf("同一个院系不能在同一项目中有两个名次,请重新输入第%d名的院系代号!!!\n",g);
- goto alw;
- }
- else
- get[b]=ae;
- }
- f[ae][0].num=f[ae][0].num+af;
- f[ae][itemnum].num=af;
- if(itemnum<=c)
- f[ae][c+d+1].num=f[ae][c+d+1].num+af;
- else
- f[ae][c+d+2].num=f[ae][c+d+2].num+af;
- if(af>3)
- af=af-2;
- else
- af--;
- g++;
- }
- }
- else
- goto al;
- printf("\n\n 输入完成 ! ! ! ! \n");
- }
- void each() //统计各院系的总分
- {
- printf("\n 对应的格式为:\n 院系代号:团体总成绩\n\n ");
- for(i=1;i<=a;i++)
- {
- printf("%2d:%3d ",i,f[i][0].num);
- if(i%5==0)
- printf("\n ");
- }
- }
- void bianhao()
- {
- printf("\n项目代号 ");
- for(i=1;i<=c+d;i++)
- {
- if(i>9)
- printf("%4d ",i);
- else
- printf("%5d ",i);
- }
- printf("\n");
- printf("院系代号 \n");
- for(i=1;i<=a;i++)
- {
- printf(" %4d ",i);
- for(b=1;b<=c+d;b++)
- {
- if(f[i][b].num>9)
- printf("%4d",f[i][b].num);
- else
- printf("%5d",f[i][b].num);
- }
- printf("\n");
- }
- }
- void zongfen()
- {
- struct nod
- {
- int ke;
- int num;
- };
- int h;
- struct nod *de;
- de=(struct nod *)malloc(sizeof(struct nod)*a+1);
- printf("\n 按院系编号排序输出\n\n");
- printf(" 院系代号 总分\n\n");
- for(i=1;i<=a;i++)
- {
- de[i].ke=i;
- de[i].num=f[i][0].num;
- }
- for(i=1;i<=a;i++)
- {
- for(b=i;b<=a;b++)
- {
- if(de[b].num>de[i].num)
- {
- h=de[b].ke;
- de[b].ke=de[i].ke;
- de[i].ke=h;
- h=de[b].num;
- de[b].num=de[i].num;
- de[i].num=h;
- }
- }
- }
- for(i=1;i<=a;i++)
- {
- printf("%13d%8d\n",de[i].ke,de[i].num);
- }
- }
- void nanzong()
- {
- struct nod
- {
- int ke;
- int num;
- };
- int ha;
- struct nod *de;
- de=(struct nod *)malloc(sizeof(struct nod)*a+1);
- printf("\n 按男子团体总分排序输出\n\n");
- printf(" 院系代号 男子团体总分\n\n");
- for(i=1;i<=a;i++)
- {
- de[i].ke=i;
- de[i].num=f[i][c+d+1].num;
- }
- for(i=1;i<=a;i++)
- {
- for(b=i;b<=a;b++)
- {
- if(de[b].num>de[i].num)
- {
- ha=de[b].ke;
- de[b].ke=de[i].ke;
- de[i].ke=ha;
- ha=de[b].num;
- de[b].num=de[i].num;
- de[i].num=ha;
- }
- }
- }
- for(i=1;i<=a;i++)
- {
- printf("%13d%12d\n",de[i].ke,de[i].num);
- }
- }
- void nvzong() //选择排序
- {
- struct nod
- {
- int ke;
- int num;
- };
- int ha;
- struct nod *de;
- de=(struct nod *)malloc(sizeof(struct nod)*a+1);
- printf(" 按女子团体总分排序输出\n\n");
- printf(" 院系代号 女子团体总分\n\n");
- for(i=1;i<=a;i++)
- {
- de[i].ke=i;
- de[i].num=f[i][c+d+2].num;
- }
- for(i=1;i<=a;i++)
- {
- for(b=i;b<=a;b++)
- {
- if(de[b].num>de[i].num)
- {
- ha=de[b].ke;
- de[b].ke=de[i].ke;
- de[i].ke=ha;
- ha=de[b].num;
- de[b].num=de[i].num;
- de[i].num=ha;
- }
- }
- }
- for(i=1;i<=a;i++)
- {
- printf("%15d%13d\n",de[i].ke,de[i].num);
- }
- }
- void xueyuan()
- {
- int dr,dt;
- printf("\n请输入您要查询的院系代号:");
- aly:scanf("%d",&dr);
- if(dr>a||dr<1)
- {
- printf("院系代号不存在,重新输入\n");
- goto aly;
- }
- printf("请输入您要查询的项目代号:");
- alo:scanf("%d",&dt);
- if(dt>c+d||dt<1)
- {
- printf("项目代号不存在,重新输入\n");
- goto alo;
- }
- printf("\n\n %3d 院系的%3d 项目成绩为%3d\n",dr,dt,f[dr][dt].num);
- }
- void xiangmu()
- {
- int ge,sedy=0;
- printf("\n 请输入您要查询的项目代号:");
- all:scanf("%d",&ge);
- printf("\n");
- if(ge>c+d||ge<1)
- {
- printf("没有此项目代号,重新输入\n");
- goto all;
- }
- for(i=1;i<=a;i++)
- {
- if(f[b][ge].num==2)
- sedy=1;
- }
- if(sedy==0)
- {
- printf("此项目没有录入成绩\n");
- return;
- }
- for(i=1;i<=a;i++)
- {
- if(f[i][ge].num==7)
- {
- printf(" 此项目取前5名获奖者\n");
- system("pause");
- break;
- }
- }
- if(i==a+1)
- printf(" 此项目取前3名获奖者\n");
- printf("\n 获胜名单由成绩高到低依次为:\n\n ");
- for(i=7;i>0;i--)
- {
- for(b=1;b<=a;b++)
- {
- if(f[b][ge].num==i)
- printf("%5d",b);
- }
- }
- }
- void(*g[])()={input,each,bianhao,zongfen,nanzong,nvzong,xueyuan,xiangmu,exit};
- void main()
- {
- system("color 58");
- int choos;
- printf("\n\n * * * 运动会分数统计 * * *\n\n\n");
- printf("共有多少个院系参赛:");
- scanf("%d",&a);
- while(a<=0||a>20)
- {
- if(a<=0)
- {
- printf("\n 参赛院系个数不能是负数或零\n\n");
- printf("共有多少个院系参赛:");
- scanf("%d",&a);
- }
- if(a>20)
- {
- printf("\n 参赛院系个数不能大于20\n\n");
- printf("共有多少个院系参赛:");
- scanf("%d",&a);
- }
- }
- printf("有几个男子组:");
- scanf("%d",&c);
- printf("有几个女子组:");
- scanf("%d",&d);
- for(i=0;i<=a;i++)
- {
- f[i]=(struct node *)malloc(sizeof(struct node)*(c+d+3));
- for(j=0;j<=c+d+2;j++)
- f[i][j].num=0;
- }
- choos=choose();
- while(1)
- {
- while(choos<0||choos>8)
- choos=choose();
- (*g[choos])();
- printf("\n");
- choos=choose();
- }
- }
附件: