运动会分数统计——数据结构实习

任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)

功能要求

(1)     可以输入各个项目的前三名或前五名的成绩;

(2)     能统计各学校总分;

(3)     可以按学校编号、学校总分、男女团体总分排序输出;

(4)     可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。


好吧,这个还是代码从学长那里抄的,实习工程量太大,时间太短,哭唧唧;

#include<stdio.h>
#include<string.h>
#include<process.h>
#define N 2    //学校个数
#define bm 4   //男团体个数
#define gm 3    //女团体个数
void xuanze();
void xunhuan();
struct match {//比赛项目 
	int matchnum;
	int rank[3];
} mat[bm+gm];
struct school {//学校 
	int schoolnum;
	struct match mat[bm+gm];
	int total;
	int boytotal;
	int girltotal;
}sch[N];
void huanyingni() {//开始界面 
	printf("\t***^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^***\n\n");
	printf("                     欢迎使用运动会分数统计系统\n\n");
	printf("\t***^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^***\n\n ");
}
void input() {//输入成绩 
	int i,j,k;
	for(i=0;i<N;i++) {     //初始化分数
		sch[i].total=0;
		sch[i].boytotal=0;
		sch[i].girltotal=0;
		for(k=0;k<bm+gm;k++) { 
			sch[i].mat[k].rank[0]=0;
			sch[i].mat[k].rank[1]=0;
			sch[i].mat[k].rank[2]=0;
			sch[i].mat[k].matchnum=k+1;
		}
	}
	printf("		*********输入成绩**********\n");
    printf("###输入说明:\n");
    printf(" 1.学校编号为1--%d; 项目编号为1--%d (1-%d为男子项目,%d-%d为女子项目).\n",N,bm+gm,bm,bm+1,bm+gm);
    printf(" 2. 成绩只能是'0'或'1'\n('0'表示没获得该项目的该名次,'1'表示获得了该项目的该名次.以'Tab'键前进。)\n",N);
	for(i=0;i<N;i++) {
		printf("******请输入学校编号: ");
		loop3:scanf("%d",&sch[i].schoolnum);
	 	if(sch[i].schoolnum<0||sch[i].schoolnum>N) {
		 	printf("输入错误(只能是1-%d)请重新输入:",N);
		 	goto loop3;
	 	}
       	printf("项目编号	");
        for(k=0;k<bm+gm;k++)
        	printf("%d	",sch[i].mat[k].matchnum);
        printf("\n");
      	for(j=0;j<3;j++) {        	
			loop: printf("第(%d)名:",j+1); 
	  		for(k=0;k<bm+gm;k++)
	   			scanf("	%d",&sch[i].mat[k].rank[j]);
	  		for(k=0;k<bm+gm;k++)
		   	if(sch[i].mat[k].rank[j]!=0&&sch[i].mat[k].rank[j]!=1) {
		   printf("输入错误,请重新输入,成绩只能是'0'或'1'\n");
		   goto loop;
		   }
	    
	  }
   }
 }


void totaljisuan()
{
	int i,k,b;
     for(i=0;i<N;i++)
	for(k=0,b=0;k<bm+gm;k++)
	{  
		   	b=sch[i].mat[k].rank[0]*5+sch[i].mat[k].rank[1]*3+sch[i].mat[k].rank[2]*2;
		    sch[i].total=sch[i].total+b;
			if(k<bm)
			    sch[i].boytotal=sch[i].boytotal+b;
			if(k>=bm)
				sch[i].girltotal=sch[i].girltotal+b;
	}
}
void mulu(){
	printf("\n\n                                 **系统目录**\n");   //目录
	printf("\t\t ************************************\n");
	
	printf("\t\t*   1.统计各学校总分                 *\t \n");
	printf("\t\t*   2.按学校编号排序输出             *\t \n");
	printf("\t\t*   3.按学校总分排序输出             *\t \n");
	printf("\t\t*   4.按男团体总分排序输出           *\t \n");
	printf("\t\t*   5.按女团体总分排序输出           *\t \n");
	printf("\t\t*   6.按学校编号查询学校某个项目情况 *\t \n");
	printf("\t\t*   7.按项目编号查询取得名次的学校   *\t \n");
	printf("\t\t*   0.退出                           *\t \n");
	printf("\t\t ************************************\n");
}
void funct0()                       //退出系统
{
printf("\n\t\t*******    谢谢使用!   *******\n");
printf("\n\t\t*******    谢谢使用!   *******\n");
exit(0);
}

void funct1()      //统计各学校总分
{   int i,q;
	printf("		**********统计各学校总分**********\n");
    printf("	**学校编号**\t\t\t\t**总分**\n");
    for(i=0;i<N;i++)
    printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total);
	printf("\n");printf("\n");
		printf("##########    0:退出;1:返回目录。\n");
		printf("****请选择: ");
loop2:scanf("%d",&q);
		if(q==0) funct0();
		if(q==1) xunhuan(); 
        else {
			printf("输入错误(只能是0或1),请重新输入:");
        goto loop2;
		}
}
void funct2()                 //按学校编号排序
{
	struct school sch1;
	int i,j,q;
	for(j=0;j<N-1;j++)
	for(i=0;i<N-j-1;i++)
		if(sch[i].schoolnum>sch[i+1].schoolnum)
		{
			sch1=sch[i];
			sch[i]=sch[i+1];
			sch[i+1]=sch1;
		}
    
	printf("		**********按学校编号排序**********\n");	
	printf("	**学校编号**\t\t\t\t**总分**\n");
    for(i=0;i<N;i++)
    printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total);
	printf("\n");printf("\n");
		printf("##########   0:退出;1:返回目录。\n");
		printf("****请选择: ");
loop2:	scanf("%d",&q);
		if(q==0) funct0();
		if(q==1) xunhuan(); 
         else {
			printf("输入错误(只能是0或1),请重新输入:");
        goto loop2;
		}
 }
void funct3()               //按学校总分排序
{
    struct school sch1;
	int i,j,q;
	for(j=0;j<N-1;j++)
	for(i=0;i<N-j-1;i++)
		if(sch[i].total<sch[i+1].total)
		{
			sch1=sch[i];
			sch[i]=sch[i+1];
			sch[i+1]=sch1;
		}
    printf("		**********按学校总分排序**********\n");	
	printf("	**学校编号**\t\t\t\t**总分**\n");
    for(i=0;i<N;i++)
    printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total);
    printf("\n");printf("\n");
		printf("##########   0:退出;1:返回目录。\n");
		printf("****请选择: ");
loop2:	scanf("%d",&q);
		if(q==0) funct0();
		if(q==1) xunhuan(); 
        else {
			printf("输入错误(只能是0或1),请重新输入:");
            goto loop2;
		}
}
void funct4()                    //按男团体总分排序
{
    struct school sch1;
	int i,j,q;
	for(j=0;j<N-1;j++)
	for(i=0;i<N-j-1;i++)
		if(sch[i].boytotal<sch[i+1].boytotal)
		{
			sch1=sch[i];
			sch[i]=sch[i+1];
			sch[i+1]=sch1;
		}
    printf("		**********按男团体总分排序**********\n");	
	printf("       **学校编号**\t\t**总分**\n");
    for(i=0;i<N;i++)
    printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].boytotal);
      printf("\n");printf("\n");
		printf("##########   0:退出;1:返回目录。\n");
		printf("****请选择: ");
loop2:	scanf("%d",&q);
		if(q==0) funct0();
		if(q==1) xunhuan(); 
		else {
			printf("输入错误(只能是0或1),请重新输入:");
            goto loop2;
		}
}
void funct5()               //按女团体总分排序
{
     struct school sch1;
	int i,j,q;
	for(j=0;j<N-1;j++)
	for(i=0;i<N-j-1;i++)
		if(sch[i].girltotal<sch[i+1].girltotal)
		{
			sch1=sch[i];
			sch[i]=sch[i+1];
			sch[i+1]=sch1;
		}
    printf("		**********按女团体总分排序**********\n");	
	printf("       **学校编号**\t\t**总分**\n");
    for(i=0;i<N;i++)
    printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].girltotal);
     printf("\n");printf("\n");
		printf("##########  0:退出;1:返回目录。\n");
		printf("****请选择: ");
loop2:scanf("%d",&q);
		if(q==0) funct0();
		if(q==1) xunhuan();
		else {
			printf("输入错误(只能是0或1),请重新输入:");
            goto loop2;
		}
}
void funct6()             //按学校编号查询学校某个项目情况
{
	int i,n,m,q;
	printf("	**********按学校编号查询学校某个项目情况**********\n");
loop1:	printf("*******请输入所要查询的学校编号: ");
	scanf("%d",&n);
	if(n!=1&&n!=2)
	{
	     printf("!!!!!输入错误,学校编号只能是\"0\"或\"1\",请重新输入!!!!\n");
		 goto loop1;
	}
	printf("*******请输入所要查询的项目编号: ");
	scanf("%d",&m);
	for(i=0;i<N;i++)
		if(n==sch[i].schoolnum)
		{   
			printf("学校编号: %d                  项目编号: %d\n",n,m);
			if(sch[i].mat[m].rank[0]==1)
				printf("第一名(获得)   ");
            if(sch[i].mat[m].rank[1]==1)
				printf("第二名(获得)   ");
            if(sch[i].mat[m].rank[2]==1)
				printf("第三名(获得)   ");
			else
				printf("本校该项目未进入前三名");

		}
		printf("\n");printf("\n");
		printf("##########  0:退出;1:返回目录;2:返回上一级。\n");
		printf("****请选择: ");
loop2:	scanf("%d",&q);
		if(q==1) xunhuan();
		if(q==0) funct0();
		if(q==2) goto loop1;
	    else {
			printf("输入错误(只能是0或1或2),请重新输入:");
            goto loop2;
		}
}
void funct7()              //按项目编号查询取得名次的学校
{   
	int i,t,q;
	printf("	**********按项目编号查询取得名次的学校**********\n");
loop1: printf("*****请输入所要查询的项目编号: ") ;
	scanf("%d",&t);
	printf("项目编号:%d\n",t) ;
	for(i=0;i<N;i++)
	{
	if(sch[i].mat[t-1].rank[0]==1)
		printf("获得第一名的学校编号是:%d \n",sch[i].schoolnum);
	if(sch[i].mat[t-1].rank[1]==1)
		printf("获得第二名的学校编号是:%d \n",sch[i].schoolnum);
	if(sch[i].mat[t-1].rank[2]==1)
		printf("获得第三名的学校编号是:%d \n",sch[i].schoolnum);
	}
	printf("\n");printf("\n");
		printf("##########  0:退出;1:返回目录;2:返回上一级。\n");
		printf("****请选择: ");
loop2:	scanf("%d",&q);
		if(q==1) xunhuan();
		if(q==0) funct0();
		if(q==2) goto loop1;
	    else {
			printf("输入错误(只能是0或1或2),请重新输入:");
            goto loop2;
		}
}
void xunhuan()            //返回目录
{
		int t;
     mulu();
   printf("\t\t请选择(输入0--7)序号:\t");
   scanf("%d",&t);
   while(t!=0&&t!=1&&t!=2&&t!=3&&t!=4&&t!=5&&t!=6&&t!=7)
   {
   printf("输入有误,请重新选择:");
   scanf("%d",&t);
   }
switch(t)
{
case 0:funct0();break;
case 1:funct1();break;
case 2:funct2();break;
case 3:funct3();break;
case 4:funct4();break;
case 5:funct5();break;
case 6:funct6();break;
case 7:funct7();break;

}
}
	
int main()
{
    system("Color 1e");      //改变背景,前景色
    huanyingni();
	
    input();
    totaljisuan();
    xunhuan();

}

猜你喜欢

转载自blog.csdn.net/qq_40830622/article/details/80844951
今日推荐