【C++】C++ 宾馆酒店管理系统(源码+数据+论文)【独一无二】(史上功能最全,拿来即用)

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


C++ 酒店管理系统(源码+数据+论文)【独一无二】(史上功能最全,拿来即用)



一、功能描述

使用C++设计酒店管理系统包含以下功能:

  1. 登记入住

    • 功能描述:添加新的客户信息,包括客户的身份证、姓名、房间号、入住日期和金额。
    • 相关函数:addCustomer
  2. 删除入住信息

    • 功能描述:根据客户姓名、身份证或房间号删除客户信息。
    • 相关函数:deleteCustomerdeleteByNamedeleteByIddeleteByRoomNumber
  3. 修改入住信息

    • 功能描述:根据客户身份证修改客户的姓名和房间号。
    • 相关函数:modifyCustomer
  4. 查询入住情况

    • 功能描述:根据客户姓名、身份证或房间号查询客户信息,并打印客户的详细信息。
    • 相关函数:searchCustomersearchByNamesearchByIdsearchByRoomNumber

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈

  1. 查询当前费用

    • 功能描述:根据客户身份证查询客户的当前费用。
    • 相关函数:queryExpenses
  2. 结账

    • 功能描述:根据客户身份证进行结账,并删除客户信息。
    • 相关函数:checkOut
  3. 排序入住信息

    • 功能描述:根据客户的身份证或姓名对客户信息进行排序,并打印排序结果。
    • 相关函数:sortCustomersbubbleSort
  4. 显示全部客户信息

    • 功能描述:显示所有客户的详细信息。
    • 相关函数:displayAllCustomers
  5. 保存数据到文件

    • 功能描述:将客户信息保存到文件,以便下次启动时加载。
    • 相关函数:saveToFile
  6. 从文件加载数据

    • 功能描述:从文件加载客户信息,恢复系统状态。
    • 相关函数: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"}查询失败查询失败通过

测试结果分析

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈

添加客户模块

在添加客户的测试中,系统对合法数据、非法数据、边界值和特殊值的处理都达到了预期效果。合法数据的客户被成功添加,非法数据和无效输入都被正确处理,显示添加失败的提示信息。

删除客户模块

在删除客户的测试中,系统能够正确删除合法客户信息,对非法和无效输入进行了正确处理,提示删除失败。这表明系统具有较高的健壮性,能够有效应对各种输入情况。

查询客户信息模块

在查询客户信息的测试中,系统能够正确处理合法和非法输入,显示客户信息或提示查询失败。系统在处理边界值和特殊值时也表现出色,确保了数据的准确性和完整性。

通过这种测试方法和结果展示,可以确保系统在各种情况下都能稳定运行,提高了系统的可靠性和用户体验。

👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “宾馆” 获取。👈👈👈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米码收割机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值