11.如果要用面向对象方法设计一个学生宿舍管理软件,你认为应该设计哪些类?试用C++程序代码来定义这些类?(根据实际需要定义2个类,类中包含至少2个数据成员,至少2个成员函数,为其中一个类创建合适的派生类,新增成员自定义,只需注果A成员函数的功能,不用给出成员函数体的定义实现。
时间: 2024-12-12 14:27:05 浏览: 12
设计学生宿舍管理系统时,我们可以考虑以下几个主要的类:
1. 学生宿舍类(StudentDormitory):
- 数据成员:宿舍编号(dormID),房间数(rooms),已入住的学生人数(studentsIn)
- 成员函数:构造函数(初始化宿舍信息),添加学生(addStudent),查看住宿情况(viewStatus)
```cpp
class StudentDormitory {
public:
// 构造函数
StudentDormitory(int dormID, int rooms) : dormID(dormID), rooms(rooms), studentsIn(0) {}
// 添加学生
void addStudent() { studentsIn++; }
// 查看住宿情况
virtual std::string viewStatus() {
return "宿舍" + to_string(dormID) + ": 已有 " + to_string(studentsIn) + " 名学生";
}
private:
int dormID;
int rooms;
int studentsIn; // 由于是虚函数,这里声明但不实现
};
```
2. 宿舍管理员类(DormManager):
- 数据成员:管理员姓名(adminName),管理的宿舍列表(dormitories)
- 成员函数:添加宿舍(addDormitory),分配宿舍(assignRoom),处理宿舍状态(handleDormStatus)
```cpp
class DormManager {
public:
// 添加宿舍
void addDormitory(StudentDormitory& dorm) {
dormitories.push_back(dorm);
}
// 分配宿舍
void assignRoom(Student student, std::vector<StudentDormitory>& dormitories) {
for (auto& dorm : dormitories) {
if (dorm.rooms > 0) {
dorm.addStudent();
student.dormID = dorm.dormID; // 假设student有一个dormID属性
dormitories.remove(dorm); // 从列表中移除已经分配的宿舍
break;
}
}
}
// 处理宿舍状态
virtual void handleDormStatus(std::vector<StudentDormitory>& dormitories) = 0; // 虚函数,未提供实现
private:
std::vector<StudentDormitory> dormitories;
std::string adminName;
};
// 派生类宿舍管理员(ConcreteDormManager),可以有特定的宿舍状态处理策略
class ConcreteDormManager : public DormManager {
public:
// 实现handleDormStatus方法,例如打印所有宿舍的状态
void handleDormStatus(std::vector<StudentDormitory>& dormitories) override {
for (const auto& dorm : dormitories) {
std::cout << dorm.viewStatus() << std::endl;
}
}
};
```
阅读全文