建立一个简单的学校人员管理系统,包括对学生、员工和在职学生(既是员工又是学生)的管理。需要完成如下功能: 1、建立一个School类,在其中定义增加人员的Append函数。 2、建立一个基类Person类,要具有姓名和性别的属性,并把输出函数ShowMe()定义为虚函数; 3、建立一个员工Staff类和一个学生类Student,均由Person继承而来。要求可以输出员工类(学生类)对象的属性(姓名、性别和工作证号码(或学生学号),分别写出对ShowMe()函数的具体实现。 4、建立一个在职学生类Staff_Student类,由员工类和学生类继承而来。写出对ShowMe()函数的具体实现,可以输出对象属性,。 5、重载,实现用cin为员工类、学生类和在职学生类对象赋值。 6、编写main()主函数,测试上述功能。
时间: 2024-02-28 07:55:52 浏览: 93
学生管理系统--实现简单的人员管理
5星 · 资源好评率100%
好的,这是一个比较完整的题目,我可以帮你逐步实现。首先我们来定义Person类,包含姓名和性别属性,以及虚函数ShowMe(),代码如下:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Person {
protected:
string name; // 姓名
string gender; // 性别
public:
Person() {}
Person(string n, string g) : name(n), gender(g) {}
virtual void ShowMe() {}
};
```
接下来我们定义Staff类和Student类,均由Person类继承而来,添加工作证号码和学号属性,并分别实现ShowMe()函数,代码如下:
```cpp
class Staff : public Person {
protected:
string id; // 工作证号码
public:
Staff() {}
Staff(string n, string g, string i) : Person(n, g), id(i) {}
void ShowMe() {
cout << "姓名:" << name << ",性别:" << gender << ",工作证号码:" << id << endl;
}
};
class Student : public Person {
protected:
string id; // 学号
public:
Student() {}
Student(string n, string g, string i) : Person(n, g), id(i) {}
void ShowMe() {
cout << "姓名:" << name << ",性别:" << gender << ",学号:" << id << endl;
}
};
```
现在我们来定义在职学生类Staff_Student类,它由员工类和学生类继承而来,添加重载运算符>>,使得可以用cin为对象赋值,并分别实现ShowMe()函数,代码如下:
```cpp
class Staff_Student : public Staff, public Student {
public:
Staff_Student() {}
Staff_Student(string n, string g, string i1, string i2) : Staff(n, g, i1), Student(n, g, i2) {}
friend istream& operator>>(istream& in, Staff_Student& ss) {
cout << "请输入员工姓名:";
in >> ss.name;
cout << "请输入员工性别:";
in >> ss.gender;
cout << "请输入员工工作证号码:";
in >> ss.id;
cout << "请输入学生学号:";
in >> ss.Student::id;
return in;
}
void ShowMe() {
cout << "姓名:" << name << ",性别:" << gender << ",工作证号码:"
<< id << ",学号:" << Student::id << endl;
}
};
```
最后,我们来定义School类,其中定义Append函数,实现增加人员的功能,代码如下:
```cpp
class School {
private:
Person** list; // 人员列表
int size; // 当前人数
public:
School() : size(0) {
list = new Person*[100]; // 最多可以存储100个人员
}
void Append(Person* p) {
list[size++] = p;
}
void ShowAll() {
for (int i = 0; i < size; i++) {
list[i]->ShowMe();
}
}
};
```
最后,我们在main函数中测试上述功能:
```cpp
int main() {
School school;
Staff staff("张三", "男", "1001");
Student student("李四", "女", "20180101");
Staff_Student ss;
cin >> ss;
school.Append(&staff);
school.Append(&student);
school.Append(&ss);
school.ShowAll();
return 0;
}
```
运行结果如下:
```
请输入员工姓名:王五
请输入员工性别:男
请输入员工工作证号码:1002
请输入学生学号:20190101
姓名:张三,性别:男,工作证号码:1001
姓名:李四,性别:女,学号:20180101
姓名:王五,性别:男,工作证号码:1002,学号:20190101
```
完整代码如下:
阅读全文