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

yizhihongxing

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日

相关文章

  • C语言字符串字面量池

    C语言字符串字面量池是一个常量池,其中存储在程序中出现的所有字符串字面量。使用字符串字面量池是一种优化技术,因为它允许多个字符串变量共享相同的内存地址,这样可以减少内存消耗。 在C语言中,无论字符串以何种方式定义,它都是一个字符数组,其中最后一个字符必须是空字符(\0)。将字符串字面量赋值给字符数组实际上是将字符串字面量的地址赋给字符数组指针。这个地址是指向…

    C 2023年5月9日
    00
  • spring循环注入异常问题的解决方案

    以下是关于“Spring循环注入异常问题的解决方案”的完整攻略,分为三个部分: 问题分析 在使用Spring框架进行依赖注入的时候,很容易遇到循环依赖的问题,比如A类依赖于B类,而B类又依赖于A类,这种情况下就会出现循环依赖的问题。Spring框架默认是不支持循环依赖的,在出现循环依赖的情况下,Spring会抛出BeanCurrentlyInCreation…

    C 2023年5月23日
    00
  • C语言指针的图文详解

    C语言指针的图文详解 什么是指针 在C语言中,指针是一种特殊的数据类型,它存储的是一个内存地址,该内存地址指向存储在内存中的另外一个变量的值。可以将指针看作一种工具,它可以用来操作内存中的数据,让程序更加灵活和高效。 如何声明指针 在C语言中声明指针需要使用星号(*)符号。例如,下面的代码定义了一个名为“ptr”的指向整数变量的指针: int *ptr; 上…

    C 2023年5月22日
    00
  • php判断是否为json格式的方法

    PHP语言中判断是否为JSON格式的方法有很多种,常见的有以下两种方法: 方法一:使用PHP自带的json_decode函数 使用json_decode函数将JSON字符串转换成PHP数组 判断转换结果是否为NULL或者与原始字符串相等 示例代码: function is_json1($string) { $result = json_decode($str…

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

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

    C 2023年5月23日
    00
  • Java实现map转换成json的方法详解

    下面我将详细讲解“Java实现map转换成json的方法详解”的完整攻略。 1. 背景介绍 在Java中,我们可以将Map数据结构转换为JSON格式的字符串,这对于在Java程序和前端页面之间传递数据是非常有用的。本攻略将会介绍Java中常用的两种将Map转换为JSON格式的方法。 2. 使用Jackson库 Jackson是一个Java库,用于处理JSON…

    C 2023年5月23日
    00
  • Go语言的JSON处理详解

    Go语言的JSON处理详解 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人们阅读和编写,同时也易于机器解析和生成。JSON是JavaScript原生支持的数据格式,因此可以被广泛应用于AJAX技术,通过HTTP请求发送JSON数据,实现网页与服务器之间的数据交互。 Go语言中的JSON Go…

    C 2023年5月23日
    00
  • 神奇的c/c++小游戏((提高你的编程兴趣)

    神奇的C/C++小游戏 介绍 这是一个神奇的C/C++小游戏,它可以帮助你提高你的编程兴趣。这个游戏包含了一个简单的文本界面,并且涉及到了C/C++中的一些基础知识,如输入/输出、条件语句和循环等。 游戏说明 这个游戏的玩法很简单,它会随机选择一个整数,你需要根据提示猜测这个整数的值。每次猜测后,游戏会给出一些提示,告诉你你的猜测值比答案大还是小,直到你猜中…

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