C++旅馆住宿管理系统实现
旅馆住宿管理系统是面向对象程序设计中常见的实践项目。本文详细介绍使用C++构建该系统的完整流程,包括登录验证、房间数据结构设计、业务逻辑处理(如预定、入住、退房)以及查询统计功能,帮助读者理解C++在实体对象建模中的应用。
系统概述与设计目标
本系统旨在模拟一个简化的旅馆前台管理环境。通过C++的类特性,将“顾客”和“房间”抽象为独立的对象,分别管理其属性与行为。系统主要具备以下功能模块:
- 预订房间:记录顾客信息并分配空闲房间,预收房费。
- 办理入住:支持已预订顾客直接入住,也支持无预订的直接安排房间。
- 办理退房:根据实际入住天数与预付费用进行多退少补结算。
- 信息查询:实时显示空房、已预订及已入住的房间状态,并可按姓名或身份证号检索顾客信息。
第1步:初始化系统环境
为了保障系统的安全性,操作者必须通过特定的用户名和密码才能进入管理主界面。此过程通过一个简单的循环判断来实现。
// 账户为123,密码为123
void function::welcome() {
system("color 3E");
char name[4], pass[7];
cout<<"请输入用户名和密码:"<<endl;
cin>>name;
cin>>pass;
while((strcmp(name,"123")!=0)||(strcmp(pass,"123")!=0)) {
cout<<"用户名或密码输入有误,请重新输入!"<<endl;
cin>>name;
cin>>pass;
}
// 登录成功后的欢迎界面...
}
上述代码定义了 welcome 函数,当用户输入的 name 或 pass 不匹配设定值 "123" 时,程序会提示错误并要求重新输入,直到验证通过为止。
房间管理与基础数据定义
系统设计了一个包含60间客房的管理规模。为了实现分级定价,房间被分为三个等级。每个房间拥有编号、等级(rad)、单价(price)和当前状态(state)。状态码定义为:0表示空闲,1表示已预订,2表示已入住。
第2步:初始化房间数据
程序启动后,首先调用 initial_room 函数对内存中的房间数组进行填充。该函数利用循环生成不同等级的房间信息:前20间为单人间(房价100元),中间20间为双人间(房价200元),最后20间为标准间(房价300元)。
void function::initial_room() {
int j, k=101;
for(j=0; j<20; j++) { // 1~20号索引 -> 101~120号房 (单人间)
room[j].number=k++;
room[j].rad=1; // 等级 1
room[j].price=100;
room[j].state=0;
}
k=201;
for(j=20; j<40; j++) { // 21~40号索引 -> 201~220号房 (双人间)
room[j].number=k++;
room[j].rad=2; // 等级 2
room[j].price=200;
room[j].state=0;
}
k=301;
for(j=40; j<60; j++) { // 41~60号索引 -> 301~320号房 (标准间)
room[j].number=k++;
room[j].rad=3; // 等级 3
room[j].price=300;
room[j].state=0;
}
}
核心业务流程实现
第3步:执行房间预订
预订功能是住客提前锁定房源的操作。系统要求输入客人姓名、身份证号码、预订天数以及期望的房间类型。随后,程序遍历对应价格区间的房间数组,寻找第一个状态为 0(未占用)的房间,将其状态改为 1(已预订),并计算出总的预付费用。
void function::book_room() {
customer[i]=new Customer;
int room_kind,day;
cout<<"请您选择预定房间类型:\n1.单人间/天/100元\n2.双人间/天/200元\n3.标准间/天/300元"<<endl;
cin>>room_kind;
cout<<"请输入预定天数"<<endl;
cin>>day;
customer[i]->set_day(day);
switch(room_kind) {
case 1: // 查找单间
cout<<"住房费用总共为: "<<day*100<<"元"<<endl;
for(int n=0; n<20; n++) {
if(room[n].state==0) {
room[n].state=1;
customer[i]->set_room_number(room[n].number);
break;
}
} break;
// ... 此处省略双人间和标准间的类似查找逻辑
}
i++; // 顾客数量增加
}
以下是系统在执行特定预订操作时的控制台输出示例:
第4步:办理顾客入住
入住模块区分两种情况:一是“已预订”的客户,二是“未预订”直接入店的客户。对于已预订的客户,系统需核对其姓名和身份证以确认身份,然后将对应的房间状态由 1 更新为 2(已入住),并通知前台收取费用。若客户未预订,则流程类似于临时预订并直接入住。
void function::go_in() {
cout<<"该顾客是否已订房 (1. 已订 2. 没订) "<<endl;
cin>>q;
if(q==1) {
// 核对身份并获取已分配的房号...
// 将状态设为2 (入住)
room[...].state=2;
} else {
// 未预订的新客逻辑:先选房再入住...
}
}
下图展示了入住功能的运行界面及输入交互结果:
第5步:完成退房结算
退房时需要输入顾客信息和实际居住的天数。系统会将“预订天数产生的预付费”与“实际天数产生的消费额”进行比对计算差额。
- 退钱:如果预订天数大于实际天数,且顾客预付费较多,系统计算退还金额。
- 补交:如果实际住的时间长于原定时间或产生了额外消费,顾客需要补交房费。
计算完成后,系统将房间状态重置为 0(空闲),并将该顾客的记录从列表中移除(释放内存)。这一过程的截图见下:
数据统计与信息检索
为了便于管理者掌握宾馆运营概况,系统提供了全面的信息查询接口。
第6步:查询运行状态
管理员可以在主菜单中选择“查询”功能。针对房间状态的查询可以分别列出三类房间号:空房间、已预订房间和已入住房间,并以十列一行的格式整齐排版输出。而顾客信息查询则支持模糊搜索,可以根据姓名或者身份证号精确调出该客户的登记信息。
完整的类结构与代码框架
整个系统依赖于一组核心类与全局变量的协调运作。Room 结构体存储了房间静态属性,Customer 类封装了动态的顾客信息及操作;function 类则是具体的业务驱动引擎。以下是包含所有功能的顶层源码汇总:
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
// 全局计数器与对象数组
int i=0;
struct Room { int number, rad, price, state; };
class Customer { /* 定义构造函数、析构函数及属性访问方法 */ };
Customer *customer[60];
Room room[60];
// 业务管理类
class function {
public:
void initial_room(); // 初始化
void welcome(); // 登录
void menu(); // 功能选择
void book_room(); // 预订
void go_in(); // 入住
void go_out(); // 退房
void inquire(); // 查询
};
// main函数作为入口
int main() {
function m;
m.initial_room();
m.welcome();
while(true) {
m.menu();
// ... 退出条件
}
return 0;
}
以上就是C++实现旅馆住宿管理系统的详细内容,更多关于C++课程设计的相关资料请关注本站其它相关文章!免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









