//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<
cin>>p1->name;
cout<
cin>>p1->sex;
cout<
cin>>p1->chinese;
cout<
cin>>p1->math;
cout<
cin>>p1->eng;
cout<
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<
cin>>res;
if(res =='N'|| res == 'n')
break;
}
p2->next=NULL;
}
void stuList::_print()
{
struct student *temp;
temp=this->head;
cout<
<
for(int i=0;inum;i++)
{
cout<id<name<sex<chinese<
<math<eng<c<sum<
temp=temp->next;
}
cout<
cout<num;
cout<
}
void stuList::_sort()
{
struct student *first;/*排列后有序链的表头指针*/
struct student *tail;/*排列后有序链的表尾指针*/
struct student *p_max;
struct student *max;
struct student *p;
p=this->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<
<
for(int i=0;inum;i++)
{
cout<id<name<sex<chinese<
<math<eng<c<sum<
first=first->next;
}
}
}
//stu.cpp 调用class。h
#include "class.h"
int main()
{
stuList A;
A._creat();
A._print();
A._sort();
return 0;
}