目录
1 设计题目
宾馆客房管理系统的设计
2 开发环境
编程语言:C++
Qt开发框架,集成开发环境(IDE),版本控制系统。
3 开发工具
Qt Creator
4 完成时间
2023-6 –19----2023.6.23
小组人员分工:
赵宸辉:制作宾馆客房管理系统的登记入住功能,餐饮消费相关增删改查;
杨桃香:制作宾馆客房管理系统的登录界面,预约功能,Qt界面设计。
5 设计思想
5.1 基本流程图
图5.1预订房间流程图
5.2 设计思路
首先进入登录界面,用户名是123,密码是1,进入界面先出现每层32个房间,黑色模块房间表示已经入住,白色模块房间表示未入住。点击黑色模块房间可以显示房间状态,房间号,房主姓名,居住时间,入住日期,离开日期,应付金额,并可以进行顾客的退房和延时操作,退房界面会显示顾客住了多久,应付金额是多少,最后进行退房。续时的界面会显示续时多少天,最后在退房时会显示一共住了多少天,金额应付多少。点击白色模块会显示房间状态和房间号,可以进行预约和登记,预约是顾客提前输入信息,商家对房间进行保留,
登记要输入顾客的身份证号和真实姓名,入住天数,进行登记。
在顾客入住房间以后,可以去餐厅消费,餐厅我设置了输入菜品,价格,库存,来保证顾客的消费需求,在选定菜品的情况下,可以对菜品进行增删改查,增加数量,减少数量,修改菜品名字,修改菜品价格。
6 设计过程及设计步骤
首先先设置一个登录界面,输入用户名和密码就可以登录进入到宾馆客房管理系统,如果输入用户名或者密码失败就会显示输入错误;如果没有错误则登录成功。
for(int i=0;i<account.size();i++)
{
if(thisAccount==account[i])
{
QMessageBox::warning(this, tr("警告!"),tr("用户名已存在,请重新输入"),QMessageBox::Yes);
ui->lineEdit_account->clear();
ui->lineEdit_pw->clear();
tmp=1;
}
}
QFile accounttxt("account.txt");
QFile pw("possword.txt");
if (accounttxt.open(QIODevice::Append|QFile::WriteOnly )||tmp==0)
{
QTextStream date(&accounttxt);
date<<endl;
date<<thisAccount<<endl;
if( pw.open(QIODevice::Append|QFile::WriteOnly))
{
QTextStream possword(&pw);
possword<<endl;
possword<<thisPassword<<endl;
}
QMessageBox::information(this, tr("恭喜您!帐号注册成功!"),tr("欢迎来到Timer酒店,祝您度过一段愉快的时光!"),QMessageBox::Yes);
}
accounttxt.close();
}
作为一个宾馆客房间管理系统,必然涉及到客房对象,顾客对象等实体。这个系统我设置了64个房间,其中输入房间类型和价格,可以通过房间编号得到房间相关信息,是否有人入住,顾客的相关信息。然后就是房间的预订问题,就是当有顾客要求定房或入住时,我的程序能够根据用户要求入住的房间中去查找一个还没有预定的房间和一个没有入住的空闲房间。[3]
void RoomAvailableDialog::readData()
{
qDebug()<<"in readData()";
std::vector<int>rooms = Hotel::getInstance()->getRoomList("y");
ui->lblinfo->setStyleSheet("QLabel { background-color : grey; color : aqua; }");
std::vector<int>temprooms = {101, 102, 103, 104, 105, 201, 202, 203, 204, 205};
//set default color to all
for(std::vector<int>::iterator it = temprooms.begin(); it!=temprooms.end(); it++ )
{
//Put logic to change color of Labels
QString lblname = "lbl" + QString::number(*it);
QLabel * ptr = this->findChild<QLabel*>(lblname);
if(ptr)
{
ptr->setStyleSheet("QLabel { background-color : lightgrey; color : aqua; }");
}
}
QFile::remove(roomId+"号房间.txt");
QFile account(roomId+"号房间.txt");//新建一个房间文件
if (account.open(QIODevice::Append|QFile::WriteOnly |QIODevice::Text))
{
QTextStream date(&account);
for(int i=0;i<room_info.size()-1;i++)
date<<room_info[i];
date<<endl;
bool ok;
date<<QString::number(100*(room_info.toInt(&ok,10)));
account.close();
}
setWindowFlags(Qt::WindowStaysOnTopHint);
this->raise();
this->close();
}
当启动程序后,在Qt平台下都是从hotel函数开始运行的,程序首先调用initial_room函数[4]初始化64个房间的信息。当房间号为灰色表示该房间既没有被预定,也没有被入住。然后调用checkout-dal函数,[1]考虑到作为一个宾馆管理系统的安全性,对操作本系统的人员也要求认证的,输入了正确的用户名和密码才能操作系统。当通过登陆认证后,就进入宾馆管理系统了,在这里,系统给操作员显示一个操作菜单,当操作员选择不同的数字就实现不同的功能。
int beginYear=ui->lineEdit_year->text().toInt(&ok,10);
if(!ifAbsNumber(ui->lineEdit_year->text()))
{
QMessageBox msg_fail;
msg_fail.setText("年份有误,请重新输入");
msg_fail.exec();
return 0;
}
int beginMouth=ui->lineEdit_mouth->text().toInt(&ok,10);
if(!ifAbsNumber(ui->lineEdit_mouth->text())||beginMouth<0||beginMouth>12)
{
QMessageBox msg_fail;
msg_fail.setText("月份有误,请重新输入");
msg_fail.exec();
return 0;
}
int beginDay=ui->lineEdit_day->text().toInt(&ok,10);
if(!ifAbsNumber(ui->lineEdit_day->text())||beginDay<0||beginDay>31)
{
QMessageBox msg_fail;
msg_fail.setText("日期有误,请重新输入");
msg_fail.exec();
return 0;
}
int beginHour=ui->lineEdit_hour->text().toInt(&ok,10);
if(!ifAbsNumber(ui->lineEdit_hour->text())||beginHour<0||beginHour>24)
{
QMessageBox msg_fail;
msg_fail.setText("小时有误,请重新输入");
msg_fail.exec();
return 0;
}
int duringTime=ui->lineEdit_duringTime->text().toInt(&ok,10);
QDateTime begin(QDate(beginYear,beginMouth,beginDay),QTime(beginHour,0,0));
QString beginTime=begin.toString("yyyy-MM-dd hh:mm");
if(!b)
{
QMessageBox msg_fail;
msg_fail.setText("姓名有误,请重新输入");
msg_fail.exec();
return 0;
}
if(!ifAbsNumber(cardNum))
{
QMessageBox msg_fail;
msg_fail.setText("帐号有误,请重新输入");
msg_fail.exec();
return 0;
}
QDateTime now=QDateTime::currentDateTime();
if(now.msecsTo(begin)<=0)
{
QMessageBox msg_fail;
msg_fail.setText("日期有误,请重新输入");
msg_fail.exec();
return 0;
}
return 1;
}
顾客可以提前到宾馆进行房间的预定,操作员能根据用户的需求预订顾客需求的房间。在这个系统中,这个功能是在book_room函数[2]中实现的。首先,构造一个顾客对象,然后设置该顾客预定客房的天数,设置顾客预定客房标准,根据用户需要的客放标准到相应的标准客房去查找一个一个既没有被预定也没有入住的房间,然后把该住房对象结构体的状态修改为已预定状态,同时将顾客对象的预定房间号属性,也将住房费用计算出来并显示到界面上。
void Order::calMoney()
int addMoney=0;
for(int i=0;i<orderMenu.size();i+=2)
{
for(int k=0;k<menu.size();k++)
{
if(orderMenu[i]==menu[k])
{
bool ok;
addMoney+=menu[k+1].toInt(&ok,10);
}
}
}
QFile thisRoom(roomId+"号房间.txt");
if (thisRoom.open(QFile::ReadOnly | QIODevice::Truncate|QIODevice::Text))
{
while(!thisRoom.atEnd())
{
QTextCodec *codec = QTextCodec::codecForLocale();
QString tmp=codec->toUnicode(thisRoom.readLine());
tmp.chop(1);
roomInfo.push_back(tmp);
}
thisRoom.close();
}
else
qDebug()<<"文件打开失败";
bool ok;
roomInfo[5]=QString::number(roomInfo[5].toInt(&ok,10)+addMoney,10);
QFile::remove(roomId+"号房间.txt");
QFile account(roomId+"号房间.txt");//新建一个房间文件
if (account.open(QIODevice::Append|QFile::WriteOnly |QIODevice::Text))
{
QTextStream date(&account);
for(int i=0;i<roomInfo.size();i++)
{
date<<roomInfo[i]<<endl;
}
}
}
程序首先判断顾客是否订房了,如果预定了房间,同时显示到界面上,这时操作员对顾客进行安排,同时设置顾客的相关信息。如果顾客没有来得及先预定房间,在这里可以实现空房入住的功能,同预定房间功能一样,先建立一个顾客对象代表即将入住的顾客,然后设置入住天数,选择住房标准,设置顾客的住房房间属性,同时修改该房间的状态为已入住状态,计算好要收的房费直接执行收费。
QFile menufile("menu.txt");//新建一个房间文件
if (menufile.open(QIODevice::Append|QFile::WriteOnly |QIODevice::Text))
{
QTextStream date(&menufile);
for(int i=0;i<menu.size();i++)
date<<menu[i]<<endl;
}
else
menufile.close();
upDateTableView();
ui->lineEdit_remove->clear();
}
}
QFile::remove(roomId+"号房间.txt");
QFile account(roomId+"号房间.txt");//新建一个房间文件
if (account.open(QIODevice::Append|QFile::WriteOnly |QIODevice::Text))
{
QTextStream date(&account);
for(int i=0;i<room_info.size()-1;i++)
date<<room_info[i];
date<<endl;
bool ok;
date<<QString::number(100*(room_info[4].toInt(&ok,10)));
account.close();
}
setWindowFlags(Qt::WindowStaysOnTopHint);
this->raise();
this->close();
7 测试运行
首先进入登录界面
图6.1登录界面
一楼二楼三楼的每层32个房间展示,黑色表示房间已经登记或预约,灰色表示房间未登记
图6.2房间展示图
点击空房间进行登记入住,输入顾客的具体信息
图6.3登记信息
登记成功
图6.4登记成功
显示预订成功
图6.5预订成功
显示已入住的顾客相关信息
图6.6相关信息
顾客预约房间
图6.7预约房间
预约成功
图6.8预约成功
餐饮后台
图6.9餐饮后台
对餐饮相关信息的增删改查
图6.10餐饮信息
8 评价与修订
功能完整性评价:评估宾馆客房管理系统是否包含了所有必要的功能,如客房查询、客房预订、客房入住登记、客户信息管理等。确保系统能够满足宾馆日常管理的需求。系统对客房预订和入住数据的存储与管理方式。可以不断改进宾馆客房管理系统,提升其功能、性能和稳定性,从而更好地满足宾馆管理的需求。
9设计体会
设计一个基于C++和Qt Creator的宾馆客房管理系统是一项非常有趣的任务。在这个过程中,我学到了很多关于软件设计和开发的经验和技巧。以下是我对设计C++用Qt Creator宾馆客房管理系统的体会的一些总结。
首先,Qt Creator是一个非常强大和灵活的集成开发环境,可以方便地进行图形界面设计和实现。在设计宾馆客房管理系统时,我善用了Qt Creator提供的图形化界面设计工具,[5]如使用布局管理器来布置UI元素[2]。这些工具和机制大大提高了界面的可视化设计和开发效率。
其次,C++作为一种强大的编程语言,为宾馆客房管理系统的设计提供了丰富的工具和特性。在系统的设计过程中,我利用C++的封装性和面向对象的特性[2],将系统划分为合理的模块和类,实现了强聚合和低耦合的设计。这种设计方式使得系统更加易于理解和维护,并且方便进行功能的扩展和修改。
其次,设计宾馆客房管理系统还需要考虑到数据存储和管理。我选择采用关系型数据库来存储酒店的数据,通过使用C++中的数据库接口和Qt提供的数据库模块,实现了数据的增删改查功能。同时,为了提高系统的性能,我还使用了数据库索引和缓存的技术,加快了数据的读取和存储速度。
总的来说,设计一个基于C++和Qt Creator的酒店管理系统是一项有趣的任务。通过设计这样一个系统,我掌握了图形界面设计和开发的技巧,提高了对C++语言的运用能力,学会了利用库和组件来快速实现系统功能,以及注重系统的扩展性和维护性。这些经验对我今后的软件设计和开发工作都有很大的帮助。
参 考 文 献
- 李欣然,赵山林。 C++语言程序设计中多态问题分析[J]. 计算机时代,2017,(02):57-59. [2017-10-10]. DOI:10.16644/j.cnki.cn33-1094/tp.2017.02.017
- 张银霞,耿蕊,李敬有。 融合计算思维的“C++程序设计”案例教学实践[J]. 工业和信息化教育,2016,(11):42-46. [2017-10-10].
- 郑步芹,石鲁生。 “项目案例驱动”在《C++面向对象程序设计》课程改革中的应用研究[J]. 电脑知识与技术,2017,13(02):164-165. (2017-03-23)[2017-10-10].
- 朱俊,陈琳琳,朱娴,谢玲,帅辉明。 独立学院计算机专业C++课程教学改革与实践[J]. 中国教育技术装备,2017,(02):103-106. [2017-10-10].
- 董婉萍。 计算机C++语言编辑程序技巧[J]. 电子技术与软件工程,2017,(07):262. [2017-10-10].
#include "mainwindow.h"
#include <QApplication>
#include <QTranslator>
#include <QFile>
#include <QMessageBox>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//添加语言
QTranslator translator;
translator.load(QCoreApplication::applicationDirPath()+"/Hotel_zh_CN.qm");
a.installTranslator(&translator);
//添加样式
QFile file(QCoreApplication::applicationDirPath()+"/qss/Style_Blue.qss");
file.open(QFile::ReadOnly);
if (file.isOpen())
{
QString styleSheet = QLatin1String(file.readAll());//读取样式表文件
qApp->setStyleSheet(styleSheet);//把文件内容传参
file.close();
}else{
QMessageBox::information(0,"提示","无法打开qss文件");
}
MainWindow w;
w.show();
return a.exec();
}
#include "roomavailabledialog.h"
#include "ui_roomavailabledialog.h"
#include <QDebug>
RoomAvailableDialog::RoomAvailableDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::RoomAvailableDialog)
{
ui->setupUi(this);
this->setFixedSize(380,200);
qDebug()<<"In RoomAvailableDialog()";
}
void RoomAvailableDialog::readData()
{
qDebug()<<"in readData()";
std::vector<int>rooms = Hotel::getInstance()->getRoomList("y");
ui->lblinfo->setStyleSheet("QLabel { background-color : grey; color : aqua; }");
std::vector<int>temprooms = {101, 102, 103, 104, 105, 201, 202, 203, 204, 205};
//set default color to all
for(std::vector<int>::iterator it = temprooms.begin(); it!=temprooms.end(); it++ )
{
//Put logic to change color of Labels
QString lblname = "lbl" + QString::number(*it);
QLabel * ptr = this->findChild<QLabel*>(lblname);
if(ptr)
{
ptr->setStyleSheet("QLabel { background-color : lightgrey; color : aqua; }");
}
}
for(std::vector<int>::iterator it = rooms.begin(); it!=rooms.end(); it++ )
{
//Put logic to change color of Labels
QString lblname = "lbl" + QString::number(*it);
QLabel * ptr = this->findChild<QLabel*>(lblname);
if(ptr)
{
//pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
ptr->setStyleSheet("QLabel { background-color : grey; color : aqua; }");
}
}
}
RoomAvailableDialog::~RoomAvailableDialog()
{
qDebug()<<"Deleting RoomAvailableDialog";
delete ui;
}
void RoomAvailableDialog::on_pushButton_clicked()
{
this->hide();
}
经过本周的课程设计,我们学习到了许多在课堂上听课而不能获得的知识,首先我要感谢学校给我们安排的这次的C++语言程序设计,然后我要感谢老师对我们的热心指导和帮助,是他教会我们怎样解决问题的方法,这样我们的系统设计才会更加顺利的进行,并且充分掌握了设计系统的方法,其次还要感谢同学对我给予的帮助,他们的帮助对于我来说是必不可少的,总之是有了他们的帮助我才能顺利的完成本次课程设计。
课程设计
课程设计题目 | 宾馆客房管理系统 | ||
课程设计学生答辩或质疑记录: (1)问题1:如何实现房间状态的实时更新? 答:可以使用Qt的信号与槽机制,当房间状态发生变化时,发送信号通知相应的界面进行更新。 (2)问题2:如何管理房间的入住和退房状态? 答:为每个房间设计一个状态属性,可以是枚举类型,表示房间的入住状态。通过管理这个状态属性,系统能够追踪房间的入住和退房状态。 (3)问题3:如何生成客户的账单? 答:使用Qt的打印功能,可以设计并生成客户的账单。可以通过自定义打印模板和使用Qt的绘图功能来实现账单的生成。 | |||
评 分 依 据 | 分 值 | 评分成绩 | |
1.设计方案正确性、可行性等 | 20 分 | ||
2.系统调试与结果 | 20分 | ||
3.答辩情况 | 30分 | ||
4.设计报告撰写水平、规范化程度等 | 30分 | ||
总 分 | 100分 | ||
指导老师签字: 2023 年 6 月 日 |