1.项目简介
写了个基于Qt C++的酒店管理系统,开发工具Qt Creater,数据库SQLIte。
主要功能模块包括:预约,登记,追加消费,退房,综合查询,查看今日房态。具体有些细节没实现(比如电话号判断,一些输入为空什么的),感觉没必要写了这个项目主要为了实现主要功能。
主要技术为Qt C++一些控件使用,ui设计,qss样式表,数据库增删改查,多表联查,没用model。
开发环境:qt6.5.2。
源码去【Qt C++】酒店管理系统_哔哩哔哩_bilibili三连加私信。
2.数据库设计
一共四个表
1.room表
roomNumber | roomType | roomDepict | price | status |
text主键 | text | text | interger | text |
房间号,101,201,301...
房间类型,单人房,双人房,套房
房间描述,单人房的是:一张床、书桌、衣柜和卫生间
价格,100,200,300(一天)
状态,无人入住,有人预约,有人入住
2.appointment表
appointmentId | name | IDNumber | phoneNumber | appointmentDate | roomNumber |
interger主键 | text | text | text | text | text |
预约id,姓名,身份证号,电话号,预约时间,房间号
3.customer表
customerID | name | sex | IDNumber | phoneNumber | roomNumber | dateOfArrival | dOD | cons |
interger主键 | text | text | text | text | text | date | date | interger |
外键roomNumber
4.recordCustomer表
字段和customer表一样
3.项目内容介绍
1.登录界面
主体为stackedWidget,构造函数中默认登录界面
ui->stackedWidget->setCurrentIndex(0);
登录没什么好写的,基本就是数据库存账号密码,这里图简单账号密码写死。
2.服务选择界面
主要功能在“酒店管理”按钮里,“系统设置”没写。
3.预约
预约功能三个槽函数,重置按钮和下拉框比较次要,主要在预约按钮。
预约按钮:填完预约信息后点击,首先根据roomNumber在room表里查改roomNumber的status,如果为“有人预约”或“有人入住”,提示预约失败(已被预约和入住的房间当然无法预约),如果为“无人入住”,判断预约时间,小于当前日期提示“预约时间输入有误”(防止前台不小心输错)。以上两点都通过则提示预约成功,将该输入信息插入appointment表,并在room表更新本次预约roomNumber的status为“有人预约”,更新“今日房态”的房间颜色。
重置按钮:清空所有lineEdit的输入信息,dateEdit设置为当前日期。
返回按钮:返回选择服务界面。
房间号的lineEdit有个槽函数textChanged,文本变化时根据输入房间号comboBox显示对应房间类型(101,单人房)。
4.登记
查询预约情况按钮:如果客户是预约后来酒店登记的情况。只输入姓名在appointment表查询信息,查到输入的姓名,说明有先前预约,将查到信息放在当前页面各个lineEdit里。没查到提示“该顾客没有之前的预约”。
登记按钮: 先根据输入姓名查询appointment对应的IDNumber,和登记上输入的身份证号比较,如果身份证号不一样,说明是重名人来登记的(预约查询的是相同名字的其他人的预约,毕竟身份证不会出现一样的),提示“该房间有人预约”,要换个房间查房间状态。其他类似预约按钮,查房间状态,查输入入住日期和离店日期是否合法。登记成功后,插入customer表,跟新room表房间状态,如果更新“今日房态”的房间颜色,appointment表删除本次登记roomNumber的预约(如果有预约就删除了,没预约sql语句执行失败)。
5.追加消费
确认按钮:首先在room表查询所输入房间号的房间状态,如果不为“有人入住”,说明房间号不小心输入错误,提示“追加消费失败”。否则,计算输入的“商品消费”和“损坏赔偿”的和,修改customer表对应roomNumber的consume(本次计算的和+consume原来的数值)。
6.退房
核实信息按钮:输入房间号,将查询的信息显示在各个lineEdit。
//多表联查
QString str = QString("select * from customer join room using(roomNumber) where roomNumber = '%1'").arg(roomNumber);
其中总价计算
//房间单价
quint16 price = q.value(11).toInt();
//天数 计算
quint16 day = departureDate.right(2).toInt() - arriavlDate.right(2).toInt() ;
//总价 计算
quint16 consume = day * price + otherconsume;
退房按钮:customer表更新consume,将这条信息插入到recordCustomer表,删除customer表这条信息,跟新room表房间状态,跟新今日房态房间颜色,
7.综合查询
查询按钮:输入姓名或房间号都可查询全部信息,姓名lineEdit为空执行房间号查询,不为空执行姓名查询,将查询的信息显示到各个lineEdit。
QString name = ui->letEName->text();
QString roomNumber = ui->letERoomNumber->text();
QSqlQuery q;
//多表联查
QString str1 = QString("select * from customer join room using(roomNumber) where name = '%1'").arg(name);
QString str2 = QString("select * from customer join room using(roomNumber) where roomNumber = '%1'").arg(roomNumber);
8.查看今日房态
showRoomStatus()函数,每次调用,查询room表各个房间的状态,对应的label显示不同颜色。