C++实现简单酒店管理系统
本文实例为大家分享了C++实现简单酒店管理系统的具体代码,供大家参考,具体内容如下
酒店管理系统设计报告
一、 需求分析
题目要求如下:
某酒店有客房若干间,其中客房分为不同等级,如豪华、标准、普通等,客房床位数也不同。例如,豪华套房有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 - begin.month) * 30 + (end.day - begin.day))*price*polity; return money; } int showstatus() { return roomStatus; } int getRno(){ return roomID; } void setPolity(float a, float b, float c) { polity1 = a; polity2 = b; polity3 = c; } int getRoomnumber() { return roomnumber; } friend class manager; friend class reception; private: int roomID; static float polity1; static float polity2; static float polity3; static int roomnumber; Type type; string name; float price; Status roomStatus; Time begin; Time end; }; class manager { public: manager() {}; room roomcreate(int No, Type roomtype) { room Room(No, roomtype); Room.roomnumber++; return Room; } void checkInformation(room Room) { Room.showInformation(); } void setPolity() { room Room1; float a, b, c; cout << "请分别设置入住2-4天,5-8天或9天以上的优惠政策,用1以内小数表示打折力度" << endl; cin >> a >> b >> c; Room1.setPolity(a, b, c); cout << "设置成功" << endl; }; }; class reception { public: reception(int no) { NO = no; } void checkInformation(room Room) { Room.showInformation(); } room CheckIn(Time begin, Time end, room Room) { if (Room.showstatus() == empty1) { Room.checkIn(begin, end); cout << "预定成功!时间:" << begin.year << "年" << begin.month << "月" << begin.day << "日---" << end.year << "年" << end.month << "月" << end.day << "日" << endl; int day = (end.year - begin.year) * 365 + (end.month - begin.month) * 30 + (end.day - begin.day); if (day > 2 && day <= 4) { polity = Room.polity1; } else if (day >= 5 && day <= 8) { polity = Room.polity2; } else if (day >= 9) { polity = Room.polity3; } else { polity = 1; } if (polity < 1) cout << "优惠打" << polity * 10 << "折" << endl; } else { cout << "房间已经被预定,请选择其他房间" << endl; } return Room; } int getID() { return NO; } room CheckOut(room Room) { float money = Room.checkOut(); cout << "退房成功" << endl; cout << "请支付:" << money << "元"<<endl; return Room; } room Reserved(Time begin, Time end, room Room) { if (Room.showstatus() == empty1) { Room.roomReserved(begin, end); cout << "预定成功!时间:" << begin.year << "年" << begin.month << "月" << begin.year << "日---" << end.year << "年" << end.month << "月" << end.day << "日" << endl; int day = (end.year - begin.year) * 365 + (end.month - begin.month) * 30 + (end.day - begin.day); if (day > 2 && day <= 4) { polity = Room.polity1; } else if (day >= 5 && day <= 8) { polity = Room.polity2; } else if (day >= 9) { polity = Room.polity3; } else { polity = 1; } if (polity < 1) cout << "优惠打" << polity * 10 << "折" << endl; } else { cout << "房间已经被预定,请选择其他房间" << endl; } return Room; } private: int NO; float polity; }; class customer { public: customer(){} customer(int Count, int Key) { count = Count; key = Key; customernumber++; cout << "注册成功!" << endl; } void signin() {}; void checkin(reception rec, Time begin, Time end, room Room) { rec.CheckIn(begin, end, Room); } void reserve(reception rec, Time begin, Time end, room Room) { rec.Reserved(begin, end, Room); } void checkout(reception rec, room Room) { rec.CheckOut(Room); } int getnumber() { return customernumber; } int getcount() { return count; } int getkey() { return key; } private: int count; int key; static int customernumber; }; int room::roomnumber = 0; int customer::customernumber = 0; float room::polity1 = 1; float room::polity2 = 1; float room::polity3 = 1; int main() { int user; int rightkey = 123; manager jasur; reception wmn(1); room Baseroom; room Room[40]; customer Customer[40]; customer baseCusomer; string comments[40]; while (true) { cout << "欢迎来到酒店预订系统,请问你是?" << endl; cout << "1.管理员 2.前台 3.客户" << endl; cout << "请输入:" << endl; cin >> user; if (user == 1) { //管理员选项 cout << "请输入管理员密码:" << endl; int key; cin >> key; if (rightkey == key) { cout << "欢迎来到管理员平台欢迎您!" << endl; while (true) { cout << "1.查询入住情况 2.设置客房优惠 3.创建房间 0.退出" << endl; int selection; cout << "请输入:" << endl; cin >> selection; if (selection == 1) { for (int i = 0; i < Baseroom.getRoomnumber(); i++) { jasur.checkInformation(Room[i + 1]); } } else if (selection == 2) { jasur.setPolity(); } else if (selection == 3) { int entry, Rno; cout << "输入创建房间的房间号和类型(1代表豪华间,2代表标准间,3代表普通间)" << endl; cin >> Rno >> entry; if (entry == 1) Room[Baseroom.getRoomnumber()] = jasur.roomcreate(Rno, luxury); else if (entry == 2) Room[Baseroom.getRoomnumber()] = jasur.roomcreate(Rno, standard); else if (entry == 3) Room[Baseroom.getRoomnumber()] = jasur.roomcreate(Rno, ordinary); cout << "操作成功" << endl << endl; } else if (selection == 0) { break; } } } } else if (user == 2) { cout << "欢迎来到前台服务平台" << endl; while (true) { fuwu: cout << wmn.getID() << "号服务员为您服务,本平台为您提供了如下功能:1.查询客房信息 2.办理入住 3.提前预约 4.办理退房 0.退出" << endl; cout << "请选择需要的服务" << endl; int selection; cin >> selection; if (selection == 1) { cout << "客房信息如下:" << endl; for (int i = 0; i < Baseroom.getRoomnumber(); i++) { wmn.checkInformation(Room[i + 1]); } } else if (selection == 2) { Time begin, end; int Rno, index; cout << "输入客户入住时间:"; cin >> begin.year >> begin.month >> begin.day; cout << "输入客户离开时间:"; cin >> end.year >> end.month >> end.day; cout << "客房信息如下:" << endl; for (int i = 0; i < Baseroom.getRoomnumber(); i++) { wmn.checkInformation(Room[i + 1]); } cout << "请输入入住客房号:"; cin >> Rno; for (int i = 0; i < Baseroom.getRoomnumber(); i++) { if (Room[i + 1].getRno() == Rno) { index = i + 1; } } Room[index] = wmn.CheckIn(begin, end, Room[index]); } else if (selection == 3) { Time begin, end; int Rno, index; cout << "输入客户入住时间:"; cin >> begin.year >> begin.month >> begin.day; cout << "输入客户离开时间:"; cin >> end.year >> end.month >> end.day; cout << "客房信息如下:" << endl; for (int i = 0; i < Baseroom.getRoomnumber(); i++) { wmn.checkInformation(Room[i + 1]); } cout << "请输入预约客房号:"; cin >> Rno; for (int i = 0; i < Baseroom.getRoomnumber(); i++) { if (Room[i + 1].getRno() == Rno) { index = i + 1; } } Room[index] = wmn.Reserved(begin, end, Room[index]); } else if (selection == 4) { int Rno,index; cout << "请输入退房房间号:"; cin >> Rno; for (int i = 0; i < Baseroom.getRoomnumber(); i++) { if (Room[i + 1].getRno() == Rno) { index = i + 1; } } Room[index] = wmn.CheckOut(Room[index]); cout << "欢迎留言评论您的体验:" << endl; cin >> comments[index]; } else if (selection == 0) { break; } } } else if (user == 3) { cout << "用户你好,欢迎您来到本酒店" << endl; while (true) { cout << "请问您有本平台的账号吗?没有可以注册一个哦!" << endl; cout << "1.我已经有账号了 2.注册 0.退出" << endl; int selection; cin >> selection; if (selection == 1) { int count, key, rightcount, index = -1; x: cout << "请输入账号:" << endl; cin >> count; for (int i = 0; i < baseCusomer.getnumber(); i++) { if (Customer[i].getcount() == count) { index = i; } } if (index == -1) { cout << "不存在此账号" << endl; goto x; } y: cout << "请输入密码:"; cin >> key; for (int i = 0; i < baseCusomer.getnumber(); i++) { if (Customer[index].getkey() == key) { cout << "登录成功!" << endl; goto fuwu; } else { cout << "密码错误!" << endl; goto y; } } } else if (selection == 2) { int count, key, virity; cout << "请输入注册账号:"; cin >> count; cout << endl; a: cout << "请设置密码:"; cin >> key; cout << "请确认密码:"; cin >> virity; if (key == virity) { customer base(count, key); Customer[baseCusomer.getnumber() - 1] = base; } else { cout << "两次密码不相等,重新输入" << endl; goto a; } } else if (selection == 0) { break; } } } else { cout << "无效的选择,重新选择!"; } } return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
C++ OpenCV单峰三角阈值法Thresh_Unimodal详解
本文主要介绍了适合当图像的直方图具有明显单峰特征时使用,结合了三角法的原理而设计的图像分割方法,感兴趣的小伙伴可以了解一下2021-12-12
最新评论