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

酒店客房管理系统 要求:
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.mzph.cn/bicheng/71077.shtml

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

相关文章

电动汽车电池监测平台系统设计(论文+源码+图纸)

1总体设计 本次基于单片机的电池监测平台系统设计&#xff0c;其整个系统架构如图2.1所示&#xff0c;其采用STC89C52单片机作为控制器&#xff0c;结合ACS712电流传感器、TLC1543模数转换器、LCD液晶、DS18B20温度传感器构成整个系统&#xff0c;在功能上可以实现电压、电流、…

2025年02月11日Github流行趋势

项目名称&#xff1a;unsloth 项目地址url&#xff1a;https://github.com/unslothai/unsloth项目语言&#xff1a;Python历史star数&#xff1a;27175今日star数&#xff1a;1024项目维护者&#xff1a;danielhanchen, shimmyshimmer, Erland366, Datta0, xyangk项目简介&…

[qt5学习笔记]用vs2022(msvc2017)+copilot进行QtWidgetsApplication源码解析

一直没深入了解qt&#xff0c;又一段时间没写qt&#xff0c;重新捡起来。 开发环境 本地vs2022(msvc2017, v14.30)先升级到最新版本&#xff0c;方便使用copilot。 参考 VS2022QT5环境搭建 下载 qt5.14.2 用vs的qt插件设置qt5.14.2x86路径&#xff0c;x64版本未安装。 创建一…

家里装修想用投影仪,如何选择?装修中应该注意什么?

越来越多的业主在装修的时候抛弃了传统的电视&#xff0c;采用投影仪。 和这些业主聊天&#xff0c;选用投影仪有两个目的&#xff0c;第1是把电视机拿掉&#xff0c;这样能让家里的小朋友不看电视&#xff0c;保护小朋友的眼睛。 第2是选用投影仪&#xff0c;幕布都会装的比较…

javaEE初阶————多线程初阶(4)

8.1 单例模式 这又是什么新的神奇玩意呢&#xff0c;我们先不谈单例模式&#xff0c;先来谈谈设计模式&#xff0c;什么是设计模式呢&#xff0c;我们只需要用设计模式就好了&#xff0c;而大佬们考虑的就多了&#xff0c;这些设计模式就像棋谱&#xff0c;只要按照棋谱来下&am…

能源物联网数据采集网关 多协议对接解决方案

安科瑞刘鸿鹏 摘要 随着配电系统智能化需求的提升&#xff0c;现代配电物联网&#xff08;IoT&#xff09;系统对数据采集、传输、处理及远程管理能力提出了更高要求。智能网关作为连接现场设备与上层管理平台的核心枢纽&#xff0c;其性能直接影响系统的实时性、可靠性与扩展…

Node.js 中的 Event 模块详解

Node.js 中的 Event 模块是实现事件驱动编程的核心模块。它基于观察者模式&#xff0c;允许对象&#xff08;称为“事件发射器”&#xff09;发布事件&#xff0c;而其他对象&#xff08;称为“事件监听器”&#xff09;可以订阅并响应这些事件。这种模式非常适合处理异步操作和…

Unity开发抖音小游戏播放视频

Unity开发抖音小游戏播放视频 介绍抖音小程序ios端视频无法播放RenderTexture问题总结 介绍 最近在做抖音小游戏播放视频&#xff0c;这里我使用的是Unity原生的VideoPlayer组件来播放视频&#xff0c;这里总结了一下我相关的报错以及能够正常播放视频的代码。如果还不知道怎么…

网络安全抑制 缓解 根除 恢复 网络安全如何解决

一、网络安全 网络是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 二、如何防范网络安全问题 1、防范网络病毒。 2、配置防火墙。 3、采…

自有证书的rancher集群使用rke部署k8s集群异常

rancher使用自签域名&#xff0c;或者商业证书容易踩到的坑。 最开始的报错&#xff1a; docker logs kubelet‘s id E0214 13:04:14.590268 9614 pod_workers.go:1300] "Error syncing pod, skipping" err"failed to \"StartContainer\" for …

开源的轻量级分布式文件系统FastDFS

FastDFS 是一个开源的轻量级分布式文件系统&#xff0c;专为高性能的分布式文件存储设计&#xff0c;主要用于解决海量文件的存储、同步和访问问题。它特别适合以中小文件&#xff08;如图片、视频等&#xff09;为载体的在线服务&#xff0c;例如相册网站、视频网站等。 FastD…

Github 2025-02-12 C开源项目日报 Top7

根据Github Trendings的统计,今日(2025-02-12统计)共有7个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目7Python项目2OpenSSL - 强大的开源加密工具包 创建周期:4012 天开发语言:C协议类型:Apache License 2.0Star数量:23449 个Fork数量:10…

深入浅出:Python 中的异步编程与协程

引言 大家好&#xff0c;今天我们来聊聊 异步编程 和 协程&#xff0c;这是近年来编程语言领域中的热点话题之一&#xff0c;尤其在 Python 中&#xff0c;它作为一种全新的编程模型&#xff0c;已经成为处理 IO密集型 任务的强力工具。尽管很多人对异步编程望而却步&#xff0…

高级 Conda 使用:环境导出、共享与优化

1. 引言 在 Conda 的基础包管理功能中&#xff0c;我们了解了如何安装、更新和卸载包。但对于开发者来说&#xff0c;如何更好地管理环境、导出环境配置、共享环境&#xff0c;以及如何优化 Conda 的使用效率&#xff0c;才是提高工作效率的关键。本篇博客将进一步深入 Conda …

三十一、micro-app踩坑

版本:0.8.6 1.子应用单独运行正常,基座加载子应用后接口404 原因:子应用请求的接口为相对地址,会以基座域名进行补全,导致报错。 解决方法:

MATLAB中isfield函数用法

目录 语法 说明 示例 确定输入名称是否为字段名称 isfield函数的功能是确定输入是否为结构体数组字段。 语法 TF isfield(S,field) 说明 如果 field 是结构体数组 S 的一个字段的名称&#xff0c;则 TF isfield(S,field) 返回 1。否则&#xff0c;将返回 0。 如果 fie…

在Autonomous DB中创建训练数据集

在Autonomous DB中创建训练数据集 概述背景步骤解析1. 定义公司术语表2. 使用SQL将数据转换为JSON格式3. 使用SPool命令将SQL查询结果输出为JSON文件4. 查看生成的JSON文件 结果示例结论 概述 在机器学习中&#xff0c;构建高质量的训练数据集是模型成功的关键&#xff0c;尤其…

ASP.NET Core 使用 FileStream 将 FileResult 文件发送到浏览器后删除该文件

FileStream 在向浏览器发送文件时节省了服务器内存和资源&#xff0c;但如果需要删除文件怎么办&#xff1f;本文介绍如何在发送文件后删除文件&#xff1b;用 C# 编写。 另请参阅&#xff1a;位图创建和下载 使用FileStream向浏览器发送数据效率更高&#xff0c;因为文件是从…

深入理解 Qt 信号与槽机制:原理、用法与优势

一、信号与槽的概念 在 Qt 编程中&#xff0c;信号与槽机制是实现对象间通信的核心工具。 信号&#xff1a;本质上是一种特殊的成员函数声明&#xff0c;它不包含函数体&#xff0c;仅用于通知其他对象某一事件的发生。例如&#xff0c;当用户点击界面上的按钮时&#xff0c;…

蓝桥杯(B组)-每日一题

题目&#xff1a; 思路&#xff1a; 首先将所有牛分类 1.a第一头母牛-每年年初生一头小母牛 2.不能生小牛的牛&#xff1a; b1-一岁小母牛 b2-二岁小母牛 b3-三岁小母牛 超过4岁就会再生一头小牛 因此计算每年生的小牛是第一头生的a再加上4岁后的生的 代码实现&#xff1…