【C++】C++ 职工信息管理系统(源码)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


【C++】C++ 职工信息管理系统(源码)【独一无二】



一、设计要求

1. 输入职工信息并保存

功能描述:允许用户输入新的职工信息,并将这些信息保存到系统内存和一个外部文件中。

2. 查询职工信息

功能描述:提供两种查询方式:

  • 通过工号查询:用户输入职工工号,系统显示对应职工的详细信息。
  • 通过姓名或系部查询:用户输入职工的姓名或所属系部,系统显示匹配的所有职工信息。

3. 职称统计

功能描述:统计每种职称的职工人数,并输出统计结果。

4. 根据职称排序输出

功能描述:根据职称对所有职工进行排序,并输出排序后的职工信息。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈

5. 根据工号修改职工信息

功能描述:允许用户输入职工工号,并修改该职工的相关信息。

6. 根据工号删除职工信息

功能描述:允许用户输入职工工号,并删除该职工的信息。

7. 显示功能菜单

功能描述:显示职工管理系统的功能菜单,供用户选择操作。

8. 加载职工信息

功能描述:从外部文件中加载职工信息到系统内存,保证系统启动时能够读取之前保存的职工数据。

9. 系统主函数

功能描述:程序的入口,控制系统的运行流程,包括显示菜单和处理用户输入的操作。


二、设计思路

1. 结构体设计

代码首先定义了一个名为Employee的结构体,用于存储职工的基本信息。结构体包括以下字段:

struct Employee {
    string name;
    string gender;
    string id;
    string phone;
    string department;
    string title;
};

这种结构体的设计使得每个职工的信息都能被有序地存储和访问。

2. 全局变量设计

代码定义了一个全局变量employees,这是一个vector<Employee>类型,用于存储所有职工的信息。

vector<Employee> employees;

选择vector作为数据结构是因为它支持动态大小,并且提供了方便的元素添加和遍历功能。

3. 功能菜单设计

函数showMenu用于显示系统的主菜单。菜单包含了所有可供用户选择的功能选项,便于用户根据需求进行操作。

void showMenu() {
    cout << "职工管理系统菜单:" << endl;
    cout << "1. 输入职工信息并保存" << endl;
    cout << "2. 查询职工信息" << endl;
    cout << "3. 职称统计" << endl;
    cout << "4. 根据职称排序输出" << endl;
    cout << "5. 根据工号修改职工信息" << endl;
    cout << "6. 根据工号删除职工信息" << endl;
    cout << "0. 退出系统" << endl;
}

4. 输入职工信息并保存

函数inputEmployee实现了输入职工信息并保存到文件的功能。

void inputEmployee() {
    Employee emp;
                    // 略...(至少10行代码)

    cin >> emp.title;
    employees.push_back(emp);

    ofstream outFile("employees.txt", ios::app);
    if (outFile.is_open()) {
        outFile << emp.name << " " << emp.gender << " " << emp.id << " "
                << emp.phone << " " << emp.department << " " << emp.title << endl;
        outFile.close();
        cout << "职工信息已保存。" << endl;
    } else {
        cout << "无法打开文件。" << endl;
    }
}

5. 加载职工信息

函数loadEmployees用于从文件employees.txt中加载职工信息。

void loadEmployees() {
    ifstream inFile("employees.txt");
    if (inFile.is_open()) {
                       // 略...(至少10行代码)

        inFile.close();
    }
}

6. 查询职工信息

系统提供了两种查询方式:通过工号查询和通过姓名或系部查询。

通过工号查询
void searchById(const string &id) {
    for (const auto &emp : employees) {
                     // 略...(至少10行代码)

    cout << "未找到该工号的职工信息。" << endl;
}
通过姓名或系部查询
void searchByNameOrDepartment(const string &nameOrDept) {
    for (const auto &emp : employees) {
                      // 略...(至少10行代码)

}

7. 职称统计

函数countTitles用于统计每种职称的职工人数。

void countTitles() {
    map<string, int> titleCount;
    for (const auto &emp : employees) {
                        // 略...(至少10行代码)

        cout << "职称: " << entry.first << ", 人数: " << entry.second << endl;
    }
}

8. 根据职称排序输出

函数sortByTitle实现了根据职称排序并输出职工信息的功能。

void sortByTitle() {
    sort(employees.begin(), employees.end(), [](const Employee &a, const Employee &b) {
        return a.title < b.title;
    });
                    // 略...(至少10行代码)

    }
}

9. 根据工号修改职工信息

函数modifyById实现了根据工号修改职工信息的功能。

void modifyById(const string &id) {
                // 略...(至少10行代码)

    }
    cout << "未找到该工号的职工信息。" << endl;
}

10. 根据工号删除职工信息

函数deleteById实现了根据工号删除职工信息的功能。

void deleteById(const string &id) {
    auto it = remove_if(employees.begin(), employees.end(), [&id](const Employee &emp) {
        return emp.id == id;
    });
                // 略...(至少10行代码)

    } else {
        cout << "未找到该工号的职工信息。" << endl;
    }
}

11. 主函数设计

主函数main是程序的入口。

int main() {
    loadEmployees();
    int choice;
    do {
        showMenu();
        cout << "选择功能: ";
        cin >> choice;
        switch (choice) {
            case 1:
                inputEmployee();
                break;
            case 2: {
                // 略...(至少10行代码)
            case 0:
                cout << "退出系统。" << endl;
                break;
            default:
                cout << "无效的选择,请重新输入。" << endl;
                break;
        }
    } while (choice != 0);

    return 0;
}

主函数首先调用loadEmployees函数加载职工信息,然后进入一个do-while循环,不断显示菜单并根据用户的选择调用相应的函数处理用户请求。用户可以通过输入相应的数字选择功能,输入0退出系统。通过使用switch-case结构,主函数能够清晰地根据用户的输入调用相应的功能函数。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈


三、可视化分析

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈

在这里插入图片描述

在这里插入图片描述

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈


最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 01:52:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 01:52:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 01:52:02       58 阅读
  4. Python语言-面向对象

    2024-07-19 01:52:02       69 阅读

热门阅读

  1. Bootstrap apexLine后端数据与前端Asp.net MVC数据交互

    2024-07-19 01:52:02       21 阅读
  2. DW1000在STM32环境下实现定位功能

    2024-07-19 01:52:02       22 阅读
  3. Vue3快速入门1

    2024-07-19 01:52:02       22 阅读
  4. 微信小程序:3.页面开发

    2024-07-19 01:52:02       21 阅读
  5. MySQL简介

    2024-07-19 01:52:02       19 阅读
  6. Vue + litegraph.js 实现蓝图功能

    2024-07-19 01:52:02       25 阅读
  7. c语言(函数7.18)

    2024-07-19 01:52:02       24 阅读
  8. RK3568 linux-5.10 rk809 声卡实现spk hp自动切换

    2024-07-19 01:52:02       22 阅读
  9. 蜣螂算法(BSO)及Python和MATLAB实现

    2024-07-19 01:52:02       20 阅读
  10. A. Little Nikita

    2024-07-19 01:52:02       19 阅读
  11. Ubuntu22,ROS2 colcon/cmake 编译卡死问题解决

    2024-07-19 01:52:02       20 阅读
  12. Mongodb文本索引

    2024-07-19 01:52:02       17 阅读
  13. ChatGPT:Stream 和 数据源

    2024-07-19 01:52:02       17 阅读
  14. 1.虚拟机相关的博文推荐

    2024-07-19 01:52:02       18 阅读