封皮(按学校要求手工填写)2课程设计任务书学院信息科学与工程学院专业通信工程学生姓名张昊学号1203060417设计题目小型人员信息管理系统的设计与实现内容及要求:.小型人员信息管理系统的设计与实现某小型公司主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。人员编号基数为1000,每输入一个人员信息编号顺序加1。程序要有对所有人员提升级别的功能。本例中为简单起见,所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员认为1级。月薪计算办法是:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4%提成;销售经理即拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五。要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。要求编写程序实现上述功能,并且可以通过实例演示上述功能。进度安排:第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收指导教师(签字):年月日学院院长(签字)年月日31需求分析.................................................................错误!未定义书签。2算法基本原理........................................................错误!未定义书签。3类设计.....................................................................错误!未定义书签。4详细设计.................................................................错误!未定义书签。4.1类的接口设计.....................................................................错误!未定义书签。4.2类的实现.............................................................................错误!未定义书签。4.3主函数设计.........................................................................错误!未定义书签。5DOS界面程序运行结果及分析..........................................................145.1程序运行结果.....................................................................错误!未定义书签。5.2运行结果分析......................................................................错误!未定义书签。6基于MFC的图形界面程序开发........................................................166.1基于MFC的图形界面程序设计.....................................................................166.2程序测试.............................................................................错误!未定义书签。6.3MFC程序编写总结...........................................................................................257参考文献··························································2541需求分析(1)对小型公司做一个小型人员信息管理系统。该公司主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。(2)该管理系统需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。(3)该系统具体要求:人员编号基数为1000,每输入一个人员信息编号顺序加1;对所有人员提升级别,所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员认为1级;经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4%提成;销售经理即拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五;要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。2算法基本原理1、定义一个员工虚基类Employee()包含姓名、编号、级别、当月薪水四个共有属性的数据成员;并在该虚基类基础上派生出经理Mansger()、兼职技术人员Technology()、销售经理Salemansger()和兼职推销员Salesman()四类派生类。四种派生类分别实现各自的的员工升级、编号,添加各自特有的数据成员并计算出各自的月薪。(1)员工等级直接按照要求赋值即可;(2)在积累中定义静态数据成员staticintcount,并初始化intEmployee::count=1000,并在基类构造函数中实现编号的赋值++count;num=count;(3)派生类调用构造函数时对数据成员进行赋值,并对各种派生类输入各自的用于计算月薪的数据成员,并按照要求计算各自的月薪。2、定义一个结构体链表structLinked,并将该链表头指针封装在友元类Head()中。3、运行时构造对象指针,并存在链表中,讲链表的头指针封装在一个友元类中。利用类中的成员函数来实行对链表节点的打印、添加、删除以及查询。这里所以的操作均为数据结构中对单链表的操作。53类设计首先定义一个员工类Employee作为基类,由于要派生多个派生类,所以将其定义成虚基类;然后由基类派生出四种派生类,分别是Mansger,Technology,Salemansger和Salesman。定义一个结构体链表Linked用来存放生成的对象指针,并将头指针封装存放在友元类Head中。基类Employee中的数据成员姓名、编号、等级、月薪以及一个静态变量,静态变量用来为员工自动赋值编号,在基类构造函数中输入员工姓名,并将编号和等级自动赋值。派生类Mansger中无需添加新成员,在派生类Technology中添加工作时间,在Salemansger中添加部门月销售额,在Salesman添加月销售额。派生类的功能有输出函数print(),储存函数save();友元类Head中存放的数据成员有Linked*top,功能有构造函数Head(),插入函数Insert(),查询函数Check(),删除函数Delete(),输出函数print()。基类与各派生类之间的关系如图:Mansger#name[20]:char#num:int#rank:int#wages:float+Employee()+print():void+Mansger()+print():void+save():voidEmployee#name[20]:char#num:int#rank:int#wages:float#count:int=1000+Employee()+print():voidSalesman#name[20]:char#num:int#rank:int#wages:float+Employee()+print():void-sum1:int+Salesman()+print():void+save():voidSalemansger#name[20]:char#num:int#rank:int#wages:float+Employee()+print():void-sum:int+Salemansger()+print():void+save():voidTechnology#name[20]:char#num:int#rank:int#wages:float+Employee()+print():void-time:int+Technology()+print():void+save():void64详细设计整个程序分为三部分,各种职员的类,结构体链表以及封装链表的类。实现时先生成各职员的对象指针,之后将生成的对象指针插入到链表中,最后通过封装类的成员函数对链表节点进行操作,最后实现对各员工的操作。4.1类的接口设计#includeiostream#includestring.h#includefstreamusingnamespacestd;classEmployee//基类Employee声明{protected://数据成员charname[20];//员工姓名intnum;//员工编号intrank;//员工登记floatwages;//员工月薪staticintcount;//静态变量public://外部接口Employee();//构造函数voidprint();//输出函数friendclassHead;//声明友元类};classMansger:virtualpublicEmployee//派生类Mansger声明{public:Mansger():Employee();//构造函数voidprint();//输出函数voidsave();//储存函数friendclassHead;};Head-top:struct*+Insert(Employee*temp)+Check():void+Delete():void+print():void7classSalemansger:virtualpublicEmployee//派生类Salemansger声明{protected:intsum;//部门销售额public:Salemansger():Employee();//构造函数voidprint();//输出函数voidsave();//储存函数friendclassHead;}classTechnology:virtualpublicEmployee//派生类Technology声明{protected:inttime;//工作时间public:Technology():Employee();//构造函数voidprint();//输出函数voidsave();//储存函数friendclassHead;};classSalesman:virtualpublicEmployee//派生类Salesman声明{protected:intsum1;//个人销售额public:Salesman():Employee();//构造函数voidprint();//输出函数voidsave();//储存函数friendclassHead;;};structLinked//定义单链表{Employee*p;Linked*next;};classHead//友元类Head声明{public:Head();//构造函数voidInsert(Employee*temp);//单链表插入函数8voidCheck();//查找函数voidDelete();//删除函数void