职工系统
增删改查之职工系统
自己写的职工系统
0. 功能介绍
该系统拥有的功能如下,具体还是增删改查,但是会将输入的人员信息保存为一个txt文件。
具体而言是,有三个部门:普通员工,经理和老板。每个部门的员工都具有姓名,编号和对应的岗位职责。我们需要分类存储所有的员工。
1. 类的声明和各自的功能
1.1 管理类
管理类的目的是统一所有函数的接口,将所有需要实现的功能统一写成这个管理类的成员函数,这样就可以在主程序中 通过实例化这个类来调用所有的功能 ,形式上统一且方便。
从管理类上也可以看出书写整个程序的思路。
#ifndef WORKMANAGER_H
#define WORKMANAGER_H
#include <iostream>
#include <string>
#include <fstream>
#include "Employee.h"
#include "Manager.h"
#include "Boss.h"
#define FileName "WorkManager.txt"
//管理整个系统的类:管理类,所有操作都写在这个类里面
class WorkManager
{
public:
//获取文件中员工数量
void getNuminFile();
//用于从文件中读信息存入内存,在显删修查等功能中需要用到的函数
void FiletoMemory();
//管理类的构造函数,初始化一些变量
WorkManager();
//用于显示菜单界面的函数
void MenuDisplay();
//用于退出系统的函数
bool SystemExit();
//用于添加职工的函数
void StuffAdd();
//用于把新添加的员工写入文件中的函数
void MemorytoFile(const int &newadd);
//用于把All_StuffArray中数据写入文件的函数
void AlloFile();
//用于显示文件中所有员工
void StuffShow();
//用于删除指定姓名与编号的员工的函数
void StuffDelete();
//用于修改指定姓名与编号的员工信息的函数
void StuffChange();
//用于查找指定姓名或者编号的员工
void StuffFind();
//用于按照编号排序的函数
void BubbleSort_id();
//用于清空文件的函数
void StuffClear();
//析构函数,释放一些内存
~WorkManager();
public:
//记录现在内存中的员工个数
int m_NuminMemory;
//记录文件中员工个数
int m_NuminFile;
//仅用于管理新添加的员工
AbstractStuff **Newadd_StuffArray;
//在读文件时管理所有员工
AbstractStuff **All_StuffArray;
//判断最新的文件内容是否经过函数读入内存中
bool Flag_FiletoMemory;
//判断文件是否存在或者文件内容是否为空
bool Flag_Empty;
};
#endif
1.2 抽象员工类
由于每个员工都具有三种相同的成员:姓名,编号和所属部门,因此非常合适设计一个抽象员工类,包含这三个成员,再让各自部门的员工继承这个抽象类,减少代码量。
作为抽象类,需要至少一个纯虚函数。在这里,我选择把展示每个员工职责的部分写作纯虚函数,可以利用多态来使用这个函数。
作为抽象类,它只有声明,没有函数实现,因此只有头文件,没有源文件。
#ifndef ABSTRACTSTUFF_H
#define ABSTRACTSTUFF_H
#include <iostream>
#include <string>
//用于实现多态的抽象员工类,成员为所有员工的姓名,编号与部门,还有职责
class AbstractStuff
{
public:
//员工职责
virtual void StuffDuty() = 0;
public:
//员工姓名
std::string m_name;
//员工编号
std::string m_id;
//员工部门
std::string m_depart;
};
#endif
1.3 员工类
员工类是以部门的不同进行分类设计的。
以Employee为例:
声明
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <iostream>
#include <string>
#include "AbstractStuff.h"
//继承抽象员工类的普通职工类,需要重写职责函数
class Employee : public AbstractStuff
{
public:
//普通员工职责
virtual void StuffDuty();
//普通员工构造函数,初始化姓名
Employee(const std::string &name, const std::string &id, const std::string &depart);
};
#endif
实现
#include "Employee.h"
using namespace std;
//普通员工职责
void Employee::StuffDuty()
{
cout << "干活" << endl;
}
//普通员工构造函数,初始化姓名
Employee::Employee(const std::string &name,const std::string &id,const std::string &depart)
{
this->m_name = name;
this->m_id = id;
this->m_depart = depart;
}
我在这个类里就实现了两个函数,一个是自身的构造函数,用于初始化继承过来的三个成员变量;另一个就是重写的纯虚函数,用于向用户输出该员工的职责。
剩下的两个员工类分别为Boss和Manager,除了纯虚函数外均一样。
2. 菜单功能
菜单功能用于向用户展示可以使用哪些功能。
//用于显示菜单界面的函数
void WorkManager::MenuDisplay()
{
cout << "**************************" << endl;
cout << "******0.退出管理系统******" << endl;
cout << "******1.增加职工信息******" << endl;
cout << "******2.显示职工信息******" << endl;
cout << "******3.删除职工信息******" << endl;
cout << "******4.修改职工信息******" << endl;
cout << "******5.查找职工信息******" << endl;
cout << "******6.按照编号排序******" << endl;
cout << "******7.清空所有信息******" << endl;
cout << "**************************" << endl;
}
这个功能比较简单,无需多言。
3. 退出功能
作用是退出这个系统,有一个布尔类型的返回值。首先会询问是否确定退出,待用户选择退出后就返回一个真值;倘若用户决定不退出了,就返回一个假值;若用户输入了其他非法选项,就提示输入错误,然后同样返回假值。
//用于退出系统的函数
bool WorkManager::SystemExit()
{
cout << "确定退出?" << endl;
cout << "Y:确定\t" << "N:返回" << endl;
string flag;
cin >> flag;
//选择退出则返回true
if ( flag == "Y" || flag == "y")
{
cout << "欢迎下次使用" << endl;
return true;
}
//选择返回则返回false
else if (flag == "N" || flag == "n")
{
cout << "欢迎回来" << endl;
system("pause");
system("cls");
return false;
}
else
{
cout << "输入错误"