小型人员信息管理系统方案_第1页
小型人员信息管理系统方案_第2页
小型人员信息管理系统方案_第3页
小型人员信息管理系统方案_第4页
小型人员信息管理系统方案_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、WORD24/27成 绩 评 定 表学生初珊珊班级学号1203060111专 业通信工程课程设计题目小型人员信息管理系统的设计与实现评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院信息科学与工程专 业通信工程学生初珊珊班级学号1203060111课程设计题目小型人员信息管理系统的设计与实现实践教学要求与任务某小型公司主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的、编号、级别、当月薪水,计算月薪总额并显示全部信息。人员编号基数为1000,每输入一个人员信息编号顺序加1。程序要有对所有人员提升级别的功能。本例中为简单起见,所有人员的初始级别均为1级,

2、然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员认为1级。月薪计算办法是:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4提成;销售经理即拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五。要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。要求编写程序实现上述功能,并且可以通过实例演示上述功能。工作计划与进度安排第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:程序的设计、

3、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收。指导教师: 201 年 月 日专业负责人:201 年 月 日学院教学副院长:201 年 月 日摘 要C+是支持面向过程的设计,更是支持基于对象和面向对象的程序设计。类是C+中十分重要的概念,它是实现面向对象程序设计的基础。本文采用虚基类与其派生类实现了对小型人员信息的管理,类的封装性和信息隐蔽性可以很好的保护公司员工的信息,同时采用了Visual C+ 6.0的控制台工程和MFC工程实现了对员工基本信息的输入和全部信息的输出与保存。关键词:信息管理;类;控制台工程;MFC工程目 录 TOC o 1-3 h z u HYPER

4、LINK l _Toc3451595601 需求分析 PAGEREF _Toc345159560 h 1HYPERLINK l _Toc3451595612 算法基本原理 PAGEREF _Toc345159561 h 1HYPERLINK l _Toc3451595623 类设计 PAGEREF _Toc345159562 h 2HYPERLINK l _Toc3451595634 基于控制台的应用程序 PAGEREF _Toc345159563 h 3HYPERLINK l _Toc3451595644.1 类的接口设计 PAGEREF _Toc345159564 h 4HYPERLINK

5、 l _Toc3451595654.2 类的实现 PAGEREF _Toc345159565 h 7HYPERLINK l _Toc3451595664.3 主函数设计 PAGEREF _Toc345159566 h 11HYPERLINK l _Toc3451595674.4 基于控制台的应用程序测试 PAGEREF _Toc345159567 h 12HYPERLINK l _Toc3451595685 基于MFC的应用程序 PAGEREF _Toc345159568 h 14HYPERLINK l _Toc3451595695.1 基于MFC的应用程序设计 PAGEREF _Toc345

6、159569 h 15HYPERLINK l _Toc3451595705.1.1 MFC程序界面设计 PAGEREF _Toc345159570 h 15HYPERLINK l _Toc3451595715.1.2 MFC程序代码设计 PAGEREF _Toc345159571 h 16HYPERLINK l _Toc3451595725.2基于MFC的应用程序测试 PAGEREF _Toc345159572 h 21HYPERLINK l _Toc345159573结论23HYPERLINK l _Toc345159574参考文献 PAGEREF _Toc345159574 h 241 需

7、求分析(1)对小型公司进行小型人员信息操作管理系统。该公司主要有四类人员:经理、销售经理、兼职技术人员、兼职推销员;定义一个虚基类并且派生四个子类。(2)系统需要存储这些人员的、编号、级别、当月薪水,输入基本信息,计算月薪总额,显示并保存全部信息;每个派生类的构造函数要实现对其特有数据成员的初始化。(3)系统具体要求:编号要求:人员编号基数为1000,每输入一个员工编号加1;编号定义为全局静态变量即可。级别要求:所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,兼职推销员为1级;直接对级别赋值即可。月薪要求:经理拿固定月薪8000元;兼职技术人员按每小时1

8、00元领取月薪;兼职推销员的月薪按该推销员当月销售额的4提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五。总体要求:为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。2算法基本原理(1)定义一个员工虚基类Employmee( ),包括员工、级别、编号月薪共有的基本数据成员;(2)在基类的基础上派生出经理Mansger( )类、销售经理Salemansger( )类、兼职技术人员Technology( )类和兼职推销员Saleman( )类,并在这四个派

9、生类中添加各自数据成员和成员函数。具体分析如下:员工编号的可以定义全局静态变量static int count=0;并且初始化员工编号number=1000+count;每输入一个员工的编号加1。员工等级按照要求直接赋值即可;在派生类的构造函数中初始化数据成员并且按照要求计算各成员的月薪。(3)定义一个结构体链表struct Linked,并将链表的头指针头封装在友元类Head( )中。(4)运行时构造对象指针,并存在链表中,利用类中的成员函数来实现对链表节点的打印、添加、保存。这些操作均作为数据结构中对单链表的操作。3 类设计首先定义一个员工基类Employee,由于要派生出多个子类,所以将

10、其定义为虚基类;在类外定义全局静态变量,用于记录员工的编号。虚基类Employee中的数据成员包括、编号、等级、月薪。虚基类的成员函数包括打印函数 printf(),并声明友元类。然后派生出经理Mansger类、销售经理Salemansger类、兼职技术人员Technology类和兼职推销员Saleman类。在派生类Mansger的构造函数直接对月薪和等级赋值:月薪8000,等级4;在派生类Salemansger的构造函数中定义特有的数据成员:销售总额sum1,并根据要求计算月薪,等级赋值3;在派生类Technology的构造函数中定义特有的数据成员:工作时间time,并根据要求计算月薪,等级

11、赋值3;在派生类Saleman的构造函数中定义特有的数据成员:销售额sum2,并根据要求计算月薪,等级赋值1。派生类的功能有打印函数 printf(),储存函数save()。友元类Head存放的数据成员有Linked top,功能有构造函数Head( )、插入函数Insert( )、打印函数printf( )以与析构函数Head();其中功能构造函数用来开辟储存空间,插入函数采用单链表现实信息的输入,打印函数用来输出录入员工的全部信息,析构函数用来释放空间。基类与各派生类之间的关系如下图所示:char name30;int number;int level;float wages;Employ

12、ee()void printf()friend class Headvoid save()void printf()friend class Headint sum1Salemansger():Employee()void save ()Technology():Employee()float timevoid printf()friend class Headvoid save ()int sum2Saleman():Employee()void printf()friend class Headvoid save ()Mansger():Employee()图1 Employee类和其派生

13、类关系的图形表示在程序实现过程中,各派生类的成员函数需要访问基类Employee的数据成员,利用公有继承方式派生,同时将Employee类中的数据成员的访问控制设置为保护类型。这样,经过公有派生之后,基类的保护成员在派生类中依然是保护成员,可以被派生类的成员函数访问。4 基于控制台的应用程序整个程序分为三部分,各种职员的类,结构体链表以与封装在结构体链表的类。实现时先生成各种职员的对象指针,之后将生成的对象指针插入到链表中,最后通过封装类类的成员函数对链表节点进行操作,实现对员工的操作。4.1 类的接口设计#include#include#includeusing namespace std;

14、static int count=0; /全局动态变量,用于记录员工编号/定义虚基类class Employee public: Employee() /构造函数,初始化员工基本信息 coutname;+count;number=count+1000; level=1; void printf(); /打印函数 friend class Head; /声明友元类protected: /数据成员为保护类型char name30;int number;int level;float wages;/派生类Mansgerclass Mansger: public virtual Employee pu

15、blic: Mansger():Employee()level=4;wages=8000; /构造函数定义 void save(); /储存函数 void printf(); /打印函数 friend class Head; /声明友元类;/派生类Salemansgerclass Salemansger: public virtual Employee public: Salemansger():Employee() /构造函数定义 level=3; coutsum1; wages=5000+0.005*sum1; /计算销售经理工资 void save (); /储存函数 void prin

16、tf(); /打印函数 friend class Head;protected: int sum1; /销售总额;/派生类Technologyclass Technology: public virtual Employee public: Technology():Employee() /构造函数定义 level=3; couttime; wages=100*time; /计算技术人员工资 void save(); /储存函数 void printf(); /打印函数 friend class Head;protected: float time; /工作时间;/派生类Salemanclas

17、s Saleman: public virtual Employee /public: Saleman():Employee() /构造函数定义 level=1; coutsum2; wages=0.04*sum2; /计算销售员工资 void save (); /储存函数 void printf(); friend class Head;protected:int sum2; /销售总额;/定义友元类class Head public: Head(); /构造函数 void Insert(Employee*temp); /单链表的插入函数 void printf(); /打印函数 Head(

18、); /析构函数private: Linked*top; /单链表的头结点;经过公有派生,四个派生类获得了除构造函数之外的Employee类的全部成员,由于基类的成员是公有和保护类型,因此在派生类中的成员函数中,基类继承来的成员全部可以访问,而对于建立派生类对象的外部模块来讲,基类的保护成员是无法访问的。通过保护访问类型和公有的继承方式,实现了基类Employee的数据的有效共享和可靠保护。友元类可以实现外部函数对类中数据成员的调用,在程序中,员工的基本信息的输入,全部信息的保存都是在基类、派生类的构造函数以与友元类的成员函数中完成,它们的清理工作在友元类析构函数中完成。4.2 类的实现/基类

19、输出函数void Employee:printf() cout:name 编号:number 等级:level 月薪:wagesendl;/派生类Mansger输出函数void Mansger:printf() cout:name 编号:number 等级:level 月薪:wagesendl;/派生类Mansger储存函数void Mansger:save() ofstream fs(f:Mansger.txt); fs:name 编号:number 等级:level 月薪:wagesendl;coutMansger OKendl; /派生类Salemansger输出函数void Salem

20、ansger:printf() cout:name 编号:number 等级:level 月薪:wagesendl;/派生类Salemansger储存函数void Salemansger:save()ofstream fs(f:Salemansger.txt); fs:name 编号:number 等级:level 月薪:wagesendl;coutSalemansger OKendl; /派生类Technology输出函数void Technology:printf() cout:name 编号:number 等级:level 月薪:wagesendl;/派生类Technology储存函数v

21、oid Technology:save()ofstream fs(f:Technology.txt); fs:name 编号:number 等级:level 月薪:wagesendl;coutTechnology OKendl; /派生类Saleman输出函数void Saleman:printf() cout:name 编号:number 等级:level 月薪:wagesendl;/派生类Saleman:储存函数void Saleman:save()ofstream fs(f:Saleman.txt); fs:name 编号:number 等级:level 月薪:wagesendl;cou

22、tSaleman 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:printf() Linked*pbuf=top-next;while(pbuf!=NULL)pbuf-p-printf(); /插入打印函数pbuf=pbuf-next;/链表的析构函数Hea

23、d:Head() Linked*ttop,*q;ttop=top-next;while(ttop!=NULL)q=ttop;ttop=ttop-next;delete q; /释放空间/菜单函数void menu(Head*Data) int n;coutn;switch(n) /多分支选择语句 case 1: Data-printf(); /输出链表节点 break; case 0: break;coutn;if(n!=0)menu(Data); /递归调用/菜单函数1void menu1(Head*Data) Mansger*M; /声明类指针Salemansger*S;Technolog

24、y*T;Saleman*S1;int n;coutn;switch(n)case 1:M=new Mansger; /构造对象指针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:S1=new Sal

25、eman; /构造对象指针S1-save(); /储存对象数据Data-Insert(S1); /将对象指针插入到链表中break;case 0:break;coutn;if(n!=0)menu1(Data); /递归调用在类的成员函数实现过程中,派生类的成员函数调用了基类的构造函数,只是整个调用过程中完全是由系统部完成。基类的保护数据成员,经过公有派生之后,在派生类中是以保护成员的身份出现的,派生类的成员函数可以自由地进行访问。通过定义友元类访问类的保护成员,并通过单链表法开辟输入空间以便插入员工的信息。最后通过友元类的析构函数释放空间。4.3 主函数设计/主函数void main() He

26、ad Data; /构造对象int n;while(1) coutn;switch(n) /多分支语句进行菜单的选择case 1:menu1(&Data); break;case 2:menu(&Data);break;case 0:system(pause);return;system(cls);在程序的主函数部分,定义一个构造对象以便实现调用。Switch多分支选择语句可以选择菜单从而实现输入、打印操作。4.4 基于控制台的应用程序测试程序运行结果如图2-1和2-2所示。图2-1 程序运行结果1图2-2 程序运行结果2为每类员工保存的文件夹如图3-1所示的Mansger.txt、Salem

27、ansger.txt、Saleman.txt、Technology.txt:图3-1存盘文件夹为经理建立的文件夹打开后如图3-2所示:图3-2显示经理文件夹为销售经理建立的文件夹打开后如图3-3所示:图3-3显示销售经理文件夹为兼职技术人员建立的文件夹打开后如图3-4所示:图3-4显示兼职技术人员文件夹为兼职推销员建立的文件夹打开后如图3-5所示:图3-5显示兼职推销员文件夹从图2-1到3-5可以看出,在DOS界面通过对菜单的选择可以输入和打印员工的信息。经理只需要输入,销售经理要输入和当月的部门的销售总额,兼职技术人员要输入和工作时间,兼职推销员要输入和月销售额,然后选择打印菜单即可输出各类

28、人员的全部信息,而这些信息已经通过程序的文件输出流以TXT的格式保存在了电脑磁盘F:梁庶芹文件夹中。打开后便可显示各类员工的全部信息。5基于MFC的应用程序MFC是通过窗口和控件实现输入输出,设置MFC界面也很重要,界面的美观程度直接影响了程序设计的好坏。下面在MFC类的框架下加入上述类并实现人员的信息管理,通过图形界面的输入和输出。5.1 基于MFC的应用程序设计5.1.1 MFC程序界面设计首先在VC中建立MFC AppWizard(exe)工程,名称为lsq,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如下图41和4-2所示。图4-1 建立MFC Ap

29、pWizard(exe)工程图4-2 建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图4-3所示。图4-3显示员工信息程序界面设计图4-3所示的界面中包含了5个Group Box,7个Static Text控件,5个Button控件,和15个Edit Box控件,控件的基本信息列表如下表1所示。表1 控件基本信息控件类别控件ID控件Caption说明Group BoxIDC_STATIC职位见图6 级别 月薪 存盘Static TextIDC_STATIC经理见图6销售经理技术人员推销员销售总额工作时间销售额BottonIDC_BUTTON1 提交见图6IDC_

30、BUTTON2MansgerIDC_BUTTON3SalemansgerIDC_BUTTON4TechnologyIDC_BUTTON5SalemanEdit BoxIDC_JL栏第一个Edit IDC_XSJL栏第二个EditIDC_JSRY栏第三个EditIDC_TXY栏第四个EditIDC_DJ1级别栏第一个EditIDC_DJ2级别栏第二个EditIDC_DJ3级别栏第三个EditIDC_DJ4级别栏第四个EditIDC_YX1月薪栏第一个EditIDC_YX1月薪栏第二个EditIDC_YX1月薪栏第三个EditIDC_YX1月薪栏第四个EditIDC_XSZE销售总额右边EditI

31、DC_GZSJ工作时间右边EditIDC_XSE销售额右边Edit5.1.2 MFC程序代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为15个Edit Box控件建立Member Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选项卡,可显示成员变量设置界面,如图4-4所示。图4-4成员变量设置界面1通过该界面设置与15个Edit Box控件对应的成员变量,具体Type与Member请详见图4-4MFC编写代码也是非常重要的阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写如下。各

32、员工的直接在MFC界面的档中输入,等级和月薪直接赋值即可。修改容包括:将显示员工信息的prinft( )函数去掉,因为在图形界面的程序上已经不需要连个函数承担输出功能了;将存盘函数save( )去掉直接在MFC界面的存盘档位每类员工建立文件夹并保存,仍然使用文件输出流;菜单函数也不再需要,直接通过对按钮的选择进行输入输出和存盘操作。具体代码如下:/为提交键编写的程序,用来实现信息的输出:void CLsqDlg:OnButton1() UpdateData(TRUE);if(m_Mansger) /为经理的等级和月薪赋值m_level1=4;m_wages1=8000;if(m_Saleman

33、sger) /为销售经理的等级和月薪赋值 m_level2=3;m_wages2=5000+m_sum2*0.005;if(m_Technology) /为兼职技术人员的等级和月薪赋值m_level3=3;m_wages3=m_time*100;if(m_Saleman) /为兼职推销员的等级和月薪赋值m_level4=1;m_wages4=m_sum1*0.04;UpdateData(FALSE);/为经理建立文件夹,将其信息保存在磁盘中void CLsqDlg:OnButton2() ofstream fs(f:MFCMansger.txt); fs:m_Mansger 等级:m_level1 月薪:m_wages1endl;/为销售经理建立文件夹,将其信息保存在磁盘中void CLsqDlg:OnButton3() ofstream fs(f:MFCSalemansger.txt); fs:m_Salemansger 等级:m_level2 月薪:m_wages2endl;/为兼职技术人员建立文件夹,将其信息保存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论