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"
    #include
    using 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++中文件操作的使用方法
  • 掌握了多态的应用场景
  • 熟练了解了类继承和虚函数的使用
  • 通过本次项目的学习,进一步巩固了C++编程基础,提升了面对实际问题的解决能力。

    上一篇:C++学习记录 五、C++提高编程
    下一篇:C++学习记录 三、C++核心编程(面向对象) 继承

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年05月10日 01时18分52秒