C++(十四):增删改查之职工系统

增删改查之职工系统

自己写的职工系统

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"
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值