从键盘中读入最多不超过50个学生的学生信息(包括空格隔开的姓名、学号、年龄信息,以学号从低到高排序)
人员类:包含姓名,年龄。
学生类:继承自人员类,增加学号。
【输入形式】
每次键盘读入最多不超过50个学生的学生信息:
第一行为学生人数;
后面每一行为空格隔开的学生学号、姓名、年龄,其中学号和年龄都是整数。
【输出形式】
分别以姓名顺序(从低到高)和年龄顺序(从低到高)将学生信息输出,每行输出一位学生的信息,其中学号占3位,姓名(英文)占6位,年龄占3位,均为右对齐。年龄相同时按姓名从低到高排序。两种顺序的输出结果用一行空行相隔。
【输入样例】
4 1 aaa 22 45 bbb 23 54 ddd 20 110 ccc 19
【输出样例】
1 aaa 22 45 bbb 23 110 ccc 19 54 ddd 20 110 ccc 19 54 ddd 20 1 aaa 22 45 bbb 23
【样例说明】
从键盘输入四个学生记录,分别按姓名和年龄排序并输出。
#include <iostream>
#include <iomanip>
#include <string.h>
using namespace std;
class person
{
public:
void set()
{
cin>>name>>age;
}
void show()
{
cout<<setiosflags(ios::right)<<setw(6)<<name;
cout<<setiosflags(ios::right)<<setw(3)<<age<<endl;
}
string name;
int age;
};
class student:public person
{
public:
void set()
{
cin>>sno;
person::set();
}
void show()
{
cout<<setiosflags(ios::right)<<setw(3)<<sno;
person::show();
}
private:
int sno;
};
int main()
{
int n;
student s[50];
cin>>n;
for(int i=0;i<n;i++)
{
s[i].set();
}
for(int m=0;m<n;m++)
{
for(int j=m+1;j<n;j++)
{
student temp;
if(s[m].name.compare(s[j].name)>0)
{
temp=s[m];
s[m]=s[j];
s[j]=temp;
}
}
}
for(int i=0;i<n;i++)
{
s[i].show();
}
for(int m=0;m<n;m++)
{
for(int j=m+1;j<n;j++)
{
student temp;
if(s[m].age>s[j].age)
{
temp=s[m];
s[m]=s[j];
s[j]=temp;
}
else if(s[m].age==s[j].age)
{
if(s[m].name.compare(s[j].name)>0)
{
temp=s[m];
s[m]=s[j];
s[j]=temp;
}
}
}
}
cout<<endl;
for(int i=0;i<n;i++)
{
s[i].show();
}
}