课程设计小型人员信息管理系统的设计与实现.doc

上传人:文库蛋蛋多 文档编号:3993305 上传时间:2023-03-30 格式:DOC 页数:25 大小:353.50KB
返回 下载 相关 举报
课程设计小型人员信息管理系统的设计与实现.doc_第1页
第1页 / 共25页
课程设计小型人员信息管理系统的设计与实现.doc_第2页
第2页 / 共25页
课程设计小型人员信息管理系统的设计与实现.doc_第3页
第3页 / 共25页
课程设计小型人员信息管理系统的设计与实现.doc_第4页
第4页 / 共25页
课程设计小型人员信息管理系统的设计与实现.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《课程设计小型人员信息管理系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《课程设计小型人员信息管理系统的设计与实现.doc(25页珍藏版)》请在三一办公上搜索。

1、封 皮(按学校要求手工填写)课 程 设 计 任 务 书学院信息科学与工程学院专业通信工程学生姓名张昊学号1203060417设计题目小型人员信息管理系统的设计与实现内容及要求:小型人员信息管理系统的设计与实现某小型公司主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。人员编号基数为1000,每输入一个人员信息编号顺序加1。程序要有对所有人员提升级别的功能。本例中为简单起见,所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员认为1级。月薪计算办法是:经理拿固定月薪8

2、000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4提成;销售经理即拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五。要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。要求编写程序实现上述功能,并且可以通过实例演示上述功能。进度安排:第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收指导教师(签字):年 月 日学院院长(签字)年

3、月 日1 需求分析- 1 -2 算法基本原理- 1 -3 类设计- 2 -4 详细设计- 3 -4.1 类的接口设计- 3 -4.2 类的实现- 5 -4.3 主函数设计- 10 -5 DOS界面程序运行结果及分析- 11 -5.1 程序运行结果- 11 -5.2运行结果分析- 12 -6 基于MFC的图形界面程序开发- 13 -6.1 基于MFC的图形界面程序设计- 13 -6.2 程序测试- 17 -6.3 MFC程序编写总结- 19 -7 参考文献- 19 -1 需求分析(1)对小型公司做一个小型人员信息管理系统。该公司主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。(2)该管

4、理系统需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。(3)该系统具体要求:人员编号基数为1000,每输入一个人员信息编号顺序加1;对所有人员提升级别,所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员认为1级;经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4提成;销售经理即拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五;要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并

5、将计算结果保存入相应的磁盘文件中。2 算法基本原理1、 定义一个员工虚基类Employee()包含姓名、编号、级别、当月薪水四个共有属性的数据成员;并在该虚基类基础上派生出经理Mansger()、兼职技术人员Technology()、销售经理Salemansger()和兼职推销员Salesman()四类派生类。四种派生类分别实现各自的的员工升级、编号,添加各自特有的数据成员并计算出各自的月薪。 (1)员工等级直接按照要求赋值即可; (2) 在积累中定义静态数据成员static int count,并初始化int Employee:count=1000, 并在基类构造函数中实现编号的赋值 +co

6、unt; num=count; (3)派生类调用构造函数时对数据成员进行赋值,并对各种派生类输入各自的用于计算月薪的数据成员,并按照要求计算各自的月薪。 2、 定义一个结构体链表struct Linked,并将该链表头指针封装在友元类Head()中。3、 运行时构造对象指针,并存在链表中,讲链表的头指针封装在一个友元类中。利用类中的成员函数来实行对链表节点的打印、添加、删除以及查询。这里所以的操作均为数据结构中对单链表的操作。3 类设计首先定义一个员工类Employee作为基类,由于要派生多个派生类,所以将其定义成虚基类;然后由基类派生出四种派生类,分别是Mansger,Technology,

7、Salemansger和Salesman。定义一个结构体链表Linked用来存放生成的对象指针,并将头指针封装存放在友元类Head中。基类Employee中的数据成员姓名、编号、等级、月薪以及一个静态变量,静态变量用来为员工自动赋值编号,在基类构造函数中输入员工姓名,并将编号和等级自动赋值。派生类Mansger中无需添加新成员,在派生类Technology中添加工作时间,在Salemansger中添加部门月销售额,在Salesman添加月销售额。派生类的功能有输出函数print(),储存函数save();友元类Head中存放的数据成员有Linked *top,功能有构造函数Head(),插入函

8、数Insert(),查询函数Check(),删除函数Delete(),输出函数print()。基类与各派生类之间的关系如图:Employee# name20: char# num: int# rank: int#wages: float#count: int=1000+Employee()+print(): voidSalesman# name20: char# num: int# rank: int#wages: float+Employee()+print(): void-sum1 :int+Salesman ()+print(): void+save(): voidSalemansger

9、# name20: char# num: int# rank: int#wages: float+Employee()+print(): void-sum :int+Salemansger()+print(): void+save(): voidTechnology# name20: char# num: int# rank: int#wages: float+Employee()+print(): void-time :int+Technology()+print(): void+save(): void Mansger# name20: char# num: int# rank: int#

10、wages: float+Employee()+print(): void+ Mansger ()+print(): void+save(): voidHead-top: struct*+Insert(Employee *temp)+Check(): void+Delete():void+print():void 4 详细设计整个程序分为三部分,各种职员的类,结构体链表以及封装链表的类。实现时先生成各职员的对象指针,之后将生成的对象指针插入到链表中,最后通过封装类的成员函数对链表节点进行操作,最后实现对各员工的操作。4.1 类的接口设计#include#include#includeusing

11、 namespace std;class Employee /基类Employee声明protected: /数据成员char name20; /员工姓名int num; /员工编号int rank; /员工登记float wages; /员工月薪static int count; /静态变量public: /外部接口Employee(); /构造函数 void print(); /输出函数friend class Head; /声明友元类;class Mansger:virtual public Employee /派生类Mansger声明public:Mansger():Employee(

12、); /构造函数void print(); /输出函数void save(); /储存函数friend class Head;class Salemansger:virtual public Employee /派生类Salemansger声明protected:int sum; /部门销售额public:Salemansger():Employee(); /构造函数void print(); /输出函数void save(); /储存函数friend class Head; class Technology:virtual public Employee /派生类Technology声明pr

13、otected:int time; /工作时间public:Technology():Employee(); /构造函数void print(); /输出函数void save(); /储存函数friend class Head; class Salesman:virtual public Employee /派生类Salesman声明protected:int sum1; /个人销售额public:Salesman():Employee(); /构造函数void print(); /输出函数void save(); /储存函数friend class Head;struct Linked /

14、定义单链表Employee *p;Linked *next;class Head /友元类Head声明public:Head(); /构造函数void Insert(Employee *temp); /单链表插入函数void Check(); /查找函数void Delete(); /删除函数void print(); /输出函数Head(); /析构函数private:Linked *top; /单链表头指针;4.2 类的实现Employee /基类的实现Employee :Employee() /基类的构造函数coutname;+count;num=count;rank=1; /基类成员赋

15、值void Employee: print() /输出类数据成员cout编号num 姓名name 等级rank 月薪wagesendl;Mansger /派生类的实现Mansger :Mansger():Employee() /派生类构造函数rank=4;wages=8000;void Mansger: print() /输出函数cout编号num 姓名name 等级rank 月薪wagesendl;void Mansger :save() /储存函数ofstream fs(d:Mansger.txt);fswages;coutMansger OKendl; Salemansger /派生类的

16、实现Salemansger:Salemansger():Employee() /派生类构造函数rank=3;coutsum;wages=0.005*sum;void Salemansger:print() /输出函数cout编号num 姓名name 等级rank 月薪wagesendl;void Salemansger:save() /储存函数ofstream fs(d:Salemansger.txt);fswages;coutSalemansger OKendl; Technology /派生类的实现Technology:Technology():Employee() /派生类的构造函数ra

17、nk=3;couttime;wages=100*time;void Technology:print() /输出函数cout编号num 姓名name 等级rank 月薪wagesendl;void Technology:save() /储存函数ofstream fs(d:Technology.txt);fswages;coutTechnology OKendl; Salesman /派生类的实现Salesman :Salesman():Employee() /派生类的构造函数coutsum1;wages=0.04*sum1;void Salesman:print() /派生类的输出函数cout

18、编号num 姓名name 等级rank 月薪wagesendl;void Salesman:save() /储存函数ofstream fs(d:Salesman.txt);fswages;coutSalesman OKnext=NULL;void Head:Insert(Employee *temp) /链表的插入函数Linked *ttop = top;while(ttop-next)ttop = ttop-next;ttop-next = new Linked;ttop-next-p = temp;ttop-next-next = 0;void Head:Check() /链表的查找函数c

19、har s20;couts;Linked *pbuf = top-next;while(pbuf!=NULL)if(strcmp(pbuf-p-name,s)!=0)pbuf=pbuf-next;else if(strcmp(pbuf-p-name,s)=0)cout编号p-num 姓名p-name 等级p-rank 月薪p-wagesnext;continue;elsecout查无此人endl;void Head:Delete() /链表的删除函数int a;couta;Linked *pbuf = top,*q;while(pbuf-next!=NULL)if(a!=pbuf-next-p

20、-num)pbuf=pbuf-next;else if(a=pbuf-next-p-num)q=pbuf-next;pbuf-next=pbuf-next-next;delete q;cout删除成功endl;elsecout查无此人next;while(pbuf!=NULL)pbuf-p-print();pbuf=pbuf-next;Head:Head() /友元类的析构函数Linked *ttop,*q;ttop = top-next;while(ttop!=NULL)q=ttop;ttop = ttop-next;delete q;void mnue(Head *Data) /菜单函数i

21、nt n;coutn;switch(n)case 1:Data-Check(); /查找链表节点break;case 2:Data-Delete(); /删除链表节点break;case 3:Data-print(); /输出链表节点break;case 0:break; coutn;if(n!=0) mnue(Data);void menu(Head *Data) /菜单函数Mansger *M; Salemansger *S; Technology *T;Salesman *SA; /声明类指针int n;coutn;switch(n)case 1:M=new Mansger; /构造对象

22、指针M-save(); /储存对象数据Data-Insert(M); /将对象指针插入到链表中break;case 2:S=new Salemansger; /构造对象指针S-save(); /储存对象数据Data-Insert(S); /将对象指针插入到链表中break;case 3:T=new Technology; /构造对象指针T-save(); /储存对象数据Data-Insert(T); /将对象指针插入到链表中break;case 4:SA=new Salesman; /构造对象指针SA-save(); /储存对象数据Data-Insert(SA); /将对象指针插入到链表中br

23、eak;case 0:break;coutn;if(n!=0) menu(Data); /递归调用在类的成员函数实现过程中,派生类的构造函数使用参数调用了基类的构造函数。在类外定义成对象指针,并用new生成动态内存空间来储存,并将其插入到链表中并进行封装。通过封装类对链表的操作从而调用各员工类中的成员函数对各员工类进行题目所需功能的操作。4.3 主函数设计void main() /主函数Head Data;/构造对象int n;while(1)coutn;switch(n)case 1:menu(&Data); /菜单函数1break;case 2:mnue(&Data); /菜单函数2bre

24、ak;case 0:system(pause);return;system(cls);5 DOS界面程序运行结果及分析5.1 程序运行结果对员工类进行输入操作实现查找、删除以及输出功能5.2运行结果分析整个程序是采用单链表的形式来储存对象指针,合理的利用的内存资源。为了通过封装链表的类对各员工类里的成员函数进行调用,再次将该类声明成友元类。类的外部为对象指针申请动态的储存空间,并将其插入到单链表中,通过头结点对各个节点进行访问操作。最后执行析构函数的时候讲点链表的节点一个一个释放掉。利用MFC AppWizard创建一个基于对话框的MFC应用程序。该程序使用链表类,对公司的员工信息进行输入、删

25、除、存盘以及读取的功能6 基于MFC的图形界面程序开发MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。6.1 基于MFC的图形界面程序设计(1)界面设计首先在VC中建立MFC AppWizard(exe)工程,名称为GuassLineGU

26、I,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如下图45所示。将对话框资源中的默认对话框利用工具箱改造成如下界面,如图所示。6.2详细设计本程序链表类对象为一结构体CFund,它记录了姓名,编号,等级,月薪等所有员工的信息。struct CFundCString m_name; /姓名CString m_rank; /等级float wages; /月薪float income; /用于计算月薪的变量;声明一个CPtrList型的链表类m_fundlist。public:Ch8Demo2Dlg(CWnd* pParent = NULL); / standa

27、rd constructor CPtrList m_fundlist;为对话框类添加一个成员函数Resfiesh,将链表对象中的数据在列表框显示。void Ch8Demo2Dlg:Reflesh() CString str,str1;m_cTheList.ResetContent (); /清空列表框if(!m_fundlist.IsEmpty() /链表不为空POSITION pos=m_fundlist.GetHeadPosition(); /获取链表头的位置for(int i=0;iincome); /格式化月薪str=姓名:+m_pFund-m_name+ 等级:+m_pFund-m_

28、rank+ 薪水:+str1;m_cTheList.AddString(str); /添加列表框数据UpdateData(false); /更新总量编辑框对列表框类进行输入,删除的操作代码如下:void Ch8Demo2Dlg:OnCheck() UpdateData(TRUE); /获得编辑框数据CFund *m_pFund=new CFund; /创建结构体对象指针switch(m_radio)case 0: /插入操作if(m_name.IsEmpty()AfxMessageBox(用户输入不正确);return;m_pFund-m_name=m_name;m_pFund-m_rank=

29、4;/m_pFund-wages=m_wages;m_pFund-income=8000;m_fundlist.AddTail(m_pFund);m_name= ;m_wages=0;UpdateData(false);Reflesh();break;case 1: /插入操作if(m_name.IsEmpty()AfxMessageBox(用户输入不正确);return;m_pFund-m_name=m_name;m_pFund-m_rank=3;m_pFund-wages=m_wages;m_pFund-income=m_wages*100;m_fundlist.AddTail(m_pFu

30、nd);m_name= ;m_wages=0;UpdateData(false);Reflesh();break;case 2: /插入操作if(m_name.IsEmpty()AfxMessageBox(用户输入不正确);return;m_pFund-m_name=m_name;m_pFund-m_rank=3;m_pFund-wages=m_wages;m_pFund-income=5000+m_wages*0.005;m_fundlist.AddTail(m_pFund);m_name= ;m_wages=0;UpdateData(false);Reflesh();break;case

31、3: /插入操作if(m_name.IsEmpty()AfxMessageBox(用户输入不正确);return;m_pFund-m_name=m_name;m_pFund-m_rank=1;m_pFund-wages=m_wages;m_pFund-income=m_wages*0.04;m_fundlist.AddTail(m_pFund);m_name= ;m_wages=0;UpdateData(false);Reflesh();break;case 4: /去除表头操作if(m_fundlist.GetCount()m_fundlist.RemoveHead();m_name= ;m_wages=0;UpdateData(false);Reflesh();break;case 5: /去除表尾操作if(m_fundlist.GetCount()m_fundlist.RemoveTail();m_name= ;m_wages=0;UpdateData(false);Reflesh();break;为更方便使用,在操作单选按钮是设置了一下响应函数:void Ch8Demo2Dlg:OnRadio1() /单选按钮的响应函数UpdateData(TRUE);switch(m_radio) case 0:m_temp=nothing;bre

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号