小型人员信息管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩评定表
课程设计任务书
摘要
C++是支持面向过程的设计,更是支持基于对象和面向对象的程序设计。类是C++中十分重要的概念,它是实现面向对象程序设计的基础。本文采用虚基类及其派生类实现了对小型人员信息的经管,类的封装性和信息隐蔽性可以很好的保护公司员工的信息,同时采用了Visual C++ 6.0的控制台工程和MFC工程实现了对员工基本信息的输入和全部信息的输出及保存。
关键词:信息经管;类;控制台工程;MFC工程
目录
1 需求分析1
2 算法基本原理1
3 类设计2
4 基于控制台的应用程序3
4.1类的接口设计4
4.2类的实现7
4.3主函数设计11
4.4基于控制台的应用程序测试12
5 基于MFC的应用程序14
5.1基于MFC的应用程序设计15
5.1.1 MFC程序界面设计15
5.1.2 MFC程序代码设计16
5.2基于MFC的应用程序测试20
结论23
参考文献23
1 需求分析
(1)对小型公司进行小型人员信息操作经管系统。该公司主要有四类人员:经理、销售经理、兼职技术人员、兼职推销员;定义一个虚基类并且派生四个子类。
(2)系统需要存储这些人员的姓名、编号、级别、当月薪水,输入基本信息,计算月薪总额,显示并保存全部信息;每个派生类的构造函数要实现对其特有数据成员的初始化。
(3)系统具体要求:
①编号要求:人员编号基数为1000,每输入一个员工姓名编号加1;编号定义为全局静态变量即可。
②级别要求:所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,兼职推销员为1级;直接对级别赋值即可。
③月薪要求:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五。
④总体要求:为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。
2算法基本原理
(1)定义一个员工虚基类Employmee( ),包括员工姓名、级别、编号月薪共有的基本数据成员;
(2)在基类的基础上派生出经理Mansger( )类、销售经理Salemansger( )类、兼职技术人员Technology( )类和兼职推销员Saleman( )类,并在这四个派生类中添加各自数据成员和成员函数。具体分析如下:
①员工编号的可以定义全局静态变量static int count=0;并且初始化员工编号number=1000+count;每输入一个员工的姓名编号加1。
②员工等级按照要求直接赋值即可;
③在派生类的构造函数中初始化数据成员并且按照要求计算各成员的月薪。
(3)定义一个结构体链表struct Linked,并将链表的头指针头封装在友元类Head( )中。
(4)运行时构造对象指针,并存在链表中,利用类中的成员函数来实现对链表节点的打印、添加、保存。这些操作均作为数据结构中对单链表的操作。
3 类设计
首先定义一个员工基类Employee,由于要派生出多个子类,所以将其定义为虚基类;在类外定义全局静态变量,用于记录员工的编号。虚基类Employee 中的数据成员包括姓名、编号、等级、月薪。虚基类的成员函数包括打印函数printf(),并声明友元类。
然后派生出经理Mansger类、销售经理Salemansger类、兼职技术人员Technology类和兼职推销员Saleman类。在派生类Mansger的构造函数直接对月薪和等级赋值:月薪8000,等级4;在派生类Salemansger的构造函数中定义特有的数据成员:销售总额sum1,并根据要求计算月薪,等级赋值3;在派生类Technology的构造函数中定义特有的数据成员:工作时间time,并根据要求计算月薪,等级赋值3;在派生类Saleman的构造函数中定义特有的数据成员:销售额sum2,并根据要求计算月薪,等级赋值1。派生类的功能有打印函数printf(),储存函数save()。
友元类Head存放的数据成员有Linked top,功能有构造函数Head( )、插入函数Insert( )、打印函数printf()以及析构函数~Head();其中功能构造函数用来开辟储存空间,插入函数采用单链表现实信息的输入,打印函数用来输出录入员工的全部信息,析构函数用来释放空间。
基类与各派生类之间的关系如下图所示:
图1 Employee类和其派生类关系的图形表示
在程序实现过程中,各派生类的成员函数需要访问基类Employee的数据成员,利用公有继承方式派生,同时将Employee类中的数据成员的访问控制设置为保护类型。这样,经过公有派生之后,基类的保护成员在派生类中依然是保护成员,可以被派生类的成员函数访问。
4 基于控制台的应用程序
整个程序分为三部分,各种职员的类,结构体链表以及封装在结构体链表的类。实现时先生成各种职员的对象指针,之后将生成的对象指针插入到链表中,最后通过封装类类的成员函数对链表节点进行操作,实现对员工的操作。
4.1 类的接口设计
#include
#include
#include
using namespace std。
static int count=0。//全局动态变量,用于记录员工编号//定义虚基类
class Employee
{public:
Employee() //构造函数,初始化员工基本信息
{cout<<"请输入员工姓名:"。
cin>>name。
++count。
number=count+1000。
level=1。
}
void printf()。//打印函数
friend class Head。//声明友元类
protected: //数据成员为保护类型
char name[30]。
int number。
int level。
float wages。
}。
//派生类Mansger
class Mansger: public virtual Employee
{public:
Mansger():Employee(){level=4。wages=8000。}//构造函数定义void save()。//储存函数
void printf()。//打印函数