酒店管理系统设计报告
一、 需求分析
题目要求如下:
某酒店有客房若干间,其中客房分为不同等级,如豪华、标准、普通等,客房床位数也不同。例如,豪华套房有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;
}
float money = ((end.year - begin.year) * 365 + (end.month