c语言实现足球比赛积分统计系统

/* 足球比赛积分统计系统
   作者:施瑞文
   时间:2018.2
*/ 
 //为简单化,这里没有加上文件的操作 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<windows.h>
#include<conio.h>
#define LEN sizeof(match)
typedef struct football
{
	char name[20];//[足球]队名
	int num[4];//num[0]为单支球队需比赛场数, num[1]为赢场数,num[2]为平场数,num[3]为负场数
	int goal;//进球数
	int lose;//失球数
	int integral;//积分
	int pure;//净胜球
	struct football *next; 
}match;
void menu();//声明菜单函数 
match *creat();//输入球队信息 
void print(match *head);//排序 
match *Add(match *head);//增加球队信息
match *Amend(match *head);//修改球队信息 
match *Del(match *head);//删除球队信息 
void End();//退出该软件 

int n=0;//记录节点长度 
match *p2;

void toxy(int x, int y)//将光标移动到X,Y坐标处
{
  COORD pos = { x , y };
  HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleCursorPosition(Out, pos);
}


void menu()
{
	system("cls");//清屏 
	system("color 72");//颜色 
	toxy(30,6);
	printf("--------------------MENU-----------------------\n");
	toxy(30,8);
	printf("|  1.   Record the information of this match  |\n");
	toxy(30,10);
	printf("|  2.   Add the information of this match     |\n");
	toxy(30,12);
	printf("|  3.   Check the information of this match   |\n");
	toxy(30,14);
	printf("|  4.   delete the information of the match   |\n");
	toxy(30,16);
	printf("|  5.   Amend the information of the match    |\n");
	toxy(30,18);
	printf("|  6.   End this operation                    |\n");
	toxy(30,20);
	printf("-----------------------------------------------\n");
	toxy(30,22);
	printf("What are you want to do ? Input please:");
}

match *creat()
{
	system("cls");//清屏 
	system("color 74");//颜色 
	int t,n=0;
	match *head,*p1;
	p2=p1=(match *)malloc(LEN);
	head=NULL;
	
	/*录入足球队名,比赛场数,得、失 球数和进球积分*/ 
	
	/*输入第一个节点数据 */

	printf("Enter the total number of the football teams:");//参赛的球队数量 
	scanf("%d",&t);
	
	
	
	while(n!=t)
	{
		n++; 
		printf("the name of team %d :",n);//球队名 
	    scanf("%s",p1->name);
	
	    printf("team %d win round(s):",n);//该球队赢局场数 
	    scanf("%d",&p1->num[1]);
	
	    printf("team %d draw round(s):",n);//该球队平局场数 
	    scanf("%d",&p1->num[2]);
	    printf("team %d goal:",n);
	    scanf("%d",&p1->goal);
	    printf("team %d lose:",n);
	    scanf("%d",&p1->lose);
	    p1->integral=p1->num[1]*2+p1->num[2];
	    p1->pure=p1->goal-p1->lose;
		if(n==1)
		{
			head=p1;
		}
		else
		{
			p2->next=p1;
			p2=p1;
		}
		p1=(match *)malloc(LEN);
	}
	p2->next=NULL;
	return head;
}

match *Add(match *head)//增加球队 
{
	system("cls");//清屏 
	system("color 72");//颜色 
	match *p,*q,*newhead;
	int x,y=0;
	newhead=NULL;
	p=q=(match *)malloc(LEN);
	printf("How many teams you want to add?Input please:");
	scanf("%d",&x);
	while(y!=x)
	{
		y++;
		printf("the name of team %d :",y);//球队名 
	    scanf("%s",p->name);
	
	    printf("team %d win round(s):",y);//该球队赢局场数 
	    scanf("%d",&p->num[1]);
	
	    printf("team %d draw round(s):",y);//该球队平局场数 
        scanf("%d",&p->num[2]);
	    printf("the number of team %d goal:",y);
	    scanf("%d",&p->goal);
	    printf("the number of team %d lose:",y);
	    scanf("%d",&p->lose);
	    p->integral=p->num[1]*2+p->num[2];
	    p->pure=p->goal-p->lose;
	    if(y==1)
	    {
	    	newhead=p;
		}
		else
		{
			q->next=p;
			q=p;
		}
		p=(match *)malloc(LEN);
	}
	q->next=NULL;
	p2->next=newhead;//让新增加的信息接入原有链表的后面 
	return head;
} 
 
 
match *Amend(match *head)//修改信息 
{
	system("cls");
	system("color 72");
	do{
		match *p=head;
		char name[10];
		printf("Please input the team's name which you want to modify:");
		gets(name);
		while(p!=NULL&&strcmp(p->name,name)!=0)
		{
			p=p->next;
		}
		if(p!=NULL)
		{
			toxy(25,4); 
			printf("team_name    win      draw      goal     lose     integral\n");
			toxy(25,6);
			printf("|%3s%10d%10d%10d%10d%10d|\n",p->name,p->num[1],p->num[2],p->goal,p->lose,p->integral);
			printf("Enter the new information please;\n");
			printf("the name of new team :");//球队名 
		    scanf("%s",p->name);
		
		    printf("team win round(s):");//该球队赢局场数 
		    scanf("%d",&p->num[1]);
		
		    printf("team  draw round(s):");//该球队平局场数 
	        scanf("%d",&p->num[2]);
		    printf("the number of new team's goal:");
		    scanf("%d",&p->goal);
		    printf("the number of  new team's lose:");
		    scanf("%d",&p->lose);
		    p->integral=p->num[1]*2+p->num[2];
		    p->pure=p->goal-p->lose;
		    break;
		}
		else
		{
			printf("Input error!Please input again:");
		}
    }while(1);
	return head;
}


match *Del(match *head)//删除信息 
{
	system("cls");//清屏 
	do{
	   match *p=head,*pre=NULL;//pre是p的前驱结点 
	   char name[10];
	   printf("Please input the team's name which you want to delete;");
	   gets(name);
	   while(p!=NULL&&strcmp(p->name,name)!=0)
	   {
		   pre=p;
		  p=p->next;
	   }
	   if(p!=NULL)
	   {
	       if(pre==NULL)
		   {
		   	 head=p->next;
		   }
		   else
		   {
		 	  pre->next=p->next;
		   }	
		   free(p);
		   break;
	    }
	    else
	    {
		   printf("Input error!Please input again:");
	    }
     }while(1);
	return head;
}

void End()
{
	system("cls");
	system("color 74");
	toxy(20,10);
	printf("Thanks for your using!^-^");
	exit(0);//退出 
	getch();
}

 
void print(match *head)
{
	system("cls");
	system("color 74");
	match *p,*q,t1,t2,t3,*pt;
    for(p=head;p!=NULL;p=p->next)//球队排序,冒泡法排序 ,关于链表的排序有点小复杂哦~ 
	{
		
		for(q=p->next;q!=NULL;q=q->next)     //这里有3重排序 
		{
			
			if(p->integral<q->integral)
			{
				t1=*p;
				*p=*q;
				*q=t1;	
				pt=p->next;
				p->next=q->next;
				q->next=pt;
			}
			else if(p->integral==q->integral)
			{
				if(p->pure<q->pure)
				{
					t2=*p;
					*p=*q;
					*q=t2;
					pt=p->next;
				    p->next=q->next;
				    q->next=pt;
				}
				else if(p->pure==q->pure)
				{
					if(p->goal<q->goal)
					{
						t3=*p;
						*p=*q;
						*q=t3;
						pt=p->next;
				        p->next=q->next;
				        q->next=pt;
					}
				}
			}
		}
	}
	p=head;//重新让p指向第一个结点 
	toxy(20,4);
	printf("--------------------the football match imformation----------------------\n");
	toxy(20,6);
	printf("team_name    win      draw      goal     lose     integral\n");
	int m=8;
		while(p!=NULL)
		{
			toxy(20,m);
			printf("|%3s%10d%10d%10d%10d%10d|\n",p->name,p->num[1],p->num[2],p->goal,p->lose,p->integral);
			p=p->next;
			m+=2;
		}
		printf("\nPlease press any key return to MENU. ");
		getch();
 }
 
 int main()
{
	match *head;
	char x;
	do{
	system("cls");
	system("color 72");
	menu();
	x=getch();
	switch(x)
	{
	
		case '1':
			head=creat();
			break;
		case '2':
			head=Add(head);
			break;
		case '3':
			print(head);
			break;
		case '4':
			head=Del(head);
			break;
		case '5':
			head=Amend(head);
			break;
		case '6':
			End();
			break;
		default:
			printf("Input error!Please input again:");	
	}
    }while(1);//永远为真 
    
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值