【问题描述】
从键盘中读入最多不超过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 <algorithm>
#include <iostream>
#include <iomanip>
#define N 50
using namespace std;
class person
{
public:
string name;
int old;
};
class student :public person
{
public:
void input()
{
cin>>number>>name>>old;
}
void display1(student s[],int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (s[j].name > s[j + 1].name)
{
student temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
for(int i=0;i<n;i++)
{
cout<<setw(3)<<s[i].number<<setw(6)<<s[i].name<<setw(3)<<s[i].old<<endl;
}
}
void display2(student s[],int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (s[j].old > s[j + 1].old)
{
student temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
else if(s[j].old == s[j + 1].old)
{
if (s[j].name > s[j + 1].name)
{
student temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
}
for(int i=0;i<n;i++)
{
cout<<setw(3)<<s[i].number<<setw(6)<<s[i].name<<setw(3)<<s[i].old<<endl;
}
}
private:
int number;
};
int main()
{
int m;
cin>>m;
student s[N];
for(int i=0;i<m;i++)
{
s[i].input();
}
s->display1(s,m);
s->display2(s,m);
return 0;
}
//刘博祥写个C++压力这么大的???????
//刘博祥写个C++压力这么大的???????
//刘博祥写个C++压力这么大的???????