运用C++语言描述公司类、雇员类、职务类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态性和虚函数的知识。注重面向对象程序设计理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解面向对象程序设计的核心的概念。 本课程设计要实现的主要功能如下: 1)建立公司类、雇员类、职务类 2)公司、雇员、职务信息的初始化 3)公司、雇员、职务信息的添加、修改、删除、查找 4)雇员、职务信息的输出 5)将职务信息保存为文件
时间: 2023-07-10 22:30:10 浏览: 58
好的,这里提供一个基本的代码框架,您可以根据需要进行修改和完善:
```cpp
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
// 职务类
class Job {
public:
Job(string name, double salary) : name(name), salary(salary) {}
virtual void showInfo() { // 虚函数,可被重写
cout << "Job Name: " << name << ", Salary: " << salary << endl;
}
protected:
string name; // 职务名称
double salary; // 职务薪资
};
// 经理类,继承自职务类
class Manager : public Job {
public:
Manager(string name, double salary, string department) : Job(name, salary), department(department) {}
void showInfo() { // 重写虚函数
cout << "Manager Name: " << name << ", Salary: " << salary << ", Department: " << department << endl;
}
private:
string department; // 经理所在部门
};
// 员工类
class Employee {
public:
Employee(string name, int age, Job* job) : name(name), age(age), job(job) {}
void showInfo() {
cout << "Employee Name: " << name << ", Age: " << age << ", ";
job->showInfo(); // 调用职务类的虚函数
}
void setJob(Job* newJob) {
job = newJob;
}
private:
string name; // 员工姓名
int age; // 员工年龄
Job* job; // 员工职务,使用指针类型
};
// 公司类
class Company {
public:
void addEmployee(Employee* employee) {
employees.push_back(employee); // 添加员工信息
}
void removeEmployee(int index) {
employees.erase(employees.begin() + index); // 删除员工信息
}
void showAllEmployees() {
for (int i = 0; i < employees.size(); i++) {
employees[i]->showInfo(); // 调用员工类的成员函数
}
}
void showEmployee(int index) {
if (index < employees.size()) {
employees[index]->showInfo();
}
}
void modifyEmployee(int index, string name, int age, Job* job) {
if (index < employees.size()) {
employees[index] = new Employee(name, age, job);
}
}
int findEmployee(string name) {
for (int i = 0; i < employees.size(); i++) {
if (employees[i]->getName() == name) {
return i;
}
}
return -1; // 如果未找到,则返回-1
}
void saveJobsToFile(string filename) {
ofstream fout(filename);
for (int i = 0; i < jobs.size(); i++) {
fout << jobs[i]->getName() << "," << jobs[i]->getSalary() << endl; // 将职务信息保存到文件中
}
fout.close();
}
private:
vector<Employee*> employees; // 存储所有员工信息
vector<Job*> jobs; // 存储所有职务信息
};
int main() {
// 初始化职务信息
Job* job1 = new Job("Employee", 3000);
Job* job2 = new Manager("Manager", 8000, "Sales");
// 初始化员工信息
Employee* employee1 = new Employee("Tom", 25, job1);
Employee* employee2 = new Employee("Jerry", 30, job2);
Company company;
company.addEmployee(employee1); // 添加员工信息到公司对象中
company.addEmployee(employee2);
company.showAllEmployees(); // 显示所有员工信息
company.showEmployee(0); // 显示指定员工信息
company.modifyEmployee(0, "Tommy", 26, job2); // 修改指定员工信息
company.showAllEmployees();
company.saveJobsToFile("jobs.txt"); // 将职务信息保存到文件中
return 0;
}
```
以上代码实现了公司类、雇员类、职务类的基本功能,并且运用了继承和多态性的知识。您可以根据您的需求进行修改和完善,比如添加更多的数据成员和成员函数,或者修改保存到文件的格式等。
阅读全文