C++实现1. 使用多文件结构编写程序实现人事管理的人员信息管理。 include合适的头文件。在Person.h中声明类的所有数据成员和成员函数,在Person.cpp中实现Person类。 Person类的属性为: ```C++ string id; // 员工工号,格式为“numXXX",其中XXX表示三个数字字符 char gender; // 性别 double salary; // 薪资 static int amount; //公司人数(静态数据成员) ``` Person类的行为为: ```c++ //默认构造函数:初始化为空值或默认值,同时更新公司人数 //带参数的构造函数:初始化所有成员变量,同时更新公司人数 //复制构造函数:深拷贝,同时更新公司人数 //析构函数:当对象被销毁时减少公司人数 //初始化静态成员 //其他函数: void setId(const string& id); string getId() const; void setGender(char gender); //'f'表示女,'m'表示男 char getGender() const; void setSalary(double salary); double getSalary() const; static int getAmount(); // 获取当前公司员工总数 ``` 在main.cpp中使用Person类。 ```c++ void sortPeopleByID(Person pArray[3], int size) //实现Person对象数组的简单排序,按字典序从小到大,要求使用string类的比较功能 /* 在main方法中: (1)声明并初始化有三个元素的Person对象数组 (2)使用Person类定义的成员函数录入数据或者修改数据 (3)调用sortPeopleById方法对对象数组排序,输出工号最小的员工的信息(包括员工工号,性别,薪资
时间: 2025-06-25 10:09:33 浏览: 11
### C++多文件程序实现人事管理系统
#### 定义 `Person` 类
为了构建一个人事管理系统,首先需要设计一个表示人员信息的类 `Person`。该类应包含基本的信息字段(如姓名、年龄等),并提供构造函数和析构函数以支持对象的初始化与资源清理。
以下是 `Person.h` 文件的内容:
```cpp
// Person.h
#ifndef PERSON_H
#define PERSON_H
#include <iostream>
#include <string>
class Person {
public:
// 构造函数
Person(const std::string& name, int age);
// 拷贝构造函数
Person(const Person& other);
// 析构函数
~Person();
// 获取名称
std::string getName() const;
// 获取年龄
int getAge() const;
// 设置静态成员变量的值
static void setTotalCount(int count);
// 获取静态成员变量的值
static int getTotalCount();
private:
std::string mName;
int mAge;
// 静态成员变量
static int sTotalCount;
};
#endif // PERSON_H
```
在头文件中声明了必要的公有方法以及私有数据成员,并引入了一个静态成员变量 `sTotalCount` 来记录已创建的对象总数[^1]。
---
#### 实现 `Person` 类的功能
接下来,在单独的 `.cpp` 文件中实现这些功能。
```cpp
// Person.cpp
#include "Person.h"
// 初始化静态成员变量
int Person::sTotalCount = 0;
// 构造函数实现
Person::Person(const std::string& name, int age) : mName(name), mAge(age) {
++sTotalCount;
std::cout << "构造函数被调用: 创建 " << mName << ", 年龄为 " << mAge << std::endl;
}
// 拷贝构造函数实现
Person::Person(const Person& other) : mName(other.mName), mAge(other.mAge) {
std::cout << "拷贝构造函数被调用: 复制 " << mName << std::endl;
}
// 析构函数实现
Person::~Person() {
--sTotalCount;
std::cout << "析构函数被调用: 销毁 " << mName << std::endl;
}
// 获取名称的方法
std::string Person::getName() const {
return mName;
}
// 获取年龄的方法
int Person::getAge() const {
return mAge;
}
// 设置静态成员变量的值
void Person::setTotalCount(int count) {
sTotalCount = count;
}
// 获取静态成员变量的值
int Person::getTotalCount() {
return sTotalCount;
}
```
这里实现了构造函数、析构函数以及其他辅助方法。通过静态成员变量 `sTotalCount` 记录当前存在的对象数量[^2]。
---
#### 主程序逻辑 (`main.cpp`)
最后,在主程序中加载多个员工信息并对它们进行排序和输出。
```cpp
// main.cpp
#include <vector>
#include <algorithm>
#include "Person.h"
#include <iomanip> // for setw and setfill
bool compareByName(const Person& a, const Person& b) {
return a.getName() < b.getName();
}
bool compareByAge(const Person& a, const Person& b) {
return a.getAge() < b.getAge();
}
int main() {
std::vector<Person> employees;
// 添加一些测试数据
employees.emplace_back("Alice", 30);
employees.emplace_back("Bob", 25);
employees.emplace_back("Charlie", 35);
// 打印原始列表
std::cout << "\n=== 原始员工列表 ===\n";
for (const auto& emp : employees) {
std::cout << std::setw(10) << std::left << emp.getName()
<< ": " << emp.getAge() << "岁\n";
}
// 按名字排序
std::sort(employees.begin(), employees.end(), compareByName);
std::cout << "\n=== 按名字排序后的员工列表 ===\n";
for (const auto& emp : employees) {
std::cout << std::setw(10) << std::left << emp.getName()
<< ": " << emp.getAge() << "岁\n";
}
// 按年龄排序
std::sort(employees.begin(), employees.end(), compareByAge);
std::cout << "\n=== 按年龄排序后的员工列表 ===\n";
for (const auto& emp : employees) {
std::cout << std::setw(10) << std::left << emp.getName()
<< ": " << emp.getAge() << "岁\n";
}
// 显示总人数
std::cout << "\n当前系统中共有 " << Person::getTotalCount() << " 名员工。\n";
return 0;
}
```
此部分展示了如何利用标准库中的容器(如 `std::vector`)存储多个 `Person` 对象,并借助算法工具对其进行排序和展示[^3]。
---
### 总结
以上代码片段分别位于不同的源文件中,体现了模块化编程的思想。通过分离接口定义与具体实现,增强了项目的可维护性和扩展性。此外,还运用了静态成员变量跟踪全局状态,提供了灵活的数据处理能力。
---
阅读全文