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

📄 yundongyuan.cpp

📁 运动员成绩统计系统
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
#include<process.h>


typedef	struct	collegenode{
	char	name[10];
	int		number;
	int		ms;
	int		ws;
}collegenode,*collegelist;

typedef	struct	marknode{
	int		number;
	int		score;
	struct	marknode	*next;
}marknode,*marklist;

typedef	struct	itemnode{
	char	name[10];
	int		number;
	marklist	head;
}itemnode,*itemlist;

typedef	struct	playernode{
	char	name[10];
	int		number;
	int		score;
	int		collegenumber;
	char	collegename[10];
	struct	playernode *next;
}playernode,*playerlist;

void	display()
{
	printf("\n******请给出你的选择               ************\n");
	printf("0************请输入报名表           ************\n");
	printf("1************请输入各运动员信息     ************\n");
	printf("2************请输入参赛后的成绩信息 ************\n");
	printf("3************统计各学院团体总分并排序***********\n");
	printf("4************统计运动员个人得分名次************\n");
	printf("5************查询各单项成绩运动员姓名,名次及所属院校;\n");
	printf("6************查询参加各单项的运动员信息************\n");
	printf("7************退出                    ************\n");
	printf("                  (0,1,2,3,4,5,6,7)\n");
}




void	createitem(int a,int b,char s[20])
{
	int			i,total;
	FILE		*fp;
	marknode	mark;
	itemnode	item;
	total=a+b;
	if((fp=fopen(s,"w+"))==NULL){
		printf("打不开此文件\n");
		exit(0);
	}
	for(i=1;i<=total;i++)
	{
	  printf("\n项目名:");
	  scanf("%s",item.name);
	  item.number=i;
	  item.head=NULL;
	  fprintf(fp,"%s   %d",item.name,item.number );
	  printf("\n运动员编号:");
	  scanf("%d",&mark.number);
	  while(mark.number)
	  {
		  mark.next=NULL;
		  fprintf(fp,"   %d",mark.number);
		  printf("\n运动员编号:");
		  scanf("%d",&mark.number);
	  }
		  fprintf(fp,"\n---------------------------------------------");
		  fprintf(fp,"   %d\n",0);
	}
	fclose(fp);          
}


void	createplayer(char s[20])
{
	FILE		*fp;
	playernode	player;
	if((fp=fopen(s,"w+"))==NULL){
      printf("打不开此文件\n");
      exit(0);
   }
	printf("\n运动员编号:");
	scanf("%d",&player.number);
	while(player.number)
	{
		player.score=0;
		printf("\n运动员姓名:");
		scanf("%s",player.name);
		printf("\n学院编号:");
		scanf("%d",&player.collegenumber);
		printf("\n学院名:");
		scanf("%s",player.collegename);
		player.next=NULL;
	    fprintf(fp,"%s   %d   %d   %d   %s \n",player.name ,player.number ,player.score ,player.collegenumber ,player.collegename );
		printf("\n运动员编号:");
	    scanf("%d",&player.number);
	}
	fclose(fp);          
}

itemlist	modifyitem(	itemlist	ih,int n,int m)
{
	marklist	mp,mq;
	int			i,j,a;
	a=n+m;
	printf("\n请输入项目信息:");
	for(i=1;i<=a;i++)
	{
		printf("\n第 %d 项目名: ",i);
		scanf("%s",ih[i].name);
		ih[i].number=i;
		ih[i].head=NULL;
		if(i%2==0){
			printf("\n改项目取前3名");
			for(j=1;j<=3;j++)
			{
				mp=(marklist)malloc(sizeof(marknode));
				printf("\n第 %d  名运动员编号: ",j);
				scanf("%d",&mp->number);
				mp->score=j;
				if(j==1)
				{
					ih[i].head=mp;
					mq=mp;
				}
				else
				{
					mq->next=mp;
					mq=mq->next;
				}
			}
			mq->next=NULL;
		}
		else
		{	
			printf("\n改项目取前5名");
				for(j=1;j<=5;j++)
			{
				mp=(marklist)malloc(sizeof(marknode));
				printf("\n第 %d  名运动员编号: ",j);
				scanf("%d",&mp->number);
				mp->score=j;
				if(j==1)
				{
					ih[i].head=mp;
					mq=mp;
				}
				else
				{
					mq->next=mp;
					mq=mq->next;
				}
			}
			mq->next=NULL;
		}
	}
	return	ih;
}

collegelist 	createcollege(int n)
{
	int				i;
	collegelist		ch;
	ch=(collegelist)malloc(n*sizeof(collegenode));
	for(i=1;i<=n;i++)
	{
		printf("\n学院名:");
		scanf("%s",ch[i].name);
		ch[i].number=i;
		ch[i].ms=ch[i].ws=0;
	}
	return	ch;
}

void	search(int number,char s[20])
{
	FILE		*fp;
	playernode	player;
	int i;
	if((fp=fopen(s,"r"))==NULL)
	{
		printf("\n打不开文件");
			exit(0);
	}
	 	fscanf(fp,"%s %d %d %d %s ",player.name ,&player.number ,&player.score ,&player.collegenumber ,player.collegename );
		for(i=0;i<20;i++){
		if(player.number==number){
			printf("\n%s            %s",player.name,player.collegename);
			break;
		}
			fscanf(fp,"%s %d %d %d %s ",player.name ,&player.number ,&player.score ,&player.collegenumber ,player.collegename );
		
	}

	fclose(fp);
}


void	search1(int number,char s[20])
{
	FILE		*fp;
	playernode	player;
	int i;
	if((fp=fopen(s,"r"))==NULL)
	{
		printf("\n打不开文件");
			exit(0);
	}
	 	fscanf(fp,"%s %d %d %d %s ",player.name ,&player.number ,&player.score ,&player.collegenumber ,player.collegename );
		for(i=0;i<20;i++){
		if(player.number==number){
			printf("      %s      %s",player.name,player.collegename);
			break;
		}
			fscanf(fp,"%s %d %d %d %s ",player.name ,&player.number ,&player.score ,&player.collegenumber ,player.collegename );
		
	}

	fclose(fp);
}


void	inquireitem(char s[20],int n,char str[20])
{
	int		i,flag=0;
	FILE *fp;
	char	string[10];

	itemnode	inode;
	marknode	mark;

	printf("\n请输入要查询的项目 :");
	scanf("%s",string);
	
   if((fp=fopen(s,"r"))==NULL){
      printf("打不开此文件\n");
      exit(0);
   }
  
   for(i=1;i<=n;i++)
   {
	   fscanf(fp,"%s %d",inode.name,&inode.number); 
	   fscanf(fp," %d",&mark.number); 
	   if(strcmp(inode.name,string)==0)
	   {
		   flag=1;
		   printf("运动员姓名  学院名\n");
		   while(mark.number )
		   {
			   	printf("\n---------------------------------------------");
				search(mark.number ,str);
				fscanf(fp," %d",&mark.number);
		   }
	   }
	   else
		   while(mark.number)
		   {
			   fscanf(fp," %d",&mark.number); 
		   }
   }   
    fclose(fp);
   if(!flag)
	    printf("\n对不起没有找到请重输!\n"); 
  
}

playerlist	erect(char	s[20])
{
	FILE	*fp;
	int		flag=0;
	playerlist	head,p,q;
	if((fp=fopen(s,"r"))==NULL){
		printf("\n打不开此文件");
		exit(0);
	}
		p=(playerlist)malloc(sizeof(playernode));
	    fscanf(fp,"%s %d %d %d %s ",p->name ,&p->number ,&p->score ,&p->collegenumber ,p->collegename );

	while(!feof(fp))
	{
	    flag++;
	
		if(flag==1)
		{
			head=p;
			q=p;
			q->next=NULL;
		}
		else
		{
			p->next=q->next;
			q->next=p;
			q=q->next;
		}
			p=(playerlist)malloc(sizeof(playernode));
	    fscanf(fp,"%s %d %d %d %s ",p->name ,&p->number ,&p->score ,&p->collegenumber ,p->collegename );
	}
	fclose(fp);
	return	head;
}


void	statisticplayer(itemlist item,char	s[20],int m,int w,int ming)
{
	playerlist	head,p,q,midstr;
	marklist	mh;
	int			i,mid;
	printf("\n男子前%d名:",ming);
	head=erect(s);
	p=head;
	while(p)
	{
	
		for(i=1;i<=m;i++)
		{
			mh=item[i].head;
			while(mh)
			{
				//count(p,mh,i);
					if(mh->number==p->number)
	{
		if(i%2==0)
		{
			switch(mh->score)
			{
			case 1:	p->score=p->score+5;break;
			case 2: p->score=p->score+3;break;
			case 3: p->score=p->score+2;break;
			}
		}
		else
		{
			switch(mh->score)
			{
			case 1:	p->score=p->score+7;break;
			case 2: p->score=p->score+5;break;
			case 3: p->score=p->score+3;break;
			case 4: p->score=p->score+2;break;
			case 5: p->score=p->score+1;break;
			}
		}
	}
				mh=mh->next;
			}
		}
		p=p->next;
	}
  for(i=1;i<=ming;i++)
	{
		q=head;
		mid=q->score;
		midstr=q;
		q=q->next;
		
		while(q)
		{
			if(q->score>mid)
			{
				mid=q->score;
				midstr=q;
			}
			q=q->next;
		}
		printf("\n---------------------------------------------");
		printf("\n第 %d 名是 %s 得分 %d 学院 %s  ",i,midstr->name,midstr->score,midstr->collegename);
		midstr->score=0;
		midstr=midstr->next;
		while(midstr)
		{
			if(midstr->score==mid)
			{	
				printf("\n---------------------------------------------");
				printf("\n第 %d 名是 %s 得分 %d 学院 %s  ",i,midstr->name,midstr->score,midstr->collegename);
			midstr->score =0;
			}
			midstr=midstr->next;
		}
		printf("\n");
	}

	printf("\n女子前%d名:",ming);
	head=erect(s);
	p=head;
	while(p)
	{
	
		for(i=m+1;i<=m+w;i++)
		{
			mh=item[i].head;
			while(mh)
			{
				//count(p,mh,i);
					if(mh->number==p->number)
	{
		if(i%2==0)
		{
			
			switch(mh->score)
			{
			case 1:	p->score=p->score+5;break;
			case 2: p->score=p->score+3;break;
			case 3: p->score=p->score+2;break;
			}
		}
		else
		{
			switch(mh->score)
			{
			case 1:	p->score=p->score+7;break;
			case 2: p->score=p->score+5;break;
			case 3: p->score=p->score+3;break;
			case 4: p->score=p->score+2;break;
			case 5: p->score=p->score+1;break;
			}
		}
	}
				mh=mh->next;
			}
		}
		p=p->next;
	}
		for(i=1;i<=ming;i++)
	{
		q=head;
		mid=q->score;
		midstr=q;
		q=q->next;
		while(q)
		{
		
			if(q->score>mid)
			{
				mid=q->score;
				midstr=q;
			}
			q=q->next;
		}
		printf("\n---------------------------------------------");
		printf("\n第 %d 名是 %s 得分 %d 学院 %s  ",i,midstr->name,midstr->score,midstr->collegename);
		midstr->score=0;
		midstr=midstr->next;
		while(midstr)
		{
			if(midstr->score==mid)
			{
				printf("\n---------------------------------------------");
				printf("\n第 %d 名是 %s 得分 %d 学院 %s  ",i,midstr->name,midstr->score,midstr->collegename);
			midstr->score =0;
			}
			midstr=midstr->next;
		}
	}
	printf("\n");

}




void	inquireplayer(itemlist	item,int n,char s[20])
{
	marklist	q;
	int			i,num,flag=0;
	char		itemname[10];
	printf("\n请输入要查询的项目名:");
	scanf("%s",itemname);
	for(i=1;i<=n;i++)
	{
		if(strcmp(itemname,item[i].name)==0)
	   {
		   printf("项目名  ");
		   printf("\n%s\n",itemname);
		   printf("名次  运动员姓名  学院");
		   flag=1;
			q=item[i].head;
		   while(q)
		   {
			   printf("\n---------------------------------------------");
			   printf("\n  %d ",q->score);
			   num=q->number;
			   search1(num,s);
			   q=q->next;
		   }
		}
	}
	printf("\n");
	if(!flag)
	   printf("\n对不起没有找到请重输!\n");
}



void	erectcollege(collegelist college,int n,char	s[10])
{
	FILE		*fp;
	int			i;
	if((fp=fopen(s,"w+"))==NULL){
		printf("\n打不开此文件");
		exit(0);
	}
	fprintf(fp,"学院名 男团总分 女团总分 团体总分");
	for(i=1;i<=n;i++)
	{
		fprintf(fp,"\n---------------------------------------------");
		fprintf(fp,"\n%s       %d       %d        %d",college[i].name ,college[i].ms,college[i].ws,college[i].ms+college[i].ws );
	}
	fclose(fp);
}


char	*statisticcollege(itemlist	item,char s[20],int	m,int w,int n,collegelist college)
{
	playerlist	head,p;
	int			i,j,t;
	marklist	mh,nh;
	collegenode cnode;
	collegelist		cp,cq;
	char		str[20];
	
	head=erect(s);
	p=head;
		while(p)
	{
	
		for(i=1;i<=m;i++)
		{
			mh=item[i].head;
			while(mh)
			{
					if(mh->number==p->number)
	{
		if(i%2==0)
		{
			switch(mh->score)
			{
			case 1:	p->score=p->score+5;break;
			case 2: p->score=p->score+3;break;
			case 3: p->score=p->score+2;break;
			}
		}
		else
		{
			switch(mh->score)
			{
			case 1:	p->score=p->score+7;break;
			case 2: p->score=p->score+5;break;
			case 3: p->score=p->score+3;break;
			case 4: p->score=p->score+2;break;
			case 5: p->score=p->score+1;break;
			}
		}
	}
				mh=mh->next;
			}
		}
		p=p->next;
	}
	p=head;
	while(p)
	{
		for(i=1;i<=n;i++)
			if(college[i].number==p->collegenumber)
				college[i].ms=college[i].ms+p->score;
			p=p->next;
	}
	printf("\n男团总分");
	for(i=1;i<n;i++)
		for(j=1;j<n-i;j++)
		{
				
				cp=&college[j];
				cq=&college[j+1];
			if(cp->ms<cq->ms)
			{
				
				t=cp->ms;
				cp->ws =cq->ws ;
				cq->ws =t ;
			}
		}
	printf("\n 学院名		男子总分");
	for(i=1;i<=n;i++)
	{
		printf("\n---------------------------------------------");
		printf("\n%s		%d",college[i].name,college[i].ms);
	}
	head=erect(s);
	p=head;
	while(p)
	{
	
		for(i=m+1;i<=m+w;i++)
		{
			nh=item[i].head;
			while(nh)
			{
				if(nh->number==p->number)
	{
		if(i%2==0)
		{
			switch(nh->score)
			{
			case 1:	p->score=p->score+5;break;
			case 2: p->score=p->score+3;break;
			case 3: p->score=p->score+2;break;
			}
		}
		else
		{
			switch(nh->score)
			{
			case 1:	p->score=p->score+7;break;
			case 2: p->score=p->score+5;break;
			case 3: p->score=p->score+3;break;
			case 4: p->score=p->score+2;break;
			case 5: p->score=p->score+1;break;
			}
		}
	}
				nh=nh->next;
			}
		}
		p=p->next;
	}
	p=head;
	while(p)
	{
		for(i=1;i<=n;i++)
			if(college[i].number==p->collegenumber)
				college[i].ws=college[i].ws+p->score;
			p=p->next;
	}
	printf("\n女团总分");
		for(i=1;i<n;i++)
			for(j=1;j<n-i;j++)
			{
				
				cp=&college[j];
				cq=&college[j+1];
			if(cp->ws <cq->ws )
			{
			
				t=cp->ms;
				cp->ws =cq->ws ;
				cq->ws =t ;
				
			}
			}
	printf("\n 学院名		女子总分");
	for(i=1;i<=n;i++)
	{
		printf("\n---------------------------------------------");
		printf("\n%s		%d",college[i].name,college[i].ws);
	}
	printf("\n学院团体总分");
	printf("\n 学院名		团体总分");
	for(i=1;i<=n;i++)
	{
		printf("\n---------------------------------------------");
		printf("\n%s		%d",college[i].name,college[i].ms+college[i].ws);
	}

	printf("\n请给出存放学院信息的文件名:");
	scanf("%s",str);
	erectcollege(college,n,str);
	return	str;
}



void	main()
{
	int		id,no,mo,wo,mingci;
	char	fn1[20],fn2[20],*fn3;
	collegelist	collegeo;
	itemlist	itemo;
	display();
	printf("\n请输入男子项目数M和女子项目数W:");
	scanf("%d,%d",&mo,&wo);
				   
	printf("\n请给出报名表文件名:");
	scanf("%s",fn1);
	printf("\n请给出运动员表文件名:");
	scanf("%s",fn2);
	display();
    while(1)
		{
		scanf("%d",&id);

		switch(id)
			{
			case 0:	
					printf("\n请按以下格式输入报名表:");
					createitem(mo,wo,fn1); 
					break;
			case 1:
					printf("\n请输入运动员信息:");
				    createplayer(fn2);
					break;
			case 2:	
					printf("\n请按以下格式输入参赛成绩表:");
					printf("\n项目名  名次  运动员编号  分数:");
					itemo=(itemlist) malloc ((mo+wo+1)*sizeof(itemnode));
					itemo=modifyitem(itemo,mo,wo);
					printf("\n请输入学院个数 n:");
					scanf("%d",&no);
					collegeo=createcollege(no);
					break;
			case 3:
					fn3=statisticcollege(itemo,fn2,mo,wo,no,collegeo);
					break;
            case 4:  
					printf("\n请输入统计的名次:");
					scanf("%d",&mingci);
				    statisticplayer(itemo,fn2,mo,wo,mingci);
					break; 
			case 5: 
					inquireplayer(itemo,mo+wo,fn2);
					break;
			case 6: 
				    inquireitem(fn1,mo+wo,fn2);
					break;
			case 7:	
					exit(0);
		}	
			display();
	}

}

⌨️ 快捷键说明

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