一、设计要求
某旅馆有n个等级的房间,第I等级有a个房间,每个等级的房间有b个床位(1<i<n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。
旅客登记,即为旅客分配床位。输入旅客姓名、年龄、性别、到达日期和所需房间等级。分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床。位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束;
旅客离开时,即进行床位回收。输入房间等级、房间号和床位号。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 旅游 ” 获取,拿来即用。👈👈👈
二、设计思路
这段代码实现了一个宾馆房间管理系统,包含房间和顾客的信息管理,提供房间录入、入住登记、退房结账、信息显示和查询等功能。以下是对各个代码块的实现思路分析:
日期类 Data
class Data { public: Data() {} ~Data() {} void SetDate(int year, int month, int day) { this->year = year; this->month = month; this->day = day; } // 略....(至少10行代码) // 略....(至少10行代码) };
- 这是一个日期类,用于记录交易时间。包含年、月、日属性和相应的设置和获取函数。
房间类 Room
class Room { public: Room* r[Max]; int Room_count; // 略....(至少10行代码) // 略....(至少10行代码) protected: int Number; string Type; string Whether; double Price; };
- 这个类用于存储房间信息,包含房间号、类型、状态(是否有客人)和价格等属性。提供了信息输入、状态设置和显示函数。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 旅游 ” 获取,拿来即用。👈👈👈
顾客类 Guest
class Guest { public: Guest* g[Max]; int Guest_count; Guest(int number, string Name, int Id, string sex, string Intime, int days) { this->Name = Name; this->Id = Id; this->sex = sex; this->number = number; this->Intime = Intime; this->days = days; } // 略....(至少10行代码) // 略....(至少10行代码) protected: int number; string Name; int Id; string sex; string Intime; int days; };
- 这个类用于存储顾客信息,包含房号、姓名、身份证号、性别、入住时间和天数等属性。提供了信息输入和显示函数。
管理类 Manage
class Manage { public: Guest* g[Max]; int Guest_count; Room* r[Max]; int Room_count; // 略....(至少10行代码) // 略....(至少10行代码) void SearchType(); void SearchNumber(); };
- 这个类负责管理所有的房间和顾客信息,包含增删改查等功能。它使用房间和顾客的指针数组来存储对象,并提供相关操作函数。
功能实现
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 旅游 ” 获取,拿来即用。👈👈👈
查询菜单
void Manage::SearchMenu() { int n; system("cls"); cout << "====================================" << endl; cout << "= 查 询 菜 单 =" << endl; cout << "====================================" << endl; cout << "========= 1、查 询 空 房 =======" << endl; cout << "========= 2、按房间号查询 =======" << endl; cout << "====================================" << endl; cout << endl << "请选择: "; cin >> n; switch (n) { case 1: SearchType(); break; case 2: SearchNumber(); break; } }
- 查询菜单提供了查询空房和按房间号查询的选项。
增加房间
void Manage::IncreaseRoom() { string type, Whether; double price; int number; // 略....(至少10行代码) // 略....(至少10行代码) }
- 该函数用于增加房间信息,输入房号、类型、价格和状态,并将其写入文件。
入住登记
void Manage::Check_In() { ReadData(); SearchType(); string name, intime, sex, type; // 略....(至少10行代码) // 略....(至少10行代码) }
- 入住登记功能,输入顾客信息并将其写入文件,同时更新房间状态。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 旅游 ” 获取,拿来即用。👈👈👈
退房结账
int Manage::Payment() { ReadData(); Display(2); // 略....(至少10行代码) // 略....(至少10行代码) } void Manage::Check_Out() { int x = Payment(); // 略....(至少10行代码) // 略....(至少10行代码) }
- 退房结账功能,计算顾客消费金额并更新房间状态。
显示信息
void Manage::Display(int n) { ReadData(); switch (n) { case 1: for (i = 0; i < Room_count - 1; i++) { cout << "房号:" << r[i]->InputNumber() << "\t房间类型: " << r[i]->InputType() << "\t房间价格: " << r[i]->InputPrice() << "\t房间状态: " << r[i]->InputWhether() << endl << endl; } break; case 2: for (i = 0; i < Guest_count - 1; i++) { cout << "房间号: " << g[i]->InputNumber() << "\t顾客姓名: " << g[i]->InputName() << "\t身份证号: " << g[i]->InputId() << "\t顾客性别:" << g[i]->InputSex() << "\t入住时间: " << g[i]->InputIntime() << "\t入住天数: " << g[i]->InputDays() << endl << endl; } break; } }
- 显示所有房间或顾客信息。
数据读写
void Manage::ReadData() { // 略....(至少10行代码) // 略....(至少10行代码) Rin.close(); Gin.open("guest.txt", ios::in); if (!Gin ) { cout << "未找到guest文件,请先建立文件!" << endl; return; } Guest_count = 0; // 略....(至少10行代码) // 略....(至少10行代码) Gin.close(); } void Manage::WriteData(int n) { switch (n) { case 1: { // 略....(至少10行代码) // 略....(至少10行代码) } case 2: { ofstream Gout("guest.txt", ios::trunc); for (i = 0; i < Guest_count - 1; i++) { if (g[i] != NULL) { WriteGuest(g[i]); } } Gout.close(); break; } } } void Manage::WriteRoom(Room* r) { ofstream Rout("room.txt", ios::app); // 略....(至少10行代码) // 略....(至少10行代码) } void Manage::WriteGuest(Guest* g) { // 略....(至少10行代码) // 略....(至少10行代码) }
- 从文件中读取房间和顾客信息,写入房间和顾客信息到文件。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 旅游 ” 获取,拿来即用。👈👈👈
查询功能
void Manage::SearchType() { ReadData(); for (i = 0; i < Room_count; i++) { if (r[i]->InputWhether() == "无") { r[i]->show(); } } } void Manage::SearchNumber() { ReadData(); int number; cout << "请输出要查询的房间号: "; cin >> number; // 略....(至少10行代码) // 略....(至少10行代码) }
- 查询所有空房间和按房间号查询,显示对应的房间和顾客信息。
主程序入口
int main() { Manage M; int n; while (1) { system("cls"); cout << endl << endl << endl << "\t\t\t宾 馆 房 间 管 理 系 统 " << endl << endl; cout << "\t\t\t1、房 间 信 息 的 录 入" << endl << endl; cout << "\t\t\t2、顾 客 入 住 房 间 登 记" << endl << endl; cout << "\t\t\t3、顾 客 退 房 结 账" << endl << endl; cout << "\t\t\t4、所 有 房 间 信 息 显 示" << endl << endl; cout << "\t\t\t5、所 有 顧 客 的 显 示" << endl << endl; cout << "\t\t\t6、查 询 所 有 空 房 间" << endl << endl; cout << "\t\t\t7、查 询 指 定 的 房 间 号" << endl << endl; cout << "\t\t\t8、退 出 系 统" << endl << endl; cout << endl << "请选择: "; cin >> n; cout << endl << endl; switch (n) { // 略....(至少10行代码) // 略....(至少10行代码) } return 0; }
- 主程序提供一个菜单系统,用户可以选择不同的功能来管理房间和顾客信息。根据用户选择,调用相应的管理函数。
三、可视化分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 旅游 ” 获取,拿来即用。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 旅游 ” 获取,拿来即用。👈👈👈