//class.h 头文件
#include <string>
#include <iostream>
#include <iomanip> //实现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"<<setw(5)<<"name"<<setw(5)<<"sex"<<setw(10)<<"Chinese"<<setw(5)
<<"Math"<<setw(8)<<"English"<<setw(5)<<"C"<<setw(5)<<"Sum"<<endl;
for(int i=0;i<this->num;i++)
{
cout<<temp->id<<setw(5)<<temp->name<<setw(5)<<temp->sex<<setw(5)<<temp->chinese<<setw(5)
<<temp->math<<setw(5)<<temp->eng<<setw(5)<<temp->c<<setw(5)<<temp->sum<<endl;
temp=temp->next;
}
cout<<endl;
cout<<"------------------------------------------------------------总人数:"<<this->num;
cout<<endl;
}
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<<"id"<<setw(5)<<"name"<<setw(5)<<"sex"<<setw(10)<<"Chinese"<<setw(5)
<<"Math"<<setw(8)<<"English"<<setw(5)<<"C"<<setw(5)<<"Sum"<<endl;
for(int i=0;i<this->num;i++)
{
cout<<first->id<<setw(5)<<first->name<<setw(5)<<first->sex<<setw(5)<<first->chinese<<setw(5)
<<first->math<<setw(5)<<first->eng<<setw(5)<<first->c<<setw(5)<<first->sum<<endl;
first=first->next;
}
}
}
//stu.cpp 调用class。h
#include "class.h"
int main()
{
stuList A;
A._creat();
A._print();
A._sort();
return 0;
}本文出自 “启思·朝圣者” 博客,请务必保留此出处http://dearch.blog.51cto.com/10423918/1758724
原文:http://dearch.blog.51cto.com/10423918/1758724