酒店管理系统小程序(包含源码C++实现)

ops/2024/9/20 2:06:43/ 标签: 小程序, c++, 开发语言

本文实现一个酒店管理系统小程序,涉及多个方面,包括用户接口、房间管理、预订系统、用户管理等。为了保持示例的简洁性,下面的实现将包括一个简单的控制台程序,演示基本的酒店管理功能。这将涵盖以下功能:

  1. 查看房间状态
  2. 预订房间
  3. 取消预订
  4. 查看预订信息

以下是一个基础的实现示例:

1. 主要文件和目录结构

hotel_management/
├── main.cpp
├── Hotel.h
├── Hotel.cpp
├── Room.h
├── Room.cpp
└── CMakeLists.txt

2. Room.h

#ifndef ROOM_H
#define ROOM_H#include <string>class Room {
public:Room(int number, bool isAvailable = true);int getNumber() const;bool isAvailable() const;void book();void cancel();private:int number;bool available;
};#endif // ROOM_H

3. Room.cpp

#include "Room.h"Room::Room(int number, bool isAvailable) : number(number), available(isAvailable) {}int Room::getNumber() const {return number;
}bool Room::isAvailable() const {return available;
}void Room::book() {available = false;
}void Room::cancel() {available = true;
}

4. Hotel.h

#ifndef HOTEL_H
#define HOTEL_H#include "Room.h"
#include <vector>class Hotel {
public:Hotel(int numRooms);void showAvailableRooms() const;bool bookRoom(int roomNumber);bool cancelBooking(int roomNumber);void showBookings() const;private:std::vector<Room> rooms;
};#endif // HOTEL_H

5. Hotel.cpp

#include "Hotel.h"
#include <iostream>Hotel::Hotel(int numRooms) {for (int i = 1; i <= numRooms; ++i) {rooms.emplace_back(i);}
}void Hotel::showAvailableRooms() const {std::cout << "Available Rooms:\n";for (const auto &room : rooms) {if (room.isAvailable()) {std::cout << "Room " << room.getNumber() << "\n";}}
}bool Hotel::bookRoom(int roomNumber) {for (auto &room : rooms) {if (room.getNumber() == roomNumber && room.isAvailable()) {room.book();return true;}}return false;
}bool Hotel::cancelBooking(int roomNumber) {for (auto &room : rooms) {if (room.getNumber() == roomNumber && !room.isAvailable()) {room.cancel();return true;}}return false;
}void Hotel::showBookings() const {std::cout << "Booked Rooms:\n";for (const auto &room : rooms) {if (!room.isAvailable()) {std::cout << "Room " << room.getNumber() << "\n";}}
}

6. main.cpp

#include <iostream>
#include "Hotel.h"void showMenu() {std::cout << "Hotel Management System\n";std::cout << "1. View Available Rooms\n";std::cout << "2. Book a Room\n";std::cout << "3. Cancel Booking\n";std::cout << "4. View Bookings\n";std::cout << "5. Exit\n";std::cout << "Choose an option: ";
}int main() {Hotel hotel(10); // Initialize hotel with 10 roomsint choice;int roomNumber;while (true) {showMenu();std::cin >> choice;switch (choice) {case 1:hotel.showAvailableRooms();break;case 2:std::cout << "Enter room number to book: ";std::cin >> roomNumber;if (hotel.bookRoom(roomNumber)) {std::cout << "Room " << roomNumber << " booked successfully.\n";} else {std::cout << "Failed to book room " << roomNumber << ".\n";}break;case 3:std::cout << "Enter room number to cancel: ";std::cin >> roomNumber;if (hotel.cancelBooking(roomNumber)) {std::cout << "Booking for room " << roomNumber << " canceled successfully.\n";} else {std::cout << "Failed to cancel booking for room " << roomNumber << ".\n";}break;case 4:hotel.showBookings();break;case 5:return 0;default:std::cout << "Invalid option. Please try again.\n";}}return 0;
}

7. CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(HotelManagement)set(CMAKE_CXX_STANDARD 11)add_executable(HotelManagement main.cpp Hotel.cpp Room.cpp)

编译和运行

  1. 创建构建目录:

    mkdir build
    cd build
    
  2. 生成构建文件:

    cmake ..
    
  3. 编译项目:

    make
    
  4. 运行程序:

    ./HotelManagement
    

说明

  • Room 类: 表示酒店房间,包含房间号和是否可用的状态。
  • Hotel 类: 管理一组房间,提供查看可用房间、预订房间、取消预订和查看预订信息的功能。
  • main.cpp: 提供了一个简单的用户界面,允许用户选择不同的操作并与 Hotel 类交互。

这个示例是一个简化的酒店管理系统,适合用作学习和基础参考。如果需要更复杂的功能,如用户身份管理、详细的预订信息管理等,可以在此基础上扩展。


http://www.ppmy.cn/ops/105844.html

相关文章

设置Virtualbox虚拟机共享文件夹

由于工作环境的原因&#xff0c;选择Virtualbox的方式安装虚拟操作系统&#xff0c;常用的操作系统为ubuntu&#xff0c;不知道道友是否也曾遇到这样的问题&#xff0c;就是虚拟机和主机进行文件拖拽的时候&#xff0c;会因为手抖造成拖拽失败&#xff0c;虚拟机界面显示大个的…

JAVAEE初阶第一节——计算机的工作原理

系列文章目录 JAVAEE初阶第一节——计算机的工作原理 计算机的工作原理 计算机发展史冯诺依曼体系&#xff08;Von Neumann Architecture&#xff09;CPU操作系统&#xff08;Operating System&#xff09; 文章目录 系列文章目录JAVAEE初阶第一节——计算机的工作原理 计算机…

在.gitignore文件中重新添加或修改了忽略文件未生效的原因

因为git在初始化时就已经对忽略文件进行了不追踪&#xff0c;其它文件都会追踪&#xff0c;重新添加忽略文件后&#xff0c;实际上是没有进行更改追踪记录的&#xff0c;所以需要重新初始化。 git rm -r --cached .git add .git commit -m "Update .gitignore"

秋招突击——算法练习——8/30、9/4——技巧题练习——复习{}——新作{只出现一次的数字、多数元素、颜色分类、下一个排列、寻找重复数}

文章目录 引言复习新作136、只出现一次的数字个人实现 169、多数元素个人实现 75、颜色分类个人实现参考实现 31、下一个排列个人实现参考实现 287寻找重复数个人实现参考实现 总结 引言 手撕的代码大部分都是出自于这里&#xff0c;还是要继续加强&#xff0c;把剩下一些零碎…

Qt是不是经常写个QWidget输入参数?

发现Qt自带的一个输入控件QInputDialog类 QInputDialog类提供了一个简单方便的对话框&#xff0c;用于从用户获取单个值。 输入值可以是字符串、数字或列表中的项。必须设置一个标签来告诉用户他们应该输入什么。 提供了五个静态方便函数:getText()、getMultiLineText()、getI…

Java Lock 中使用 await() 和 signal()实现 wait()/notify()机制

** Java Lock 中使用 await() 和 signal()实现 wait()/notify()机制 ** 案例 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class MyService {private Lock lock new R…

5.8幂律变换

目录 示例代码1 运行结果1 示例代码2 运行结果2 补充示例原理 示例&#xff1a;使用cv::pow进行图像处理 代码 运行结果 ​编辑 补充 实验代码3 运行结果3​编辑 在OpenCV中&#xff0c;幂律变换&#xff08;Power Law Transformations&#xff09;是一种常用的图像…

一起学习LeetCode热题100道(63/100)

63.搜索插入位置(学习) 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5…

Android 事件分发:为什么有时候会出现事件冲突?事件的顺序是如何的?出现事件冲突如何解决呢?比如为什么左右可以滑动,而上下却不行?

目录&#xff1a; 一、为什么要学习事件呢&#xff1f; 1.在开发复杂的应用时&#xff0c;经常需要处理复杂的用户交互逻辑。学习事件分发机制可以帮助你更好地控制事件的传递和处理流程&#xff0c;从而解决一些复杂的交互问题&#xff0c;如滑动冲突、点击穿透等。 2.面试需…

【ACM独立出版 | 厦大主办】第五届计算机科学与管理科技国际学术会议(ICCSMT 2024,10月18-20)

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024) 定于2024年10月18-20日在中国厦门举行。 会议旨在为从事“计算机科学”与“管理科技”研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓宽研究思路…

【LeetCode】两数之和

题目&#xff1a; 在数组中找到 2 个数之和等于给定值的数字&#xff0c;结果返回 2 个数字在数组中的下标。要求时间复杂度为 O(n)。 解题分析&#xff1a; 作者&#xff1a;halfrost 链接&#xff1a;https://leetcode.cn/leetbook/read/leetcode-cookbook/5lu4og/ 顺序扫描…

黑马头条docker启动minio访问不了,端口一直变化

原先代码为 docker run -p 9000:9000 --name minio -d --restartalways -e "MINIO_ROOT_USERminio" -e "MINIO_ROOT_PASSWORDminio123" -v /home/data:/data -v /home/config:/root/.minio minio/minio server /data 访问结果为&#xff0c;且9000会变为3…

Django+vue自动化测试平台(29)--测试平台集成playwright录制pytest文件执行

需求背景 一、 系统目标与功能概述 脚本管理: 系统需要能够组织和存储所有通过playwright官方插件录制的脚本。这包括脚本的上传、编辑、删除和版本控制功能。 脚本执行: 用户应该能够在后台界面上查看所有可用的脚本&#xff0c;并能够通过简单的点击操作来启动特定脚本的执…

pytest压力测试:不断发送数据,直到发现数据丢失

示例场景 假设有一个 send_data 函数接受数据并返回成功或失败的状态。 创建一个测试用例&#xff0c;通过逐步增加数据量来测试这个函数&#xff0c;直到返回失败为止。 步骤 定义压力测试函数 定义一个函数。不断发送数据&#xff0c;直到发现数据丢失。 创建 pytest 测试…

C#如何查看/写入日志到Windows事件查看器

Windows事件日志 Windows 操作系统将与计算机的系统性能、应用程序和安全方面相关的每个事件记录在 C:\WINDOWS\system32\winevt 的日志中。 事件查看器从这些原始事件日志中读取信息&#xff0c;然后以可读格式呈现信息。 打开Windows事件查看器的方法是 1、运行输入event…

Java字节码文件、组成、详解、分析;jclasslib插件、阿里arthas工具;Java注解

文章目录 一、字节码文件1.1 以正确的方式打开文件1.2 字节码文件的组成1.2.1 基础信息1.2.2 常量池1.2.3 方法 1.3 字节码常用工具1.4 总结 二、Java注解2.1 什么是Java注解2.2 注释和注解Annotation的区别&#xff08;掌握&#xff09;2.3 如何使用注解&#xff08;掌握&…

嵌入式硬件-ARM处理器架构,CPU,SOC片上系统处理器

多进程空间内部分布图&#xff1a;注意&#xff1a;创建线程实际使用堆区空间&#xff0c;栈区独立 ARM处理器架构&#xff1a; 基于ARM920T架构的CPU:以下为哈佛结构 ALU:算数运算器 R0~R12&#xff1a;寄存器 PC:程序计数器&#xff0c;默认为0&#xff0c;做自加运算&#x…

使用Java实现LRU缓存和LFU缓存

LRU缓存 问题描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&…

【Kotlin设计模式】Kotlin实现外观模式

前言 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层接口&#xff0c;使得这一子系统更加容易使用。它将复杂的子系统封装在一个简单的接口后面&#xff0c;从而降低了客…

互联网全景消息(1)之RabbitMq基础入门

一、消息中间件 1.1消息队列回顾 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实 现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ &a…