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技术站