#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;
}
运动会分数统计
最新推荐文章于 2022-03-08 21:42:55 发布