C++分步实现职工管理系统详解

C++分步实现职工管理系统详解攻略

1. 程序基本框架

职工管理系统可以分为三个类别:员工基本信息类(Employee),普通员工类(Worker)和经理类(Manager)。其中,普通员工类和经理类都继承了员工基本信息类,因此程序框架如下:

// 员工信息类
class Employee {
public:
    virtual void showInfo() = 0;  // 展示个人信息
    virtual string getDeptName() = 0;  // 获取所在部门名称
    int m_Id;  // 员工编号
    string m_Name;  // 员工姓名
    int m_DeptId;  // 所在部门编号
};

// 普通员工类
class Worker : public Employee {
public:
    virtual void showInfo();  // 展示个人信息
    virtual string getDeptName();  // 获取所在部门名称
};

// 经理类
class Manager : public Employee {
public:
    virtual void showInfo();  // 展示个人信息
    virtual string getDeptName();  // 获取所在部门名称
    int m_Level;  // 管理等级
};

2. 主要功能实现

2.1 添加员工信息

在添加员工信息时,需要让用户选择添加普通员工或者经理,并根据用户选择分别进行不同的操作。代码实现如下:

// 实现添加员工函数
void WorkerManager::addEmp() {
    cout << "请输入添加员工类型:" << endl;
    cout << "1、普通员工" << endl;
    cout << "2、经理" << endl;
    int choice = 0;
    cin >> choice;
    if (choice == 1) {  // 添加普通员工
        int id = this->getEmpId();  // 获取新员工编号
        string name;
        int dId;
        cout << "请输入员工姓名:" << endl;
        cin >> name;
        cout << "请输入员工部门编号:" << endl;
        cin >> dId;
        // 创建新员工对象并加入数组
        this->m_EmpArray[this->m_EmpNum] = new Worker(id, name, dId);
        this->m_EmpNum++;  // 员工数量加1
        this->m_FileIsEmpty = false;  // 文件不为空
        cout << "添加成功!" << endl;
    } else if (choice == 2) {  // 添加经理
        int id = this->getEmpId();  // 获取新员工编号
        string name;
        int dId;
        cout << "请输入员工姓名:" << endl;
        cin >> name;
        cout << "请输入员工部门编号:" << endl;
        cin >> dId;
        cout << "请输入经理等级:" << endl;
        int level;
        cin >> level;
        // 创建新经理对象并加入数组
        this->m_EmpArray[this->m_EmpNum] = new Manager(id, name, dId, level);
        this->m_EmpNum++;  // 员工数量加1
        this->m_FileIsEmpty = false;  // 文件不为空
        cout << "添加成功!" << endl;
    } else {
        cout << "输入选项有误,请重新选择!" << endl;
    }
}

2.2 显示员工信息

显示员工信息时,要判断员工数组是否为空,如果为空则提示用户先添加员工信息。如果数组不为空,则循环输出每个员工的信息。

// 实现显示员工函数
void WorkerManager::showEmp() {
    if (this->m_FileIsEmpty) {  // 判断员工数组是否为空
        cout << "文件不存在或记录为空!" << endl;
    } else {
        for (int i = 0; i < m_EmpNum; i++) {
            m_EmpArray[i]->showInfo();  // 调用虚函数展示员工个人信息
        }
    }
}

2.3 修改员工信息

修改员工信息前先让用户输入要修改员工的编号,然后判断员工数组中是否有该编号的员工信息。如果有,则根据用户选择修改员工姓名或部门编号。如果是经理,还可以修改管理等级。

// 实现修改员工信息函数
void WorkerManager::modEmp() {
    if (this->m_FileIsEmpty) {  // 判断员工数组是否为空
        cout << "文件不存在或记录为空!" << endl;
    } else {
        cout << "请输入修改员工的编号:" << endl;
        int id;
        cin >> id;
        int index = this->isEmpExist(id);  // 根据员工编号查找员工在数组中的下标
        if (index != -1) {  // 员工编号存在
            int choice = 0;
            cout << "请输入修改选项:" << endl;
            cout << "1、修改姓名" << endl;
            cout << "2、修改部门编号" << endl;
            if (m_EmpArray[index]->m_DeptId != 0) {  // 如果不是经理,则不能修改等级
                choice = 1;
            } else {
                cout << "3、修改等级" << endl;
                choice = 3;
            }
            cin >> choice;
            switch (choice) {
            case 1: {  // 修改姓名
                string name;
                cout << "请输入新的员工姓名:" << endl;
                cin >> name;
                m_EmpArray[index]->m_Name = name;
                cout << "修改成功!" << endl;
                break;
            }
            case 2: {  // 修改部门编号
                int dId;
                cout << "请输入新的部门编号:" << endl;
                cin >> dId;
                m_EmpArray[index]->m_DeptId = dId;
                cout << "修改成功!" << endl;
                break;
            }
            case 3: {  // 修改等级
                int level;
                cout << "请输入新的等级:" << endl;
                cin >> level;
                Manager* manager = dynamic_cast<Manager*>(m_EmpArray[index]);  // 将员工强转为经理
                manager->m_Level = level;  // 修改等级
                cout << "修改成功!" << endl;
                break;
            }
            default: {
                cout << "输入选项有误!" << endl;
                break;
            }
            }
        } else {
            cout << "编号为 " << id << " 的员工不存在!" << endl;
        }
    }
}

3. 示例说明

3.1 示例一

用户选择添加普通员工,程序输出如下:

请输入添加员工类型:
1、普通员工
2、经理
1
请输入员工姓名:
张三
请输入员工部门编号:
1
添加成功!

然后再次查询所有员工的信息,程序输出如下:

员工编号:1   员工姓名:张三   部门编号:1   职工岗位:普通员工

3.2 示例二

用户选择修改经理信息,程序输出如下:

请输入修改员工的编号:
2
请输入修改选项:
1、修改姓名
2、修改部门编号
3、修改等级
3
请输入新的等级:
99
修改成功!

修改后再次查询所有员工的信息,经理等级已经修改成功,程序输出如下:

员工编号:1   员工姓名:张三   部门编号:1   职工岗位:普通员工
员工编号:2   员工姓名:李四   部门编号:2   职工岗位:经理   基础职级:99

4. 总结

本篇攻略详细讲解了如何用 C++ 实现职工管理系统,包括类的继承和虚函数的使用,以及常用的数组和文件操作技巧,同时还给出了两条完整的示例说明,希望可以帮助读者更好地理解和掌握相关知识点。

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

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

相关文章

  • 笔记本开机进不去系统 错误代码0xc000000f的解决办法

    笔记本开机进不去系统 错误代码0xc000000f的解决办法 引言 当笔记本电脑启动后无法进入操作系统时,它会显示一个蓝屏幕并提示错误代码0xc000000f。这种情况可能会让人感到困惑和不安,但好消息是,许多人已经找到了一些解决办法,可以帮助你快速修复这个问题。 在本篇攻略中,我们将详细解释什么是错误代码0xc000000f和可能引起此错误的原因。同时,我…

    C 2023年5月23日
    00
  • C语言字符串初始化

    C语言中的字符串是一系列连续的字符组成的字符数组,并以’\0’作为结尾的特殊字符,也称为字符串终止符。字符串初始化是将字符串常量赋值给一个字符数组的过程,下面是关于如何初始化C语言字符串的详细步骤及示例说明: 字符串初始化的语法 C语言字符串的初始化方式有两种,分别是字符数组方式和指针方式。 字符数组方式 char str[] = {‘H’, ‘e’, ‘l…

    C 2023年5月9日
    00
  • C语言实现的顺序表功能完整实例

    C语言实现的顺序表功能完整实例攻略 什么是顺序表? 顺序表是一种线性表,它通常由一组连续的存储单元(即数组)来存储数据元素,数据上的逻辑顺序可以和物理顺序一一对应,因此可以直接通过下标访问元素。它具有随机访问的特点,而不需要像链表那样依次寻找到某一个位置。 顺序表的基本操作 顺序表的基本操作包括初始化、插入、删除、查找、修改、销毁等。 实现方法 通过定义一个…

    C 2023年5月23日
    00
  • java15新功能的详细讲解

    Java 15 新功能的详细讲解攻略 简介 Java 15 是 Java 编程语言的最新版本,于 2020 年 9 月发布。它包含了多项新增功能和改进,如 ZGC 改进、密封类、预览特性、记录类型等。 本攻略将详细介绍 Java 15 的新功能,以及如何使用这些新功能来提高开发人员的效率以及增强代码可读性。 密封类 Java 15 引入了密封类(sealed…

    C 2023年5月23日
    00
  • 解读C语言非void函数却没有return会怎么样

    解读C语言非void函数却没有return会怎么样: 当一个C语言函数声明为非void类型时,我们期望它返回一个值,但如果没有在函数内部使用return关键字,则可能会导致以下问题: 函数返回值不确定 在非void函数没有return语句时,函数返回值不确定,编译器会尝试返回一个随机值或者未初始化的值,这可能会导致程序运行时无法预期的行为。例如,在以下代码中…

    C 2023年5月23日
    00
  • 浅谈C语言结构体

    浅谈C语言结构体的攻略如下: 什么是结构体 结构体是C语言中非常重要的一种复合数据类型,它由不同数据类型的数据成员组成。结构体能够将多个数据成员组合起来,便于进行操作和管理。C语言中的结构体类似于面向对象语言中的类,但不具有继承和封装的特性。 如何定义结构体 定义一个结构体需要用到struct关键字,结构体的基本语法格式如下: struct struct_n…

    C 2023年5月23日
    00
  • Qt写入Json文件的方法详解(含源码+注释)

    下面我就为您详细讲解一下“Qt写入Json文件的方法详解(含源码+注释)”这篇文章。 一、前言 本文主要介绍Qt中如何使用QJsonDocument来进行Json的操作,其中包括Json文件的读取、写入及解析等操作。该文档由以下几个部分构成: Json的基础知识——介绍了Json的基础知识和理解 Qt中Json的API使用——介绍了整个Qt中Json相关AP…

    C 2023年5月23日
    00
  • C++代码实现学生信息管理系统

    C++代码实现学生信息管理系统 本文将详细讲解如何使用C++代码实现学生信息管理系统。该系统可以进行学生信息的增删查改等简单操作,并使用文件进行数据持久化。 1. 确定系统需求 首先需要明确需要实现哪些功能,包括但不限于:- 添加学生信息- 修改学生信息- 删除学生信息- 查询学生信息- 显示学生信息列表 2. 确定数据结构 根据需求,我们可以选择使用结构体…

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