酒店管理系统

酒店管理系统设计报告

一、 需求分析

题目要求如下:
某酒店有客房若干间,其中客房分为不同等级,如豪华、标准、普通等,客房床位数也不同。例如,豪华套房有4个床位,400元/晚;标准客房2个床位,200元/晚;普通客房1个床位,100元/晚。
顾客分金卡会员、银卡会员、普通会员及非会员,其享受的折扣不同。例如,金卡会员可享受8折优惠,银卡会员可享受9折优惠,普通会员享受95折优惠,非会员不享受优惠。
当顾客连续入住多天时,也可享受一定的折扣。例如,当顾客连续入住24晚时,可享受9折优惠;连续入住58晚时,可享受85折优惠;连续入住9晚以上时,可享受8折优惠。
采用面向对象的思想,建立系统中清晰的类,分析和定义各个类,每个类中要有各自的属性和方法,并开发一套客房管理系统,实现如下功能:
(1) 管理员:以管理员身份登录系统,查询当前客房入住及预订情况,并设置客房价格、顾客优惠政策等;
(2) 酒店前台:以前台身份登录系统,查询当前客房入住及预订情况,为顾客办理入住、退房、换房等服务;顾客退房后为顾客计算消费金额并收费;
(3) 顾客:可以注册和登录系统,用户在查找到心仪的客房后,登录酒店客房管理系统可提交订单实现客房预订;未入住酒店前1天,可取消客房预订;顾客入住退房后可评论。

二、 类图设计及说明

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
这里的customer类名打错了
在这里插入图片描述

三、 系统功能设计

1、
系统可以三种用户登录,分别为管理员、前台工作人员、客户,管理员需要特殊管理员账户才可以登录,客户需要注册账号才可以登录系统,用户登录成功后转至前台工作人员为其服务。
2、 管理人员页面有查询房间状态,设置优惠政策,新建房间等选项。
① 查询房间状态:返回所有房间号,房间类型和当前状态
② 设置优惠政策:对已有的区间设置打折力度
③ 新建房间:通过房间号和房间类型来新建房间
3、 前台页面提供客房查询,办理入住,提前预约,办理退房等功能
① 查询客房信息:向用户提供房间信息来选择。
② 办理入住:获取用户入住时间和离开时间为客户办理入住。
③ 提前预约:获取用户入住时间和离开时间为客户提前预约。
④ 办理退房:获取退房房间号,办理退房并且返回客户需付费金额。
4、客户界面,无账号注册账号,通过账号密码的形式登录,登录成功后转至前台页面。

四、 实现流程

在这里插入图片描述

五、 结果演示

1、 首页
在这里插入图片描述

2、 管理员
登录管理员页面
在这里插入图片描述

创建房间
在这里插入图片描述
在这里插入图片描述

依次创建五个房间(创建数量小于40)
可查询当前的状态
在这里插入图片描述

设置优惠政策
在这里插入图片描述

3、 前台
查询当前房间状态
在这里插入图片描述

输入入住时间和退房时间,会显示当前房间状态,可进行选择,选择后会更具入住时间长短显示客户所享受的优惠政策,8折(此前在管理员状态设置过)
在这里插入图片描述

房间状态变为有客
在这里插入图片描述

若入住有客的房间,会显示已经有客人了,选择其他房间
在这里插入图片描述

预约房间也是同理
在这里插入图片描述

并且房间变成已经被预约
在这里插入图片描述

退房,入住7天豪华房间400x7=2800,但是享受8折,因此收费2240,缴费后可以留下评论
在这里插入图片描述

并且此时房间状态也变成了空
在这里插入图片描述

4、 客户
客户平台
在这里插入图片描述

注册账号
在这里插入图片描述

登录账号,登录成功转到前台
在这里插入图片描述

如果输入不存在的账号,会报错
在这里插入图片描述

六、 问题及解决

中途遇见了一个问题想了很久,客户请求入住后通过reception类入住,reception类中是通过改变room类型实现的,然而每次入住后房间的状态在reception类中已经改变,却在查询时没有变化,最后将reception类的checkin函数改为返回room类型才成功,当然预约和退房也是同理。原来客户提交的申请在reception类中创建一个新的room,并不是我们想要操作的room,因此需要返回修改后的房间才可以得到正确的结果。

七、 附录

设计代码如下:

#include<iostream>
using namespace std;
#include<string>

enum Type {
    luxury, standard, ordinary };
enum Status {
    used, reserved, empty1 };
struct Time {
   
    int year;
    int month;
    int day;
};

class room {
   
public:
    room(int roomNo, Type roomType) {
   
        roomID = roomNo;
        type = roomType;
        roomStatus = empty1;
        if (type == luxury) {
   
            price = 400;
            name = "豪华间";
        }
        else if (type == standard) {
   
            price = 200;
            name = "标准间";
        }
        else if (type == ordinary) {
   
            price = 100;
            name = "普通间";
        }
    };
    room() {
   };
    //显示房间当前信息
    void showInformation() {
   
        cout << "房间号:" << roomID << endl;
        cout << "类型:" << name << endl;
        if(roomStatus == 0)
            cout << "当前状态:有客" <<endl;
        else if(roomStatus == 1)
            cout << "当前状态:已被预约" << endl;
        else
            cout << "当前状态:空房间" << endl;
        cout << endl;

    }
    //办理入住
    void checkIn(Time beginTime, Time endTime) {
   
        this->begin = beginTime;
        this->end = endTime;
        this->roomStatus = used;
    }
    void roomReserved(Time beginTime, Time endTime) {
   
        roomStatus = reserved;
        begin = beginTime;
        end = endTime;
    };
    //办理退房
    float checkOut() {
   
        roomStatus = empty1;
        int day = (end.year - begin.year) * 365 + (end.month - begin.month) * 30 + (end.day - begin.day);
        float polity;
        if (day > 2 && day <= 4) {
   
            polity = polity1;
        }
        else if (day >= 5 && day <= 8) {
   
            polity = polity2;
        }
        else if (day >= 9) {
   
            polity = polity3;
        }
        else {
   
            polity = 1;
        }
        
  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J@sur

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值