C++旅馆住宿管理系统实现

沈知远
沈知远
发布时间:2026-10-15 | 2人浏览过
原创

旅馆住宿管理系统是面向对象程序设计中常见的实践项目。本文详细介绍使用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++课程设计的相关资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表