C++利用多态实现职工管理系统(项目开发)

C++利用多态实现职工管理系统(项目开发)攻略

介绍

在本项目中,我们将使用C++多态机制来实现一个职工管理系统。对于不同类型的职工,我们将采用不同的数据结构进行存储。并且我们将使用纯虚函数和虚函数来实现基类和派生类之间的协作和交互,使得职工管理系统具有良好的扩展性和可维护性。

开发步骤

确定项目需求和功能

在开发项目之前,我们需要确定项目的需求和功能,这可以帮助我们有更加明确的目标和规划。在职工管理系统中,我们需要实现如下的功能:

  • 添加职工
  • 显示职工信息
  • 删除职工
  • 修改职工信息
  • 查找职工
  • 排序职工
  • 清空所有文档

设计职工类的结构体

在本项目中,我们需要对职工进行分类,包括经理、普通员工和老板等。因此,我们需需要使用面向对象的思想,设计出不同的职工类,并且让它们都从一个基类继承而来。这样,我们就可以使用多态来实现职工管理系统。

下面是基类的职工类结构体:

class Worker
{
public:
    int m_Id; //id
    string m_Name; //姓名
    int m_DeptId; //部门编号

    //显示个人信息
    virtual void showInfo() = 0;

    //获取岗位名称
    virtual string getDeptName() = 0;
};

我们可以看到,基类中有m_Id、m_Name和m_DeptId属性,分别表示职工的编号、姓名和所在部门的编号。函数showInfo和getDeptName是纯虚函数,应当由派生类去实现。

设计派生类

在Worker基类中,我们定义了两个纯虚函数,分别是showInfo和getDeptName。这两个函数都应当由派生类去实现,因为不同的职工具有不同的信息展示和岗位名称。

下面是经理类的实现:

class Manager : public Worker
{
public:
    Manager(int id, string name, int dId);

    // 显示个人信息
    virtual void showInfo();

    // 获取岗位名称
    virtual string getDeptName();
};

我们可以看到,经理类从Worker基类继承而来,实现了showInfo和getDeptName函数。为了让经理类有自己的特点,我们可以添加一些自己的属性。

实现职工管理类

职工管理类用于实现所有职工的管理,包括添加、删除、修改和查找职工等功能,这些功能都在职工管理类中实现。另外,我们还需要使用容器来保存和管理所有的职工对象,比如使用vector容器。

class WorkerManager
{
public:
    // 构造函数
    WorkerManager();

    // 显示菜单
    void showMenu();

    // 退出菜单
    void exitSystem();

    // 添加职工
    void addEmp();

    // 显示职工
    void showEmp();

    // 删除职工
    void delEmp();

    // 修改职工
    void modEmp();

    // 查找职工
    void findEmp();

    // 排序职工
    void sortEmp();

    // 删除所有文档
    void cleanFile();

    // 总人数
    int getEmpNum();

    // 析构函数
    ~WorkerManager();
};

示例1:添加职工

在职工管理系统中,添加职工是一个非常常见的操作。在这个操作中,我们需要输入职工的基本信息,比如姓名、编号、部门等。然后,通过判断职工的类型来创建不同的职工对象,比如Manager、Employee和Boss等。

void WorkerManager::addEmp()
{
    cout << "请输入添加职工的数量:" << endl;

    int addNum = 0;
    cin >> addNum

    if (addNum > 0)
    {
        int length = this->m_EmpArray.size();

        for (int i = 0; i < addNum; i++)
        {
            int id;
            string name;
            int dSelect;

            cout << "请输入第" << i + 1 << "个新职工的编号:" << endl;
            cin >> id;

            cout << "请输入第" << i + 1 << "个新职工的姓名:" << endl;
            cin >> name;

            cout << "请输入第" << i + 1 << "个新职工的岗位:" << endl;
            cout << "1. 普通员工" << endl;
            cout << "2. 经理" << endl;
            cout << "3. 老板" << endl;
            cin >> dSelect;

            Worker* worker = NULL;

            switch (dSelect)
            {
            case 1:
                worker = new Employee(id, name, dSelect);
                break;
            case 2:
                worker = new Manager(id, name, dSelect);
                break;
            case 3:
                worker = new Boss(id, name, dSelect);
                break;
            default:
                break;
            }

            this->m_EmpArray.push_back(worker);
        }

        cout << "成功添加了" << addNum << "名新职工" << endl;

        this->m_FileIsEmpty = false;
    }
    else
    {
        cout << "输入数据有误,请输入正确的数据!" << endl;
    }
}

示例2:删除职工

在职工管理系统中,删除职工是另外一个重要的操作。在这个操作中,我们需要输入职工的编号,然后通过判断编号找到要删除的职工对象,最后将其从容器中删除即可。

void WorkerManager::delEmp()
{
    if (this->m_FileIsEmpty) {
        cout << "文件不存在或者记录为空!" << endl;
        return;
    }
    else {
        int id;
        cout << "请输入想要删除的职工编号:" << endl;
        cin >> id;

        vector<Worker *> ::iterator it = this->m_EmpArray.begin();

        bool isExist = false;

        while (it != m_EmpArray.end())
        {
            //找到编号相等的职工
            if ( (*it)->m_Id == id )
            {
                cout << "找到职工,信息如下:" << endl;
                cout << "职工编号:" << (*it)->m_Id 
                    << ",职工姓名:" << (*it)->m_Name 
                    << ",职工职位:" << (*it)->getDeptName() 
                    << ",职工岗位:" << (*it)->m_DeptId << endl;

                cout << "确认是否删除该职工?" << endl;
                cout << "1、确认" << endl;
                cout << "2、取消" << endl;

                int select = 0;
                cin >> select;

                if (select == 1)
                {
                    //找到之后执行删除操作
                    //释放内存里面职工对象 并且删除
                    delete (*it);
                    this->m_EmpArray.erase(it);

                    cout << "删除成功!" << endl;

                    this->save();
                }

                isExist = true;
                break;
            }

            it++;
        }

        if (!isExist)
        {
            cout << "未找到该职工信息!" << endl;
        }
    }
}

总结

以上是C++利用多态实现职工管理系统(项目开发)的攻略,其中讲述了实现职工类的结构体、设计派生类和实现职工管理类等内容。职工管理系统是一个比较典型的多态应用场景,借助于多态,我们可以方便地对不同类型的职工进行管理和操作,大大提高了代码的可维护性和复用率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++利用多态实现职工管理系统(项目开发) - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Go语言利用Unmarshal解析json字符串的实现

    下面我来详细讲解“Go语言利用Unmarshal解析JSON字符串的实现”。 什么是Unmarshal Unmarshal(解封)是将数据从某种格式转换为可操作的结构体等数据类型的过程。对于Golang来说,Unmarshal通常用于将JSON格式的数据解析为Golang的数据结构,以便于进行数据的操作和处理。 Golang利用Unmarshal解析JSON…

    C 2023年5月23日
    00
  • C语言实现自行车存放管理系统

    C语言实现自行车存放管理系统攻略 简介 自行车存放管理系统是一种用于管理自行车存放的软件系统,旨在为用户提供方便快捷的自行车存放服务,并帮助用户进行存放位置和存放时长的管理。本攻略将详细介绍如何使用C语言实现自行车存放管理系统。 系统需求 本系统需要满足以下功能需求: 注册用户账号 登录到系统 存放自行车 取出自行车 查询自行车存放信息 数据结构设计 为了实…

    C 2023年5月23日
    00
  • C语言程序环境中的预处理详解

    C语言程序环境中的预处理详解 什么是预处理器 在 C 语言中,预处理器是一种用于在编译程序之前处理源代码的程序,它会根据源代码中的指示来进行一系列的操作,例如文件的导入和宏的展开等。预处理器是在编译过程的第一步中被执行的,它的主要作用是生成修改了的源代码,这些修改的结果将被送入编译器进行编译和链接。 #include 指令 include 指令被用来将另一个…

    C 2023年5月23日
    00
  • C语言实现简单的<三子棋>案例

    C语言实现简单的三子棋案例 一、背景介绍 三子棋是一种经典的棋类游戏,它在二十世纪中期流行于欧美各地,并成为了计算机人工智能领域的经典案例之一。本文将介绍如何使用C语言实现简单的三子棋游戏,供读者学习参考。 二、技术选型 我们将使用C语言作为主要编程语言,使用命令行界面进行游戏界面展示,不涉及图形界面的开发。 三、实现流程 1. 游戏规则设计 三子棋的规则非…

    C 2023年5月23日
    00
  • C语言数据的存储超详细讲解中篇练习

    我会为你详细讲解“C语言数据的存储超详细讲解中篇练习”的完整攻略。 攻略概述 “C语言数据的存储超详细讲解中篇练习”主要是讲解C程序中变量和数组的内存模型,以及指针和函数在内存中的存储方式等。该练习主要包含以下部分: C语言中的内存模型 变量和数组的内存模型 指针在内存中的存储方式 函数在内存中的存储方式 示例练习题 在学习这篇练习时,你将会获得对C语言内存…

    C 2023年5月22日
    00
  • Mysql如何对json数据进行查询及修改

    MySQL 5.7及以上版本支持JSON类型,可以对JSON数据进行查询和修改。下面将详细讲解MySQL如何对JSON数据进行查询和修改的攻略。 查询JSON数据 1. 使用->符号 使用->符号可以从JSON数据中提取指定字段的值。 语法: SELECT json_column->’$.key’ FROM table_name; 其中,j…

    C 2023年5月23日
    00
  • 详解C++中shared_ptr的使用教程

    详解C++中shared_ptr的使用教程 什么是shared_ptr shared_ptr是C++11语言引入的一种智能指针,用于管理动态分配的内存,避免因手动释放内存而引发的内存泄漏等问题。 shared_ptr采用引用计数机制来跟踪内存资源的使用情况,并当引用计数为0时自动释放内存。这使得shared_ptr不仅可以确保资源的正确释放,而且还能够方便地…

    C 2023年5月22日
    00
  • 如何基于 Blueprint 在游戏中创建实时音视频功能

    关于如何基于 Blueprint 在游戏中创建实时音视频功能,我可以提供以下完整攻略: 1. 接入实时音视频 SDK 首先,需要接入实时音视频 SDK。这里以腾讯云实时音视频 SDK 为例,具体接入流程可以参考腾讯云官方文档。 2. 使用 Blueprint 创建 UI 界面 在 Unreal Engine 的 Blueprint 中创建 UI 界面,用于显…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部