//class.h 头文件
#include 
#include 
#include             //实现setw()宽字节输出
using namespace std;


class stuDate
{
public:
		struct student
		{
			string name;		//姓名	
			string sex;			//性别
			int id;
			float eng,math,chinese,c,sum;
			struct student *next;
		};
};


class stuList :public stuDate
{
private:
	int num;		//人数
	struct student *head;
public:
	stuList();
	void _creat();
	void _print();
	void _sort();
};

stuList::stuList()
{
	this->head=NULL;
	this->num=0;
}

void stuList::_creat()
{
	char res = 'Y';
	struct student *p1,*p2;
	p1=p2=new struct student;
	while(res=='Y' || res == 'y')
	{
		if(this->head == NULL)
		{
			this->head=p1;
			p1->id=0;
		}
		else
		{
			p2->next=p1;
		}
		cout<<"Name:";
		cin>>p1->name;
		cout<<"Sex:";
		cin>>p1->sex;
		cout<<"Chinese:";
		cin>>p1->chinese;
		cout<<"Math:";
		cin>>p1->math;
		cout<<"English:";
		cin>>p1->eng;
		cout<<"C语言:";
		cin>>p1->c;
		p1->id=this->num+1;
		p1->sum=p1->chinese+p1->math+p1->eng+p1->c;
		this->num++;
		p2=p1;
		p1=new struct student;
		cout<<"\n是否继续输入(Y/N):";
		cin>>res;
		if(res =='N'|| res == 'n')
			break;
	}
	p2->next=NULL;
}

void stuList::_print()
{
	struct student *temp;
	temp=this->head;
	cout<<"id"<num;i++)
	{
		cout<id<name<sex<chinese<math<eng<c<sum<next;
	}
	cout<num;
	cout<head;
	if(this->head!=NULL)
	{
		first=NULL;
			while (head != NULL)
			{
				for (p=this->head,max=this->head; p->next!=NULL; p=p->next)
				{
					if (p->next->sum > max->sum)			//以总分排序
					{
						p_max=p;
						max=p->next;
					}
				}
				if(first==NULL)
				{
					first=max;
					tail=max;
				}
				else
				{
					tail->next=max;
					tail=max;
				}
				if(max==this->head)
				{
					this->head=this->head->next;
				}
				else
				{
					p_max->next=max->next;
				}
			}
			if(first!=NULL)
			{
				tail->next=NULL;
			}
			cout<<"id"<num;i++)
			{
				cout<id<name<sex<chinese<math<eng<c<sum<next;
			}
	}
}



//stu.cpp    调用class。h
#include "class.h"
int main()
{
	stuList A;
	A._creat();
	A._print();
	A._sort();
	return 0;
}