运动会分数统计的实验报告(数组实现)

运动会分数统计的实验报告(数组实现)

有n个学校参加运动会,学校名对应的编号为1……n。比赛分成m个男子项目,和w个女子项目。每个项目取前三名积分,前三名的积分分别为:5、3、2;数据可以存储在一个数据文件中,数据结构、具体数据自定。
具体功能有:
(1)从键盘输入学校、项目、项目得分信息;
(2)能统计各学校总分;
(3)能统计各个项目的前三名;
(4)可以按学校编号或名称、学校总分、男女团体总分排序输出;
(5)可以按学校编号查询学校某个项目的情况;
(6)可以按项目编号查询取得前三名的学校。
(7)数据存入文件并能随时查询。
设计要求:
(1)符合课题要求,实现相应功能;
(2) 要求界面友好美观,操作方便易行;
(3) 注意程序的实用性、安全性;

所用的编译器是 Dev-C++5.11
在编写的过程中,借鉴了前辈的代码。
链接: 前辈代码.

遇到的问题
在结构体数组中我在一个函数中给了一个元素值,但在另一个函数中调用不出来,只能得到乱码;
在这里插入图片描述

解决方案:
再创建一个数组,将原有的数组

 node g[65];

变为

typedef struct 
 { node g[65];
 	
 }lnode;

接着 利用 “引用 &”从而对每个函数的数据进行赋值.

void count(lnode &l);

进而保存当前修改数组的数据。

源码如下:


#include<stdio.h>
#include<malloc.h>
#include <iostream> 
#include<stdlib.h>
#include<math.h>
#define  N 5
FILE *fp;
       
 int m;//男子项目数 
   int w; //女子项目数 
   int n;//学校个数 
typedef struct woman
{ int num;  // 编号 
  int score; 
  int rank2;
 	
} woman;

typedef struct man
{ int num;
  int score1;
  int rank1;
 	
} man;

typedef struct node
{ int schoolnum;//学校编号 
  int score;//学校总分 
  char name[55];//学校姓名 
  int manscore;//男团总分 
  int wscore;//女团总分 
  woman  woitem[N];
  man  manitem[N];
  	
} node;
 typedef struct 
 { node g[65];
 	
 }lnode;


void scanf(lnode &l) ;
void count(lnode &l);
void schooltotalsort(lnode &l); //按学校得分编号排序
void  schoolsumsort(lnode &l); //按学校的编号排序 
void mansort(lnode &l);   //按男子团体 成绩排序 
void womansort( lnode &l); //按女子团体 成绩排序 
void schoolinquiry(lnode &l);   //按学校编号查询某项目 
void itemnum(lnode &l);        //以项目编号查询前三名的学校


void menu()
{ printf(" \t\t\t运动会分数统计系统\n ") ;
  printf("\n");
  
	printf("\t\t\t *** 1 输入运动会的相关信息***\n");
	printf("\t\t\t *** 2 运动会排名***\n");
	printf("\t\t\t *** 3 参赛学校信息查询***\n");
	printf("\t\t\t *** 4退 出***\n");
    printf("*******请选择要进行的操作1/2/3/4/5*******\n"); 		
    }
    
    void menu2() 
{  printf("***\t\t\t运动会排名***\n"); 
   printf("\n");
   printf("\t\t\t ***1 学校总分排名***\n");
   printf("\t\t\t ***2 学校编号排名***\n");
   printf("\t\t\t ***3 男子团体排名***\n");
   printf("\t\t\t ***4 女子团体排名***\n");	
   printf("\t\t\t ***5 退出***\n"); 
   printf("*******请选择要进行的操作1/2/3/4/5*******\n"); 		
   }   
   
void menu3()
{    printf("\t\t\t***运动会查询***\n");
 	printf("\n");
	printf("\t\t\t *** 1 学校编号查询学校某个项目***\n");
	printf("\t\t\t *** 2 项目编号查询取得前三名的学校***\n");
	printf("\t\t\t *** 3 退出***\n");
  	printf("******* 选择要进行的操作1/2/3***\n"); 	
   } 
 
main()
{  lnode l;

	int a,b,c;
	menu();
	scanf("%d",&a);
	while (a!=4)
{
		switch(a)
{  	 case 1: scanf( l);
            count(l);
	        getchar();
	       	system("pause");
		      menu();
	        break;
	         
	 case 2: menu2();       
           	scanf("%d",&b);
           	while(b!=5)
	{
	        switch(b)
	    { case 1:  schooltotalsort(l);
	            	getchar();
	            	menu2();
	    	   break;
	      case 2: 	schoolsumsort(l);
	                getchar();
	            	menu2();
			        break;
		  case 3: 	mansort(l);       
			        getchar();
	            	menu2();
			        break;
		 case 4: 	womansort(l);
			        getchar();
	            	menu2();
			        break;  
		case 5:    	getchar();
	                menu();
			        break;         
			}  
				scanf("%d",&b);	
						
	}
	   
				menu();
				break;
	   
	  case 3:    menu3();
	            scanf("%d",&c);
	          while(c!=3)
		{

			  switch(c)  
	      { case 1:  schoolinquiry(l); 
	      	         getchar();
	            	menu3();
			        break;
	      	case 2:itemnum(l); 
	      	        getchar();
	            	menu3();
			        break;
	      	case 3: getchar();
	                menu();
			        break;  
	     
				 }       
	           	scanf("%d",&c);		
			}
					
				menu();
				break;
	  default :  
	              getchar();
	              menu();
				  printf("\n\t\t\t****请输入正确操作***\n");
				  break; 	


}

scanf("%d",&a);
	
}
return 0;
}
 
void scanf( lnode &l) //输入信息 
{  int i,j;
    int z; 
 node t;

  	printf("请先输入运动会信息\n");   
	printf("输入学校个数:");
scanf("%d",&n);
getchar(); 
printf("输入男子项目个数:");
    scanf("%d",&m);
    getchar(); 
printf("输入女子项目个数:");
    scanf("%d",&w);getchar(); 
      if((fp=fopen("sports.txt","w"))==NULL)
	  {
     	printf("文件打开失败\n");
     	getchar();
     	exit(1);
	 } 
	 else 
	 {
for(i=0;i<n;i++)
{    
      printf("\n请输入第%d个学校编号:",i+1);
      scanf("%d",&l.g[i].schoolnum); 
    	fprintf(fp,"第%d所学校的编号为:",i+1);
     	fprintf(fp,"%d\n",l.g[i].schoolnum);
     		printf("第%d所学校的名字为:",i+1);
    	scanf("%s",&l.g[i].name ); 
		 fprintf(fp,"第%d所学校男子信息录入\n",i+1);
     
   	fprintf(fp,"第%d所学校的名字为:",i+1);
     	fprintf(fp,"%s\n",l.g[i].name);
     	printf("\n");
    
    for(j=0;j<m;j++)	
{  printf("输入第%d所学校的第%d个男子项目编号",i+1,j+1);
   scanf("%d",&l.g[i].manitem[j].num );
    printf("\n");
    printf("该学校该项目获得第几名?");
    scanf("%d",&l.g[i].manitem[j].rank1   );
    	fprintf(fp,"编号:%d\t",l.g[i].manitem[j].num);
			fprintf(fp,"名次:%d\n",l.g[i].manitem[j].rank1); 
   printf("\n");	
	}
	 fprintf(fp,"第%d所学校女子信息录入\n",i+1);
  for(z=0;z<w;z++)  
   {
   printf("输入第%d所学校的第%d个女子项目编号",i+1,z+1); 
   scanf("%d",&l.g[i].woitem[z].num  );
    printf("\n");
      printf("该学校该项目获得第几名?");
		scanf("%d",&l.g[i].woitem[z].rank2   ); 
			 printf("\n");
   fprintf(fp,"编号:%d\t",l.g[i].woitem[z].num);
			fprintf(fp,"名次:%d\n",l.g[i].woitem[z].rank2 ); 
			printf("\n");		
	}	
		printf("_______________________________--\n");	
}

 fclose(fp);
}



}

void count(lnode &l)
{int i,j;
    int z;

	 
	
	int a=0;
   int b=0;
	
  for(i=0;i<n;i++)  //利用 积分制计算分数 
 { 	printf("学校的编号 %d \n",l.g[i].schoolnum );
	printf("学校的名字 %s \n",l.g[i].name );
 
 for(j=0;j<m;j++)//男子项目 
 	{ switch(l.g[i].manitem[j].rank1      ) 
 	{
		 	case 1: l.g[i].manitem[j].score1 =5; break ;
 		case 2: l.g[i].manitem[j].score1 =3; break ; 
		case 3:l.g[i].manitem[j].score1 =2; break ;
 		default : l.g[i].manitem[j].score1 =1; break ;
 		
	 }
 }
 	for(z=0;z<w;z++) //女子项目 
 	{  switch(l.g[i].woitem[z].rank2  )
 	{
		case 1: l.g[i].woitem[z].score=5; break ;  
 		case 2: l.g[i].woitem[z].score=3; break ;  
 		case 3: l.g[i].woitem[z].score=2; break ;  
 		default:l.g[i].woitem[z].score=1; break ;  
	 }	
	} 
	

	for(j=0;j<m;j++)  //男子项目名次及分数 
  {  
    printf("第%d男子项目的编号为 %d\n",j+1,l.g[i].manitem[j].num   );
	printf("第%d男子项目的名次为 %d\t",j+1,l.g[i].manitem[j].rank1  );
	printf("男子分数:%d\n",l.g[i].manitem[j].score1   );
	a =a+l.g[i].manitem[j].score1;  
  } 
  
  l.g[i].manscore=a;
	for(z=0;z<w;z++)  //女子项目的名次及分数 
{
 printf("第%d女子项目的编号为%d\n",z+1,l.g[i].woitem[z].num );
 printf("第%d女子项目的名次为%d\t",z+1,l.g[i].woitem[z].rank2  );
  printf("女子分数 %d\n",l.g[i].woitem[z].score  );	
  b =b+l.g[i].woitem[z].score ; 	
 } 
 l.g[i].wscore=b;
    
	l.g[i].score  =l.g[i].manscore +l.g[i].wscore ; 
	
	printf("男子项目总分数是:%d\t",l.g[i].manscore ); 
	printf("女子项目总分数是:%d\n",l.g[i].wscore);
	printf("分数和:%d\n",l.g[i].score );
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");	
	 	printf("\n");
	a=0;
	b=0;
}	
}
 


//排名
void  schooltotalsort(lnode &l )              //按学校总分排序 
{ int i , j,k ; 
  node t;
for(i=0;i<n;i++)
{   k=i ;
    for(j=0;j<n-i;j++) 
 {
 if(l.g[j].score <l.g[j+1].score  )  
  {
    t=l.g[j];
   l.g[j]=l.g[j+1];
   l.g[j=1]=t; 
		}
 } 
}
    printf("\t\t运动会学校排名\n\n");
	printf("\t学校编号\t名称学校\t学校总分数\n");
for(i=0;i<n;i++)
{ printf("\t%d\t\t%s\t\t%d\n",l.g[i].schoolnum ,l.g[i].name ,l.g[i].score );

}

printf("***\n");

}

void  schoolsumsort(lnode &l) //按学校的编号排序 
{  	int i , j,k ;   
  node t;      

for(i=0;i<n;i++)
{
	k=i;
    for(j=0;j<n-i;j++) 
{
  if(l.g[j].schoolnum  <l.g[j+1].schoolnum  )  
  {
    t=l.g[j];
   l.g[j]=l.g[j+1];
   l.g[j+1]=t; 
	}
}
 } 

    printf("\t\t运动会学校排名\n\n");
	printf("\t学校编号\t名称学校\t学校总分数\n");
    for(i=0;i<n;i++)
{ printf("\t%d\t\t%s\t\t%d\n",l.g[i].schoolnum ,l.g[i].name ,l.g[i].score );

 }

printf("***\n");
	
}

void mansort(lnode &l)   //按男子团体 成绩排序 
{ int i , j ,k;    
  node t;
 
for(i=0;i<n;i++)
{   k=i;
   for(j=0;j<n-i;j++) 
 { if(l.g[j].manscore <l.g[j+1].manscore     )
  { t=l.g[j];
    l.g[j]=l.g[j+1];
    l.g[j+1]=t;	
	}
    	}	
}
printf("\t\t\t男子项目团体排名\n\n"); 
	printf("\t学校编号\t学校名称\t学校男子项目的编号\t学校男子团体成绩\n");
for(i=0;i<n;i++)
{  
 for(j=0;j<m;j++)	
 {
   printf("\t%d\t\t%s\t\t%d\t\t\t\t%d\n",l.g[i].schoolnum ,l.g[i].name , l.g[i].manitem[j].num,l.g[i].manscore  );	
  }
}
printf("*********************\n");

}

void womansort(lnode &l)//按女子团体 成绩排序 
{ int i , j,k ;    
  node t;
  
  for(i=0;i<n;i++)	
{  k=i;
 
 
   for(j=0;j<n-i;j++) 
  {
    if( l.g[j].wscore <l.g[j+1].wscore     )
  { t=l.g[j];
   l.g[j]=l.g[j+1];
    l.g[j+1]=t;	
	}
}

	}	
	printf("\t\t\t女子项目团体排名\n\n");
	printf("\t学校编号\t学校名称\t学校女子团体的编号\t学校女子项目团体成绩\n");
	for(i=0;i<n;i++)
{  
   for(j=0;j<m;j++)	
 {
    printf("\t%d\t\t%s\t\t%d\t\t\t\t%d\n",l.g[i].schoolnum ,l.g[i].name, l.g[i].woitem[j].num ,l.g[i].wscore  );	
  }
}
printf("*********************\n");
	
	
   }

 // 查询 
void schoolinquiry(lnode &l)   //按学校编号查询    
{   int i,j,k,a; 
    int c,d,q;     
	int coco =0;    
  printf("****按学校编号查询****\n"); 
	printf("\t\t **** 1 查询全部项目***\n");
	printf("\t\t **** 2 查询具体单个项目***\n");
	printf("\t\t **** 0 返回上一单元***\n");
	printf("\t\t\t您要进行的操作1/2/0.....***\n");
scanf("%d",&a);
if(a==0)
{
  printf("任意键返回*。。、*\n");
 return ;
}

if(a==1)
{ int b;
   int flag =1;
  printf("输入要查询的学校编号\n");
  scanf("%d",&b);
  printf("\n\n");
  for(i=0;i<n;i++)
  { if(l.g[i].schoolnum ==b) 
  	{ flag =0;
  		 printf("该学校男子项目\n");
  	for(j=0;j<m;j++) 	
  	{
  		printf("男子项目 %d 排名%d\t",j+1,l.g[i].manitem[j].rank1 );
     	printf(" 得分%d\n",l.g[i].manitem[j].score1 );
  	  }	
  	printf("男子项目的总分为%d\n",l.g[i].manscore  );	
  	
  		printf("该学校女子项目\n");
  	for( k=0;k<w;k++)	
    {   
  	printf("女子项目  %d  排名%d\t",k+1,l.g[i].woitem[k].rank2 );
    printf("女子项目  %d  得分%d\n",k+1,l.g[i].woitem[k].score );
     }	
  	printf("女子项目的总得分是%d\n\n",l.g[i].wscore );
    
	 }
  } 	 
  	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");	
	 	printf("\n");
 if( flag )	
{ printf("查无此校。\n");
   } 	
}
else if(a==2) 
  { printf("请输入您要查询的学校的编号\n");
  	scanf("%d",&c);
  	for(i=0;i<n;i++)
  { if(l.g[i].schoolnum ==c)
     coco=1;               
	}
	
	
	if(coco)
 {  printf("******\n");
   printf(" 1 男子项目\n");
	printf(" 2 女子项目\n");
	printf(" 0 返回上一单元\n");
	printf("您要进行的操作1/2/0***\n");
   scanf("%d",&d);
   if(d==0)
   { printf("任意返回。。、\n");
    return ;
   }
   printf("查询的项目的编号是?\n");
   scanf("%d",&q);

   if(d==1) 
   { int flag =1;
    for(i=0;i<n;i++ )
   	{ for(j=0;j<m;j++) 
   	 { flag=0;
   	  if(q==l.g[i].manitem[j].num   )
   	 	{ 
   	 	printf("男子项目 %d 排名%d,\t",j+1,l.g[i].manitem[j].rank1 );
     	printf("得分%d\n",l.g[i].manitem[j].score1 );
                                                   }
	     	}
	     }
	     	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");	
	 	printf("\n");
   		if(flag)
   	 {
     	printf("该学校并没有参加该项运动\n");
						}	

   }
   if(d==2)
{ int flag =1;
  for(i=0;i<n;i++ ) 
   { for(j=0;j<w;j++)
    {  flag=0;
	if(q==l.g[i].woitem[j].num  )   
   	 { printf("女子项目%d 排名%d,\t",j+1,l.g[i].woitem[j].rank2 );
	   printf("得分%d\n",l.g[i].woitem[j].score ); 
		}
     }
        }
    	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");	
	   printf("\n");
	   if(flag)
   	 {
    printf("该学校并没有参加该项运动\n");
						}
	  
	   }	
  if(d<0||d>2) 	
   { 
   		printf("无此选项\n");
   		printf("按任意键返回\n");
   	return ;
   	
	   }	
   	
   }
   else
 { 
   	printf("查无此校。\n"); 
   }
	 	
	   } 
   	
  if(a<0||a>2) 	
   {printf("输入错误\n");
		printf("按任意键返回\n");
		return;
	   }	
   	
   	
   }
   
void itemnum(lnode &l) 
   //以项目编号查询前三名的学校
{  int a,b;
   int i,j,k;
   int flag=0;	

  node t;
   printf("\n\n\n");
	printf("\t\t\t ***查询女子/男子男子项目 ***\n\n"); 
	printf("\t\t\t ***1 *** 男子项目***\n");
	printf("\t\t\t ***2 ***女子项目***\n");
	printf("\t\t\t ***0 ***返回上一单元\n");
	printf("*******您要进行的操作1/2/0.....***\n");
    scanf("%d",&a);
	if(a==0) 
	{ 	printf("\t\t\t按任意键返回上一单元\n");
		return;
	}
	
	printf("输入需要查询项目编号\n");
   scanf("%d",&b);
   
    if(a==1)
   { 
   for(i=0;i<n;i++)
   	{ for(j=0;j<m;j++)
   	  { if(b==l.g[i].manitem[j].num  )

   	  	 flag=1;
			 }	
	   }
	   
	for(i=0;i<n;i++)
 { for(j=0;j<n-i;j++)
  {
	if(l.g[i].manitem[j].score1<l.g[i+1].manitem[j].score1    )
  	{ t=l.g[i];
  	  l.g[i]=l.g[i+1]; 
  	  l.g[i+1]=t;
	  }
    }
   }	   
	   
     if(flag)	   
{ printf("\t学校编号\t学校名字\t项目编号\t项目名次\t项目分数\n");
   if(n<3)
 { for(i=0;i<n;i++)
  for(j=0;j<m;j++)
  {
   printf("\t%d\t\t %s\t\t %d\t\t %d\t\t %d\n ",l.g[i].schoolnum ,l.g[i].name,
   l.g[i].manitem[j].num ,l.g[i].manitem[j].rank1,l.g[i].manitem[j].score1 );
  }
  printf("\n\n");
   }
else	
 { for(i=0;i<3;i++)
  for(j=0;j<m;j++)
   {
  printf("\t%d\t\t %s\t\t %d\t\t %d\t\t %d\n ",l.g[i].schoolnum ,l.g[i].name ,
  l.g[i].manitem[j].num ,l.g[i].manitem[j].rank1,l.g[i].manitem[j].score1 );
  }
   printf("\n\n");
 }
	   }	   
else { 
	printf("查无此项目.\n");
   }  
          }
     
	if(a==2)
{   for(i=0;i<n;i++)
   	{ for(j=0;j<w;j++)
   	  { if(b== l.g[i].woitem[j].num  )
   	  {	
   	  	 flag=1;
			 }	
	   }
	} 
	 
	for(i=0;i<n;i++)
 { for(j=0;j<n-i;j++)
  {
	if(l.g[i].woitem[j].score <l.g[i+1].woitem[j].score  )
  	{ t=l.g[i];
  	  l.g[i]=l.g[i+1]; 
  	 l.g[i+1]=t;
	  }
    }
   }	   
	
   if(flag)	   
{ printf("\t学校编号\t学校名字\t项目编号\t项目名次\t项目分数\n");
   if(n<3)
 { for(i=0;i<n;i++)
  for(j=0;j<w;j++)
  {
   printf("\t%d\t\t %s\t\t %d\t\t %d\t\t %d\n ",l.g[i].schoolnum ,l.g[i].name  ,
   l.g[i].woitem[j].num  ,l.g[i].woitem[j].rank2 ,l.g[i].woitem[j].score  );
  }
  printf("\n\n");
   }
else	
 { for(i=0;i<3;i++)
  for(j=0;j<w;j++)
   {
  printf("\t%d\t\t %s\t\t %d\t\t %d\t\t %d\n ",l.g[i].schoolnum ,l.g[i].name ,
 l.g[i].woitem[j].num ,l.g[i].woitem[j].rank2  ,l.g[i].woitem[j].score   );
  }
   printf("\n\n");
 }
	   }	   
else { 
	printf("查无此项目.\n");
 
 
   }  
	
}
 if(a<0||a>2) 
{   printf("输入错误.\n");
		printf("按任意键返回\n");
		return;
 }
}


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述若有什么疑问欢迎交流。

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值