👉博__主👈:米码收割机
👉技__能👈: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
结构,主函数能够清晰地根据用户的输入调用相应的功能函数。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈
三、可视化分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 职工 ” 获取。👈👈👈