基于pyinter和mysql的可视化酒店客房管理系统
- 需求分析
- 目标与要求
- 安全性、完整性要求
- 数据流图
- 数据字典
- 概念结构设计
- 分E-R图
- 合E-R图
- 流程图
- 逻辑结构设计
- 关系模式的转化
- 数据库的建立
- 数据表
- 视图
- 源码及相关文件
- 文件及流程
- 部分测试截图
- 源码及文件
- 存在问题
需求分析
目标与要求
对于客户来说:1、网上预约(留下电话号码、姓名以及预约的时间);2、到店登记入住(姓名、电话、身份证号码、性别、押金+付钱、入住时间、房间号);3、基于网上预约的客户可以实现到店查询并且补全信息之后付钱+交付押金;4、退房(退还押金)。
对于前台人员:1、实现客户到店登记信息入住,将信息存入入住信息表中;2、实现客户的预约功能,提前记录到预约表中,客户到店之后将客户信息存入入住表,同时删除预约表中的信息;3、客户退房时,将客户从入住信息表中移除;4、根据生成的用户结账报表收取额外支付金钱,并且记录收入;5、查看客户简略信息
对于管理人员:1、实现房价的更改;2、查看收支状况;3、查询客户详细信息(根据姓名、电话、身份证号、房间号);4、查询员工信息;5、修改员工信息
安全性、完整性要求
数据库需要保障无关人员无法查询、修改员工、房间以及客户的信息,因此这些操作需要由指定的管理员才能涉及更改查询;
实体完整性:入住以及预约的客户表中需要以编号为唯一主键、房间表以房间号为唯一主键、员工表以编号为唯一主键、管理员表以管理员账号为唯一主键、商品表以商品名为唯一主键,避免破坏实体完整性;
参照完整性:客户表中的房间号需要是房间表的外键,因为一个房间可以入住复数以上的客户,同理额外消费表中的房间号也需要是房间表的外键;客户表中的入住、退房办理的前台员工列也需要作为员工表的外键管理员表中的员工编号为外部键。
数据流图
顶层数据流(大体总览):
第二层数据流(具体操作流程):
第三层数据流(各个功能细节):
数据字典
tab_customer = {
‘数据结构名’:‘客户信息表’,
‘含义说明’:‘保存了客户的信息’,
‘组成’:{
‘客户编号’:‘char(10),主键’,
‘客户姓名’:‘char(10)’,
‘性别’:‘char(2),域约束’,
‘身份证号’:‘char(18)’,
‘联系电话’:‘char(11)’,
‘预约状态’:‘char(1),域约束’,
‘入住时间’:‘date’,
‘入住办理员工’:‘char(10)’,
‘退房时间’:‘date’,
‘退房办理员工’:‘char(10)’,
‘房间号’:‘char(10),外键’,
}
}tab_room = {
‘数据结构名’:‘房间信息表’,
‘含义说明’:‘记录了所以房间的信息’,
‘组成’:{
‘房间号’:‘char(10),主键’,
‘类型’:‘char(10)’,
‘价格’:‘int’,
‘状态’:‘char(1),域约束’,
}
}tab_staff = {
‘数据结构名’:‘员工信息表’,
‘含义说明’:‘保存了员工的信息’,
‘组成’:{
‘员工编号’:‘char(10),主键’,
‘姓名’:‘char(10)’,
‘性别’:‘char(2),域约束’,
‘身份证号’:‘char(18)’,
‘电话’:‘char(11)’,
‘职位’:‘char(10)’,
‘工资’:‘int’,
‘密码’:‘char(10)’,
}
}tab_admin = {
‘数据结构名’:‘管理员信息表’,
‘含义说明’:‘保存了管理员的信息’,
‘组成’:{
‘员工编号’:‘char(10),主键’,
‘密码’:‘char(10)’,
‘姓名’:‘char(10)’,
}
}tab_extra_consume = {
‘数据结构名’:‘额外消费表’,
‘含义说明’:‘保存了房间内需要额外付钱的商品价格’,
‘组成’:{
‘房间号’:‘char(10),主键’,
‘果汁’:‘int’,
‘毛巾’:‘int’,
‘烟’:‘int’,
}
}tab_commodity = {
‘数据结构名’:‘商品信息表’,
‘含义说明’:‘记录了每种商品的价格’,
‘组成’:{
‘商品名’:‘char(10)’,
‘价格’:‘int’,
}
}
tab_profit= {
‘数据结构名’:‘收支’,
‘含义说明’:‘记录了每天每个用户的消费’,
‘组成’:{
‘编号’:‘唯一’,
‘past_ID’:‘char(18)’,
‘past_In_Time’:‘char(18)’,
‘past_customer’:‘int’,
}
}
概念结构设计
分E-R图
合E-R图
将各个分E-R图消除冗余,合并成合E-R图:
流程图
因此管理系统需要满足:
1、办理入住:录入客户的编号、姓名、性别、身份证号、联系电话、预约状态、入住时间、房间号
2、登记、预约预约操作:录入客户的姓名、联系电话、需要的房间类型;对于到店登记,还需记录身份证号
3、退房操作:录入客户的房间号、退房时间,返回计算出的额外消费和总计消费
4、客户信息查询:返回客户的姓名、性别、身份证号、联系电话、预约状态、入住时间、房间号
5、员工信息查询:返回员工的编号、姓名、性别、职位等
6、房间信息修改:可修改价钱、类型、增减客房等操作
7、员工信息修改:可修改员工的编号、姓名、性别、职位等
逻辑结构设计
关系模式的转化
• 客户信息表:
’客户编号’:‘char(10),主键’,
‘客户姓名’:‘char(10)’,
‘性别’:‘char(2),域约束’,
‘身份证号’:‘char(18)’,
‘联系电话’:‘char(11)’,
‘预约状态’:‘char(1),域约束’,
‘入住时间’:‘date’,
‘入住办理员工’:‘char(10)’,
‘退房时间’:‘date’,
‘退房办理员工’:‘char(10)’,
‘房间号’:‘char(10),外键’,• 房间信息表:
‘房间号’:‘char(10),主键’,
‘类型’:‘char(10)’,
‘价格’:‘int’,
‘状态’:‘char(1),域约束’,• 员工信息表:
‘员工编号’:‘char(10),主键’,
‘姓名’:‘char(10)’,
‘性别’:‘char(2),域约束’,
‘身份证号’:‘char(18)’,
‘电话’:‘char(11)’,
‘职位’:‘char(10)’,
‘工资’:‘int’,
‘密码’:‘char(10)’,• 管理员信息表:
‘员工编号’:‘char(10),外键’,
‘密码’:‘char(10)’,
‘用户名’:‘char(10),主键’,• 额外消费表:
‘房间号’:‘char(10),主键’,
‘果汁’:‘int’,
‘毛巾’:‘int’,
‘烟’:‘int’,• 商品信息表:
‘商品名’:‘char(10)’,
‘价格’:‘int’,• 收支信息表:
‘编号’:‘自增,主键’,
‘身份证号’:‘char(18)’,
‘入住日’:‘date’,
‘总消费’:‘int’,
数据库的建立
数据表
'''房间表的创建'''
CREATE TABLE tab_room(
room char(10) PRIMARY KEY not null,
rtype char(10) not null CHECK(order_type in('单人','双人','大床','总统套房')),
rprice int,
rstate char(1) DEFAULT '0' CHECK(rstate in('0' ,'1'))
);
'''员工表的信息创建'''
CREATE TABLE tab_staff(
sno char(10) PRIMARY KEY not null,
sname char(10) not null,
ssex char(2) not null CHECK(ssex in('男','女')),
sID char(18) not null,
snumber char(11),
sposition char(10) not null,
ssalary int not null,
spassword char(10)
);
'''预约表'''
CREATE TABLE tab_order(
order_no int AUTO_INCREMENT PRIMARY KEY not null,
order_name char(10) not null,
order_number char(11) not null,
order_room char(10) not null,
order_arrive_time date
);
'''入住客户信息表的创建'''
CREATE TABLE tab_customers(
cno int AUTO_INCREMENT PRIMARY KEY not null,
cname char(10) not null,
csex char(2) CHECK(cesx in('男' ,'女')),
cID char(18) not null,
cnumber char(11) not null,
cInTime date,
cInStaff char(10),
cOutTime date,
cOutStaff char(10),
room char(10),
FOREIGN KEY(room) REFERENCES tab_room(room),
FOREIGN KEY(cInStaff) REFERENCES tab_staff(sno),
FOREIGN KEY(cOutStaff) REFERENCES tab_staff(sno)
);
'''管理员信息创建'''
CREATE TABLE tab_admin(
sno char(10) PRIMARY KEY not null,
id char(10) not null,
password char(10) DEFAULT 'admin',
FOREIGN KEY(sno) REFERENCES tab_staff(sno)
);
'''额外消费支出信息创建'''
CREATE TABLE tab_extra_consume(
room char(10) not null PRIMARY KEY,
juice int,
towel int,
smoke int,
FOREIGN KEY(room) REFERENCES tab_room(room)
);
'''商品价格表'''
CREATE TABLE tab_commodity(
cono int AUTO_INCREMENT PRIMARY KEY not null,
coname char(10),
coprice int
)
'''收入表'''
CREATE TABLE tab_income(
past_no int AUTO_INCREMENT PRIMARY KEY not null,
past_ID char(10) not null,
past_Out_Time date not null,
past_customer char(10) not null
);
视图
‘’‘员工可查询的简略客户信息视图’‘’
CREATE VIEW view_simple_customer_info
as
select cname ,csex ,room ,cnumber
from tab_customers;
源码及相关文件
文件及流程
主要文件:
database_control.py:存储了有关涉及到数据库的一系列操作
windows_control.py:存储了涉及到窗口显示的相关函数
酒店服务管理系统.py:main()函数
其它文件
icon.ico:生成.exe文件的图标
步骤
1、在cmd窗口下使用pyinstaller -F 酒店服务管理系统.py -p database_control.py -p windows_control -w -i ./icon.ico
生成可执行文件。-F
是生成.exe的主文件,生成的可执行文件名与此py文件名相同-p
是生成-F指定文件附属的其它py文件-w
是在执行.exe文件时不显示cmd窗口(调试时不使用,否则看不到报错)-i
指定生成exe文件的图标,不指定则为默认py图标
2、之后会在该文件夹下面自动生成三个子文件夹:
可执行文件在dist里面,直接启动即可:
部分测试截图
(以下可以实现的基础是在数据库中有数据的前提下)
源码及文件
https://github.com/645692095/Hotel_Management_System
存在问题
首先只实现了普通员工的所有操作,而管理员的操作现在还是空白(实在没时间了),而且其实已经在前半部分完成了一些操作的难点步骤(数据库的增删查改,可视化的各种控件均有运用),因此管理员的操作部分基本就是按照之前的模板随便改改就是了。
其次是界面没有美化是真的丑,但是实在懒得构思了,而且pyinter这个库在界面美化一方面确实有些缺陷
最后也是最重要的一点是,由于首次独立完成数据库的工程项目,可能之前许多步骤有不足,甚至还有错的地方,基本上是全部步骤走下来写代码的地方不断发现E-R、流程图的问题,前前后后光普通员工这一块就改了5,6次,还有一次大改,因此不确定涉及到管理员操作的地方是否有错误,欢迎各位指正!