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

📄 ydh.h

📁 包括vc数据结构中的运动会计分系统
💻 H
字号:
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
#include<ctype.h>
#include<stdio.h>
#include<conio.h>
typedef struct School	//学校结构
{
	char name[20];		//学校名称
	int number;			//学校编号
	int boy;			//男子团体总分
	int girl;			//女子团体总分
	School *next;	
}School;

typedef struct Sport	//运动项目结构
{
	char name[20];		//运动项目名称
	int isboy;			//0为女项目,1为男项目
	int is3;			//0为取前五名,1为取前五名
	int number;			//项目编号
	int first;			//第一名学校编号
	int second;			//第二名学校编号
	int third;			//第三名学校编号
	int fourth;			//第四名学校编号
	int fifth;			//第五名学校编号
	Sport *next;
}Sport;

int getint(int a)		//字符转换成数字
{
	return (int)(a-'0');
}
School * head1;
void school_add()		//添加学校
{
	School * p;
	int mark=0;
	p=new School;
	cout<<"请输入学校名称:";
	cin>>p->name;
	char c;
	while (mark!=1)
	{
		cout<<"请输入学校编号:";
		cin>>c; 
		if (!isdigit(c))//是否为数字
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			mark=1;
			p->number=c;
		}
	}
	p->boy=0;
	p->girl=0;
	p->next=head1->next;
	head1->next=p;
	cout<<"成功添加了一个学校"<<endl;
}

int school_getlong(School *first)//得到链表长度
{
	int i=0;
	while (first->next!=NULL)
	{
		i++;
		first=first->next;
	}
	return i;
}

void school_write()//将学校数据写入文本
{
	School * p;
	p=head1;
	p=p->next;
	ofstream outfile("School.txt",ios::out);
	outfile<<school_getlong(p)+1<<" ";
	while (p!=NULL)
	{
		outfile<<p->name<<" "<<p->number<<" "<<p->boy<<" "<<p->girl<<" ";
		p=p->next;
	}
	outfile.close();
	cout<<"Write Success!"<<endl;

}

void school_read()//从文本读入学校数据
{
	int i;
	ifstream infile ("School.txt",ios::in);
	infile>>i;
	while(i>0)
	{
		School * p;
		p=new School;
		infile>>p->name>>p->number>>p->boy>>p->girl;
		p->next=head1->next;
		head1->next=p;
		i--;
	}
	cout<<"School Data Read Success!"<<endl;
}

void school_output(School *p)//输出学校
{
	cout<<" 校名    编号 男团总分 女团总分 总分\t\n";
	while(p)
	{
		cout<<p->name<<"\t"<<getint(p->number)<<"\t"<<p->boy<<"\t"<<p->girl<<"\t "<<(p->girl+p->boy)<<endl;
		p=p->next;
	}
}

int school_isexist(int a)//检验学校是否存在
{
	int b=0;
	School *p;
	p=head1;
	p=p->next;
	while(p)
	{
		if(p->number==a)
		{
			return 1;
		}
		p=p->next;
	}
	return 0;
}

void school_show(int a)//输出所有学校
{
	School *p;
	p=head1;
	p=p->next;
	while(p)
	{
		if(p->number==a)
		{
			cout<<p->name<<" ";
			return;
		}
		p=p->next;
	}
	cout<<" 无   ";
}

void school_search(int a)//按编号搜索学校
{
	School *p;
	p=head1;
	p=p->next;
	while(p)
	{
		if(p->number==a)
		{
			cout<<"校名:"<<p->name<<" "<<"男子团体总分:"<<p->boy<<" "<<"女子团体总分:"<<p->girl<<" "<<"总分:"<<(p->boy+p->girl)<<" ";
			return;
		}
		p=p->next;
	}
	cout<<"无此编号";
}

void school_addmark(int a,int b,int c)//a为分数,b为学校编号,c=1表示男,c=0表示女
{
	School *p;
	p=head1;
	p=p->next;
	while(p)
	{
		if(p->number==b)
		{
			if(c=='1')
			{
				p->boy=p->boy+a;
			}
			else
			{
				p->girl=p->girl+a;
			}
		}
		p=p->next;
	}
}

void school_order(School *temp,int type) //type=0按总分,type=1按男总分,type=2按女总分,
{
	School *p,*q,*small,*temp1;
	temp1=new School;
	temp1->next=NULL;
	p=temp;
	while(p) 
	{
		small=p;
		q=p->next;
		while(q) 
		{
			switch(type)
			{
			case 0:
				if((q->boy+q->girl)<(small->girl+small->boy)) 
				{
					small=q; 
				}
				break;
			case 1:
				if(q->boy<small->boy) 
				{
					small=q; 
				}
				break;
			case 2:
				if(q->girl<small->girl) 
				{
					small=q; 
				}
				break;
			default:
				cout<<"error"<<endl;
			}
			if(small!=p) 
			{
				temp1->boy=p->boy; 
				p->boy=small->boy; 
				small->boy=temp1->boy;
				temp1->girl=p->girl; 
				p->girl=small->girl; 
				small->girl=temp1->girl;
				strcpy(temp1->name,p->name);
				strcpy(p->name,small->name); 
				strcpy(small->name,temp1->name);
				temp1->number=p->number; 
				p->number=small->number; 
				small->number=temp1->number;
			}
			q=q->next;
		}
		p=p->next;
	}
}

Sport * head2;

int sport_isexist(int a)	//检查运动项目(编号)是否已经存在
{
	int b=0;
	Sport *p;
	p=head2;
	p=p->next;
	while(p)
	{
		if(p->number==a)
		{
			return 1;
		}
		p=p->next;
	}
	return 0;
}

void sport_add()		//添加项目
{
	Sport * p;
	int mark=0;
	p=new Sport;
	cout<<"请输入项目名称:";
	cin>>p->name;
	char c;
	while (mark!=1)
	{
		cout<<"请输入项目编号:";
		cin>>c; 
		if (!isdigit(c))
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			if(sport_isexist(c))
			{
				cout<<"该编号已存在"<<endl;
			}
			else
			{
				mark=1;
				p->number=c;
			}
		}
	}
	mark=0;
	while (mark!=1)
	{
		cout<<"请输入项目类型(0为女子项目,1为男子项目):";
		cin>>c;
		p->isboy=(int)(c-'0');//字符转换成数字
		if (!isdigit(c))
		{
			cout<<"数据非法"<<endl;
		}
		else if(p->isboy<0||p->isboy>1)
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			mark=1;
			p->isboy=c;
		}
	}
	mark=0;
	while (mark!=1)
	{
		cout<<"请输入项目名次情况(0为取前3名,1为取前5名):";
		cin>>c;
		p->is3=(int)(c-'0');
		if (!isdigit(c))
		{
			cout<<"数据非法"<<endl;
		}
		else if(p->is3<0||p->is3>1)
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			mark=1;
			p->is3=c;
		}
	}
	mark=0;
	while (mark!=1)
	{
		cout<<"请输入第一名的学校编号:";
		cin>>c; 
		if (!isdigit(c))
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			if(!school_isexist(c))
			{
				cout<<"该学校不存在,请先添加";
			}
			else
			{
				mark=1;
				p->first=c;
				if(p->is3=='0')
					school_addmark(5,c,p->isboy);
				else
					school_addmark(7,c,p->isboy);
			}
		}	
	}
	mark=0;
	while (mark!=1)
	{
		cout<<"请输入第二名的学校编号:";
		cin>>c; 
		if (!isdigit(c))
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			if(!school_isexist(c))
			{
				cout<<"该学校不存在,请先添加";
			}
			else
			{
				mark=1;
				p->second=c;
				if(p->is3=='0')
					school_addmark(3,c,p->isboy);
				else
					school_addmark(5,c,p->isboy);
			}
		}
	}
	mark=0;
	while (mark!=1)
	{
		cout<<"请输入第三名的学校编号:";
		cin>>c; 
		if (!isdigit(c))
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			if(!school_isexist(c))
			{
				cout<<"该学校不存在,请先添加";
			}
			else
			{
				mark=1;
				p->third=c;
				if(p->is3=='0')
					school_addmark(2,c,p->isboy);
				else
					school_addmark(3,c,p->isboy);
			}
		}
	}
	mark=0;
	if(p->is3=='1')
	{
		while (mark!=1)
		{
		cout<<"请输入第四名的学校编号:";
		cin>>c; 
		if (!isdigit(c))
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			if(!school_isexist(c))
			{
				cout<<"该学校不存在,请先添加";
			}
			else
			{
				mark=1;
				p->fourth=c;
				school_addmark(2,c,p->isboy);
			}
		}
		}
		mark=0;
		while (mark!=1)
		{
		cout<<"请输入第五名的学校编号:";
		cin>>c; 
		if (!isdigit(c))
		{
			cout<<"数据非法"<<endl;
		}
		else
		{
			if(!school_isexist(c))
			{
				cout<<"该学校不存在,请先添加"<<endl;
			}
			else
			{
				mark=1;
				p->fifth=c;
				school_addmark(1,c,p->isboy);
			}
		}
		}
	}
	else
	{
		p->fourth='0';
		p->fifth='0';
	}
	p->next=head2->next;
	head2->next=p;
	cout<<"成功添加了一个运动项目"<<endl;
}

int sport_getlong(Sport *first)				//得到项目链表长度
{
	int i=0;
	while (first->next!=NULL)
	{
		i++;
		first=first->next;
	}
	return i;
}

void sport_write()							//将项目数据写入文本文档
{
	Sport * p;
	p=head2;
	p=p->next;
	ofstream outfile("Sport.txt",ios::out);
	outfile<<sport_getlong(p)+1<<" ";
	while (p!=NULL)
	{
		outfile<<p->name<<" "<<p->number<<" "<<p->isboy<<" "<<p->is3<<" "<<p->first<<" "<<p->second<<" "<<p->third<<" "<<p->fourth<<" "<<p->fifth<<" ";
		p=p->next;
	}
	outfile.close();
	cout<<"Write Success!"<<endl;

}

void sport_read()							//从文本读取项目数据
{
	int i;
	ifstream infile ("Sport.txt",ios::in);
	infile>>i;
	while(i>0)
	{
		Sport * p;
		p=new Sport;
		infile>>p->name>>p->number>>p->isboy>>p->is3>>p->first>>p->second>>p->third>>p->fourth>>p->fifth;
		p->next=head2->next;
		head2->next=p;
		i--;
	}
	cout<<"Sport Data Read Success!"<<endl;
}

void sport_output(Sport *p)						//输出项目的情况
{
	cout<<"   name  "<<"\t"<<"Num"<<" "<<"B/G"<<" "<<"3/5"<<"  "<<"first"<<"  "<<"second"<<"  "<<"third"<<"   "<<"fourth"<<"   "<<"fifth"<<" "<<endl;
	while(p)
	{
		cout<<p->name<<"\t"<<" "<<getint(p->number)<<"  "<<getint(p->isboy)<<"  "<<getint(p->is3)<<" ";
		school_show(p->first);
		school_show(p->second);
		school_show(p->third);
		school_show(p->fourth);
		school_show(p->fifth);
		p=p->next;
	}
	cout<<endl;
}

void sport_search(int a)						//搜索项目
{
	Sport *p;
	p=head2;
	p=p->next;
	while(p)
	{
		if(p->number==a)
		{
			cout<<"项目名:"<<p->name<<endl<<"项目类型:";
			if(p->isboy==1)
			{
				cout<<"男子项目";
			}
			else
			{
				cout<<"女子项目";
			}
			cout<<endl<<"第一名:";
			school_show(p->first);
			cout<<endl<<"第二名:";
			school_show(p->second);
			cout<<endl<<"第三名:";
			school_show(p->third);
			cout<<endl<<"第四名:";
			school_show(p->fourth);
			cout<<endl<<"第五名:";
			school_show(p->fifth);
			return;
		}
		p=p->next;
	}
	cout<<"无此编号";
}

void ydh_main()							//运动会程序主函数
{
	head1=new School;
	head1->next=NULL;
	head2=new Sport;
	head2->next=NULL;
	//school_add();
	sport_read();
	school_read();
	//sport_add();
	School * p1;
	Sport * p2;
	p1=head1;
	p1=p1->next;
	p2=head2;
	p2=p2->next;
	char choose;
	char temp;
	//string ch="  ";
	int a=1;
	while(a!=0)
	{
		cout<<endl;
		cout<<"                      实验一             "<<endl;
		cout<<"         **********************************************************"<<endl;
		cout<<"         *                                                        *"<<endl;
		cout<<"         *   1.输入运动项目;             2.输入学校;              *"<<endl;
		cout<<"         *                                                        *"<<endl;
		cout<<"         *   3.按学校编号输出总分;       4.按总分排序;            *"<<endl;
		cout<<"         *                                                        *"<<endl;
		cout<<"         *   5.按男团体总分排序;         6.按女团体总分排序;      *"<<endl;
		cout<<"         *                                                        *"<<endl;
		cout<<"         *   7.按项目编号查询;           8.按学校编号查询;        *"<<endl;
		cout<<"         *                                                        *"<<endl;
		cout<<"         *                       0.返回                           *"<<endl;
		cout<<"         *                                                        *"<<endl;
		cout<<"         *           提示:需先输入学校后才能输入运动项目         *"<<endl;
		cout<<"         *                                                        *"<<endl;
		cout<<"         **********************************************************"<<endl;
		cout<<"                              请选择:";
		//cin>>ch;
		//choose=int(ch[0])+int(ch[1])-'0';	//处理异常状态
		cin>>choose;
		if (!isdigit(choose))
		{
			system("cls");
			cout<<"操作非法1"<<endl;
		}
		else
		{
			switch(getint(choose))
			{
				case 1:
					system("cls");
					cout<<"当前项目:"<<endl;
					sport_output(p2);
					cout<<"当前学校:"<<endl;
					school_output(p1);
					sport_add();
					break;
				case 2:
					system("cls");
					school_add();
					break;
				case 3:
					system("cls");
					school_output(p1);
					break;
				case 4:
					system("cls");
					school_order(p1,0);
					school_output(p1);
					break;
				case 5:
					system("cls");
					school_order(p1,1);
					school_output(p1);
					break;
				case 6:
					system("cls");
					school_order(p1,2);
					school_output(p1);
					break;
				case 7:
					system("cls");
					cout<<"请输入项目编号:";
					cin>>temp;
					sport_search(temp);
					break;
				case 8:
					system("cls");
					cout<<"请输入学校编号:";
					cin>>temp;
					school_search(temp);
					break;
				case 0:
					system("cls");
					a=0;
					break;
				default:
					system("cls");
					cout<<"操作非法\n";
			}
		}
	}
	school_write();
	sport_write();
	system("exit");
}

⌨️ 快捷键说明

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