👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
【C++】C++ 职工信息管理系统(源码)【独一无二】
目录
- 【C++】C++ 职工信息管理系统(源码)【独一无二】
- 一、设计要求
- 1. 输入职工信息并保存
- 2. 查询职工信息
- 3. 职称统计
- 4. 根据职称排序输出
- 5. 根据工号修改职工信息
- 6. 根据工号删除职工信息
- 7. 显示功能菜单
- 8. 加载职工信息
- 9. 系统主函数
- 二、设计思路
- 1. 结构体设计
- 2. 全局变量设计
- 3. 功能菜单设计
- 4. 输入职工信息并保存
- 5. 加载职工信息
- 6. 查询职工信息
- 通过工号查询
- 通过姓名或系部查询
- 7. 职称统计
- 8. 根据职称排序输出
- 9. 根据工号修改职工信息
- 10. 根据工号删除职工信息
- 11. 主函数设计
- 三、可视化分析
一、设计要求
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
结构,主函数能够清晰地根据用户的输入调用相应的功能函数。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈
三、可视化分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈