C++-----------酒店客房管理系统

news2025/2/15 7:47:23

酒店客房管理系统 要求:
1.客房信息管理:包括客房的编号、类型、价格、状态等信息的录入和修改;
2.顾客信息管理:包括顾客的基本信息、预订信息等的管理;
3.客房预订:客户可以根据需要进行客房的预订,系统会自动判断客房的可用情况;
4.入住管理:客户入住时需要进行登记,同时系统会自动更改客房的状态信息;
*5.结账管理:客户结账需要进行登记,同时系统会自动更改客房的状态信息;
*6.统计报表:包括客房的使用情况、收入情况等的统计报表。

5和6 功能可选 使用文件保存信息
在这里插入图片描述

在这里插入代码片
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <map>
#include <string>

// 客房类
class Room {
public:
    int number;
    std::string type;
    double price;
    std::string status;  // "available", "occupied", "reserved"

    Room(int num, std::string t, double p) : number(num), type(t), price(p), status("available") {}
};

// 顾客类
class Customer {
public:
    std::string name;
    std::string contact;
    int roomNumber;
    std::string checkInDate;
    std::string checkOutDate;

    Customer(std::string n, std::string c, int room, std::string in, std::string out)
        : name(n), contact(c), roomNumber(room), checkInDate(in), checkOutDate(out) {}
};

// 客房信息管理
class RoomManagement {
private:
    std::vector<Room> rooms;
    std::string roomFilePath = "rooms.txt";

    void saveRoomsToFile() {
        std::ofstream file(roomFilePath);
        for (const auto& room : rooms) {
            file << room.number << "," << room.type << "," << room.price << "," << room.status << std::endl;
        }
        file.close();
    }

    void loadRoomsFromFile() {
        std::ifstream file(roomFilePath);
        std::string line;
        while (std::getline(file, line)) {
            std::istringstream iss(line);
            int number;
            std::string type;
            double price;
            std::string status;
            std::getline(iss, type, ',');
            iss >> number;
            iss.ignore();
            std::getline(iss, type, ',');
            iss >> price;
            iss.ignore();
            std::getline(iss, status, ',');
            rooms.push_back(Room(number, type, price));
        }
        file.close();
    }

public:
    RoomManagement() {
        loadRoomsFromFile();
    }

    void addRoom(int number, std::string type, double price) {
        rooms.push_back(Room(number, type, price));
        saveRoomsToFile();
    }

    void updateRoom(int number, std::string type, double price, std::string status) {
        for (auto& room : rooms) {
            if (room.number == number) {
                room.type = type;
                room.price = price;
                room.status = status;
                break;
            }
        }
        saveRoomsToFile();
    }

    std::vector<Room> getRooms() const {
        return rooms;
    }
};

// 顾客信息管理
class CustomerManagement {
private:
    std::vector<Customer> customers;
    std::string customerFilePath = "customers.txt";

    void saveCustomersToFile() {
        std::ofstream file(customerFilePath);
        for (const auto& customer : customers) {
            file << customer.name << "," << customer.contact << "," << customer.roomNumber << ","
                 << customer.checkInDate << "," << customer.checkOutDate << std::endl;
        }
        file.close();
    }

    void loadCustomersFromFile() {
        std::ifstream file(customerFilePath);
        std::string line;
        while (std::getline(file, line)) {
            std::istringstream iss(line);
            std::string name, contact, checkInDate, checkOutDate;
            int roomNumber;
            std::getline(iss, name, ',');
            std::getline(iss, contact, ',');
            iss >> roomNumber;
            iss.ignore();
            std::getline(iss, checkInDate, ',');
            std::getline(iss, checkOutDate, ',');
            customers.push_back(Customer(name, contact, roomNumber, checkInDate, checkOutDate));
        }
        file.close();
    }

public:
    CustomerManagement() {
        loadCustomersFromFile();
    }

    void addCustomer(std::string name, std::string contact, int roomNumber, std::string checkInDate, std::string checkOutDate) {
        customers.push_back(Customer(name, contact, roomNumber, checkInDate, checkOutDate));
        saveCustomersToFile();
    }

    void updateCustomer(int roomNumber, std::string name, std::string contact, std::string checkInDate, std::string checkOutDate) {
        for (auto& customer : customers) {
            if (customer.roomNumber == roomNumber) {
                customer.name = name;
                customer.contact = contact;
                customer.checkInDate = checkInDate;
                customer.checkOutDate = checkOutDate;
                break;
            }
        }
        saveCustomersToFile();
    }

    std::vector<Customer> getCustomers() const {
        return customers;
    }
};

// 客房预订
class RoomReservation {
private:
    RoomManagement& roomMgmt;
    CustomerManagement& customerMgmt;

public:
    RoomReservation(RoomManagement& rm, CustomerManagement& cm) : roomMgmt(rm), customerMgmt(cm) {}

    void reserveRoom(int roomNumber, std::string customerName, std::string customerContact, std::string checkInDate, std::string checkOutDate) {
        auto rooms = roomMgmt.getRooms();
        for (auto& room : rooms) {
            if (room.number == roomNumber && room.status == "available") {
                room.status = "reserved";
                roomMgmt.updateRoom(room.number, room.type, room.price, room.status);
                customerMgmt.addCustomer(customerName, customerContact, roomNumber, checkInDate, checkOutDate);
                std::cout << "Room " << roomNumber << " reserved successfully for " << customerName << std::endl;
                return;
            }
        }
        std::cout << "Room " << roomNumber << " is not available for reservation." << std::endl;
    }
};

// 入住管理
class CheckIn {
private:
    RoomManagement& roomMgmt;
    CustomerManagement& customerMgmt;

public:
    CheckIn(RoomManagement& rm, CustomerManagement& cm) : roomMgmt(rm), customerMgmt(cm) {}

    void checkInCustomer(int roomNumber) {
        auto rooms = roomMgmt.getRooms();
        for (auto& room : rooms) {
            if (room.number == roomNumber && room.status == "reserved") {
                room.status = "occupied";
                roomMgmt.updateRoom(room.number, room.type, room.price, room.status);
                std::cout << "Customer checked in to room " << roomNumber << std::endl;
                return;
            }
        }
        std::cout << "Room " << roomNumber << " is not in a reserved state for check - in." << std::endl;
    }
};

// 结账管理
class CheckOut {
private:
    RoomManagement& roomMgmt;
    CustomerManagement& customerMgmt;

public:
    CheckOut(RoomManagement& rm, CustomerManagement& cm) : roomMgmt(rm), customerMgmt(cm) {}

    void checkOutCustomer(int roomNumber) {
        auto rooms = roomMgmt.getRooms();
        for (auto& room : rooms) {
            if (room.number == roomNumber && room.status == "occupied") {
                room.status = "available";
                roomMgmt.updateRoom(room.number, room.type, room.price, room.status);
                std::cout << "Customer checked out from room " << roomNumber << std::endl;
                return;
            }
        }
        std::cout << "Room " << roomNumber << " is not in an occupied state for check - out." << std::endl;
    }
};

// 统计报表
class Statistics {
private:
    RoomManagement& roomMgmt;
    CustomerManagement& customerMgmt;

public:
    Statistics(RoomManagement& rm, CustomerManagement& cm) : roomMgmt(rm), customerMgmt(cm) {}

    void printRoomUsage() {
        auto rooms = roomMgmt.getRooms();
        std::cout << "Room Usage Statistics:" << std::endl;
        int availableCount = 0, occupiedCount = 0, reservedCount = 0;
        for (const auto& room : rooms) {
            if (room.status == "available") availableCount++;
            else if (room.status == "occupied") occupiedCount++;
            else if (room.status == "reserved") reservedCount++;
        }
        std::cout << "Available Rooms: " << availableCount << std::endl;
        std::cout << "Occupied Rooms: " << occupiedCount << std::endl;
        std::cout << "Reserved Rooms: " << reservedCount << std::endl;
    }

    void printIncome() {
        auto rooms = roomMgmt.getRooms();
        auto customers = customerMgmt.getCustomers();
        double totalIncome = 0;
        for (const auto& customer : customers) {
            for (const auto& room : rooms) {
                if (customer.roomNumber == room.number) {
                    totalIncome += room.price;
                    break;
                }
            }
        }
        std::cout << "Total Income: " << totalIncome << std::endl;
    }
};

主函数

在这里插入代码片
int main() {
    RoomManagement roomMgmt;
    CustomerManagement customerMgmt;
    RoomReservation reservation(roomMgmt, customerMgmt);
    CheckIn checkIn(roomMgmt, customerMgmt);
    CheckOut checkOut(roomMgmt, customerMgmt);
    Statistics stats(roomMgmt, customerMgmt);

    // 测试客房信息管理
    roomMgmt.addRoom(101, "Single", 80.0);
    roomMgmt.addRoom(102, "Double", 120.0);

    // 测试客房预订
    reservation.reserveRoom(101, "John Doe", "123 - 456 - 7890", "2025 - 02 - 15", "2025 - 02 - 17");

    // 测试入住管理
    checkIn.checkInCustomer(101);

    // 测试结账管理
    checkOut.checkOutCustomer(101);

    // 测试统计报表
    stats.printRoomUsage();
    stats.printIncome();

    return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2298400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ORDER BY盲注攻击:原理、实现与防御(附Python多线程爆破脚本)

引言 在SQL注入攻击中&#xff0c;ORDER BY注入是一种容易被忽视但危害极大的漏洞类型。与传统的UNION或WHERE注入不同&#xff0c;ORDER BY参数通常无法直接返回查询结果&#xff0c;攻击者需要依赖**盲注&#xff08;Blind SQLi&#xff09;**技术逐字符提取数据。本文将结合…

人工智能在临床应用、药物研发以及患者护理等方面的最新研究进展|顶刊速递·25-02-12

小罗碎碎念 推文速览 第一篇文章提出 CRAFT-MD 框架评估临床大语言模型&#xff08;LLMs&#xff09;在医患互动任务中的表现&#xff0c;发现其存在局限性&#xff0c;并基于结果给出改进评估的建议。 第二篇文章全面阐述了 2019 年以来人工智能在小分子药物研发全流程&#…

【物联网】电子电路基础知识

文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…

辛格迪客户案例 | 钥准医药科技GMP文件管理(DMS)项目

01 创新药企&#xff0c;崛起于启东 在我国医药行业蓬勃发展的浪潮中&#xff0c;钥准医药科技&#xff08;启东&#xff09;有限公司&#xff08;以下简称“钥准医药”&#xff09;犹如一颗冉冉升起的新星&#xff0c;闪耀着创新与活力的光芒。成立于2015年&#xff0c;钥准医…

Day65_20250213图论part9_dijkstra(堆优化版)|Bellman_ford算法精讲

Day65_20250213图论part9_dijkstra(堆优化版)|Bellman_ford算法精讲 dijkstra(堆优化版) 题目 https://www.programmercarl.com/kamacoder/0047.%E5%8F%82%E4%BC%9Adijkstra%E5%A0%86.html 小明参加科学大会 思路 思路 朴素版的dijkstra&#xff0c;时间复杂度为O(n^2)&am…

w208基于spring boot物流管理系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

望远镜成像系统--科学评价光学镜头

望远镜是一种利用透镜或反射镜以及其他光学器件观测遥远物体的光学仪器。其原理是通过透镜的折射或反射镜的反射&#xff0c;将光线聚焦成像&#xff0c;再经过一个放大目镜进行观察。日常生活中的光学望远镜又称“天文望远镜”。1608年&#xff0c;荷兰的一位眼镜商汉斯利伯希…

产品更新 | 华望M-Design 平台的AI 建模功能即将上线

前言 在 AI 技术加速发展的背景下&#xff0c;杭州华望系统科技有限公司在⼤语⾔模型与 SysML 标准进行深度结合的基础上&#xff0c;强力推出AI建模功能。该功能⽀持⽤户通过上传⽂档或对话交互等⽅式完成需求智能增强、模型动态构建与细节补充、实时获取结构化反馈等业务。⽬…

RabbitMQ 在 Spring Boot中使用方式

文章目录 作用MQ docker 安装MQ使用RabbitMQ的整体架构及核心概念&#xff1a;RabbitMQ的整体架构及核心概念&#xff1a;消费者消息推送限制交换机与队列## 项目使用MQDirect: 直连模式Fanout: 广播模式Topic: 主题模式Headers: 头信息模式 使用DEMO地址异常问题记录 作用 Ra…

HAL库框架学习总结

概述&#xff1a;HAL库为各种外设基本都配了三套 API&#xff0c;查询&#xff0c;中断和 DMA。 一、HAL库为外设初始化提供了一套框架&#xff0c;这里以串口为例进行说明&#xff0c;调用函数 HAL_UART_Init初始化串口&#xff0c;此函数就会调用 HAL_UART_MspInit&#xff0…

深入解析系统调用接口(System Call Interface, SCI)

在操作系统的世界中&#xff0c;用户态应用程序无法直接访问内核态资源&#xff0c;而必须通过一种受控的方式进行交互。这种方式就是系统调用&#xff08;System Call&#xff09;。系统调用接口&#xff08;System Call Interface, SCI&#xff09;是用户程序与操作系统内核之…

深入理解Linux网络随笔(一):内核是如何接收网络包的(下篇)

3、接收网络数据 3.1.1硬中断处理 数据帧从网线到达网卡时候&#xff0c;首先到达网卡的接收队列&#xff0c;网卡会在初始化时分配给自己的RingBuffer中寻找可用内存位置&#xff0c;寻找成功后将数据帧DMA到网卡关联的内存里&#xff0c;DMA操作完成后&#xff0c;网卡会向…

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决?

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因&#xff1f;要怎么解决&#xff1f; 宝子们&#xff0c;是不是在玩《只狼》的时候&#xff0c;突然弹出一个提示&#xff1a;“找不到mfc140u.dll文件”&#xff1f;这可真是让人着急上火&#xff01;别慌&#xff0c;今…

SSM开发(十二) mybatis的动态SQL

目录 一、为什么需要动态SQL? Mybatis 动态 sql 是做什么的? 二、多种动态 SQL 元素 三、示例 1、model定义 2、数据库定义 3、UserMapper接口及UserMapper.xml内容定义 if标签 choose/when/otherwise 标签 foreach标签 trim 标签 四、动态SQL注意 一、为什么需…

基于LVS负载均衡练习

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势。 NAT模式&#xff0c;全称是网络地址转换模式。NAT模式下&#xff0c;负载均衡器&#xff08;Director&#xff09;会修改请求和响应的IP地址。客户端的请求先到达Director&#xff0c;Director将请…

FreeRTOS低功耗总结

前言 Cortex-M核的MCU一般支持以下三种低功耗方式&#xff1a; ● 睡眠(Sleep)模式 ● 停止(Stop)模式 ● 待机(Standby)模式 睡眠模式 进入睡眠模式有两种指令&#xff1a;WFI(等待中断)和WFE(等待事件)&#xff0c; WFI进入睡眠模式后&#xff0c;任意中断都可唤醒。 WFE进…

【IC】AI处理器核心--第二部分 用于处理 DNN 的硬件设计

第 II 部分 用于处理 DNN 的硬件设计 第 3 章 关键指标和设计目标 在过去的几年里&#xff0c;对 DNN 的高效处理进行了大量研究。因此&#xff0c;讨论在比较和评估不同设计和拟议技术的优缺点时应考虑的关键指标非常重要&#xff0c;这些指标应纳入设计考虑中。虽然效率通常…

【python】向Jira测试计划下,附件中增加html测试报告

【python】连接Jira获取token以及jira对象 # 往 jira 测试计划下面&#xff0c;上传测试结果html def put_jira_file(plain_id):# 配置连接jiraconn ConnJira()jira conn.jira_login()[2]path jira.issue(O45- plain_id)attachments_dir os.path.abspath(..) \\test_API…

STM32自学记录(九)

STM32自学记录 文章目录 STM32自学记录前言一、DMA杂记二、实验1.学习视频2.复现代码 总结 前言 DMA 一、DMA杂记 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&…

【C++】C++-教师信息管理系统(含源码+数据文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【C】C教师信息管理系统&#xff08;含源码&#x…