项目介绍
该职工管理系统主要是用来管理整个公司的信息,基于C++继承和多态来实现,同时也包含文件流操作。
设计任务
(1)设计个职工管理系统,管理整个公司的信息,公司的职工分为三类:老板,经理,员工,他们的公有属性都包含职工编号,职工姓名,以及职责。
(2)职责:
①老板职责:管理公司所有的事物.
②经理职责:完成老板交给任务,并下达任务给员工。
③员工职责:完成经理交给的任务。
设计要求
(1)职工管理系统中需要实现以下几种功能:
①退出功能:退出当前程序。
②增加职工信息:实现批量增加(自己可以确定一次性增加几个职工的信息)职工信息,并将信息录入到文件中,职工信息分为:职工编号,职工职责,职工姓名。
③显示职工信息:显示公司内所有职工的信息。
④删除职工信息:按照职工编号删除信息。
⑤修改职工信息:按照职工编号修改职工信息
⑥排序功能:按照职工编号对职工进行排序。
⑦清空信息功能:清空文件中记录所有职工的信息。
此次项目采用分文件,文件流,C++继承和多态完成。(采用公有继承),并且第二次运行程序时,第一的运行程序的数据仍能保留(信息数据能够保留。
2.1程序的总体结构
(1)头文件:
①common.h:包含该项目用到的所有头文件。
(2)类:
②worker(基类,只需要写出声明(worker.h头文件),让其他类继承其中的属性和行为就行,不需要写出实现):包含公司职工的公有属性和行为(成员函数为纯虚函数)。boss(老板类),manager(经理类),employer(员工类),采用公有继承的方式继承worker类。 然后,就可以用一个worker**类型的,管理三个继承worker的类的数据(用new创建,worker*类型)。
③workerManger类:用来实现该程序的所有功能。
④源.cpp,进行该项目的测试。
(4)头文件截图
①common.h
②worker.h(包含职工编号,姓名,部门编号,以及获取岗位和显示信息的函数)
③boss.h 继承worker类
⑥workerManger.h 包含实现该系统功能的所有函数,以及员工总人数(EmpNum),判断文件是否为空(FileEmpty)等数据成员。
(1)boss.cpp,manager.cpp,employer.cpp的实现
①这三个类的实现思路都是一样的,他们的构造函数对继承worker.h的属性,进行初始化。
②ShowInfo()函数,就对他们的数据成员进行打印,getDeptName()函数,就返回对应的职工(老板,经理,员工)。
boss类
(2)managerWorker.cpp的实现
①Show_Menu()函数的实现
直接用cout打印即可。
②ExitSystem()函数的实现
直接调用exit()函数,就可以实现程序的退出。
③addInfo()函数的实现(添加信息)
添加信息,先进行添加信息数量的输入, 然后进行信息添加,分两步,第一步,先对原来的信息进行拷贝。第二步就添加信息(用cin添加),职工编号,
姓名,部门编号,这几个继承的属性,通过new创建出各自的对象,调用其构造函数即可。
这里的work**类型的便是用于存储,用new创建的work*类型的老板,经理,员工类的数据。
注意:还需要判断添加的信息是否重复,因为后面会多次用到,我单独写了个函数JudgeInformation(int ID),就将之前存储的数据挨个遍历,看是否能找到相同的ID,能找到自己就算是添加信息重复,
当然还有文件信息的保存与更新(saveFile()函数),将存储的信息,输入到文件中去(用文件流操作)
下面是具体代码的实现(以截图形式展示,部分代码分析见上):
函数JudgeInformation(int ID)的实现
当然这里如果添加重新重复了,就还可以重新输入职工编号。
**saveFile()函数的实现**
第一步:就先打开文件,第二步:然后将信息输入到文件中,第三步:关闭文件
文件名这里采用的宏定义(FILENAME)便于后面修改,宏定义和头文件都放在common.h这个头文件中。
**addInfo()函数的实现(下面代码)**
④ShowInformation()函数,显示信息
就调用存储在work**类型 EmpArray数组中的老板类,员工类,或者是经理类的showInfo()函数既可。 当然要先判断,文件是否为空或者是否存在
⑤DeleteInformation()函数 删除信息
先看文件是否存在或者是否为空,通过职工编号删除信息,调用函数JudgeInformation(int ID),判断编号是否存在,如果存在吗,用数据覆盖的方式删除,删除后,人数减1。
⑥ ModifyInformation(),修改信息
也就是判断文件是否存在或者是否为空,通过职工编号修改,后面修改信息思路部分类似于添加信息。
⑦ searchInformayion()函数 查找信息
也就是判断文件是否存在或者是否为空,通过职工编号查找,找到就调用showInfo()函数
⑧sortInformation() 排序函数
就是通过职工编号,对职工的信息进行排序。主要通过选择排序实现排序效果(找到最小的)
⑨ clearInformation()函数,清空文件记录
用delete,删除信息就行,然后文件更新等一系列初始化操作。
⑩initArray()函数
将文件中的信息读取到程序中,初始化(关闭程序,下次运行程序中仍然有信息记录)
⑩① mangerWorker() 构造函数
就先判断关于文件的情况,对其中的数据成员那些进行初始化,再调用之前写的initArray()函数。
注意:在添加信息,删除信息,修改信息,排序等功能,只要是存储的信息发生了改变,都需要调用saveFile()函数,对文件中的信息进行一次更新和保存。
之所以能做到系统的程序有上次的运行程序的记录,是因为文件的信息及时更新与保存,然后下次运行的时候,在把文件的信息重新从重新读取到系统中就可以实现。(在managerWorker的构造函数中调用initArray函数(这个函数作用就是将文件的信息读取到系统中))。
便于观赏性,合理利用system(“cls”)清屏函数,和system(“pause”)函数暂停。
(3)测试代码 源.cpp
(1)这里的职工数为1,是上次运行程序保留的数据,这里再次添加信息(可以对一次性要添加的数量进行选择,这里我选择一次性添加一个信息)
(2)显示信息(控制台显示信息和文件显示信息)
(6)排序 (因为录入信息人数较少,不方便排序,我再录入几个人的信息)
现在系统共有4人信息,进行职工编号排序
(8)退出功能
这是当时大一下写的课程设计,由于交的时候代码就是图片的形式,然后这里博客也发的图片的形式,具体源码我上传到gitee上,大家可以自己领取gitee职工管理系统源码领取链接