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

📄 lvx.cpp

📁 参加运动会的n个学校编号为l~n。比赛分成m个男子项目和w个女子项目
💻 CPP
字号:
#include<stdio.h>
#include<conio.h>
#include<windows.h> 
#define fps "%-16d%-8d%-8d%-30s\n"
FILE *fp;
void main()
/*先建立一个结构体数组,再全赋0值  根据项目号判断是否输出*/
/*每项成绩的项目号、(名次)、成绩、姓名和得分*/
{		
	void swap(int x,int y);
	void print(int g,int b[],int c[],int d[],char e[20][20]);
	void save(int g,int b[],int c[],int d[],char e[20][20]);
	struct
	{
		int sn[50][5];      //项目号
		int score[50][5];	//成绩
		int zsore[50];		//该项总得分
	}school[20];
	int q,q1,q2,q3,k[20];
	/*输入有多少学校,男子女子项目 */
	printf("\n\n\n\n\n");
	printf("\n\n\n                           ------------------------\n");
	printf("	   	           ---运动会分数统计系统---\n");
	printf("                           ------------------------");
	getch();
	system("cls");
	printf("\n\n\n声明:\n本系统只适用于20个学校以内,男子项目不超过30个,女子项目不超过20个的,只取前三名或前五名的体育比赛。\n\n");
	int n,m,w,i;
	int a,b,c,d,e,f=0;
	int t,t1[20],t2[20][50][5];
	char ydh[50];
	getch();
	system("cls");
	printf("\n\n\n请输入运动会名称、日期\n");
	scanf("%s",ydh);
	system("cls");
	do
	{
		printf("\n\n\n输入学校数,男子项目数,女子项目数。\n");
		printf("如:输入4,2,1回车(即输入4个学校,2个男子项目数,1个女子项目数)。\n");
		printf("输入错误的话,可以根据提示按1键重新输入。\n");
		getch();
		printf("开始输入\n");
		scanf("%d,%d,%d",&n,&m,&w);
		printf("输入错误请按  1\n继续输入请按其它\n");
	}
	while(getch()=='1');
	for(q1=0;q1<n;q1++)
		for(q2=0;q2<m+w;q2++)
			school[q1].zsore[q2]=0;
		system("cls");
		/*输入运动员姓名及学校名  运动员编号1从到N, 学校编号从0 到n-1*/
		printf("\n\n\n");  
		printf("输入运动员姓名及学校名。\n程序会根据上一步的输入自动进行编号,学校编号从0 到n-1,\n");
		printf("运动员编号为:n×100+k  (n为该运动员所在学校的编号,k为运动员序数)\n");
		printf("如:0号学校的第4个运动员编号为4,5号学校的第4个运动员编号就为404。\n");
		getch();
		printf("\n\n\n");
		char dn[20][100][20],shn[20][20];
		int u,u1,u2[20];
		for(u=0;u<20;u++)u2[u]=0;//u2[u]为第u号学校的学生数
		for(u=0;u<n;u++)
		{l5:{											//l5所在处
			printf("请输入%d号学校名:\n",u);
			scanf("%s",shn[u]);
			for(u1=1;u1<100;u1++)
			{	
				printf("请输入%d号学生名\n",u1+u*100);
				scanf("%s",dn[u][u1]);u2[u]+=1;
				printf("该学校学生已输入完毕(y or n)?\n");
				if(getch()=='y'||getch()=='Y')break;
			}
		}
		printf("输入错误请按  1\n继续输入请按其它\n");
		if(getch()=='1')goto l5;//l5在"请输入%d学校名的首端"
		}
		printf("请进行最后一次核对\n重新输入请按  1\n输入比赛信息请按其它\n");
		if(getch()=='1')goto l5;//l5在"请输入%d学校名"的首端
		system("cls");
		/*输入比赛成绩.先男子后女子  */
		printf("\n\n\n");  
		printf("输入比赛成绩。\n前m个项目为男子项目,后w个项目为女子项目。\n");
		printf("输入每个项目成绩前,根据提示按1或2键回车决定取前三名还是取前五名。\n");
		printf("然后依次按第一名到第末名的顺序,输入运动员编号。\n如:1号项目取前5名,其第3名为运动员301,那么在程序出现:\n");
		printf("\"1号项目的比赛成绩\n取前三名请按   1\n取前五名请按   2\"时,输入1回车。\n");
		printf("然后在程序出现:\n\"请输入No.3的运动员编号\"时,输入301回车。\n输入错误的话,可在整体输完后单独修改。\n");
		printf("若输入不存在的运动员编号,系统会报错,并要求重新输入。");
		getch();
		printf("\n\n\n");
		printf("开始输入\n");
		for(i=0;i<m+w;i++)
		{    l4:{                                        // l4 所在处
			for(q1=0;q1<n;q1++)
			{
				for(q3=0;q3<5;q3++)
				{
					school[q1].sn[i][q3]=0;
					school[q1].score[i][q3]=0;
				}
			}
			printf("%d号项目的比赛成绩\n",i+1);
			printf("取前三名请按   1\n取前五名请按   2\n");
			scanf("%d",&q1);
			if(q1%2)
			{
				printf("请输入No.1的运动员编号\n");
				scanf("%d",&a);
				if(a-a/100*100>u2[a/100]||a-a/100*100==0)
				{
					printf("输入错误\n");
					goto l4;
				}
				school[a/100].sn[i][0]=a-a/100*100;
				school[a/100].score[i][0]+=5;
				t2[a/100][i][0]=5;
				printf("请输入No.2的运动员编号\n");
				scanf("%d",&b);
				if(b-b/100*100>u2[b/100]||b-b/100*100==0)
				{
					printf("输入错误\n");
					goto l4;
				}
				school[b/100].sn[i][1]=b-b/100*100;
				school[b/100].score[i][1]+=3;
				t2[b/100][i][1]=3;
				printf("请输入No.3的运动员编号\n");
				scanf("%d",&c);
				if(c-c/100*100>u2[c/100]||c-c/100*100==0)
				{
					printf("输入错误\n");
					goto l4;
				}
				school[c/100].sn[i][2]=c-c/100*100;
				school[c/100].score[i][2]+=2;
				t2[c/100][i][2]=2;
				continue;
			}
			else
			{
				printf("请输入No.1的运动员编号\n");
				scanf("%d",&a);
				if(a-a/100*100>u2[a/100]||a-a/100*100==0)
				{
					printf("输入错误\n");
					goto l4;
				}
				school[a/100].sn[i][0]=a-a/100*100;
				school[a/100].score[i][0]+=7;
				t2[a/100][i][0]=7;
				printf("请输入No.2的运动员编号\n");
				scanf("%d",&b);
				if(b-b/100*100>u2[b/100]||b-b/100*100==0)
				{
					printf("输入错误\n");
					goto l4;
				}
				school[b/100].sn[i][1]=b-b/100*100;
				school[b/100].score[i][1]+=5;
				t2[b/100][i][1]=5;
				printf("请输入No.3的运动员编号\n");
				scanf("%d",&c);
				if(c-c/100*100>u2[c/100]||c-c/100*100==0)
				{
					printf("输入错误\n");
					goto l4;
				}
				school[c/100].sn[i][2]=c-c/100*100;
				school[c/100].score[i][2]+=3;
				t2[c/100][i][2]=3;
				printf("请输入No.4的运动员编号\n");
				scanf("%d",&d);
				if(d-d/100*100>u2[d/100]||d-d/100*100==0)
				{
					printf("输入错误\n");
					goto l4;
				}
				school[d/100].sn[i][3]=d-d/100*100;
				school[d/100].score[i][3]+=2;
				t2[d/100][i][3]=2;
				printf("请输入No.5的运动员编号\n");
				scanf("%d",&e);
				if(e-e/100*100>u2[e/100]||e-e/100*100==0)
				{
					printf("输入错误\n");
					goto l4;
				}
				school[e/100].sn[i][4]=e-e/100*100;
				school[e/100].score[i][4]+=1;
				t2[e/100][i][4]=1;
			}
		}
		}
		printf("请进行最后一次核对,修改请按  1\n进入主菜单请按其它\n");
		if(getch()=='1')
			while(f<2)                                        
			{
				printf("输入要修改的项目号,名次,错误的选手编号,正确的选手编号。\n");
				printf("如:要将第4号项目的no.3处的运动员编号503改为201,就只要输入:\n");
				printf("4,3,503,201回车即可。\n");
				printf("开始输入:\n");
				scanf("%d,%d,%d,%d",&a,&b,&c,&d);
				school[c/100].sn[a-1][b-1]=0;
				school[d/100].sn[a-1][b-1]=d-d/100*100;
				school[c/100].score[a-1][b-1]-=t2[c/100][a-1][b-1];
				school[d/100].score[a-1][b-1]+=t2[c/100][a-1][b-1];
				printf("修改成功。\n继续修改请按  1回车\n退出请按  2回车\n");
				scanf("%d",&f);
			}
			system("cls");
			/*算每项总分*/
			for(q1=0;q1<n;q1++)
			{
				for(q2=0;q2<m+w;q2++)
				{
					for(q3=0;q3<5;q3++)
						school[q1].zsore[q2]+=school[q1].score[q2][q3];
				}
			}
			//主菜单
l0:{                                                 //l0所在处
	   printf("\t\t查看比赛结果请按  1\n\t\t退出请按其他\n");
	   switch(getch())
	   {
	   case '1':break;
	   default:goto l8;
	   }
   }
   /*产生团体总分报表,内容包括校号、男子团体总分scm、女子团体总分scw和团体总分sc*/
   int scm[20],scw[20],sc[20];
   for(i=0;i<20;i++)
	   scm[i]=scw[i]=sc[i]=0;
   for(q1=0;q1<n;q1++)
   {
	   for(q2=0;q2<m;q2++)
		   scm[q1]+=school[q1].zsore[q2];
   }
   for(q1=0;q1<n;q1++)
   {
	   for(q2=m;q2<m+w;q2++)
		   scw[q1]+=school[q1].zsore[q2];
   }	
   for(i=0;i<n;i++)
	   sc[i]=scm[i]+scw[i];
   //排序
   int ms[20];//男子排名分
   int ws[20];//女子排名分
   int zs[20];//总排名分
   int max;
   for(i=0;i<n;i++)
   {	
	   ms[i]=scm[i];ws[i]=scw[i];zs[i]=sc[i];
   }
   for(q1=0;q1<n-1;q1++)
		for(q2=q1+1;q2<n;q2++)
		   if(ms[q1]<ms[q2])swap(ms[q1],ms[q2]);
		for(q1=0;q1<n-1;q1++)
				for(q2=q1+1;q2<n;q2++)
				   if(ws[q1]<ws[q2])swap(ws[q1],ws[q2]);
				for(q1=0;q1<n-1;q1++)
					for(q2=q1+1;q2<n;q2++)
						if(zs[q1]<zs[q2])swap(zs[q1],zs[q2]);
/*输出  每项成绩的项目号、名次、成绩、姓名和得分 项目编号从0到w+m*/
	for(q1=0;q1<n;q1++)
		{
				printf("%d号学校--%s成绩\n",q1,shn[q1]);
				printf("得分项目编号\t名次\t成绩\t运动员姓名\n");
		for(q2=0;q2<m+w;q2++)
			{
				for(q3=0;q3<5;q3++)
					{
						if(school[q1].sn[q2][q3]!=0)
						{
							t=school[q1].sn[q2][q3];
							printf(fps,q2+1,q3+1,school[q1].score[q2][q3],dn[q1][t]);
						 }	
					}
			}
		}
//输出团体总分报表
//输出男子团体排名	
		printf("\n\n\n男子比赛排名\n\n\n\n");
		printf("名次       \t成绩\t学校号\t校名\n");
		print(n,ms,scm,k,shn);
//输出女子团体排名		
		printf("\n\n\n女子比赛排名\n\n\n\n");
		printf("名次       \t成绩\t学校号\t校名\n");
		print(n,ws,scw,k,shn);
//输出总分排名
		printf("\n\n\n总分排名\n\n\n\n");
		printf("名次       \t成绩\t学校号\t校名\n");
		print(n,zs,sc,k,shn);
		goto l0;
//保存各校成绩
l8:{	printf("保存记录请按  1 键\n按其它键退出系统\n");	
		if(getch()=='1')
		{fp=fopen("比赛记录.txt","a+");
			fprintf(fp,"\n\n\n%s\n",ydh);
			for(q1=0;q1<n;q1++)
					{
						fprintf(fp,"\n\n%d号学校--%s成绩\n\n\n",q1,shn[q1]);
						fprintf(fp,"得分项目编号\t名次\t成绩\t运动员姓名\n");
						for(q2=0;q2<m+w;q2++)
						   for(q3=0;q3<5;q3++)
							   if(school[q1].sn[q2][q3]!=0)
							   {
								   t=school[q1].sn[q2][q3];
								   fprintf(fp,fps,q2+1,q3+1,school[q1].score[q2][q3],dn[q1][t]);
							   }	
					}
			fprintf(fp,"\n\n\n男子比赛排名\n\n\n\n");
			save(n,ms,scm,k,shn);
			fprintf(fp,"\n\n\n女子比赛排名\n\n\n\n");
			save(n,ws,scw,k,shn);
			fprintf(fp,"\n\n\n总分排名\n\n\n\n");
			save(n,zs,sc,k,shn);
			printf("保存完毕!");
			getch();
			fclose(fp);
		}
		exit(0);
   }
}
void swap(int x,int y)
{
	int temp;
	temp= x;
	x= y;
	y=temp;	
}
void save(int g,int b[],int c[],int d[],char e[20][20])
{
	fprintf(fp,"名次       \t成绩\t学校号\t校名\n");
	int n1,n2,n3,a=1;
	   for(n3=0;n3<g;)
	   {
		   n2=0;
		   for(n1=0;n1<g;n1++)
			   if(b[n3]==c[n1])
			   {
				   ++n2;d[n3]=n1;		
				   fprintf(fp,fps,a,b[n3],d[n3],e[d[n3]]);
			   }
		   n3+=n2;a++;	
	   }
}
void print(int g,int b[],int c[],int d[],char e[20][20])
{
	int n1,n2,n3,a=1;
	   for(n3=0;n3<g;)
	   {
		   n2=0;
		   for(n1=0;n1<g;n1++)
			   if(b[n3]==c[n1])
			   {
				   ++n2;d[n3]=n1;		
				   printf(fps,a,b[n3],d[n3],e[d[n3]]);
			   }
		   n3+=n2;a++;	
	   }
}

⌨️ 快捷键说明

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