当前位置: 首页 > news >正文

【C++】C++ 旅馆管理系统(含 源码+报告)【独一无二】

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


系列文章目录


目录

  • 系列文章目录
  • 一、设计要求
  • 二、设计思路
    • 1. 日期类 Data
    • 2. 房间类 Room
    • 3. 客人类 Guest
    • 4. 管理类 Manage
      • (1) 数据读写操作
      • (2) 房间管理与客房入住/退房
      • (3) 信息显示与查询
      • (4) 文件写入辅助函数
    • 5. 主函数与菜单交互
    • 总结
  • 三、可视化分析


一、设计要求

某旅馆有n个等级的房间,第I等级有a个房间,每个等级的房间有b个床位(1<i<n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。
旅客登记,即为旅客分配床位。输入旅客姓名、年龄、性别、到达日期和所需房间等级。分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床。位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束;
旅客离开时,即进行床位回收。输入房间等级、房间号和床位号。

(1)使用面向对象编程思想编写开发过程中需要用到的类,比如:至少包含四个类:日
期类,客房类,主要包含客房信息(房号类型,是否有客人等)及相关操作;客人类,主要完 成客户信息(身份证,入住时间,姓名,性别等)的相关操作;管理类实现对客房的管理。
(2)输入和输出可以使用文本文件重定向输入(保存数据为磁盘文件);也可以使用标
准输入输出进行(提交时需要提交TXT格式输入数据)。比如:room.txt 的文件,文件中应包含 20 条以上记录(房间的初始状态),guest.txt 的文本文件,包含 10 条以上客人记录。 在运行程序时自动载入。
(3)基本功能要求具有增、删、改、查。
主要功能包括:房间信息的录入,客人入住房间等级、顾客退房结账,所有房间信息显示、顾客信息显示、查询所有空房间、查询指定的房间号,退出系统。

在这里插入图片描述


二、设计思路

在这里插入图片描述
下面给出本代码的设计思路说明,程序实现了一个简单的宾馆房间管理系统,主要模块包括:

  1. 日期类(Data)
  2. 房间类(Room)
  3. 客人类(Guest)
  4. 管理类(Manage)及其各种操作函数
  5. 主函数与菜单交互

1. 日期类 Data

设计思路:

  • 用于记录交易(入住、退房等)的时间信息(年、月、日)。
  • 提供设置日期和获取各个属性值的成员函数。

关键代码:

class Data  // 日期类,记录交易时间
{
public:Data() {}     // 缺省构造函数~Data() {}    // 析构函数// 接收输入的日期// 此处略去至少20行代码private:int year;int month;int day;
};

2. 房间类 Room

设计思路:

  • 用于表示宾馆中的房间信息。
  • 数据成员包括:房号(Number)、房间类型(Type)、房间状态(Whether,用于标记是否有客人入住,状态值为“有”或“无”)及价格(Price)。
  • 提供基本信息输入函数、状态设置、以及显示房间信息的show()函数。

关键代码:

class Room
{
public:Room* r[Max]; // 房间对象指针数组(在管理类中会用到)int Room_count;  // 记录房间数量// 构造函数Room(int Number, string Type, double Price, string Whether) {this->Number = Number;this->Type = Type;this->Whether = Whether;this->Price = Price;}// 获取房间各项属性int InputNumber() { return Number; }string InputType() { return Type; }string InputWhether() { return Whether; }// 此处略去至少20行代码
protected:int Number;      // 房号 string Type;     // 房间类型 string Whether;  // 是否有客人 double Price;    // 价格 
};

在这里插入图片描述

3. 客人类 Guest

设计思路:

  • 用于存储入住客户的详细信息。
  • 数据成员包括:
    • 房号(number,对应入住房间号)
    • 顾客姓名(Name)
    • 身份证号(Id)
    • 性别(sex)
    • 入住时间(Intime)
    • 入住天数(days)
  • 提供各属性的获取函数和显示函数show()用于输出客人信息。

关键代码:

class Guest
{
public:Guest* g[Max];  // 客人对象指针数组(由管理类使用)int Guest_count; // 记录客人数量// 构造函数Guest(int number, string Name, int Id, string sex, string Intime, int days) {this->number = number;this->Name = Name;this->Id = Id;this->sex = sex;this->Intime = Intime;this->days = days;}// 获取客人各项属性// 此处略去至少20行代码
protected:int number;    // 房号 string Name;   // 顾客姓名 int Id;        // 身份证号 string sex;    // 性别 string Intime; // 入住时间 int days;      // 入住天数
};

4. 管理类 Manage

设计思路:
管理类负责宾馆系统的所有操作,包括房间信息的录入、客人入住登记(Check_In)、退房结账(Check_Out)、信息显示、查询以及文件读写。
主要模块功能如下:

(1) 数据读写操作

  • ReadData(): 从文件(“room.txt”、“guest.txt”)读取房间及客人数据,并更新相应数组与数量计数器。
  • WriteData(int n): 根据参数n将房间信息(n1)或客人信息(n2)写入文件。
  • WriteRoom()和WriteGuest(): 分别实现单个房间和单个客人信息的写入(追加模式)。

关键代码摘录:

void Manage::ReadData()
{fstream Rin, Gin;Rin.open("room.txt", ios::in);if (!Rin) {cout << "未找到room文件,请先建立文件!" << endl;return;}// 此处略去至少20行代码Gin.open("guest.txt", ios::in);if (!Gin) {cout << "未找到guest文件,请先建立文件!" << endl;return;}Guest_count = 0;while (!Gin.eof()) {string name, intime, sex;int days, number;int id;Gin >> number >> name >> id >> sex >> intime >> days;g[Guest_count++] = new Guest(number, name, id, sex, intime, days);}Gin.close();
}void Manage::WriteData(int n)
{switch (n) {case 1: {ofstream Rout("room.txt", ios::trunc);for (i = 0; i < Room_count - 1; i++) {if (r[i] != NULL) {WriteRoom(r[i]);}}Rout.close();break;}// 此处略去至少20行代码Gout.close();break;}}
}

在这里插入图片描述

(2) 房间管理与客房入住/退房

  • IncreaseRoom(): 添加房间信息,读取用户输入后调用WriteRoom()将新房间信息写入文件。
  • Check_In(): 进行客人入住登记,读取房间文件、显示空房信息(调用SearchType()),接收客人信息,更新房间状态为“有”,并将客人信息写入文件。
  • Check_Out(): 客人退房结账,调用Payment()获取客人在数组中的下标,查找对应房间,更改状态为“无”,计算消费金额(房价×入住天数),并更新数据。

关键代码摘录:

void Manage::IncreaseRoom()
{string type, Whether;double price;int number;cout << "请输入房号: ";    cin >> number;cout << "请输入房间类型: ";    cin >> type;cout << "请输入价格: ";    cin >> price;cout << "请输入房间状态: ";    cin >> Whether;WriteRoom(new Room(number, type, price, Whether));
}void Manage::Check_In()
{ReadData();SearchType();  // 显示空房信息供用户选择string name, intime, sex;int days, number;int id;cout << "请输入房号: ";    cin >> number;cout << "请输入顾客的姓名: "; cin >> name;cout << "请输入顾客的身份证号: ";    cin >> id;cout << "请输入顾客的性别: "; cin >> sex;cout << "请输入入住日期: ";    cin >> intime;cout << "请输入入住天数: "; cin >> days;// 此处略去至少20行代码}
}void Manage::Check_Out()
{int x = Payment();// 此处略去至少20行代码g[x] = NULL;WriteData(2);
}

(3) 信息显示与查询

  • Display(int n): 根据参数n显示所有房间(n1)或顾客信息(n2)。
  • SearchMenu()、SearchType()、SearchNumber():
    • SearchMenu()显示查询主菜单,选择查询方式。
    • SearchType()遍历所有房间,显示状态为“无”的空房间信息。
    • SearchNumber()根据输入的房间号查询房间和对应客户信息。

关键代码摘录:

void Manage::Display(int n)
{ReadData();switch (n) {case 1:for (i = 0; i < Room_count - 1; i++) {cout << "房号:" << r[i]->InputNumber() << "\t房间类型: " << r[i]->InputType() << "\t房间价格: " << r[i]->InputPrice() << "\t房间状态: " << r[i]->InputWhether() << endl << endl;}break;case 2:for (i = 0; i < Guest_count - 1; i++) {cout << "房间号: " << g[i]->InputNumber() << "\t顾客姓名: " << g[i]->InputName() << "\t身份证号: " << g[i]->InputId() << "\t顾客性别:" << g[i]->InputSex() << "\t入住时间: " << g[i]->InputIntime() << "\t入住天数: " << g[i]->InputDays() << endl << endl;}break;}
}// 此处略去至少20行代码}
}

在这里插入图片描述

(4) 文件写入辅助函数

  • WriteRoom(Room r) 与 WriteGuest(Guest g):** 将单个房间或客人信息追加写入对应的文件(room.txt 或 guest.txt)。

关键代码:

void Manage::WriteRoom(Room* r)
{ofstream Rout("room.txt", ios::app);Rout << r->InputNumber() << "\t" << r->InputType() << "\t" << r->InputPrice() << "\t" << r->InputWhether() << endl;Rout.close();
}void Manage::WriteGuest(Guest* g)
{ofstream Gout("guest.txt", ios::app);Gout << g->InputNumber() << "\t" << g->InputName() << "\t" << g->InputId() << "\t" << g->InputSex() << "\t" << g->InputIntime() << "\t" << g->InputDays() << endl;Gout.close();
}

5. 主函数与菜单交互

设计思路:

  • 在主函数中,通过循环显示菜单选项(清屏、菜单项选择),并根据用户输入调用管理类中的对应功能。
  • 各功能完成后调用 _getch() 暂停界面,等待用户按键后继续循环,直到选择退出。

关键代码:

int main()
{Manage M;int n;while (1){system("cls");cout << endl << endl << endl << "\t\t\t宾 馆 房 间 管 理 系 统     " << endl << endl;cout << "\t\t\t1、房 间 信 息 的 录 入" << endl << endl;cout << "\t\t\t2、顾 客 入 住 房 间 登 记" << endl << endl;cout << "\t\t\t3、顾 客 退 房 结 账" << endl << endl;cout << "\t\t\t4、所 有 房 间 信 息 显 示" << endl << endl;cout << "\t\t\t5、所 有 顾 客 的 显 示" << endl << endl;cout << "\t\t\t6、查 询 所 有 空 房 间" << endl << endl;cout << "\t\t\t7、查 询 指 定 的 房 间 号" << endl << endl;cout << "\t\t\t8、退 出 系 统" << endl << endl;cout << endl << "请选择:  ";cin >> n;cout << endl << endl;switch (n){case 1: M.IncreaseRoom(); _getch(); break;case 2: M.Check_In(); _getch(); break;case 3: M.Check_Out(); _getch(); break;case 4: M.Display(1); _getch(); break;case 5: M.Display(2); _getch(); break;case 6: M.SearchType(); _getch(); break;case 7: M.SearchNumber(); _getch(); break;case 8: exit(0);}}return 0;
}

在这里插入图片描述

总结

整个系统采用面向对象设计,通过以下模块实现宾馆房间管理:

  • Data 类: 记录交易日期信息(虽未在主要流程中使用,可用于扩展记录交易时间)。
  • Room 类: 表示房间信息,包含房号、类型、状态、价格以及显示函数。
  • Guest 类: 存储客户入住信息,支持属性获取和显示。
  • Manage 类: 核心管理模块,负责房间信息录入、入住登记、退房结账、信息显示、数据文件的读写和查询功能。
  • 主函数: 提供菜单界面,通过循环与用户交互,实现各项管理功能。

三、可视化分析

1.打印功能信息
在这里插入图片描述

2.房间信息录入
在这里插入图片描述
3.顾客入住房间登记
在这里插入图片描述
4.顾客退房结账
在这里插入图片描述

5.所有房间信息显示
在这里插入图片描述
6.所有顾客信息显示
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


相关文章:

【C++】C++ 旅馆管理系统(含 源码+报告)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 系列文章目录 目录 系列文章目录一、设计要求二、设…...

快速排序

目录 什么是快速排序&#xff1a; 图解&#xff1a; 递归法&#xff1a; 方法一&#xff08;Hoare法&#xff09;&#xff1a; 代码实现&#xff1a; 思路分析&#xff1a; 方法二&#xff08;挖坑法&#xff09;&#xff1a; 代码实现&#xff1a; 思路分析&#xff1a; 非递…...

国内 ChatGPT Plus/Pro 订阅教程

1. 登录 chat.openai.com 依次点击 Login &#xff0c;输入邮箱和密码 2. 点击升级 Upgrade 登录自己的 OpenAI 帐户后&#xff0c;点击左下角的 Upgrade to Plus&#xff0c;在弹窗中选择 Upgrade plan。 如果升级入口无法点击&#xff0c;那就访问这个网址&#xff0c;htt…...

易仓科技ai面试

请解释PHP中的面向对象编程的基本概念&#xff0c;并举例说明如何在PHP中定义一个类。 回答思路&#xff1a;需理解类、对象、继承和多态等基本概念&#xff0c;并能通过实例代码展示如何定义类及其属性和方法。 . 类&#xff08;Class&#xff09; 类是一个封装了数据和操作…...

LabVIEW用户界面(UI)和用户体验(UX)设计

作为一名 LabVIEW 开发者&#xff0c;满足功能需求、保障使用便捷与灵活只是基础要求。在如今这个用户体验至上的时代&#xff0c;为 LabVIEW 应用程序设计直观且具有美学感的界面&#xff0c;同样是不容忽视的关键任务。一个优秀的界面设计&#xff0c;不仅能提升用户对程序的…...

字玩FontPlayer开发笔记14 Vue3实现多边形工具

目录 字玩FontPlayer开发笔记14 Vue3实现多边形工具笔记整体流程临时变量多边形组件数据结构初始化多边形工具mousedown事件mousemove事件监听mouseup事件渲染控件将多边形转换为平滑的钢笔路径 字玩FontPlayer开发笔记14 Vue3实现多边形工具 字玩FontPlayer是笔者开源的一款字…...

低代码与 Vue.js:技术选型与架构设计

在当下数字化转型的浪潮中&#xff0c;企业对应用开发的效率和质量有着极高的追求。低代码开发平台的兴起&#xff0c;为企业提供了一条快速构建应用的捷径&#xff0c;而 Vue.js 作为热门的前端框架&#xff0c;与低代码开发平台的结合备受关注。如何做好两者的技术选型与架构…...

比较循环与迭代器的性能:Rust 零成本抽象的威力

一、引言 在早期的 I/O 项目中&#xff0c;我们通过对 String 切片的索引和 clone 操作来构造配置结构体&#xff0c;这种方法虽然能确保数据所有权的正确传递&#xff0c;但既显得冗长&#xff0c;又引入了不必要的内存分配。随着对 Rust 迭代器特性的深入了解&#xff0c;我…...

一文了解zookeeper

1.ZooKeeper是什么 简单来说&#xff0c;她是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务 具体来说&#xff0c;他可以做如下事情&#xff1a; 分布式配置管理&#xff1a;ZooKeeper可以存储配置信息&#xff0c;应用程序可以动态读取配置信息。分布式同步&a…...

算法题(67):最长连续序列

审题&#xff1a; 需要我们在O&#xff08;n&#xff09;的时间复杂度下找到最长的连续序列长度 思路&#xff1a; 我们可以用两层for循环&#xff1a; 第一层是依次对每个数据遍历&#xff0c;让他们当序列的首元素。 第二层是访问除了该元素的其他元素 但是此时时间复杂度来到…...

大中型企业专用数据安全系统 | 天锐蓝盾终端安全 数据安全

天锐蓝盾系列产品是专门为大中型企业量身定制的数据安全防护产品体系&#xff0c;涵盖天锐蓝盾DLP、天锐蓝盾终端安全管理系统、天锐蓝盾NAC以及其他搭配产品&#xff0c;致力于实现卓越的数据安全防护、施行严格的网络准入控制以及构建稳固的终端安全管理体系。通过全方位的防…...

Deepseek解读 | UE像素流送与实时云渲染技术的差别

为了实现UE引擎开发的3D/XR程序推流&#xff0c;绝大多数开发者会研究像素流送&#xff08;Pixel Streaming&#xff09;的使用方法&#xff0c;并尝试将插件集成在程序中。对于短时、少并发、演示场景而言&#xff0c;像素流送可以满足基本需求。当3D/XR项目进入落地交付周期后…...

CTFSHOW-WEB入门-PHP特性109-115

题目&#xff1a;web 109 1. 题目&#xff1a; 2. 解题思路&#xff1a;题目要求获得两个参数&#xff0c;v1 v2&#xff0c;if语句中的意思是要求两个参数都包含字母&#xff0c;条件满足的话&#xff0c;执行 echo new 类名&#xff08;方法&#xff08;&#xff09;&#xf…...

模糊综合评价法:原理、步骤与MATLAB实现

引言 在复杂决策场景中&#xff0c;评价对象往往涉及多个相互关联的模糊因素。模糊综合评价法通过建立模糊关系矩阵&#xff0c;结合权重分配与合成算子&#xff0c;实现对多因素系统的科学评价。本文详细讲解模糊综合评价法的数学原理、操作步骤&#xff0c;并辅以MATLAB代码…...

【数据结构-红黑树】

文章目录 红黑树红黑树介绍红黑树的五个基本性质红黑树的平衡原理红黑树的操作红黑树的操作 代码实现节点实现插入和查询操作 红黑树 红黑树介绍 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉查找树&#xff08;Binary Search Tree, BST&#xff09;&…...

【STM32】舵机SG90

1.舵机原理 舵机内部有一个电位器&#xff0c;当转轴随电机旋转&#xff0c;电位器的电压会发生改变&#xff0c;电压会带动转一定的角度&#xff0c;舵机中的控制板就会电位器输出的电压所代表的角度&#xff0c;与输入的PWM所代表的角度进行比较&#xff0c;从而得出一个旋转…...

【Linux】Socket编程—TCP

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…...

c++11 for auto不定参数

数量不定的模板参数。参数分为一个和一包两部分。 ​ 冒号的左边声明一个变量。右手边必须是一个容器。从容器(某种数据结构)中找出每一个元素设置到左边这个变量。11之前可以用容器的迭代器去取数据。或者标准库里的foreach...

C#+redis实现消息队列的发布订阅功能

代码 参考c#redis stream实现消息队列以及ack机制文章的思路&#xff0c;实现 SubscribeAttribute.cs using System;namespace DotnetQueue.Attributes {/// <summary>/// 订阅特性/// </summary>[AttributeUsage(AttributeTargets.Method, Inherited false)]pu…...

Docker容器基本操作

容器的基本操作 操作命令&#xff08;全&#xff09;命令&#xff08;简&#xff09;容器的创建docker container run <image name>docker run <image name>容器的列出&#xff08;up&#xff09;docker container lsdocker ps容器的列出&#xff08;up和exit&…...

ThinkPad风扇控制终极指南:TPFanCtrl2让你的笔记本电脑散热更智能

ThinkPad风扇控制终极指南&#xff1a;TPFanCtrl2让你的笔记本电脑散热更智能 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 作为ThinkPad用户&#xff0c;你是否曾经…...

React Native跨平台语音AI助手开发:OpenClaw Voice架构与实战

1. 项目概述&#xff1a;OpenClaw Voice&#xff0c;一个为移动端优化的语音优先AI助手客户端如果你和我一样&#xff0c;经常在移动场景下需要与AI助手进行快速交互&#xff0c;比如在通勤路上、散步时&#xff0c;或者双手被占用时&#xff0c;那么你肯定对在手机上打字输入感…...

llmware实战:基于RAG构建企业私有知识库问答系统

1. 项目概述&#xff1a;当大模型需要“记忆”与“思考”如果你正在尝试将大型语言模型&#xff08;LLM&#xff09;集成到你的业务或项目中&#xff0c;大概率会遇到一个核心瓶颈&#xff1a;模型本身并不知道你的私有数据。无论是内部的技术文档、客服对话记录&#xff0c;还…...

微服务架构实战:从单体到独立WebChat Channel的容器化部署

1. 项目概述&#xff1a;从单体到微服务的WebChat Channel实战最近在重构一个基于CoPaw的智能体项目&#xff0c;核心需求是为其增加一个独立的网页聊天通道&#xff08;WebChat Channel&#xff09;。原有的CoPaw服务是一个功能强大的单体后端&#xff0c;但直接在其上集成Web…...

如何用C语言解密网易云NCM音乐文件:实现跨平台音乐格式转换

如何用C语言解密网易云NCM音乐文件&#xff1a;实现跨平台音乐格式转换 【免费下载链接】ncmToMp3 网易云vip的ncm文件转mp3/flac - ncm file to mp3 or flac 项目地址: https://gitcode.com/gh_mirrors/nc/ncmToMp3 你是否曾经在网易云音乐下载了VIP歌曲&#xff0c;却…...

通过MCP协议为AI助手集成Google Trends,实现实时趋势分析自动化

1. 项目概述&#xff1a;当AI助手学会“看”热搜 如果你和我一样&#xff0c;每天的工作离不开市场分析、内容策划或者产品决策&#xff0c;那你一定对“趋势”这个词又爱又恨。爱的是&#xff0c;抓住一个上升趋势&#xff0c;可能就意味着一次成功的营销、一个爆款产品&#…...

AI 术语通俗词典:自动微分

自动微分是机器学习、深度学习、数值计算和人工智能中非常常见的一个术语。它用来描述&#xff1a;让计算机根据程序中的计算过程&#xff0c;自动、准确地计算导数或梯度的方法。 换句话说&#xff0c;自动微分是在回答&#xff1a;当一个模型由许多层计算组成时&#xff0c;怎…...

告别课堂赴一线,探秘企业知发展 —— 文理基础学院开展名企走访职业启蒙教育

告别课堂赴一线&#xff0c;探秘企业知发展 —— 青岛滨海学院文理基础学院开展名企走访职业启蒙教育青岛滨海学院文理基础学院致力于培养学生的综合素质与专业技能&#xff0c;通过一系列的教学活动和实践项目为学生提供全面发展的机会。近期&#xff0c;为了进一步增强学生的…...

Go HTTP客户端熔断保护:ok-breaker原理、配置与生产实践

1. 项目概述与核心价值最近在折腾一些自动化脚本和API调用时&#xff0c;遇到了一个老生常谈但又极其烦人的问题&#xff1a;如何优雅地处理那些“不稳定”的第三方服务&#xff1f;我说的不稳定&#xff0c;不是指服务完全宕机&#xff0c;而是那种间歇性抽风、响应时快时慢、…...

保姆级 Kali Linux 安装教程|零基础小白也能看懂,从镜像下载到虚拟机配置全程图文详解,零报错上手

kali 背景 基于Debian的Linux操作系统 Kali Linux是基于Debian的Linux发行版&#xff0c; 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成&#xff0c;Back…...