C与C++课程设计报告设计题目:公司员工管理系统专业网络工程班级网络141学生学号指导教师起止时间2015.12.28-2015.12.312015年秋季学期一、具体任务设计一个利用文件处理方式实现对公司人员(包括工程师、领导和主任工程师)进行管理,要求具有增加数据、更新数据、查询数据、删除数据以及现实数据的功能。设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出工程师类Engineer,包含专业和职称保护数据成员以及相关的成员函数;再由Staff派生出领导类Leader,包含职务和部门保护数据成员以及相关的成员函数;然后由Engineer和Leader类派生出主任工程师类Chairman。二、软件环境本实验用到的编程环境为CodeBlocks三、算法设计思想1.实现由于本实验共有4个类,需要实现数据的插入,删除,修改,查询,显示等功能,所以可以用单链表来实现,这样就需要建立一个链表类和一个节点的结构体。2.定义类本实验中公司共有4种员工,且员工之间有继承和派生关系,所以应该有4个类,外加链表,一共5个类(1)设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;(2)由Staff派生出工程师类Engineer,包含专业和职称保护数据成员以及相关的成员函数;(3)再由Staff派生出领导类Leader,包含职务和部门保护数据成员以及相关的成员函数。(4)然后由Engineer和Leader类派生出主任工程师类Chairman。(5)链表类,包含头结点head和指针r以及相关的成员函数,即针对链表的各个数据处理功能的实现。3.功能实现链表内需要各个数据的处理功能,但是由于共有其他的4种类,所以对于某些操作,例如修改,显示每个类里面需要有自己的函数实现。4.函数实现(1)对于链表的成员函数,用于实现数据的插入,删除,修改,查询,显示的功能:①LinkList();对头结点和指针r初始化;②intInsert_LinkList();插入函数③intDel_LinkList(inti);删除函数④voidmodify_LinkList(inti);修改函数,其中不同的类调用各自的修改函数⑤voidprint_LinkList();显示函数,其中不同的类调用各自的显示函数⑥NodeT*Get_LinkList(inti);查找函数⑦voidsave_LinkList();保存函数,其中不同的类调用各自的保存函数(2)对于类的成员函数a.Staff职工类①Staff()职工的构造函数,输入职工的数据②voidprint()职工的显示函数,显示职工的数据③voidprint1()职工的显示函数,用于派生类的调用④voidmodify()职工的修改函数,修改职工的数据⑤voidsave()职工的保存函数,保存数据到staff.txt文件⑥voidsave1()职工的保存函数,将工程师的针对职工的数据存入engineer.txt文件,后用于派生类Engineer的调用⑦voidsave2()职工的保存函数,将领导的针对职工的数据存入leader.txt文件,后用于派生类Leader的调用⑧voidsave3()职工的保存函数,将主任工程师的针对职工的数据存入chairman.txt文件,后用于派生类chairman的调用b.Engineer工程师类①Engineer()工程师的构造函数,输入工程师的数据②voidprint()工程师的显示函数,显示工程师的数据,先调用基类Staff的print1(),显示满足职工的条件的数据,再显示自己特有的数据。③voidprint1()工程师的显示函数,用于派生类Chairman的调用④voidmodify()工程师的修改函数,修改工程师的信息,先调用基类Staff的modify(),修改满足职工条件的数据,再修改自己特有的数据。⑤voidsave()工程师的保存函数,保存工程师的数据到engineer.txt文件,先调用基类的save1(),保存满足职工条件的数据信息,再保存自己特有的数据信息。⑥voidsave1()工程师的保存函数,将Chairman满足工程师的信息存入chairman.txt文件,用于派生类Chairman的调用c.Leader领导类①Leader()领导的构造函数②voidprint()领导的显示函数,显示领导的信息,先调用基类Staff的print1(),显示满足职工的条件的信息,再显示自己特有的数据信息。③voidprint1()领导的显示函数,用于派生类Chairman的调用④voidmodify()领导的修改函数,修改领导的信息,先调用基类Staff的modify(),修改满足职工条件的数据,再修改自己特有的数据。⑤voidsave()领导的保存函数,保存领导的数据到leader.txt文件,先调用基类的save1(),保存满足职工条件的数据信息,再保存自己特有的数据信息。⑥voidsave1()领导的保存函数,将Chairman满足领导的信息存入chairman.txt文件,用于派生类Chairman的调用d.Chairman主任工程师类①Chairman();主任工程师的构造函数②voidprint();主任工程师的显示函数,显示主任工程师的信息,先调用基类工程师的print1(),再调用基类领导的print1()。③voidmodify();主任工程师的修改函数,修改主任工程师的信息,先调用基类工程师的modify(),再调用基类领导的modify()。④voidsave();主任工程师的保存函数,保存主任工程师的信息,先调用基类工程师的save1(),再调用基类领导的save1()。(3)其他的普通函数,操作函数及选择,菜单函数①voidoperation1();职工类的操作函数,若选择职工类,则进入该函数,调用菜单函数,利用switch语句供用户做相应得选择来对职工类进行操作,其中调用链表的操作函数。②voidoperation2();工程师类的操作函数,若选择工程师类,则进入该函数,调用菜单函数,利用switch语句供用户做相应得选择来对工程师类进行操作,其中调用链表的操作函数。③voidoperation3();领导类的操作函数,若选择领导类,则进入该函数,调用菜单函数,利用switch语句供用户做相应得选择来对职工类进行操作,其中调用链表的操作函数。④voidoperation4();主任工程师类的操作函数,若选择主任工程师类,则进入该函数,调用菜单函数,利用switch语句供用户做相应得选择来对职工类进行操作,其中调用链表的操作函数。⑤voidchoose();选择函数,供用户选择要操作的公司员工类别⑥voidmenu();菜单函数,供用户选择要进行的数据处理操作(4).主函数main()利用switch语句,调用选择函数,供用户选择要操作的公司员工的类别的编号,然后调用对应的operation函数。四、源代码#includeiostream#includestring.h#includeiomanip#includefstreamusingnamespacestd;voidmenu();intchoose();voidoperation1();voidoperation3();voidoperation2();voidoperation4();classStaff{private:intnum;charname[100];intage;public:Staff(){cout请输入职工编号endl;cinnum;cout请输入职工姓名endl;cinname;cout请输入职工年龄endl;cinage;}voidprint(){cout编号numsetw(5)姓名namesetw(5)年龄ageendl;}voidprint1(){cout编号numsetw(5)姓名namesetw(5)年龄age;}voidmodify(){inta;cout------------------------------------endl;cout请输入要修改的信息号(输入0退出):endl;cout1.编号endl;cout2.姓名endl;cout3.年龄endl;cout------------------------------------endl;cina;switch(a){case1:{cout请输入要修改后的编号:endl;cinnum;break;}case2:{cout请输入要修改后的姓名:endl;cinname;break;}case3:{cout请输入要修改后的年龄:endl;cinage;break;}case0:break;default:break;}}voidsave(){ofstreamout;out.open(staff.txt,ios::app);if(out){out编号numsetw(5)姓名namesetw(5)年龄age;outendl;out.close();}}voidsave1(){ofstreamout;out.open(engineer.txt,ios::app);if(out){out编号numsetw(5)姓名namesetw(5)年龄age;out.close();}}voidsave2(){ofstreamout;out.open(leader.txt,ios::app);if(out){out编号numsetw(5)姓名namesetw(5)年龄age;out.close();}}voidsave3(){ofstreamout;out.open(chairman.txt,ios::app);if(out){out编号numsetw(5)姓名namesetw(5)年龄age;out.close();}}};classEngineer:virtualpublicStaff{private:charmajor[100];charpost[100];public:Engineer(){cout请输入工程师专业endl;cinmajor;cout请输入工程师职称endl;cinpost;}voidprint(){Staff::print1();cout专业majorsetw(6)职称postendl;}voidprint1(){Staff::print1();coutsetw(5)专业majorsetw(6)职称post;}voidmodify(){Staff::modify();inta;cout------------------------------------endl;cout请输入要修改的信息号(输入0退出):endl;cout1.专业endl;cout2.职称endl;cout------------------------------------endl;cina;switch(a){case1:{cout请输入要修改后的专业:endl;cinmajor;break;}case2:{cout请输入要修改后的职称:endl;cinpost;break;}default:break;}}voidsave(){ofstreamout;if(out){Staff::save1();out.open(engineer.txt,i