C++程序设计:模拟某单位的人事管理。人事信息主要包括:员工编号、所在部门、职务、薪资等级、薪资、联系方式等内容;部门信息主要包括:部门编号、部门名称等内容。完成以下操作:实现员工信息、部门信息的添加、修改、删除和查询。
时间: 2023-07-10 10:37:08 浏览: 123
好的,这是一个比较复杂的程序设计问题,需要结合多个类来实现。考虑以下的解决方案:
首先,我们需要定义员工类和部门类,分别表示员工和部门的信息。员工类包括员工编号、所在部门、职务、薪资等级、薪资、联系方式等内容;部门类包括部门编号、部门名称等内容。我们可以通过以下的代码来定义这两个类:
```cpp
class Employee {
public:
Employee(int id, int dept_id, string position, int salary_grade, double salary, string contact_info);
int get_id();
int get_dept_id();
string get_position();
int get_salary_grade();
double get_salary();
string get_contact_info();
void set_position(string position);
void set_salary_grade(int salary_grade);
void set_salary(double salary);
void set_contact_info(string contact_info);
private:
int id_;
int dept_id_;
string position_;
int salary_grade_;
double salary_;
string contact_info_;
};
class Department {
public:
Department(int id, string name);
int get_id();
string get_name();
void set_name(string name);
private:
int id_;
string name_;
};
```
接下来,我们需要定义一个管理类,用来管理所有的员工和部门信息,并提供添加、修改、删除和查询操作。我们可以通过以下的代码来定义这个类:
```cpp
class Management {
public:
Management();
~Management();
void add_employee(int id, int dept_id, string position, int salary_grade, double salary, string contact_info);
void modify_employee(int id, string position, int salary_grade, double salary, string contact_info);
void delete_employee(int id);
Employee* find_employee(int id);
void add_department(int id, string name);
void modify_department(int id, string name);
void delete_department(int id);
Department* find_department(int id);
private:
vector<Employee*> employees_;
vector<Department*> departments_;
};
```
在实现这个类的过程中,我们需要使用 STL 中的 vector 容器,用来存储所有的员工和部门信息。具体实现过程如下:
```cpp
Management::Management() {}
Management::~Management() {
for (auto e : employees_) {
delete e;
}
for (auto d : departments_) {
delete d;
}
}
void Management::add_employee(int id, int dept_id, string position, int salary_grade, double salary, string contact_info) {
Employee* e = new Employee(id, dept_id, position, salary_grade, salary, contact_info);
employees_.push_back(e);
}
void Management::modify_employee(int id, string position, int salary_grade, double salary, string contact_info) {
Employee* e = find_employee(id);
if (e != nullptr) {
e->set_position(position);
e->set_salary_grade(salary_grade);
e->set_salary(salary);
e->set_contact_info(contact_info);
} else {
cout << "Employee not found!" << endl;
}
}
void Management::delete_employee(int id) {
for (auto it = employees_.begin(); it != employees_.end(); ++it) {
if ((*it)->get_id() == id) {
delete *it;
employees_.erase(it);
break;
}
}
}
Employee* Management::find_employee(int id) {
for (auto e : employees_) {
if (e->get_id() == id) {
return e;
}
}
return nullptr;
}
void Management::add_department(int id, string name) {
Department* d = new Department(id, name);
departments_.push_back(d);
}
void Management::modify_department(int id, string name) {
Department* d = find_department(id);
if (d != nullptr) {
d->set_name(name);
} else {
cout << "Department not found!" << endl;
}
}
void Management::delete_department(int id) {
for (auto it = departments_.begin(); it != departments_.end(); ++it) {
if ((*it)->get_id() == id) {
delete *it;
departments_.erase(it);
break;
}
}
}
Department* Management::find_department(int id) {
for (auto d : departments_) {
if (d->get_id() == id) {
return d;
}
}
return nullptr;
}
```
最后,我们可以在主函数中使用这个管理类来实现具体的操作,例如:
```cpp
int main() {
Management m;
m.add_department(1, "HR");
m.add_department(2, "Finance");
m.add_employee(1001, 1, "Manager", 5, 10000.0, "1234567890");
m.add_employee(1002, 1, "Engineer", 3, 6000.0, "0987654321");
m.add_employee(1003, 2, "Accountant", 4, 8000.0, "1357924680");
Employee* e1 = m.find_employee(1001);
if (e1 != nullptr) {
cout << e1->get_position() << endl;
}
m.modify_employee(1002, "Senior Engineer", 4, 8000.0, "0987654321");
m.delete_employee(1003);
Department* d1 = m.find_department(1);
if (d1 != nullptr) {
cout << d1->get_name() << endl;
}
m.modify_department(2, "Accounting");
return 0;
}
```
这样,我们就完成了一个简单的人事管理程序。当然,这个程序还有很多可以改进的地方,例如:员工和部门信息的存储方式、输入输出的格式、异常处理等等。但是,这个程序已经足够演示如何使用类来实现一个较为复杂的问题了。