
C++学习记录 四、基于多态的企业职工系统
退出管理程序:退出当前管理系统 增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号 显示职工信息:显示公司内部所有职工的信息 删除离职职工:按照编号删除指定的职工 修改职工信息:按照编号修改职工个人信息 查找职工信息:按照职工的编号或者职工的姓名进行查找相关的人员信息 按照编号排序:按照职工编号,进行排序,排序规则由用户指定 清空所有文档:清空文件中记录的所有员工信息(清空前需要在此确认,防止误删)
实现了一个基于多态的职工管理系统,能够管理普通员工、经理和总裁的信息 学习了C++中文件操作的使用方法 掌握了多态的应用场景 熟练了解了类继承和虚函数的使用
发布日期:2021-05-08 14:29:37
浏览次数:17
分类:精选文章
本文共 4615 字,大约阅读时间需要 15 分钟。
重新优化后的内容
重新优化后的内容
学习目标
过一遍黑马程序员C/C++学习视频
学习内容
系统设计
基于多态的企业职工系统
管理系统需求
职工管理系统可以用来管理公司内所有员工的信息。公司中职工分为三类:普通员工、经理、老板。显示信息时,需要显示职工编号、职工姓名、职工岗位,以及职责。
- 普通员工职责:完成经理交给的任务
- 经理职责:完成老板交给的任务,并下发任务给员工
- 老板职责:管理公司所有事物
管理系统中需要实现的功能如下:
系统实现
创建管理类
管理类负责的内容如下:
- 与用户的沟通菜单界面
- 对职工增删改查的操作
- 对文件的读写交互
文件交互
在头文件和源文件的文件夹下分别创建workerManager.h和workerManager.cpp文件
头文件实现
#pragma once#include#include using namespace std;class WorkerManager {public: WorkerManager(); ~WorkerManager(); void Add_Emp(); void Show_Menu(); void exitSystem(); void save(); void ShowEmp(); void Del_Emp(); void Mod_Emp(); void Find_Emp(); void Sort_Emp(); void Clean_File();};
源文件实现
#include "workerManager.h"#includeusing namespace std;WorkerManager::WorkerManager() { // 初始化人数 m_EmpNum = 0; m_FileIsEmpty = true; m_EmpArray = nullptr;}WorkerManager::~WorkerManager() { if (m_EmpArray != nullptr) { delete[] m_EmpArray; m_EmpArray = nullptr; }}void WorkerManager::Add_Emp() { // 实现批量添加职工功能}void WorkerManager::Show_Menu() { // 显示菜单界面}void WorkerManager::exitSystem() { // 退出系统功能}void WorkerManager::save() { // 保存文件}void WorkerManager::ShowEmp() { // 显示所有职工信息}void WorkerManager::Del_Emp() { // 删除职工}void WorkerManager::Mod_Emp() { // 修改职工信息}void WorkerManager::Find_Emp() { // 查找职工信息}void WorkerManager::Sort_Emp() { // 按职工编号排序}void WorkerManager::Clean_File() { // 清空文件}
职工类设计
职工抽象类
在头文件夹中创建worker.h
// 职工抽象类class Worker {public: virtual void showInfo() = 0; virtual string getDeptName() = 0; int m_Id; string m_Name; int m_DeptId;};
普通员工类
在头文件和源文件夹中分别创建employee.h和employee.cpp文件
头文件
#pragma once#include#include "worker.h"using namespace std;class Employee : public Worker {public: Employee(int id, string name, int dId); void showInfo(); string getDeptName();};
源文件
#include "employee.h"using namespace std;Employee::Employee(int id, string name, int dId) { m_Id = id; m_Name = name; m_DeptId = dId;}void Employee::showInfo() { cout << "职工编号: " << m_Id << "\t职工姓名: " << m_Name << "\t岗位: " << getDeptName() << "\t岗位职责:完成经理交给的任务" << endl;}string Employee::getDeptName() { return "员工";}
经理类
在头文件夹和源文件夹下分别创建manager.h和manager.cpp文件
头文件
#pragma once#include#include "employee.h"using namespace std;class Manager : public Worker {public: Manager(int id, string name, int dId); void showInfo(); string getDeptName();};
源文件
#include "manager.h"using namespace std;Manager::Manager(int id, string name, int dId) { m_Id = id; m_Name = name; m_DeptId = dId;}void Manager::showInfo() { cout << "职工编号: " << m_Id << "\t职工姓名: " << m_Name << "\t岗位: " << getDeptName() << "\t岗位职责:完成老板交给的任务,并下派给普通员工" << endl;}string Manager::getDeptName() { return "经理";}
老板类
在头文件夹和源文件夹下分别创建boss.h和boss.cpp文件
头文件
class Boss : public Worker {public: Boss(int id, string name, int dId); void showInfo(); string getDeptName();};
源文件
#include "boss.h"using namespace std;Boss::Boss(int id, string name, int dId) { m_Id = id; m_Name = name; m_DeptId = dId;}void Boss::showInfo() { cout << "职工编号: " << m_Id << "\t职工姓名: " << m_Name << "\t岗位: " << getDeptName() << "\t岗位职责:管理公司所有事物" << endl;}string Boss::getDeptName() { return "总裁";}
测试多态
在职工管理系统.cpp中添加测试函数
#include#include "boss.h"#include "manager.h"#include "employee.h"using namespace std;void test() { Worker* worker = nullptr; worker = new Employee(1, "张三", 1); worker->showInfo(); delete worker; worker = new Manager(2, "李四", 2); worker->showInfo(); delete worker; worker = new Boss(3, "王五", 3); worker->showInfo(); delete worker;}
功能实现
添加职工
在WorkerManager.h中添加成员属性
// 记录文件中的人数个数int m_EmpNum;// 员工数组的指针Worker** m_EmpArray;// 标志文件是否为空bool m_FileIsEmpty;
在WorkerManager.cpp中实现
void WorkerManager::Add_Emp() { // 实现批量添加职工功能}
文件交互
在WorkerManager.h中添加成员函数
// 保存文件void save();
在WorkerManager.cpp中实现
void WorkerManager::save() { // 实现文件保存功能}
其他功能
包括显示职工信息、删除职工、修改职工、查找职工、排序、清空文件等功能,具体实现细节请参考完整代码。
学习产出
通过本次项目的学习,进一步巩固了C++编程基础,提升了面对实际问题的解决能力。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年05月10日 01时18分52秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Manus AI:从爆火到争议,AI Agent的未来之路
2025-04-11
map 函数返回的列表在使用一次后消失
2025-04-11
Map 遍历取值及jstl的取值
2025-04-11
Map.Entry使用详解
2025-04-11
Map.Entry学习和详解
2025-04-11
Map<String, Object> 转 Json
2025-04-11
Mapbox GL示例教程【目录】-- 已有80篇
2025-04-11
Mapbox TOKML:将GeoJSON转换为KML的开源工具
2025-04-11
MapboxGL 入门系列教程(一):应该如何学习 MapboxGL
2025-04-11
mapper.xml中mapper找不到问题
2025-04-11
Mapper映射文件(CRUD和主键id生成)
2025-04-11
Mapper映射文件传参(数组/集合)与#{}和${} 区别
2025-04-11
mapping文件目录生成修改
2025-04-11
MapReduce Java API-使用Partitioner实现输出到多个文件
2025-04-11
MapReduce Java API-多输入路径方式
2025-04-11
MapReduce Java API实例-排序
2025-04-11
MapReduce Java API实例-统计出现过的单词
2025-04-11
MapReduce Java API实例-统计单词出现频率
2025-04-11
MapReduce Kmeans聚类算法
2025-04-11