酒店管理系统通过自动化流程提升酒店运营效率。本系统采用C语言开发,基于模块化设计思想,包含以下核心功能:

  1. 房间管理​:初始化房间信息、查看房间状态
  2. 预订管理​:按时间段预订房间、查询预订记录
  3. 入住管理​:客户登记、自动分配房间
  4. 退房结算​:时长费用计算、账单生成
  5. 查询统计​:空闲房间统计、收入报表生成

系统采用文件持久化存储数据,确保程序重启后数据不丢失。

交互方式为命令行菜单,直观易操作。

二、系统设计与数据结构

1. 核心数据结构
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>#define FLOORS 5      // 楼层数
#define ROOMS_PER_FLOOR 20  // 每层房间数
#define MAX_NAME_LEN 20
#define MAX_RESERVATIONS 5// 房间状态枚举
typedef enum {VACANT,     // 空闲OCCUPIED,   // 已入住RESERVED    // 已预订
} RoomStatus;// 房间结构体
typedef struct {char number[6];         // 房间号如"101"char type[10];          // 房间类型double price;           // 每晚价格RoomStatus status;      // 当前状态char guest[MAX_NAME_LEN]; // 入住客人int reservations[MAX_RESERVATIONS][2]; // 预订时间段
} Room;// 全局酒店数组
Room hotel[FLOORS][ROOMS_PER_FLOOR];
2. 文件存储设计
  • 房间数据:rooms.dat(二进制存储)
  • 预订记录:reservations.dat
  • 账单历史:bills.dat

三、核心功能实现解析

1. 房间初始化与加载
void initializeRooms() {for (int i = 0; i < FLOORS; i++) {for (int j = 0; j < ROOMS_PER_FLOOR; j++) {// 生成房间号如501sprintf(hotel[i][j].number, "%d%02d", i+1, j+1);// 按楼层分配房间类型if (i == 0) {strcpy(hotel[i][j].type, "经济房");hotel[i][j].price = 150.0;} else if (i < 3) {strcpy(hotel[i][j].type, "标准房");hotel[i][j].price = 300.0;} else {strcpy(hotel[i][j].type, "豪华房");hotel[i][j].price = 500.0;}hotel[i][j].status = VACANT;memset(hotel[i][j].reservations, -1, sizeof(hotel[i][j].reservations));}}saveRooms(); // 保存初始数据
}void saveRooms() {FILE *fp = fopen("rooms.dat", "wb");if (fp) {fwrite(hotel, sizeof(Room), FLOORS*ROOMS_PER_FLOOR, fp);fclose(fp);}
}
2. 预订管理算法
int reserveRoom(const char* roomNum, int startDay, int endDay, const char* guest) {// 查找房间位置int floor = roomNum[0] - '0' - 1;int room = atoi(roomNum + 1) - 1;// 验证预订日期冲突for (int i = 0; i < MAX_RESERVATIONS; i++) {int* period = hotel[floor][room].reservations[i];if (period[0] != -1 && !(endDay < period[0] || startDay > period[1])) {return 0; // 日期冲突}}// 添加预订记录for (int i = 0; i < MAX_RESERVATIONS; i++) {if (hotel[floor][room].reservations[i][0] == -1) {hotel[floor][room].reservations[i][0] = startDay;hotel[floor][room].reservations[i][1] = endDay;strcpy(hotel[floor][room].guest, guest);hotel[floor][room].status = RESERVED;saveRooms();return 1; // 成功}}return -1; // 预订已满
}
3. 入住与退房结算
// 入住登记
void checkIn(const char* roomNum, const char* guest) {int floor = roomNum[0] - '0' - 1;int room = atoi(roomNum + 1) - 1;if (hotel[floor][room].status == VACANT) {strcpy(hotel[floor][room].guest, guest);hotel[floor][room].status = OCCUPIED;hotel[floor][room].reservations[0][0] = time(NULL); // 记录入住时间saveRooms();}
}// 退房结算
double checkOut(const char* roomNum) {int floor = roomNum[0] - '0' - 1;int room = atoi(roomNum + 1) - 1;double total = 0.0;if (hotel[floor][room].status == OCCUPIED) {time_t checkInTime = hotel[floor][room].reservations[0][0];time_t now = time(NULL);// 计算入住天数(向上取整)int hours = (int)difftime(now, checkInTime) / 3600;int days = (hours + 24) / 24; total = days * hotel[floor][room].price;// 重置房间状态hotel[floor][room].status = VACANT;hotel[floor][room].guest[0] = '\0';saveRooms();}return total;
}
4. 高级查询功能
// 按时间段查询空闲房间
void findVacantRooms(int startDay, int endDay) {printf("在%d-%d期间空闲的房间:\n", startDay, endDay);for (int i = 0; i < FLOORS; i++) {for (int j = 0; j < ROOMS_PER_FLOOR; j++) {int isVacant = 1;// 检查预订冲突for (int k = 0; k < MAX_RESERVATIONS; k++) {int* period = hotel[i][j].reservations[k];if (period[0] != -1 && !(endDay < period[0] || startDay > period[1])) {isVacant = 0;break;}}if (isVacant && hotel[i][j].status == VACANT) {printf("%s\t%s\t%.2f\n", hotel[i][j].number,hotel[i][j].type,hotel[i][j].price);}}}
}

四、完整系统源码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>// 常量、结构体定义见上文// 函数声明
void initializeRooms();
void saveRooms();
void loadRooms();
int reserveRoom(const char* roomNum, int startDay, int endDay, const char* guest);
void checkIn(const char* roomNum, const char* guest);
double checkOut(const char* roomNum);
void displayRoomStatus();
void findVacantRooms(int startDay, int endDay);int main() {loadRooms();while(1) {system("cls");printf("\n===== 酒店管理系统 =====\n");printf("1. 显示所有房间状态\n");printf("2. 预订房间\n");printf("3. 办理入住\n");printf("4. 办理退房\n");printf("5. 按时间段查询空闲房\n");printf("0. 退出\n");printf("=======================\n");int choice;scanf("%d", &choice);switch(choice) {case 1: displayRoomStatus();break;case 2: {char roomNum[6], guest[MAX_NAME_LEN];int start, end;printf("输入房间号: ");scanf("%s", roomNum);printf("输入起止日(例:20240620 20240625): ");scanf("%d %d", &start, &end);printf("客人姓名: ");scanf("%s", guest);if(reserveRoom(roomNum, start, end, guest)) {printf("预订成功!\n");} else {printf("预订失败!\n");}break;}case 3: {char roomNum[6], guest[MAX_NAME_LEN];printf("房间号: ");scanf("%s", roomNum);printf("客人姓名: ");scanf("%s", guest);checkIn(roomNum, guest);printf("入住登记完成!\n");break;}case 4: {char roomNum[6];printf("退房间号: ");scanf("%s", roomNum);double amount = checkOut(roomNum);printf("需支付: %.2f元\n", amount);break;}case 5: {int start, end;printf("输入查询时间段(例:20240620 20240625): ");scanf("%d %d", &start, &end);findVacantRooms(start, end);break;}case 0:saveRooms();exit(0);}system("pause"); // 按任意键继续}return 0;
}// 其他函数实现详见上文

 资源推荐:

C/C++学习交流君羊 << 点击加入

C/C++教程

C/C++学习路线,就业咨询,技术提升

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

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

相关文章

基于Gold-YOLO的聚合-分发机制改进YOLOv8教程

1. 引言 本文将详细介绍如何将Gold-YOLO的核心创新——聚合-分发(Gather-and-Distribute, GD)机制集成到YOLOv8架构中。Gold-YOLO是一种创新的目标检测架构,通过独特的信息融合策略实现了低延迟和高准确性的理想平衡。 1.1 Gold-YOLO核心特性 Gold-YOLO的主要创新点包括…

blob 的使用 文件下载 图片预览 大文件分片上传

1. 文件下载 function downloadFile(content, filename, type) {const blob new Blob([content], { type });const url URL.createObjectURL(blob);const a document.createElement(a);a.href url;a.download filename;a.click();URL.revokeObjectURL(url); }// 使用示例…

FlinkCDC-Hudi数据实时入湖原理篇

1.Hudi应用场景 面对海量数据开发场景&#xff0c;一种支持存储多种原始数据格式、多种计算引擎、高效的元数据统一管理的存储方式能极大的提高开发效率。所以在选择技术选型的时候&#xff0c;这种存储方式有以下几个特点&#xff1a; 存储原始数据&#xff0c;这些原始数据来…

sqldeveloper 创建新用户并访问其他空间特定表和视图

创建用户 右键选择创建用户 1.给用户取一个名字 VIEW_TEST 2.设置密码 123456&#xff08;建议用其他&#xff09; 3.选择表空间和临时空间 选择角色 CONNECT 连接角色 选择系统权限 然后点击应用就可以了 然后在用户哪里就能看到这个用户了 登录用户 出现成功就说明可以…

家用电器3d扫描逆向建模中科米堆手持式蓝光三维扫描仪数字建模

从厨房里的冰箱、微波炉&#xff0c;到客厅中的电视、空调&#xff0c;再到卧室的加湿器、空气净化器等&#xff0c;家用电器极大地提升了我们的生活品质。 家电市场的竞争日益激烈&#xff0c;产品更新换代速度加快&#xff0c;如何快速、精准地获取现有家电产品的三维数据&a…

从“数据困境”到“数据生态”:DaaS重塑三甲医院医疗数据治理

从“数据困境”到“数据生态”&#xff1a;DaaS如何重塑三甲医院医疗数据治理 医疗数据治理的现状剖析 在智慧医疗蓬勃发展的当下&#xff0c;三甲医院凭借其丰富的临床资源&#xff0c;积累了海量、多维度的医疗数据。这些数据犹如一座蕴藏着巨大价值的富矿&#xff0c;涵盖了…

LVS +Keepalived 高可用群集

目录 前言一. Keepalived 双机热备基础知识1. Keepalived 概述及安装&#xff08;1&#xff09;Keepalived 的热备方式&#xff08;2&#xff09;Keepalived 的安装与服务控制 2. 使用Keepalived 实现双机热备&#xff08;1&#xff09;主服务器的配置&#xff08;2&#xff09…

【Go语言基础】对齐边界与内存填充

文章目录 一、内存对齐的核心概念二、Go语言的内存对齐规则三、内存对齐示例示例1&#xff1a;字段顺序影响对齐示例2&#xff1a;指针与切片的对齐 四、如何查看内存对齐&#xff1f;五、内存对齐的优化建议六、总结&#xff1a;内存对齐的核心要点 在计算机科学中&#xff0c…

网络核心 - CNI、Service 与 Ingress/Gateway API 解析

网络核心 - CNI、Service 与 Ingress/Gateway API 解析 Kubernetes 的强大之处在于它极大地简化了容器化应用的部署和管理,但其网络模型的灵活性和复杂性也常常让初学者感到困惑。作为 SRE,我们需要拨开迷雾,理解流量在 K8s 集群内部以及进出集群时,到底是如何流转的。 Po…

20.jsBridge多页面交互与原生事件监听冲突问题

一、问题描述 • 安卓原生页面调起 H5A 页面&#xff1b; • H5A 页面跳转到 H5B 页面&#xff1b; • 在 H5B 页面点击“附件上传”&#xff0c;通过 JS Bridge 调用安卓的附件上传功能&#xff0c;弹出附件弹窗&#xff1b; • 然后 返回 到 H5A 页面&#xff0c;附件上传弹窗…

产品经理的自我救赎

思考自己的商业模式 很多人可能会奇怪&#xff0c;作为一个产品经理&#xff0c;为什么要思考商业模式呢&#xff1f;这个问题有点绕&#xff0c;但看完这一小节肯定大家就明白了。 首先&#xff0c;我们做产品经理&#xff0c;一般来说是为了挣钱&#xff0c;从挣一个月的钱…

DeepSeek提示词指南:从基础到高阶的全面解析

引言 在人工智能技术迅猛发展的今天&#xff0c;DeepSeek作为新一代智能大模型&#xff0c;正在为各行各业带来革命性的变革。而要充分发挥DeepSeek的潜力&#xff0c;掌握其提示词的使用技巧是关键。本指南旨在为用户提供一份全面、系统、实用的DeepSeek提示词指南&#xff0…

Linux tail 命令

Linux 的 tail 命令是一个非常实用的工具&#xff0c;用于查看文件的末尾内容&#xff0c;默认显示文件的最后 10 行。它在系统管理和日志监控中尤为常用&#xff0c;以下是其核心功能和用法总结&#xff1a; 一、基本语法 tail [选项] [文件]二、常用选项 选项功能示例-n 或…

【案例拆解】米客方德 SD NAND 在车联网中(有方模块)的应用:破解传统 TF 卡振动脱落与寿命短板

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

中泰制造企业组网新方案:中-泰企业国际组网专线破解泰国工厂访问国内 OA/ERP 卡顿难题

在东南亚开厂的中国制造企业&#xff0c;估计都遇到过这个糟心事&#xff1a;泰国工厂的员工想访问国内总部的 OA、ERP 系统&#xff0c;结果页面加载半天没反应&#xff0c;文件传输慢得像蜗牛&#xff0c;视频会议还时不时卡成 PPT。以前大家常用的 MPLS 专线&#xff0c;虽然…

【二进制安全作业】250617课上作业4 - start

文章目录 前言一、使用环境二、pwndbg介绍1. 命令介绍2. 界面介绍 三、反汇编分析四、Shellcode五、解题思路六、编写EXP结语 前言 作业3遇到了很严重的问题&#xff0c;一直没搞定&#xff0c;先略过了&#xff0c;要讲的东西也一起放到这里讲吧。 这道题是 pwnable 的第一道…

【vivado中实现时序仿真】

这里写自定义目录标题 如何在vivado中实现时序仿真准备工作设计输入与管理综合与实现仿真与调试IP核与重用硬件编程与配置设计分析与优化跨平台支持与兼容性编写测试激励代码运行时序仿真查看和分析结果高级技巧 如何在vivado中实现时序仿真 在Vivado中进行时序仿真&#xff0…

运维常用命令

目录 一、系统监控与性能分析 vmstat命令 一、命令语法及核心参数 二、输出字段解析&#xff08;关键列&#xff09; 三、工作场景案例 1. 排查 CPU 瓶颈 2. 内存不足导致 Swap 频繁 3. 磁盘 I/O 性能问题 4. 系统卡顿实时监控 5. 高级用法&#xff1a;统计内存事件 …

代码随想录day10栈和队列1

文章目录 数组模拟栈栈的应用 单调栈栈(stack) 数组模拟队列队列stl(queue)双端队列stl(deque)滑动窗口单调队列 232.用栈实现队列225. 用队列实现栈20. 有效的括号1047. 删除字符串中的所有相邻重复项 数组模拟栈 题目链接 #include <iostream> #include <cstdio&g…

Unity 把广告收入(revenue)上报到AppsFlyer

文章目录 第一步第二步 官方文档 第一步 升级版本 如果你的AppsFlyer版本大于文档中要求的6.15以上&#xff0c;即可跳过第一步 在unity这里可以看到AppsFlyer版本 下载最新版本地址 在这个位置&#xff0c;单独下载这个unitypackage包就行 如果是用srict-mode(严格模式)…