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语言JSON解析器gjson使用方法详解

    Go语言JSON解析器gjson使用方法详解 在Go语言中有一个非常实用的JSON解析器库gjson,它支持在JSON文本中进行高效的路径查询和解码,操作简单,性能优秀。本文将详细讲解gjson的基本使用方法,让大家能够更方便地使用这个强大的工具。 安装gjson gjson使用起来非常简单,只需安装: go get github.com/tidwall/g…

    C 2023年5月23日
    00
  • php7 错误处理机制修改实例分析

    PHP7 错误处理机制修改实例分析 一、背景 在PHP7中,错误处理机制发生了一些变化。具体来说,PHP7增加了Throwable接口和Error类,用于代替旧版的Exception类。此外,PHP7还引入了一种新的错误处理器:Throwable处理器。Throwable处理器是一种标准的PHP异常处理方式,可以通过使用try-catch语句来捕获和处理所有…

    C 2023年5月22日
    00
  • C/C++实现精灵游戏的示例代码

    让我来详细讲解一下“C/C++实现精灵游戏的示例代码”的完整攻略。 1. 前置知识 在开始编写精灵游戏的示例代码前,需要掌握以下知识: C/C++基本语法和语言特性; 数据结构和算法知识; 图形学相关知识。 2. 精灵游戏示例代码实现 下面我们通过两个示例说明如何使用C/C++实现精灵游戏的示例代码。 示例一:飞行游戏 首先,我们看一个简单的飞行游戏示例。 …

    C 2023年5月23日
    00
  • C语言实现制作通讯录(新手推荐)

    介绍 制作一个简单的通讯录是C语言初学者学习的一个非常有趣的项目。本教程将为大家提供一个完整的实现过程,旨在帮助初学者全面掌握C语言编程的基本技能。 步骤 创建一个新的C语言文件。 打开你的编辑器,并创建一个新的C语言文件。保存文件,并为该文件选择一个描述性名称,例如“AddressBook.c”。 引入所需的头文件。 通常情况下,我们需要使用stdio.h…

    C 2023年5月23日
    00
  • 在python 脚本下解析json数据

    在Python脚本中解析JSON数据需要使用Python内置的json库,它提供了loads()和dumps()两个方法,分别用于JSON数据的解析和生成。 以下是完整的攻略步骤: 1. 导入json库 在Python脚本中解析JSON数据,需要先导入json库: import json 2. 使用loads()方法解析JSON数据 loads()方法可以将…

    C 2023年5月23日
    00
  • C语言函数声明以及函数原型超详细讲解示例

    我来详细讲解一下“C语言函数声明以及函数原型超详细讲解示例”的完整攻略。 什么是函数声明和函数原型? 函数声明是告诉编译器函数的名称、返回类型和参数列表的方法,它只是一个函数的简单说明,不提供函数的实现。在调用函数时,编译器将根据函数声明知道该函数需要哪些参数,并将其分配给该函数。函数声明的基础形式如下: return_type function_name(…

    C 2023年5月23日
    00
  • C语言 队列的实现全解析

    C语言 队列的实现全解析 什么是队列 队列是一种常见的数据结构,它采用先进先出的方式来管理数据。当我们需要按照时间顺序依次处理一系列任务时,队列便成了一个非常有用的工具。 队列的实现 在C语言中,队列可以通过数组或者链表来实现。当使用数组实现队列时,我们需要定义一个固定大小的数组和两个指针——队头指针head和队尾指针tail。定义如下: #define Q…

    C 2023年5月23日
    00
  • c病毒程序原理分析(防范病毒 c语言小病毒示例)

    这篇文章主要是讲解如何防范病毒及 c 语言小病毒示例,文章中包含两条示例说明。 标题 C 病毒程序原理分析 正文 病毒是计算机领域中的一种非常危险的电脑程序,可以通过复制自身的方式感染计算机,破坏计算机系统的正常运行。在这篇文章中,我们将简单介绍 C 病毒程序的原理以及如何防范此类病毒。 防范病毒 升级防病毒软件:使用强大的防病毒软件可以有效的保护计算机系统…

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