#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;}