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日

相关文章

  • Qt数据库相关应用开发总结

    关于Qt数据库相关应用开发总结,以下是一些详细的讲解和示例说明: 1. 概述 Qt是一个跨平台的C++ GUI应用程序开发框架。它支持许多数据库,如MySQL,PostgreSQL,SQLite等,并提供了许多数据库相关的API和类。Qt使用Qt SQL模块来连接和管理各种数据库。Qt SQL模块提供了许多SQL驱动程序,这些驱动程序可以让您连接多种不同类型…

    C 2023年5月22日
    00
  • C++11 std::function和std::bind 的使用示例详解

    针对你提到的主题,我会给出相应的markdown格式文本,包含标题、代码块和示例说明,内容完整细致。以下是详细讲解: C++11 std::function和std::bind 的使用示例详解 在C++11标准中,引入了std::function和std::bind两个函数模板,用于支持更灵活的函数对象(函数指针、成员函数指针、函数对象和lambda表达式)…

    C 2023年5月22日
    00
  • SpringBoot整合Redis入门之缓存数据的方法

    下面是 “SpringBoot整合Redis入门之缓存数据的方法” 的完整攻略。 简介 在高并发访问下,数据库成为了性能瓶颈,为了解决这个问题,我们可以加入缓存来减轻数据库的压力,提高网站的响应速度。Redis作为一个高性能的内存数据库,被广泛应用于缓存系统中。在SpringBoot中,通过RedisTemplate来实现redis的缓存数据。 环境准备 首…

    C 2023年5月23日
    00
  • 解决javac不是内部或外部命令,也不是可运行程序的报错问题

    这个错误通常出现在Windows系统中,它表示系统无法找到Java编译器(javac)命令。这个问题可能是由于两个原因造成的:Java Development Kit(JDK)未在计算机上安装或未添加到PATH环境变量。 以下是解决这个问题的完整攻略: 步骤 1:确认 JDK 是否安装 如果 Java Development Kit(JDK)未安装在计算机上…

    C 2023年5月23日
    00
  • C#解析json字符串总是多出双引号的原因分析及解决办法

    C#解析json字符串总是多出双引号的原因分析及解决办法 问题分析 在使用C#解析json字符串时,发现有时候会出现多出一对双引号的情况,如下所示: "{""name"":""John""}" 这时候,如果直接使用C#自带的JsonConvert进行转换操作,…

    C 2023年5月23日
    00
  • C语言之结构体定义 typedef struct 用法详解和用法小结

    C语言之结构体定义 typedef struct 用法详解和用法小结 在C语言中,结构体是一种自定义的数据类型,它可以包含多个不同类型的变量,并被视为一个整体。但是,直接定义结构体并不方便,因此可以使用typedef struct来定义结构体类型,使代码更加简洁和易读。 typedef struct的基本用法 typedef struct的语法格式为: ty…

    C 2023年5月22日
    00
  • 华硕a40jc装windows8 64位系统装完显卡驱动重启无法进入系统

    华硕a40jc是一款较老的笔记本电脑,它的显卡是NVIDIA GeForce 310M。在安装Windows 8 64位系统并安装显卡驱动后出现无法进入系统的问题,可能与显卡驱动版本不兼容或者未完全卸载旧版显卡驱动有关。以下是详细的攻略: 问题现象 安装Windows 8 64位系统后,安装NVIDIA GeForce 310M显卡驱动; 重启电脑后,系统无…

    C 2023年5月24日
    00
  • 详解C/C++如何获取路径下所有文件及其子目录的文件名

    获取一个文件夹下的所有文件及其子目录的文件名可以通过递归遍历文件夹来完成。以下是几个示例代码,演示如何实现这个功能。 方法一:使用C++17中的std::filesystem 基于C++17标准,可以使用std::filesystem库来遍历目录。下面是示例代码: #include <iostream> #include <filesyst…

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