酒店管理系统通过自动化流程提升酒店运营效率。本系统采用C语言开发,基于模块化设计思想,包含以下核心功能:
- 房间管理:初始化房间信息、查看房间状态
- 预订管理:按时间段预订房间、查询预订记录
- 入住管理:客户登记、自动分配房间
- 退房结算:时长费用计算、账单生成
- 查询统计:空闲房间统计、收入报表生成
系统采用文件持久化存储数据,确保程序重启后数据不丢失。
交互方式为命令行菜单,直观易操作。
二、系统设计与数据结构
1. 核心数据结构
cpp
#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. 房间初始化与加载
cpp
void initializeRooms() {
for (int i = 0; i < FLOORS; i++) {
for (int j = 0; j < ROOMS_PER_FLOOR; j++) {
// 生成房间号如501
sprintf(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. 预订管理算法
cpp
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. 入住与退房结算
cpp
// 入住登记
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. 高级查询功能
cpp
// 按时间段查询空闲房间
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);
}
}
}
}
四、完整系统源码
cpp
#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++学习交流君羊 << 点击加入