1.问题描述
用C++编写一个简单的人事管理系统,具有建立、插入、删除、查询和打印功能,可以从文件输入,输出到文件。
管理的人员有:
本科生:姓名、性别、年龄、身份证号码、高考总分
脱产研究生:姓名、性别、年龄、身份证号码、专业
在职研究生:姓名、性别、年龄、身份证号码、学号、专业、工资
职工:姓名、性别、年龄、身份证号码、工资、岗位
教师:姓名、性别、年龄、身份证号码、工资、专业
2.实现思路
构建基类person
,具体包含“姓名”、“性别”、“年龄”、“身份证号码”这四个属性。从基类派生出5个派生类,即本科生、脱产研究生、在职研究生、职工和教师。
通过建立异质链表,对不同的对象实现建立、插入、删除等操作。
异质链表:定义链表指针时,将其定义为基类指针,可用该指针指向派生类对象。
3.部分代码
基类
class person{ //定义共同基类
friend class list;
protected:
char name[20];
int sex; //0-男; 1-女
int age;
char ID[20];
person *next;
public:
person(){}//无参构造函数
person(char *name, int sex, int age, char *ID);//构造函数
virtual void display();//输出到屏幕
virtual void fdisplay();//输出到文件
virtual void create();//从屏幕输入创建对象结点
virtual void fcreat();//从文件输入创建对象结点
};
派生类
class student:public person{//派生类 本科生
friend class list;
int score; //高考总分
public:
student(){}
student(char *name, int sex, int age, char *ID, int score);
void display();
void fdisplay();
void create();
void fcreat();
};
class offstudent:public person{//派生类 脱产研究生
friend class list;
char major[20];
public:
offstudent(){}
offstudent(char *name, int sex, int age, char *ID, char *major);
void display();
void fdisplay();
void create();
void fcreat();
};
class onstudent:public person{//派生类 在职研究生
friend class list;
char stuID[20];
char major[20];
float salary;
public:
onstudent(){}
onstudent(char *name, int sex, int age, char *ID, char *stuID,
char *major, float salary);
void display();
void fdisplay();
void create();
void fcreat();
};
class staff:public person{//派生类 职工
friend class list;
float salary;
char job[20];
public:
staff(){}
staff(char *name, int sex, int age, char *ID, float salary, char *job);
void display();
void fdisplay();
void create();
void fcreat();
};
class teacher:public person{//派生类 教师
friend class list;
float salary;
char major[20];
public:
teacher(){}
teacher(char *name, int sex, int age, char *ID, float salary, char *major);
void display();
void fdisplay();
void create();
void fcreat();
};
链表类
class list{
person *root;//链表头指针
public:
list(){root = 0;}
~list();
void insert_person(person *node);//插入对象结点
void remove();//移除对象结点
void display_list();//输出链表到屏幕
void fdisplay_list();//输出链表到文件
void create();//从键盘创建一个对象结点
void fcreat();//从文件读入,建立链表
void search();//查找
};
4.运行截图
点击下载链接下载完整源代码。