【C++期末】酒店住宿信息管理系统(含easyX)

诚接计算机专业编程作业(C语言、C++、Python、Java、HTML、JavaScript、Vue等),如有需要请私信我,或者加我的企鹅号:1404293476

本文资源:https://download.csdn.net/download/weixin_47040861/88725363


目录

1.题目要求

2.实现效果

1.录入住宿信息

2.修改住宿信息

3.删除住宿信息

4.查询住宿信息

5.办理退房业务

6.统计酒店营业额

3.实现思路

(1)主函数

(2)添加功能

(3)修改功能

(4)删除功能

(5)查询功能

(6)办理退房

(7)统计数据


注意:使用该程序请保证您的编程软件已安装easyX

1.题目要求

题目:酒店住宿信息管理系统

住宿信息包括:住宿编号、姓名、身份证号码、联系电话、入住时间、房号、单价、入住接待人姓名、退房时间、退房接待人姓名、优惠费用、使用房内小物品费用、应付费用、备注。酒店住宿
信息管理系统的功能要求:
(1) 系统以菜单方式工作,执行一次操作后重新显示一次菜单; ;
(2)住宿信息利用文件保存;
(3) 住宿信息的录入;
(4) 修改住宿信息;
(5) 删除住宿信息;
(6) 按条件(住宿编号、姓名、身份证号码、联系电话、入住时间、房号)查询住宿信息;
(7)退房时根据退房时间与单价自动计算应付费用,应付费用=单价*入住天数-优惠费用+使用房内小物品费用,入住天数根据入住时间和退房时间自动计算;
(8)按天、周和月统计酒店的营业额。
注意:系统自动对各种数据合理性的检查。

2.实现效果

启动函数会生成一个easyX窗口,窗口中包含七个按钮对应不同功能,同时在cmd窗口打印操作

然后只要在easyX窗口中点击对应按钮,就能启动cmd窗口中对应的功能,相关数据存储在当前目录下的hotel_list.csv文件中。

1.录入住宿信息

单击按钮后启动添加信息功能,输入对应信息后存储在hotel_list文件中。

2.修改住宿信息

根据用户输入的信息编号找到该信息,然后重新输入,若未找到则提示

3.删除住宿信息

根据用户输入的信息编号搜索,若找到则打印信息后删除,若未找到则提示

4.查询住宿信息

根据用户输入的编号启动对应信息查询功能,根据用户输入的内容进行查询。

5.办理退房业务

根据用户输入身份证号查询相关信息,若存在则输入退房相关信息,若不存在则提示,输入完成后系统自动计算应付费用。

6.统计酒店营业额

用户输入日期,系统自动统计该日期当日、当周、当月的营业额。

3.实现思路

(1)主函数

  1. 在函数开始时,创建了一个名为 InfoAccommodationInfo 类型数组,用于存储住宿信息,并初始化一个整型变量 len 来记录数组长度。

  2. 调用 handleFileOperations(Info, len) 函数,用于检查是否存在数据文件,如果有,则加载数据到数组中。

  3. 使用 displayMenu() 函数来打印程序的操作菜单。

  4. 调用 initgraph(600, 300) 创建了一个宽度为 600,高度为 300 的图形窗口,并设置了窗口背景色为白色,通过 cleardevice() 函数清屏使得背景色生效。

  5. 加载名为 "bg.png" 的图片并将其放置在窗口的 (0, 0) 坐标位置。

  6. 定义了 Button 类型的数组 buttons,每个按钮包括位置和对应的文字标签。

  7. 使用 drawButton 函数绘制了七个按钮,并将它们显示在图形窗口中。

  8. 进入一个循环,监听鼠标事件。当鼠标发生点击事件时,检查点击位置是否在按钮的区域内。如果点击了某个按钮,则根据点击的按钮执行相应的操作,比如录入信息、修改信息等。在退出按钮被点击后,设置循环标志 flag 为 false,退出循环。

  9. 最后,调用 closegraph() 函数关闭绘图窗口,并返回0,结束了程序的运行。

(2)添加功能

  1. 首先,函数会输出提示信息:"录入数据"。

  2. 接着,创建一个名为 newInfoAccommodationInfo 类型的对象,用于存储新的住宿信息。

  3. 函数依次要求用户输入住宿信息的各个字段:

  4. 在输入某些字段时,使用了 std::cin.ignore() 来清除输入缓冲区,确保正确获取用户输入。

  5. 输入完成后,将新的住宿信息对象 newInfo 存储到 Info 数组中的 len 索引处,并将 len 值增加 1,以便下次添加信息时存储到数组的下一个位置。

  6. 调用 saveInfo(Info, len) 函数将更新后的信息保存到数据文件中。

  7. 最后,输出提示信息:"录入成功",并使用 system("pause") 暂停程序执行,等待用户按任意键继续。

(3)修改功能

  1. 首先,函数会输出提示信息:"修改数据"。
  2. 然后要求用户输入要修改信息的编号 targetNumber
  3. 使用一个布尔变量 found 来标记是否找到了要修改的信息,默认值为 false
  4. 函数通过循环遍历 Info 数组中的每一项,查找是否存在与输入编号相匹配的住宿信息。如果找到了匹配的信息:
    1. found 标记为 true
    2. 创建一个名为 newInfoAccommodationInfo 类型的对象,并初始化为一个空白的信息对象,用于存储新的住宿信息。
    3. 输出找到的信息的编号,并提示用户输入新的信息。
    4. 要求用户输入新的住宿信息的各个字段(姓名、身份证号、电话号码、入住时间、房号、单价、接待人姓名、备注)。
    5. 将新的信息更新到数组中的相应位置。
    6. 调用 saveInfo(Info, len) 函数保存更新后的信息到数据文件。
    7. 输出提示信息:"信息已成功更新!"。
    8. 使用 system("pause") 暂停程序执行,等待用户按任意键继续。
    9. 使用 break 结束循环。
  5. 如果循环结束后 found 仍为 false,即未找到匹配的信息,则输出提示信息:"未找到编号为 targetNumber 的信息。",并使用 system("pause") 暂停程序执行,等待用户按任意键继续。

(4)删除功能

  1. 首先,函数会输出提示信息:"删除数据"。
  2. 然后要求用户输入要删除信息的编号 targetNumber
  3. 使用一个布尔变量 found 来标记是否找到了要删除的信息,默认值为 false
  4. 函数通过循环遍历 Info 数组中的每一项,查找是否存在与输入编号相匹配的住宿信息。如果找到了匹配的信息:
    1. 输出找到的信息的各个字段(姓名、身份证号、电话号码、入住时间、房号、单价、接待人姓名)。
    2. 将该信息对应的数组元素赋值为空值,即使用 { 0, "", "", "", "", 0, 0, "", "", "", 0, 0, 0, "" } 来表示信息已删除。
    3. 调用 saveInfo(Info, len) 函数保存更新后的信息到数据文件。
    4. 输出提示信息:"信息删除成功!"。
    5. 使用 break 结束循环。
  5. 如果循环结束后 found 仍为 false,即未找到匹配的信息,则输出提示信息:"未找到编号为 targetNumber 的信息。"。
  6. 最后,使用 system("pause") 暂停程序执行,等待用户按任意键继续。

(5)查询功能

  1. 首先,函数会输出提示信息:"查询数据"。
  2. 然后,要求用户选择查询条件。
  3. 用户输入选择条件 choice
  4. 如果输入的选择条件不在1到6的范围内,输出提示信息:"无效编号"。
  5. 如果输入的选择条件有效,要求用户输入查询关键字 searchKey
  6. 函数使用一个布尔变量 found 标记是否找到了符合条件的信息,默认值为 false
  7. 函数通过循环遍历 Info 数组中的每一项,根据用户选择的条件以及输入的关键字进行查询。如果找到符合条件的信息:
    1. found 标记为 true
    2. 调用 show(Info[i]) 函数展示符合条件的信息。
  8. 如果循环结束后 found 仍为 false,即未找到符合条件的信息,则输出提示信息:"未找到符合条件的信息。"。
  9. 最后,使用 system("pause") 暂停程序执行,等待用户按任意键继续。

(6)办理退房

  1. 用户输入办理退房的客人身份证号 (searchID)。
  2. 通过循环遍历 Info 数组,查找匹配身份证号的住宿信息。
  3. 如果找到了对应信息:
    1. 用户输入退房时间、退房接待人姓名、优惠费用和使用房内小物品费用。
    2. 计算入住天数和应付费用:通过 getday 函数计算入住天数,并根据价格、优惠和额外费用计算应付费用。
    3. 输出应付费用。
  4. 如果未找到对应信息,则输出未找到对应的客人信息。
  5. 最后,保存更新后的信息到数据文件,并暂停程序执行。

辅助函数

  1. isLeapYear(int year): 判断是否为闰年。
  2. daysInMonth(int month, int year): 计算某个月的天数。
  3. getday(const std::string& start, const std::string& stop): 计算入住天数,根据入住和退房时间计算天数差。

(7)统计数据

该功能由 statistics 函数完成。这个函数用于根据用户输入的日期进行统计酒店的营业额。

  1. 用户输入一个日期(格式为:年/月/日)。
  2. 提取出年和月的部分,形成一个时间部分 timePart,用于后续对当月营业额的统计。
  3. 调用 getOtherDaysOfWeek 函数获取输入日期所在周的其他日期数组。
  4. 循环遍历住宿信息数组 Info
    1. 检查每个信息的 checkInTime 字段,根据输入日期进行当日、当周和当月的营业额统计。
    2. 当日营业额通过检查 checkInTime 是否包含输入日期实现。
    3. 当周营业额通过检查 checkInTime 是否包含在周数组 otherDays 中的任意日期实现。
    4. 当月营业额通过检查 checkInTime 是否包含时间部分 timePart 实现。
  5. 输出当日、当周和当月的营业额统计结果。

获取给定日期所在周的其他日期

该功能由 getOtherDaysOfWeek 函数完成。这个函数接收一个日期字符串 dateStr 和一个字符串数组 otherDays,用于存储给定日期所在周的其他日期。

  1. 首先,将日期字符串解析为年、月、日。
  2. 然后,构建一个 tm 结构体对象 timeinfo,表示给定日期的年、月、日信息。
  3. 使用 mktime 函数获取给定日期所在周的起始日期(周日),并通过计算回到本周的周日。
  4. 在一个循环中,获取每一天的日期,并将其存储到 otherDays 数组中。通过增加一天的秒数,并使用 strftime 函数将日期格式化为字符串形式("%Y/%m/%d"),然后存储到 otherDays 数组中。

这两个功能函数一起实现了对特定日期的营业额统计以及获取给定日期所在周的其他日期。

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

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

相关文章

杨中科 .NET Core 第一部分.NET Standard

1)不讲C#基础语法和NET基础类库(不需要学过ASPNET等)。需要懂HTML、JavaScript、数据库等。后续会录制基础视频 2)使用Visual Studio 2019 .NET .NET Framework Windows 程序 .NET Core 跨平台程序 .NET Standard 上述两者 遵从的标准 .NET5 开始上述统称为 .NET 新建.NET Sta…

pve多台物理机虚拟化 pve虚拟机优势

Proxmox VE是一个运行虚拟机和容器的平台。基于Debian Linux,完全开源。为了获得最大的灵活性,实现了两种虚拟化技术——基于内核的虚拟机(KVM)和基于容器的虚拟化(LXC)。一个主要的设计目标是使管理尽可能容易。运行在单个节点上使用Proxmox VE&#xf…

龍运当头--html做一个中国火龙祝大家龙年大吉

🐉效果展示 🐉HTML展示 <body> <!-- partial:index.partial.html --> <svg><defs><g id=

格密码基础:对偶格(超全面)

目录 一. 对偶格的格点 1.1 基本定义 1.2 对偶格的例子 1.3 对偶格的图形理解 二. 对偶格的格基 2.1 基本定义 2.2 对偶格的格基证明 三. 对偶格的行列式 3.1 满秩格 3.2 非满秩格 四. 重复对偶格 五. 对偶格的转移定理&#xff08;transference theorem&#xff…

现代 C++ 及 C++ 的演变

C 活跃在程序设计领域。该语言写入了许多新项目&#xff0c;而且据 TIOBE 排行榜数据显示&#xff0c;C 的受欢迎度和使用率位居第 4&#xff0c;仅次于 Python、Java 和 C。 尽管 C 在过去二十年里的 TIOBE 排名都位居前列&#xff08;2008 年 2 月排在第 5 名&#xff0c;到…

GPT实战系列-大模型为我所用之借用ChatGLM3构建查询助手

GPT实战系列-https://blog.csdn.net/alex_starsky/category_12467518.html 如何使用大模型查询助手功能&#xff1f;例如调用工具实现网络查询助手功能。目前只有 ChatGLM3-6B 模型支持工具调用&#xff0c;而 ChatGLM3-6B-Base 和 ChatGLM3-6B-32K 模型不支持。 定义好工具的…

【Gin实战教程】快速入门

Gin是一个轻量级的Web框架&#xff0c;使用Go语言开发。它具有高性能、易用性和灵活性的特点&#xff0c;是构建可扩展的Web应用程序的理想选择。 首先&#xff0c;Gin是一个高性能的框架。它基于Go语言的原生HTTP包进行开发&#xff0c;利用了Go语言的并发特性和协程模型&…

聊聊 Java 集合框架中的 ArrayList

其实 Java 集合框架也叫做容器&#xff0c;主要由两大接口派生而来&#xff0c;一个是 collection,主要存放对象的集合。另外一个是Map, 存储着键值对&#xff08;两个对象&#xff09;的映射表。 下面就来说说 List接口&#xff0c;List存储的元素是有序、可重复的。其下有三个…

JAVA实现文件上传至阿里云

注册阿里云账号后,开通好对象存储服务&#xff08;OSS&#xff09;&#xff0c;三个月试用 阿里云登录页 (aliyun.com) 目录 一.创建Bucket 二.获取AccessKey&#xff08;密钥&#xff09; 三.参考官方SDK文件&#xff0c;编写入门程序 1.复制阿里云OSS依赖&#xff0c;粘贴…

Swift单元测试Quick+Nimble

文章目录 使用QuickNimble1、苹果官方测试框架XCTest的优缺点2、选择QuickNimble的原因&#xff1a;3、QuickNimble使用介绍集成&#xff1a;Quick关键字说明&#xff1a;Nimble中的匹配函数等值判断&#xff1a;使用equal函数是否是同一个对象&#xff1a;使用beIdenticalTo函…

【Verilog】期末复习——分别画出下面两个程序综合后的电路图/reg型数据和wire型数据的区别

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…

基于ssm基于协同过滤技术的网上书城的开发与研究+jsp论文

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本次开发一套基于协同过滤技术的网上书城有…

大数据毕业设计:图书推荐系统+可视化+Django框架 图书管理系统 (附源码+论文)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

外汇天眼:CQG 与 TradeStation Securities 的经纪服务集成

TradeStation Securities, Inc.&#xff0c;一家自营的在线股票、ETF、期权和期货交易经纪公司&#xff0c;宣布与CQG合作&#xff0c;CQG是一家为交易员、经纪商、商业套保者和交易所提供高性能技术解决方案的全球供应商&#xff0c;已与TradeStation Securities的经纪服务集成…

idea右上角浏览器图标没有idea内部浏览器怎么显示

idea右上角浏览器图标没有idea内部浏览器怎么显示 file -> settings -> tools -> web brosers 选择需要的浏览器&#xff0c;勾选上展示到编辑器中 打开上图的Built-in Preview&#xff0c;就会显示idea标志的内部显示了&#xff01;&#xff01;&#xff01;

python 和shell 变量互相传递

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 主要介绍python和shell变量互相传递方法&#xff0c;使用了环境变量、管道等方法。 python -> shell&#xff1a; 1.环境变量 import os var123或var123 o…

《C++语言程序设计(第5版)》(清华大学出版社,郑莉 董渊编著)习题——第2章 C++语言简单程序设计

2-15 编写一个程序&#xff0c;运行时提示输入一个数字&#xff0c;再把这个数字显示出来。 #include <iostream>using namespace std;int main() {// 提示用户输入数字cout << "请输入一个数字: ";// 用于存储用户输入的数字的变量double number;// 从…

源码|redis7.2.2|sds

文章目录 前言Type && EncodingsdsencodingcreateStringObjectcreateEmbeddedStringObject总结 createRawStringObject总结 createStringObjectFromLongDouble总结 createStringObjectFromLongLongWithOptions总结 相关操作sdscatlen总结 阈值44sds VS C字符串 前言 从…

docker镜像的生成过程

镜像的生成过程 Docker镜像的构建过程&#xff0c;大量应用了镜像间的父子关系。即下层镜像是作为上层镜像的父镜像出现的&#xff0c;下层镜像是作为上层镜像的输入出现。上层镜像是在下层镜像的基础之上变化而来。 FROM centos:7 FROM指令是Dockerfile中唯一不可缺少的命令&a…

Web APIs知识点讲解

学习目标: 能获取DOM元素并修改元素属性具备利用定时器间歇函数制作焦点图切换的能力 一.Web API 基本认知 1.作用和分类 作用: 就是使用 JS 去操作 html 和浏览器分类&#xff1a;DOM (文档对象模型)、BOM&#xff08;浏览器对象模型&#xff09; 2.DOM DOM(Document Ob…