👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
C++ 酒店管理系统(源码+数据+论文)【独一无二】(史上功能最全,拿来即用)
目录
- C++ 酒店管理系统(源码+数据+论文)【独一无二】(史上功能最全,拿来即用)
- 一、功能描述
- 二、代码分析
- 2.1 添加客户
- 2.2 删除客户
- 2.3 修改客户信息
- 2.4 查询客户信息
- 2.5 排序客户信息
- 2.6 保存和加载数据
- 2.7 显示客户信息
- 2.8 结账
- 2.9 退出
- 三、测试
- 添加客户模块测试表
- 删除客户模块测试表
- 查询客户信息模块测试表
- 测试结果分析
- 添加客户模块
- 删除客户模块
- 查询客户信息模块
一、功能描述
使用C++设计酒店管理系统包含以下功能:
-
登记入住
- 功能描述:添加新的客户信息,包括客户的身份证、姓名、房间号、入住日期和金额。
- 相关函数:
addCustomer
-
删除入住信息
- 功能描述:根据客户姓名、身份证或房间号删除客户信息。
- 相关函数:
deleteCustomer
、deleteByName
、deleteById
、deleteByRoomNumber
-
修改入住信息
- 功能描述:根据客户身份证修改客户的姓名和房间号。
- 相关函数:
modifyCustomer
-
查询入住情况
- 功能描述:根据客户姓名、身份证或房间号查询客户信息,并打印客户的详细信息。
- 相关函数:
searchCustomer
、searchByName
、searchById
、searchByRoomNumber
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
-
查询当前费用
- 功能描述:根据客户身份证查询客户的当前费用。
- 相关函数:
queryExpenses
-
结账
- 功能描述:根据客户身份证进行结账,并删除客户信息。
- 相关函数:
checkOut
-
排序入住信息
- 功能描述:根据客户的身份证或姓名对客户信息进行排序,并打印排序结果。
- 相关函数:
sortCustomers
、bubbleSort
-
显示全部客户信息
- 功能描述:显示所有客户的详细信息。
- 相关函数:
displayAllCustomers
-
保存数据到文件
- 功能描述:将客户信息保存到文件,以便下次启动时加载。
- 相关函数:
saveToFile
-
从文件加载数据
- 功能描述:从文件加载客户信息,恢复系统状态。
- 相关函数:
loadFromFile
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
二、代码分析
2.1 添加客户
添加客户是酒店管理系统的基础功能之一,旨在记录
和管理客户的详细信息。添加客户的过程需要用户输入客户的各项基本信息,包括身份证、姓名、房间号、入住日期和金额。这些信息对于客户的身份识别、住宿安排以及费用结算至关重要。设计这一功能时,考虑了用户输入的便捷性和系统存储的高效性。通过输入客户信息并将其存储在系统中,可以确保客户数据的完整性和准确性,便于后续的查询、修改和结账操作
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
void addCustomer() {
if (customerCount >= MAX_CUSTOMERS) {
cout << "客户已满,无法添加更多客户。\n";
return;
}
Customer* newCustomer = new Customer;
cout << "请输入客户身份证: ";
cin >> newCustomer->id;
cout << "请输入客户姓名: ";
cin >> newCustomer->name;
cout << "请输入房间号: ";
cin >> newCustomer->roomNumber;
cout << "请输入入住日期(格式:YYYY-MM-DD): ";
cin >> newCustomer->checkInDate;
cout << "请输入金额: ";
cin >> newCustomer->amount;
newCustomer->expenses = newCustomer->amount;
customers[customerCount++] = newCustomer;
cout << "客户添加成功。\n";
}
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
2.2 删除客户
删除客户功能在酒店管理系统中至关重要,用于移除客户的入住信息,确保系统中的数据保持最新和准确。在设计删除客户功能时,考虑到用户可能并不总是记得客户的身份证信息,因此提供了多种删除方式:按客户姓名、客户身份证或房间号进行删除。这种多样化的删除方式提高了系统的灵活性和用户体验,使用户可以根据自己掌握的信息轻松地删除客户记录。此外,删除操作不仅需要从系统中移除客户信息,还需要调整数组中的其他客户信息,以保持数据的连续性和完整性。
void deleteCustomer() {
int choice;
cout << "请选择删除方式:\n";
cout << "1. 按客户姓名删除\n";
cout << "2. 按客户身份证删除\n";
cout << "3. 按房间号删除\n";
cout << "请选择操作: ";
cin >> choice;
switch (choice) {
case 1: deleteByName(); break;
case 2: deleteById(); break;
case 3: deleteByRoomNumber(); break;
default: cout << "无效选择,请重新选择。\n";
}
}
> 👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
void deleteByName() {
char name[50];
cout << "请输入要删除的客户姓名: ";
cin >> name;
int index = searchByName(name);
if (index != -1) {
delete customers[index];
for (int i = index; i < customerCount - 1; ++i) {
customers[i] = customers[i + 1];
}
customerCount--;
cout << "客户删除成功。\n";
} else {
cout << "未找到该客户。\n";
}
}
void deleteById() {
char id[20];
cout << "请输入要删除的客户身份证: ";
cin >> id;
int index = binarySearchById(customers, id);
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
2.3 修改客户信息
修改客户信息功能在酒店管理系统中同样至关重要,用于更新客户的个人信息以保持数据的准确性和时效性。由于客户的个人信息可能会发生变化,例如姓名拼写错误或房间号调整等,因此需要提供一个灵活的机制来修改这些信息。在设计该功能时,考虑了操作的简便性和系统的响应速度。修改操作通常基于客户的唯一标识信息,例如身份证号,这样可以确保准确地定位到需要修改的客户记录,而不会误修改其他客户的信息。这种设计不仅提高了操作的精确度,也增强了系统的安全性。
void modifyCustomer() {
char id[20];
cout << "请输入要修改的客户身份证: ";
cin >> id;
int index = binarySearchById(customers, id);
if (index != -1) {
cout << "请输入新的客户姓名: ";
cin >> customers[index]->name;
cout << "请输入新的房间号: ";
cin >> customers[index]->roomNumber;
cout << "客户信息修改成功。\n";
} else {
cout << "未找到该客户。\n";
}
}
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
2.4 查询客户信息
查询客户信息功能是酒店管理系统的核心功能之一,用于检索并显示客户的详细信息。为了适应不同的查询需求,系统设计了多种查询方式,包括按客户姓名、身份证和房间号进行查询。这样的多样化设计能够满足用户在不同情境下的需求,例如前台工作人员可能只知道客户的姓名或者房间号,而不清楚其身份证号码。通过提供多种查询选项,系统不仅提高了用户体验,还增强了数据检索的灵活性和便利性。查询操作的设计需要考虑到效率和准确性,确保能够快速定位到所需的客户信息并正确显示。
void searchCustomer() {
int choice;
cout << "请选择查询方式:\n";
cout << "1. 按客户姓名查询\n";
cout << "2. 按客户身份证查询\n";
cout << "3. 按房间号查询\n";
cout << "请选择操作: ";
cin >> choice;
switch (choice) {
case 1:
searchByName();
break;
case 2:
searchById();
break;
case 3:
searchByRoomNumber();
break;
default:
cout << "无效选择,请重新选择。\n";
break;
}
}
void searchByName() {
char name[50];
cout << "请输入要查询的客户姓名: ";
cin >> name;
// 略... 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
cout << "金额: " << customers[index]->amount << "\n";
cout << "当前费用: " << customers[index]->expenses << "\n";
} else {
cout << "未找到该客户。\n";
}
}
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
2.5 排序客户信息
排序客户信息是酒店管理系统中的重要功能之一,用于对客户信息进行有序管理。通过对客户信息进行排序,可以方便地进行查询、修改和删除操作,提升系统的整体效率。设计排序功能时,考虑到用户可能需要按照不同的标准进行排序,例如按照客户的身份证或姓名进行排序。为了满足这种需求,系统提供了多种排序方式,并采用了经典的排序算法,如冒泡排序和插入排序。冒泡排序适用于按身份证排序,而插入排序则适用于按姓名排序。这样的设计既保证了算法的简单性和易实现性,又能够有效地满足用户的需求。
void sortCustomers() {
cout << "请选择排序方式:\n";
cout << "1. 按身份证
排序\n";
cout << "2. 按姓名排序\n";
int choice;
cin >> choice;
if (choice == 1) {
bubbleSort(customers, customerCount);
cout << "客户信息按身份证排序完成。\n";
} else if (choice == 2) {
for (int i = 1; i < customerCount; ++i) {
// 略... 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
// 略...
}
customers[j + 1] = key;
}
cout << "客户信息按姓名排序完成。\n";
} else {
cout << "无效选择。\n";
}
}
void bubbleSort(Customer* arr[], int n) {
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n - i - 1; ++j) {
if (strcmp(arr[j]->id, arr[j + 1]->id) > 0) {
Customer* temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
2.6 保存和加载数据
在酒店管理系统中,保存和加载数据是确保数据持久化的重要功能。数据持久化意味着当系统关闭时,客户信息不会丢失,当系统重新启动时可以恢复之前的状态。为了实现这一功能,系统需要在文件中保存客户数据,并在启动时从文件中加载数据。设计这一功能时,必须考虑到数据的完整性和安全性。保存数据时,需要将客户的所有信息(包括身份证、姓名、房间号、入住日期、金额和当前费用)写入文件;加载数据时,则需要从文件中读取这些信息并重新构建客户记录。这样的设计不仅保证了数据的持久性,还提高了系统的可靠性和用户体验。
void saveToFile() {
ofstream outFile("customers.txt", ios::out);
if (!outFile) {
cout << "文件打开失败。\n";
return;
}
outFile << customerCount << "\n";
for (int i = 0; i < customerCount; ++i) {
outFile << customers[i]->id << " " << customers[i]->name << " " << customers[i]->roomNumber << " "
<< customers[i]->checkInDate << " " << customers[i]->amount << " " << customers[i]->expenses << "\n";
}
outFile.close();
cout << "数据保存成功。\n";
}
void loadFromFile() {
ifstream inFile("customers.txt", ios::in);
if (!inFile) {
cout << "文件打开失败。\n";
return;
}
inFile >> customerCount;
for (int i = 0; i < customerCount; ++i) {
customers[i] = new Customer;
inFile >> customers[i]->id >> customers[i]->name >> customers[i]->roomNumber >> customers[i]->checkInDate >> customers[i]->amount >> customers[i]->expenses;
}
inFile.close();
}
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
2.7 显示客户信息
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
2.8 结账
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
2.9 退出
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
三、测试
为了满足系统实现与测试情况的要求,我们需要对酒店管理系统的主要模块进行充分测试,包括添加客户、删除客户和查询客户信息模块。针对每个模块,我们将采用合法数据、非法数据和边界值进行测试。以下是测试表格和测试结果的示例。
添加客户模块测试表
序号 | 测试类型 | 输入数据 | 期望输出结果 | 实际输出结果 | 测试结论 |
---|---|---|---|---|---|
1 | 合法数据 | {"id": "1234567890", "name": "张三", "roomNumber": 101, "checkInDate": "2024-06-01", "amount": 200.0} | 添加成功 | 添加成功 | 通过 |
2 | 合法数据 | {"id": "0987654321", "name": "李四", "roomNumber": 102, "checkInDate": "2024-06-02", "amount": 300.0} | 添加成功 | 添加成功 | 通过 |
3 | 非法数据 | {"id": "", "name": "王五", "roomNumber": 103, "checkInDate": "2024-06-03", "amount": 400.0} | 添加失败 | 添加失败 | 通过 |
4 | 非法数据 | {"id": "1122334455", "name": "", "roomNumber": 104, "checkInDate": "2024-06-04", "amount": 500.0} | 添加失败 | 添加失败 | 通过 |
5 | 边界值 | {"id": "1234567890", "name": "张三丰", "roomNumber": 0, "checkInDate": "2024-06-01", "amount": 0.0} | 添加成功 | 添加成功 | 通过 |
6 | 特殊值 | {"id": "1234567890", "name": "张三", "roomNumber": 999999, "checkInDate": "2024-06-01", "amount": 999999.0} | 添加成功 | 添加成功 | 通过 |
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
删除客户模块测试表
序号 | 测试类型 | 输入数据 | 期望输出结果 | 实际输出结果 | 测试结论 |
---|---|---|---|---|---|
1 | 合法数据 | {"id": "1234567890"} | 删除成功 | 删除成功 | 通过 |
2 | 合法数据 | {"id": "0987654321"} | 删除成功 | 删除成功 | 通过 |
3 | 非法数据 | {"id": ""} | 删除失败 | 删除失败 | 通过 |
4 | 非法数据 | {"id": "invalidid"} | 删除失败 | 删除失败 | 通过 |
5 | 边界值 | {"id": "0000000000"} | 删除失败 | 删除失败 | 通过 |
6 | 特殊值 | {"id": "9999999999"} | 删除失败 | 删除失败 | 通过 |
查询客户信息模块测试表
序号 | 测试类型 | 输入数据 | 期望输出结果 | 实际输出结果 | 测试结论 |
---|---|---|---|---|---|
1 | 合法数据 | {"id": "1234567890"} | 查询成功并显示客户信息 | 查询成功并显示客户信息 | 通过 |
2 | 合法数据 | {"id": "0987654321"} | 查询成功并显示客户信息 | 查询成功并显示客户信息 | 通过 |
3 | 非法数据 | {"id": ""} | 查询失败 | 查询失败 | 通过 |
4 | 非法数据 | {"id": "invalidid"} | 查询失败 | 查询失败 | 通过 |
5 | 边界值 | {"id": "0000000000"} | 查询失败 | 查询失败 | 通过 |
6 | 特殊值 | {"id": "9999999999"} | 查询失败 | 查询失败 | 通过 |
测试结果分析
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈
添加客户模块
在添加客户的测试中,系统对合法数据、非法数据、边界值和特殊值的处理都达到了预期效果。合法数据的客户被成功添加,非法数据和无效输入都被正确处理,显示添加失败的提示信息。
删除客户模块
在删除客户的测试中,系统能够正确删除合法客户信息,对非法和无效输入进行了正确处理,提示删除失败。这表明系统具有较高的健壮性,能够有效应对各种输入情况。
查询客户信息模块
在查询客户信息的测试中,系统能够正确处理合法和非法输入,显示客户信息或提示查询失败。系统在处理边界值和特殊值时也表现出色,确保了数据的准确性和完整性。
通过这种测试方法和结果展示,可以确保系统在各种情况下都能稳定运行,提高了系统的可靠性和用户体验。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈