C++实现简单职工管理系统

C++实现简单职工管理系统攻略

功能需求

我们需要实现一个简单的职工管理系统,其具有以下功能:

  • 增加职工:可以手动输入职工信息,包括职工编号、职工姓名、职工岗位,职工编号不可重复。
  • 显示所有职工:可以显示所有职工的信息。
  • 删除职工:可以根据职工编号删除职工。
  • 修改职工:可以根据职工编号修改职工信息。
  • 查找职工:可以根据职工编号或者职工姓名查找职工信息。
  • 排序职工:可以按照职工编号进行升序排序。

程序架构

程序主要分为三个模块:职工类模板、职工管理类和程序主函数。其中,职工类模板用于存储职工的基本信息;职工管理类用于完成对职工的增删改查等操作;程序主函数则负责接收用户的选择,进行相应的操作。

首先,我们创建一个职工类模板Worker,其中包含职工的基本信息。具体实现代码如下:

#ifndef WORKER_H
#define WORKER_H

#include <iostream>
#include <string>

using namespace std;

class Worker{
public:
    int m_Id; //职工编号
    string m_Name;  //职工姓名
    int m_DepartmentId; //部门编号

    Worker(int id, string name, int dId);
    virtual void showInfo(); //显示个人信息
    virtual string getDeptName() = 0; //获取岗位名称
};

#endif // !WORKER_H

接下来,我们创建职工管理类WorkerManager,其中主要实现了职工的增删改查等操作。具体实现代码如下:

#ifndef WORKERMANAGER_H
#define WORKERMANAGER_H

#include <iostream>
#include <fstream>
#include <string>
#include "Worker.h"
#include "Employee.h"
#include "Manager.h"
#include "Boss.h"

#define FILENAME "empFile.txt"

using namespace std;

class WorkerManager{
public:
    int m_EmpNum; //职工人数
    Worker ** m_EmpArray; //职工数组的指针

    WorkerManager();

    //显示菜单
    void Show_Menu();

    //退出系统
    void ExitSystem();

    //添加职工
    void Add_Emp();

    //保存文件
    void save();

    //统计职工人数
    int get_EmpNum();

    //初始化员工
    void init_Emp();

    //显示职工
    void Show_Emp();

    //删除职工
    void Del_Emp();

    //修改职工
    void Modify_Emp();

    //查找职工
    void find_Emp();

    //根据编号查找职工,返回下标,找不到返回-1
    int IsExist(int id);
};

#endif // !WORKERMANAGER_H

最后,我们在程序主函数中,用一个循环结构来实现用户的选择和相应操作的执行。具体实现代码如下:

#include "WorkerManager.h"
#include <iostream>
using namespace std;

int main()
{
    //实例化职工管理类
    WorkerManager wm;
    int choice = 0;
    while (true)
    {
        wm.Show_Menu();
        cout << "请输入您的选择:";
        cin >> choice;

        switch (choice)
        {
        case 0: //退出系统
            wm.ExitSystem();
            break;
        case 1: //添加职工
            wm.Add_Emp();
            break;
        case 2: //显示职工
            wm.Show_Emp();
            break;
        case 3: //删除职工
            wm.Del_Emp();
            break;
        case 4: //修改职工
            wm.Modify_Emp();
            break;
        case 5: //查找职工
            wm.find_Emp();
            break;
        case 6: //按照编号排序
            break;
        case 7: //清空所有文档
            break;
        default:
            system("cls");
            break;
        }
    }
    system("pause");
    return 0;
}

示例说明

示例一

下面我们来看一个添加职工的示例。当用户选择添加职工时,会调用职工管理类中的Add_Emp函数。具体实现代码如下:

void WorkerManager::Add_Emp()
{
    cout << "请输入添加职工的数量:";
    int addNum = 0;
    cin >> addNum;

    if (addNum > 0)
    {
        //添加
        int newSize = m_EmpNum + addNum; //新空间大小
        //开辟新空间
        Worker ** newSpace = new Worker*[newSize];
        //把原来空间下的数据,拷贝到新的空间下
        if (m_EmpArray != NULL)
        {
            for (int i = 0; i < m_EmpNum; i++)
            {
                newSpace[i] = m_EmpArray[i];
            }
        }
        //添加新数据
        for (int i = 0; i < addNum; i++)
        {
            //输入职工信息
            int id;
            string name;
            int deptCode;

            cout << "请输入第" << i + 1 << "个新职工的编号:";
            cin >> id;
            cout << "请输入第" << i + 1 << "个新职工的姓名:";
            cin >> name;
            cout << "请输入第" << i + 1 << "个新职工的岗位:(1.普通员工 2.经理 3.老板)";
            cin >> deptCode;

            Worker * worker = NULL;
            switch (deptCode)
            {
            case 1: //员工
                worker = new Employee(id, name, deptCode);
                break;
            case 2: //经理
                worker = new Manager(id, name, deptCode);
                break;
            case 3: //老板
                worker = new Boss(id, name, deptCode);
                break;  
            default:
                break;
            }
            //将新添加的数据添加到数组中
            newSpace[m_EmpNum + i] = worker;
        }

        //释放原来的空间
        delete[] m_EmpArray;
        //更改新空间的地址
        m_EmpArray = newSpace;
        //更新新的职工人数
        m_EmpNum = newSize;
        //提示添加成功
        cout << "添加成功!" << endl;

        //保存到文件中
        save(); 
    }
    else{
        cout << "输入有误,请重新操作!" << endl;
    }

    //按任意键后,清屏回到主菜单界面
    system("pause");
    system("cls");
}

当用户选择添加职工时,首先会询问用户要添加的职工数量。如果添加数量大于0,则需要输入新职工的职工编号、职工姓名和职工岗位。此时还需要根据岗位的不同,创建对应类型的职工实例并添加到职工数组中。最后将新的职工数组指针赋值给原来的指针,并更新职工人数和保存到文件中。

示例二

接下来我们来看一个查找职工的示例。当用户选择查找职工时,会调用职工管理类中的find_Emp函数。具体实现代码如下:

void WorkerManager::find_Emp()
{
    if (m_EmpNum == 0)
    {
        cout << "当前记录为空!" << endl;
        //按任意键后,回到主菜单
        system("pause");
        system("cls");
        return;
    }

    cout << "请输入查找的方式:(1.按职工编号查找 2.按职工姓名查找)";
    int select = 0;
    cin >> select;
    if (select == 1)
    {
        cout << "请输入职工编号:";
        int id;
        cin >> id;
        int ret = IsExist(id);
        if (ret != -1)
        {
            cout << "查找成功!职工编号为" << id << "的员工信息如下:" << endl;
            m_EmpArray[ret]->showInfo();
        }
        else{
            cout << "查找失败!不存在该职工编号!" << endl;
        }
    }
    else if (select == 2)
    {
        cout << "请输入职工姓名:";
        string name;
        cin >> name;
        bool flag = false; //标志是否找到过
        for (int i = 0; i < m_EmpNum; i++)
        {
            if (m_EmpArray[i]->m_Name == name)
            {
                cout << "查找成功!职工姓名为" << name << "的员工信息如下:" << endl;
                m_EmpArray[i]->showInfo();
                flag = true; //找到过
            }
        }
        if (flag == false) //未找到
        {
            cout << "查找失败!不存在该职工姓名!" << endl;
        }
    }
    else{
        cout << "输入有误,请重新操作!" << endl;
    }

    //按任意键后,清屏回到主菜单界面
    system("pause");
    system("cls");
}

当用户选择查找职工且按照职工编号查找时,需要用户输入职工编号,然后根据编号在职工数组中查找是否存在该职工。如果存在,则输出该职工的基本信息。当用户选择查找职工且按照职工姓名查找时,需要用户输入职工姓名,然后在职工数组中查找是否存在该姓名的职工。如果存在,则输出该职工的基本信息。如果未找到,则输出查找失败的信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现简单职工管理系统 - Python技术站

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

相关文章

  • js删除数组中某几项的方法总结

    针对”js删除数组中某几项的方法总结”这个主题,可以分为以下几个步骤进行讲解: 1. 删除数组中指定下标的元素 通过JavaScript中数组对象提供的splice方法可以删除数组中指定下标的元素。splice方法会改变原数组,第一个参数为要删除的元素的下标,第二个参数指定要删除的元素数量。 以下是一段示例代码: // 要操作的数组 let arr = [1…

    C 2023年5月22日
    00
  • C语言实现电脑关机程序

    下面是完整的攻略。 C语言实现电脑关机程序 介绍 电脑关机程序是一种可以让计算机系统自动关机的软件程序。在 C 语言中,我们可以使用系统函数来实现这个功能。本文将介绍 C 语言实现电脑关机程序的步骤。 步骤 第一步:引入头文件 在 C 语言中,我们需要引入头文件 windows.h 来使用系统函数。 #include <windows.h> 第二…

    C 2023年5月23日
    00
  • 玩转宏定义——从入门到进阶

      宏定义是什么   宏定义(macro definition)是 C/C++ 中的一种预处理指令,可以在编译之前替换源代码中的一些文本。简单来说就是用宏自定义了一些其它符号,这些符号在使用时全等于被替换的内容。 #define  DATE    “2023_01_20” #define  FILE_NUM  250 上面两个例子中表现的就是宏定义的基本格式…

    C语言 2023年4月18日
    00
  • SIGPIPE(Signal 13, Code 0) 异常排查及处理

    SIGPIPE(Signal 13, Code 0) 异常排查及处理 什么是 SIGPIPE SIGPIPE 是指在一个进程(或线程)向另一个进程(或线程)发送数据的时候,如果对方已经关闭了对应的 pipe、socket 或 FIFO 等管道,那么发送数据的进程就会收到 SIGPIPE 信号,这个信号的默认行为是进程终止。通常情况下,这个信号是由于进程发送数…

    C 2023年5月23日
    00
  • 基于opencv的selenium滑动验证码的实现

    首先需要明确的是,基于opencv的selenium滑动验证码实现主要考察的是图像识别和模拟鼠标操作的能力。下面是详细的攻略: 步骤一:收集参考图片和滑块图片 首先需要在浏览器中打开目标网站,然后找到需要滑动验证码的页面。在这个页面中,需要使用开发者工具的元素选择器找到验证码区域的HTML元素,然后通过selenium的接口获取到该元素的截图,作为参考图片。…

    C 2023年5月23日
    00
  • C语言字符串的安全问题

    C语言字符串的安全问题指的是当我们使用字符串时产生的一些潜在安全隐患,比如缓冲区溢出、格式化字符串漏洞等,这些问题可能会导致程序崩溃或者受到攻击。 为了解决这些安全问题,我们需要采取一些措施,下面是几个实用的方法: 1. 使用安全的字符串函数 在C语言中,有一些常用的字符串函数存在一些潜在的安全问题,比如strcpy和strcat等函数,如果不小心使用这些函…

    C 2023年5月10日
    00
  • C程序 选择排序

    C程序 – 选择排序攻略 什么是选择排序? 选择排序是一种简单的排序算法。它的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部待排序的数据元素排完为止。 选择排序的过程 选择排序的过程可以通过以下步骤来描述: 从序列中选择最小/最大之一的元素; 把它与待排序的数组中的第一个元素交换位置; 从剩余的元素中继续选择…

    C 2023年5月9日
    00
  • C语言 strchr()函数

    当要在一个字符串中查找某个字符的位置时,可以使用C语言中的strchr()函数。下面是strchr()函数的完整使用攻略。 函数原型 char *strchr(const char *str, int c); 在参数str所指向的字符串中搜索第一次出现字符c的位置。如果成功找到指定的字符,该函数返回指向该字符的指针;否则返回NULL。 参数说明 str:要查…

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