C++ 简单学校人员管理系统:学生、员工和在职学生
#include
class Person{ // 基类Person protected: string name; char sex; public: Person(string n, char s): name(n), sex(s) {} // 构造函数 virtual void ShowMe(){} // 虚函数 };
class Student: public Person{ // 学生类 private: string stu_num; public: Student(string n, char s, string num): Person(n, s), stu_num(num) {} // 构造函数 void ShowMe(){ // 输出函数 cout<'姓名:'<<name<<' 性别:'<<sex<<' 学号:'<<stu_num<<endl; } friend istream& operator>>(istream& in, Student& s){ // 重载输入运算符 in>>s.name>>s.sex>>s.stu_num; return in; } };
class Staff: public Person{ // 员工类 private: string staff_num; public: Staff(string n, char s, string num): Person(n, s), staff_num(num) {} // 构造函数 void ShowMe(){ // 输出函数 cout<'姓名:'<<name<<' 性别:'<<sex<<' 工号:'<<staff_num<<endl; } friend istream& operator>>(istream& in, Staff& s){ // 重载输入运算符 in>>s.name>>s.sex>>s.staff_num; return in; } };
class Staff_Student: public Staff, public Student{ // 在职学生类 public: Staff_Student(string n, char s, string staff_num, string stu_num): Staff(n, s, staff_num), Student(n, s, stu_num) {} // 构造函数 void ShowMe(){ // 输出函数 cout<'姓名:'<<name<<' 性别:'<<sex<<' 工号:'<<Staff::staff_num<<' 学号:'<<Student::stu_num<<endl; } friend istream& operator>>(istream& in, Staff_Student& ss){ // 重载输入运算符 in>>ss.name>>ss.sex>>ss.staff_num>>ss.stu_num; return in; } };
class School{ // 学校类 private: int stu_num, staff_num, ss_num; // 记录学生、员工、在职学生数量 Student* stu[100]; // 学生指针数组 Staff* staff[100]; // 员工指针数组 Staff_Student* ss[100]; // 在职学生指针数组 public: School(): stu_num(0), staff_num(0), ss_num(0) {} // 构造函数 void Append(Student* s){ // 添加学生 stu[stu_num++] = s; } void Append(Staff* s){ // 添加员工 staff[staff_num++] = s; } void Append(Staff_Student* s){ // 添加在职学生 ss[ss_num++] = s; } void Show(){ // 输出所有人员信息 for(int i=0; i<stu_num; i++){ stu[i]->ShowMe(); } for(int i=0; i<staff_num; i++){ staff[i]->ShowMe(); } for(int i=0; i<ss_num; i++){ ss[i]->ShowMe(); } } };
int main(){ School school; string name, num; char sex; int type; while(cin>>name>>sex>>type){ if(type==1){ // 学生 cin>>num; Student* s = new Student(name, sex, num); // 动态创建学生对象 school.Append(s); // 添加到学校对象中 } else if(type==2){ // 员工 cin>>num; Staff* s = new Staff(name, sex, num); // 动态创建员工对象 school.Append(s); // 添加到学校对象中 } else if(type==3){ // 在职学生 string staff_num, stu_num; cin>>staff_num>>stu_num; Staff_Student* s = new Staff_Student(name, sex, staff_num, stu_num); // 动态创建在职学生对象 school.Append(s); // 添加到学校对象中 } } school.Show(); // 输出所有人员信息 return 0; }
原文地址: https://www.cveoy.top/t/topic/mMZz 著作权归作者所有。请勿转载和采集!