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

简介: 【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结构,主函数能够清晰地根据用户的输入调用相应的功能函数。


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


三、可视化分析



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




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



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




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

相关文章
|
24天前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
50 5
|
2月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
73 2
|
4月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
105 1
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
4月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
115 4
|
4月前
|
存储 算法 数据可视化
【C++】C++旅游管理系统(源码+论文)【独一无二】
【C++】C++旅游管理系统(源码+论文)【独一无二】
|
4月前
|
存储 数据挖掘 C语言
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
【C/C++】C/C++车辆交通违章管理系统(源码+数据文件)【独一无二】
|
4月前
|
搜索推荐 数据处理 文件存储
【C++】C++ 培训报名系统 (源码+论文)【独一无二】
【C++】C++ 培训报名系统 (源码+论文)【独一无二】
|
4月前
|
存储 C++
【C++】C++公司人事管理系统(源码)【独一无二】
【C++】C++公司人事管理系统(源码)【独一无二】
140 2
|
4月前
|
存储 数据可视化 C++
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
|
4月前
|
数据可视化 C++
【C++】C++商店销售管理系统(源码+论文)【独一无二】
【C++】C++商店销售管理系统(源码+论文)【独一无二】