精华内容
下载资源
问答
  • 酒店管理系统分析和数据字典
    千次阅读
    2020-07-12 17:14:04

    酒店管理系统:
    一:需求分析
    1.酒店管理系统需要满足酒店工作人员和管理人员的需求。
    2.管理员和员工可以通过各自的密码登入系统进行各自的管理和营业需求。
    3.酒店管理人员和工作人员可以为酒店房间加入入住和退房记录信息,并生成相应的报表,用于数据的浏览,统计。工作人员可以浏览、统计、添加酒店房间的入住和退房信息。
    4.客户入住酒店时,酒店工作人员需要对客户的姓名、性别、身份证号、房间号、入住时间、联系方式等信息进行记录,退房时进行退房记录。
    5.管理员和员工可以通过姓名、入住日期、身份证号、联系方式等信息查询客户入住和离开的信息。 6. 管理人员可以查询房间信息、查询人工信息、更改退房信息、更改员工信息等。
    二:功能分析
    1.登入系统:酒店管理员和员工可以通过各自的编号和密码登入系统。
    2.入住办理:客户需要办理会员卡(享受折扣,普通会员不打折)、工作人员需要记录客人的信息。若房间已满或选择的房间不为空闲则不能办理入住。
    3.入住信息查询:工作人员和管理员可以对已入住的客户进行信息查询。支持模糊查询和精准查询。
    4.房间查询:管理员可以查询房间信息:如房间类型、房间价格、房间是否为空、若已经被入住,则额外显示入住人的信息。
    5.退房办理:当客户要退房时,工作人员需要记录退房的时间。
    6.员工查询:管理员可以查询员工的信息:如姓名、性别、编号、联系方式等。
    7.更改房间信息:管理员可以更改房间信息:如房间类型、房间价格、增删房间。
    8.更改员工信息:管理员可以更改员工信息:如更姓名、性别、职位、增删员工等。
    三:数据项目和其组成的数据结构:
    客户ID(识别客户身份信息)、客户姓名、客户性别、会员卡名称(会员卡类型)、客户办卡日期、客户身份证号、入住编号(识别和查询入住信息)、客户入住时间、客户应退房时间、付款金额、客户退房时间、续住金额、总付款金额、客户联系方式、折扣、房间号、房间状态、房间类型、房间价格、员工ID(识别员工身份信息)、员工姓名、员工性别、员工身份证号码、员工职位、员工工资、员工密码、员工联系方式、管理员ID(识别管理员身份信息)、管理员姓名、管理员密码、管理员联系方式。

    数据结构:
    1.客户:客户ID、客户姓名、客户性别、会员卡名称、客户办卡日期、客户身份证号、客户联系方式。
    2.房间:房间号、房间类型、房间价格、房间状态。3.员工:员工ID、员工姓名、员工性别、员工身份证号、员工职位、员工工资、员工密码、员工联系方式。
    4.管理员:管理员ID、管理员姓名、管理员密码、管理员联系方式。
    5.入住记录:入住编号、客户编号、客户入住时间、客户应退房时间、房间号、员工姓名、付款金额。
    6.退房记录:入住编号、客户退房时间、员工姓名、续住金额、总付款金额。
    7.会员类别:会员卡名称、折扣。
    四:数据字典
    1.房间信息表:RoomInfo
    列名 数据类型 约束 含义:
    RoomID Varchar(10)Primary Key 房间号RoomType Varchar(10)Not null 房间类型RoomPrice Double Not null 房间价格RoomStatus Varchar(3)Not null 房间状态(空闲房、已入住、待维修、未清理)
    2.客户信息表:CustomerInfo
    列名 数据类型 约束 含义
    CustomerID Varchar(10)Primary Key 客户编号CustomerName Varchar(10)Not null 客户姓名CustomerGender Varchar(2)Not null 客户性别(先生、女士)
    VIPName Varchar(10)Not null 会员卡名称(贵宾卡、钻石卡、至尊卡、绅士卡)CustomerIDNumber Varchar(18)Not null 客户身份证号CustomerPhone Varchar(11)Not null 客户联系方式CustomerCreateDate Date Not null客户办卡日期
    3.员工信息表:WorkerInfo
    列名 数据类型 约束 含义
    WorkerIDVarchar(10)Primary Key员工编号WorkerNameVarchar(10)Not null员工姓名WorkerGenderVarchar(2)Not null员工性别WorkerIDNameVarchar(18)Not null员工身份证号WorkerPositionVarchar(10)Not null员工职位WorkerWageDoubleNot null员工工资WorkerpasswordVarchar(20)Not null员工密码WorkerPhoneVarchar(11)Not null员工联系方式
    4.管理员信息表:ManagerInfo
    列名数据类型约束含义
    ManagerIDVarchar(10)Primary Key管理员编号ManageNameVarchar(10)Not null管理员姓名ManagePasswordVarchar(20)Not null管理员密码ManagePhoneVarchar(11)Not null管理员联系方式
    5.会员类别表:VIPTypeInfo
    列名 数据类型 约束 含义
    VipNameVarchar(10)Not null会员卡名称DiscountDoubleNot null折扣
    6.入住记录表:InInfo
    列名 数据类型 约束 含义
    InIDVarchar(10)Primary Key入住编号CustomerIDVarchar(10)Not null客户编号CustomerInDateDateNot null入住时间CustomerOutDateDateNot null应退房时间RoomIDVarchar(10)Not null房间号WorkerNameVarchar(10)Not null员工姓名PaymentDoubleNot null付款金额
    7.退房记录表:OutInfo
    列名 数据类型 约束 含义
    InIDVarchar(10)Not null入住编号CustomerOutDateDateNot null退房时间WorkerNameVarchar(10)Not null员工姓名ContinuePriceDoubleNot null续住金额SumPaymentDoubleNot null总付款金额

    更多相关内容
  • 关于酒店餐饮管理信息系统的详细数据流图!!详细的描述了数据流的流动过程。有利于模块化的分析!
  • 数据库课程设计 ——酒店管理系统

    万次阅读 多人点赞 2019-05-31 10:36:11
    (1)酒店管理系统用于满足酒店工作人员和管理人员的需求。 (2)酒店管理人员和工作人员可以为酒店房间加入入住和退房记录,并生成相应的报表用于查阅,确认和保存,酒店工作人员可以浏览、查询、统计、添加酒店...

    一、 需求分析

    1.软件需求

    (1)酒店管理系统用于满足酒店工作人员和管理人员的需求。
    (2)酒店管理人员和工作人员可以为酒店房间加入入住和退房记录,并生成相应的报表用于查阅,确认和保存,酒店工作人员可以浏览、查询、统计、添加酒店房间的入住离开信息。管理员可以查询房间信息、查询员工信息、更改房间信息、更改员工信息等。
    (3) 客户可以申请入住酒店,酒店工作人员需要对客户的姓名、性别、身份证号、房间号、入住时间、联系方式等信息进行记录,客户退房时进行退房记录。
    4、管理员和员工可以通过姓名、入住日期、身份证号、房间号、联系方式等信息查询客户入住和离开情况。
    从客户角度考虑业务流程如图1-1所示。
    在这里插入图片描述

                                                         图1-1 酒店管理业务流程图

    2.功能描述

    根据需求分析,得到系统的功能需求。作为一个酒店管理系统,应满足入住办理、入住信息查询、房间查询、退房办理等功能,其功能要求如下:
    (1)入住办理。客户凭借会员卡入住,每当有客人需要入住时进行办理程序。工作人员需要记录客人的姓名、性别、身份证号、入住时间、联系方式等。若办理入住的房间不为空则不允许办理入住。
    (2)入住信息查询。工作人员可以对已入住的客户进行信息查询。需要支持精准查询,如通过房间号查询、通过姓名查询、通过入住日期查询、通过联系方式查询等,也要支持模糊查询,如通过姓氏查询、通过入住年月查询、通过性别查询等。
    (3)房间查询。管理员可以查询某个房间是否为空以及历史入住/退房信息等。可以查询的信息有:房间类型、房间价格、房间当前是否为空等,若当前房间已被入住,则需要额外显示入住人姓名、入住人联系方式、入住人入住时间等信息。
    (4)退房办理。当客户退房时进行退房办理。工作人员需要记录入住人退房时间、罚款等信息。若退房的房间为空,则不允许办理。
    (5)员工查询。 管理员可以对酒店员工信息进行查询,可查询员工姓名、性别、联系方式等。
    (6)更改房间信息。 管理员可以更改房间信息,如房间类型、价格、增加房间、删除房间等。
    (7)更改员工信息。管理员可以更改员工信息,如姓名、性别、职位、增加员工、删除员工等。

    3.数据流图和数据字典

    Ⅰ.数据流图
    (1)顶层数据流图
    通过对用户需求进行分析并对其进行归纳和总结,得到用户的顶层数据流图,如图1-2所示。
    在这里插入图片描述
                                                                            图1-2 顶层数据流图

    (2)对顶层数据从流图进行分解,形成第2层的数据流图,如图1-3所示。
    在这里插入图片描述

                                                                            图1-3 第二层数据流图
    第二层数据流图得到客户申请入住,客户申请退房,工作人员查询,管理员查询,管理员修改等业务的数据流程图,为进一步设计奠定基础。
    (3)第三层数据流图
    将第二层的数据流图中的每个业务进行分解,得到各业务的子数据流图,就形成第三层的数据流图。第三层数据流图分为入住申请,退房申请,工作人员查询,房间信息维护,员工信息维护。
    在这里插入图片描述
                                                                            图1-4 第三层数据流图(客户入住)

    1) 客户入住数据流图(图1-4)。客户入住数据流包括审核员工信息,审核入住信息,审核现有房间信息,修改房间信息/入住记录。
    2) 客户退房数据流图(图1-5)。客户退房数据流包括退房申请,退房超期处理,修改房间信息/退房记录。
    在这里插入图片描述
                                                                            1-5 第三层数据流图(客户退房)
    3) 工作人员查询业务流图(图1-6)。工作人员查询业务流包括入住记录查询,房间信息查询。
    在这里插入图片描述

                                                                         图1-6 第三层数据流图(工作人员查询业务)

    4) 管理员查询业务流图(图1-7)。管理员查询业务流包括入住记录查询,房间信息查询,员工信息查询。
    在这里插入图片描述
                                                                         图1-7 第三层数据流图(管理员查询)
    5) 管理员管理业务流图(图1-8)管理员管理业务流包括入住信息管理,房间信息管理,员工信息管理。
    在这里插入图片描述
                                                                         图1-8 第三层数据流图(管理员管理)

    Ⅱ.数据字典
    (1)数据项
    酒店管理系统的数据流图中,系统涉及的数据项具体内容如下所述。
    数据项:客户编号
    含义说明:唯一识别客户
    别名:编号
    类型:字符型
    长度:18
    取值范围:000000000000000001~999999999999999999

    数据项:客户姓名
    含义说明:客户的姓名
    别名:姓名
    类型:字符型
    长度:12

    数据项:客户性别
    含义说明:客户的性别
    别名:性别
    类型:字符型
    长度:1
    取值范围:男 或 女

    数据项:客户身份证号
    含义说明:客户的身份证号
    别名:身份证号
    类型:字符型
    长度:18
    取值范围:000000000000000001~999999999999999999

    数据项:客户类型
    含义说明:客户的会员卡类型
    别名:类型
    类型:字符型
    长度:10

    数据项:客户入住时间
    含义说明:客户的入住时间
    别名:入住时间
    类型:日期

    数据项:客户联系方式
    含义说明:客户的联系方式,如手机号
    别名:联系方式
    类型:字符型
    长度:11
    取值范围:00000000000~99999999999

    数据项:罚款金额
    含义说明:客户超期的罚款
    别名:罚金
    类型:数值型
    小数位数:1
    取值范围:0.1~9999.9

    其他数据项此处不再一一描述,如表1-1所示。
                                                                         表1-1 数据项列表
    在这里插入图片描述

    (2)数据结构
    数据结构:客户。
    含义说明:酒店管理系统的主题数据结构,定义一个入住客户的信息。
    组成:客户编号,客户姓名,客户性别,客户类别,客户身份证号,客户联系方式。

    数据结构:房间。
    含义说明:酒店管理系统的主体数据结构,定义一个房间的有关信息。
    组成:房间号,房间类型,房间价格。

    数据结构:员工。
    含义说明:酒店管理系统的主体数据结构,定义一个员工的有关信息。
    组成:员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工工资,员工密码。

    数据结构:管理员。
    含义说明:酒店管理系统的主体数据结构,定义一个管理员的有关信息。
    组成:管理员编号,管理员姓名,管理员密码。

    数据结构:入住记录。
    含义说明:定义一个客户的入住有关信息。
    组成:入住编号,客户姓名,客户类型,客户入住时间,客户应退房时间,房间号,办理人。

    数据结构:退房记录。
    含义说明:定义一个客户的退房有关信息。
    组成:退房编号,客户姓名,客户类型,客户入住时间,客户退房时间,房间号,罚款金额,办理人。

    数据结构:客户类别。
    含义说明:定义一个客户分类有关的信息。
    组成:类别编号,类别名称,超时罚款金额,折扣。

    (3)处理逻辑描述
    处理逻辑描述如表1-2表示。
    在这里插入图片描述
                                                                         表1-2 处理逻辑列表

    二、 概念结构设计阶段

    1. 局部E-R图

    根据不同的对象,从第三层数据流图开始,分别设计各分E-R图。
    (1) 由图1-4第三层数据流图(客户入住)和图1-5第三层数据流图(客户退房)抽象出的分E-R图如图1-9所示。
    在这里插入图片描述
                                                                      图1-9 分E-R图1
    (2) 由图10-3 第二层数据的数据流图中抽象出客户注册的分E-R图如图1-10所示。
    在这里插入图片描述
                                                                      图1-10 分E-R图2

    (3)由图1-2的数据流图抽象出的分E-R图见图1-11、图1-12和图1-13。

    在这里插入图片描述

                      图1-11 分E-R图3                     图1-12 分E-R图4                                           图1-13 分E-R图5

    2. 整体E-R图

    合并各分E-R图,消除属性冲突、命名冲突和结构冲突等三类冲突,再消除不必要的冗余,得到系统初步E-R图。如图1-14所示。
    在这里插入图片描述
                                                                图1-14 系统初步E-R图

    系统E-R图各实体的属性如下:
    (1) 房间(room):房间号,房间类型,房间价格。
    (2) 客户(customer):客户编号,客户姓名,客户性别,客户身份证号,客户联系方式,办卡日期。
    (3) 员工(worker):员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工工资,员工密码。
    (4) 管理员(manager):管理员编号,管理员姓名,管理员联系方式,管理员密码。
    (5) 客户类别(customer type):类别名称,折扣,超时罚款金额。
    各E-R图中联系的属性如下:
    (1) 入住记录(in history):入住编号,客户姓名,入住时间,应退房时间,客户类别,办理人。
    (2)退房记录(out history):退房编号,客户姓名,入住时间,退房时间,罚款,办理人。

    三、逻辑结构设计阶段

    1.E-R图向关系模式转换

    (1)生成关系模式
    客户类别和客户的联系是1:n,可以将它们之间的联系与n端实体客户合并;管理员与客户、员工、房间也是1:n,同样可以将其中的联系与n端实体合并,而客户与房间之间的入住和退房联系方式是n:m,将其联系转化称独立的关系模式。具体的基本E-R图向关系模式的转化如下所述。

    1. 房间:房间(房间号,房间类型,房间价格)。
    2. 客户:客户(客户编号,客户姓名,客户性别,客户身份证号,客户类别,客户联系方式,办证时间)。
    3. 员工:员工(员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工工资,员工密码)。
    4. 管理员:管理员(管理员编号,管理员姓名,管理员密码)。
    5. 客户类别:客户类别(类别编号,类别名称,超时罚款金额,折扣)。
    6. 入住记录:入住记录(入住编号,客户姓名,客户类型,客户入住时间,客户应退房时间,房间号,办理人)。
    7. 退房记录:退房记录(退房编号,客户姓名,客户类型,客户入住时间,客户退房时间,房间号,罚款金额,办理人)。
      (2) 关系模式的优化
      关系模式room,customer,,manager,customer type,in history,out history不存在非主属性对主属性的部分函数依赖,也不存在传递函数依赖,已经达到3NF 。但worker存在传递函数依赖,优化为员工(员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工密码)。
      (3) 数据库模式的定义
      根据上述关系模式和转换原则,可得到数据库模式和用户子模式。为了方便理解和使用,表明和列名采用驼峰命名法,数据库的模式如表1-3~~表1-9所示,用户子模式如表1-10~1-14表所示。
                                                              表1-3 房间信息表
      在这里插入图片描述

                                                                    表1-4 客户信息表
    在这里插入图片描述

                                                                    表1-5 员工信息表
    在这里插入图片描述

                                                                    表1-6 管理员信息表

    在这里插入图片描述
                                                                    表1-7 客户类别表
    在这里插入图片描述
                                                                    表1-8 入住记录表
    在这里插入图片描述
                                                                    表1-9 退房记录表
    在这里插入图片描述
    (4) 用户子模式定义
    子模式是用户视图,根据用户需求,系统一共设计四个子模式。每个子模式的作用如表10-10所示。
                                                                    表10-10 子模式定义

    在这里插入图片描述

                                                                    表1-11 客户基本信息视图

    在这里插入图片描述
                                                                    表1-12 房间基本信息视图

    在这里插入图片描述
                                                                    表1-13 客户入住记录视图
    在这里插入图片描述

                                                                    表1-14 客户退房记录视图

    在这里插入图片描述

    2. 施加约束

    (1) 域约束
    域是属性可能具有的值的集合。域定义包括语义成分和物理成分,除了满足一定的物理成分外,还必须满足一定的语义要求。例如,性别的取值为字符型,宽度为2个字符.只要满足上述两个条件就满足物理要求。但是满足物理成分的数据不一定是有意义的。因此域还必须满足一定的语义要求。
    另一种约束类型为值是否为必填项,即值是否为空。对于某些值必须设计为必填项,才能确保数据有意义。例如客户的姓名必须为必填项。
    (2) 唯一性约束
    唯一性约束是约束的另一种类型。这种约束一班由DBMS来施加,因为它能创建数据结构来使唯一性检查更快地进行。为了达到这个目的,可以使用唯一性索引。
    在本系统中,客户编号,客户身份证号,员工编号等必须不重复,可通过为客户编号,客户身份证号,员工编号等分别创建唯一性索引,以实现唯一性索引。
    (3) 联系约束
    1) 参照完整性约束
    所有的参照完整性约束都限制在外键上。如关系模式入住记录:入住记录(入住编号,客户姓名,客户类型,客户入住时间,客户应退房时间,房间号,办理人)。
    客户姓名作为外键,约束说明它的值必须在客户信息表中存在,否则这条数据就没有意义。
    2) 联系基数
    联系基数约束来源于对象连接属性的基数设定。在本系统中,客户类型与客户是1:n的约束,因此一个用户一定与一个用户类型相联系,一个用户类型有多个用户。
    4. 业务规则约束
    业务规则约束是针对指定应用的逻辑和要求的,它们来源于使用数据库组织中的应用程序和策略。酒店管理应用中的业务规则是:
     房间的价格为0~99999
     性别的取值是‘男’或‘女’
     如果房间已订出就不能再被申请入住
     如果房间没有订出就不能申请退房
     如果入住超期,按天收取罚金
    由于业务规则是依赖于应用的,因此在SQL Server中,通过创建触发器来实现业务规则的校验和限制。

    四、数据库的建立

    1. 数据库存储结构

    将酒店管理系统的数据库名称设为HotelManagementLibrary,数据库只有一个数据文件和一个日志文件,保存在默认路径下。
    创建数据库命令为
    CREATE DATABASE HotelManagementLibrary
    为数据库中各基本表建立的索引如下所述。
    (1)基本表Room,Customer,Worker,Manager的主码RoomID,CustomerID,WorkerID,ManagerID的值唯一,且经常出现在连接、查询条件和操作中出现,建立唯一性索引。
    (2)基本表Room、Customer的属性RoomType和CustomerType经常在查询条件中出现,因此建立唯一性索引。
    (3)入住记录表InHistory和退房记录表OutHistory的属性CustomerName和RoomID经常在查询条件中出现,考虑建立索引。

    2.表和视图的创建

    (1)建立数据表
    1)客户信息表的建立

    CREATE TABLE Customer (
    	CustomerID nvarchar(10) PRIMARY KEY,
    	CustomerName nvarchar(10) NOT NULL,
    	CustomerSex nvarchar(2) DEFAULT '男' CHECK (CustomerSex = '男'
    	OR CustomerSex = '女'),
    	CustomerIDNumber nvarchar(18) NOT NULL,
    	CustomerType nvarchar(10) NOT NULL,
    	CustomerPhone nvarchar(11) NOT NULL,
    	CustomerCreateDate date NOT NULL,
    	FOREIGN KEY (CustomerType)
    		REFERENCES CustomerType (TypeName)
    );
    

    2) 员工信息表的建立

    CREATE TABLE Worker (
    	WorkerID nvarchar(10) PRIMARY KEY,
    	WorkerName nvarchar(10) NOT NULL,
    	WorkerSex nvarchar(2) DEFAULT '男' CHECK (WorkerSex = '男'
    	OR WorkerSex = '女'),
    	WorkerIDNumber nvarchar(18) NOT NULL,
    	WorkerPosition nvarchar(10) NOT NULL,
    	WorkerPassword nvarchar(20) NOT NULL
    );
    

    3)房间信息表的建立

    CREATE TABLE Room (
    	RoomID nvarchar(10) PRIMARY KEY,
    	RoomType nvarchar(10) NOT NULL,
    	RoomPrice float NOT NULL,
    	RoomState nvarchar(10) DEFAULT '未入住' CHECK (RoomState = '已入住'
    	OR RoomState = '未入住')
    );
    

    4)管理员信息表的建立

    CREATE TABLE Manager (
    	ManagerID nvarchar(10) PRIMARY KEY,
    	ManagerName nvarchar(10) NOT NULL,
    	ManagerPassword nvarchar(20) NOT NULL
    );
    

    5) 客户类型表的建立

    CREATE TABLE CustomerType (
    	TypeName nvarchar(10) PRIMARY KEY,
    	Discount float NOT NULL,
    	Fine float NOT NULL
    );
    

    6) 入住记录表的建立

    CREATE TABLE InHistory (
    	InID nvarchar(10) PRIMARY KEY,
    	CustomerID nvarchar(10) NOT NULL,
    	CustomerType nvarchar(10) NOT NULL,
    	CustomerInDate date NOT NULL,
    	CustomerOutDate date NOT NULL,
    	RoomID nvarchar(10) NOT NULL,
    	Worker nvarchar(10) NOT NULL,
    	FOREIGN KEY (CustomerID)
    		REFERENCES Customer (CustomerID),
    	FOREIGN KEY (CustomerType)
    		REFERENCES CustomerType (TypeName),
    	FOREIGN KEY (RoomID)
    		REFERENCES Room (RoomID),
    	FOREIGN KEY (Worker)
    		REFERENCES Worker (WorkerID)
    );
    

    7)退房记录表的建立

    CREATE TABLE OutHistory (
    	OutID nvarchar(10) PRIMARY KEY,
    	CustomerID nvarchar(10) NOT NULL,
    	CustomerType nvarchar(10) NOT NULL,
    	CustomerInDate nvarchar(10) NOT NULL,
    	CustomerOutDate nvarchar(10) NOT NULL,
    	RoomID nvarchar(10) NOT NULL,
    	Worker nvarchar(10) NOT NULL,
    	FOREIGN KEY (CustomerID)
    		REFERENCES Customer (CustomerID),
    	FOREIGN KEY (CustomerType)
    		REFERENCES CustomerType (TypeName),
    	FOREIGN KEY (RoomID)
    		REFERENCES Room (RoomID),
    	FOREIGN KEY (Worker)
    		REFERENCES Worker (WorkerID)
    );
    

    (2)建立视图
    1)客户基本信息视图
    用于查询客户基本信息的视图定义如下:

    CREATE VIEW CustomerView (
    	客户编号, 
    	客户姓名, 
    	客户性别, 
    	客户类型, 
    	客户联系方式, 
    	办卡时间
    )
    AS
    SELECT CustomerID, CustomerName, CustomerSex, CustomerType, CustomerPhone
    	, CustomerCreateDate
    FROM Customer
    

    2)房间基本信息视图
    用于查询房间基本信息的视图定义如下:

    CREATE VIEW RoomView (
    	房间号, 
    	房间类型, 
    	房间价格
    )
    AS
    SELECT RoomID, RoomType, RoomPrice
    FROM Room
    

    3)入住记录基本信息视图
    用于查询入住记录的视图定义如下:

    CREATE VIEW InHistoryView (
    	入住编号, 
    	客户编号, 
    	客户类型, 
    	客户入住时间, 
    	客户应退房时间, 
    	房间号
    )
    AS
    SELECT InID, CustomerID, CustomerType, CustomerInDate, CustomerOutDate
    	, RoomID
    FROM InHistory
    

    4)退房记录基本信息视图
    用于查询退房记录的视图定义如下:

    CREATE VIEW OutHistoryView (
    	退房编号, 
    	客户编号, 
    	客户类型, 
    	客户入住时间, 
    	客户退房时间, 
    	房间号, 
    	超时罚款
    )
    AS
    SELECT OutID, CustomerID, CustomerType, CustomerInDate, CustomerOutDate
    	, RoomID, Fine
    FROM OutHistory
    

    五、窗体设计

    在这里插入图片描述

    ==================2021.6.22 ===========
    当初写这篇文章本意是做个记录,当时作为一个大二小白刚刚接触C#没学习过软件工程随手做的一个课设,之后也并没有朝C#方向继续发展。现在回顾感觉代码质量较低且不规范,逻辑也不够清晰,私认为并没有什么值得学习的地方,也怕误人子弟本想雪藏,但最近越来越多的同学希望我分享源码学习,现在分享给大家。由于时间久远、能力不足等原因不提供答疑希望大家理解。
    源码地址:https://github.com/majunbo2044/Hotel-Management-System/tree/master
    码字不易,欢迎投喂
    在这里插入图片描述在这里插入图片描述

    展开全文
  • 酒店客房管理系统毕业论文的数据删除流程
  • 酒店管理er

    2018-06-21 10:05:58
    数据库信息管理,access酒店管理e-r。用制作access数据库。
  • 酒店订餐系统ER图,数据流图DFD-课程设计挺有用
  • 酒店管理系统Python#qt

    2021-12-29 17:22:53
    #python#qt#酒店管理系统 客户入住,房间状态改变,搜索入住记录,退房功能,金额计算。

    酒店管理系统Python#qt

    需求分析

    宾馆在正常运营中需要对客房资源、顾客信息、结算信息进行管理,利用宾馆管理信息系统及时了解各个环节中信息的变更,有利于提高管理的效率。

    主要功能:

    有关客房标准的制定、标准信息的输入,包括标准编号、标准名称、房间面积、床位数量、住房单价、是否有空调、电视机、电话及单独卫生间等。

    客房标准信息的修改、查询等

    客房基本信息的输入,包括客房编号、客房类型、客房单价、客房位置、备注等。

    客房基本信息的修改、查询等

    剩余客房信息的查询。

    订房信息的输入,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。

    结算信息的输入,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、结算日期、备注信息等。

    结算信息的修改和查询。

    即需要实现的功能:

    • 客房信息的制定及修改,查询;
    • 订房信息的输入,房间状态更新;
    • 结算信息的输入,房间状态更新;

    流程图

    在这里插入图片描述

    关系模式

    ​ 该管理系统是模拟顾客入住酒店到结算的过程,一共有五个表:房间表,房间信息表,入住表,结算表,员工表。

    E-R图

    1.房间与房间信息之间的关系

    在这里插入图片描述

    2.完整E-R图

    在这里插入图片描述

    图中各实体,属性见下面四个表。这里未考虑员工表。

    房间表

    创建房间表:

    create table Room(
    RoomNum char(10) primary key,
    RoomType char(10) not null,
    Roomprice float not null,
    lease char(10) not null,
    foreign key (RoomType) references Roomtypes(RoomType)
    );
    
    RoomNumRoomTypepriceIsFree
    301单人间500
    306单人间501
    401标准间1001
    406标准间1001
    501商务间1501
    506商务间1501
    601高档间1800
    606豪华间2001

    房间具体信息表

    create table Roomtypes(
    RoomType char(10) primary key,
    Bedsnum char(1) not null,
    RomArea float not null,
    SelfBathroom char(1) not null,
    AC char(1) not null,
    Wifi char(1) not null,
    TV char(1) not null,
    RoomPrice float not null,
    );
    
    RoomTypeBedsnumRoomAreaSelfBathroomACWifiTV
    单人间130.001100
    标准间250.001111
    商务间180.001111
    高档间1120.001211
    豪华间2120.001211

    入住表

    CREATE TABLE Checkin(
    roomnumber char(10) NOT NULL,
    pname char(10) NOT NULL,
    pid char(20) NOT NULL,
    psex char(10) NOT NULL,
    phone char(20) NOT NULL,
    indate date NOT NULL,
    intime time NOT NULL,
    rent float not null,
    remarks char(255) not null
    )
    
    roomnumpnamepidpsexphoneindateintimeremarks
    301孙一1001123456789002021/11/2114:25:37早餐提醒
    601孙二1002123456789012021/11/2117:31:55定时打扫卫生

    结算表

    CREATE TABLE Checkout(
    roomnumber char(10) NOT NULL,
    pname char(10) NOT NULL,
    indate date NOT NULL,
    intime time NOT NULL,
    outdate date NOT NULL,
    outtime time NOT NULL,
    discount float not null,
    fine float not null
    )
    
    roomnumberpnameindateintimeoutdateouttimediscountfine
    301孙一2021/11/2114:25:372021/11/229:25:1619999
    601孙二2021/11/2117:31:552021/11/2314:25:330.89999

    员工表

    ​ 这里员工表存储的数据是用户名与密码,作用是在登陆界面验证员工的。通过获取在登录界面的账号与密码与员工表中比对。一致则可以进入主窗口。

    usernmpasswd
    a1b1
    a2b2

    规范性检查

    • 房间表中候选码是房间号,不存在非主属性对码的部分依赖,但是存在传递依赖。当中房间价格依赖于房间类型,而房间号确定房间类型,所以房间表仅达到2NF。要想达到3NF可通过将价格属性规放到房间信息表中,或者创建视图。
    • 房间信息表中不存在非主属性对码的部份依赖与传递依赖,达到了3NF。
    • 入住表主码是房间号,入住日期,入住时间。这里在创建表时设计的有详细的入住时间,所以绕开了客户属性之间的关系,从而避免了部份依赖与传递依赖。
    • 结算表大抵与入住表相同。

    python连接SQL Sever数据库

    ​ 安装pymssql模块。在SQL Sever数据库的配置管理中打开SQL Sever(MSSQLSEVER),启用网络配置栏的TCP/IP

    具体操作:

    • 将连接方式封装到MysqlSearch类中。
    class MysqlSearch(object):
        """连接数据库及操作"""
    
        def __init__(self):
            """数据库操作功能"""
            self.get_conn()
    
        def get_conn(self):
            """获取连接"""
            self.conn = pymssql.connect(host='DESKTOP-HA83C8D',
                                        database='wgd',
                                        charset='GBK')
    
    

    ​ 注:这里的charset='GBK’是指输出格式,因为在SQL Sever数据库中的编码格式与Python中编码格式不一致,直接获取该数据库中的数据可能会以乱码的形式呈现(如果在建表时定义为char型则不会出现乱码)。在Python中向表中插入新数据时charset=‘utf8’

    • 定义方法来执行增,删,查,改等操作。
      • 定义游标来执行操作
      • execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
      • fetchall(self):接收全部的返回结果行.
      • 在执行DML语句(及增,删,改)时要加上commit()方法,否则会导致数据无法插入进数据库表中,因为DDL语句(数据定义)是自带commit的,而执行DML命令如果没有提交,将不会被其他会话看到。

    如:获取员工表信息

    def get_userinfo(self):
        """获取管理员登录信息"""
        # 使用cursor()方法获取操作游标
        cursor = self.conn.cursor()
        sql = 'select * from manager'
        # 执行sql语句
        cursor.execute(sql)
        # 使用fetchall()方法获取全部数据
        result = cursor.fetchall()
        # 将数据用字典模式存储
        result = [dict(zip([k[0] for k in cursor.description], row)) for row in result]
        # 关闭连接
        cursor.close()
        self.conn.close()
        return result
    

    python设计UI界面

    导入Pyside2模块,或者Pyqt5,及配置QT-Designer以便于设计UI窗口

    对于窗口的设计依据个人风格,可以自定义控件布局,控件样式等。这里较为简单的设计了登录窗口和主窗口。

    from PySide2 import QtWidgets
    from PySide2.QtUiTools import QUiLoader
    from PySide2.QtWidgets import QTableWidgetItem
    import sys
    import pymssql
    import time
    import datetime
    
    

    登陆界面

    ​ 登录界面的设计在QT-Designer中可自定义设计,这里打开登录界面是通过动态加载,其好处是可随时修改界面内容。最好将设计好的ui文件与程序放在同一工程目录下。

    class LoginWin:
        """登录主窗口"""
        def __init__(self):
            super().__init__()
            self.ui = QUiLoader().load('D:/pythonProject0826/ui/sign_in.ui')
            # 点击登录按钮/回车,实现跳转到主界面
            self.connect = self.ui.button1.clicked.connect(self.open_main)
            self.connect = self.ui.edt_password.returnPressed.connect(self.open_main)
    
                
    if __name__ == '__main__':
        MysqlSearch()
    
        app = QtWidgets.QApplication(sys.argv)
        wm = LoginWin()
        wm.ui.show()
        sys.exit(app.exec_())
    
    

    结果:

    在这里插入图片描述

    ​ 获取文本框中输入的用户名与密码,通过回车/点击登录按钮实现跳转到主界面,在打开主界面之前还需要验证输入的信息是否与员工表中信息的一致性。

     def open_main(self):
            """连接数据库,打开主窗口"""
            # 实例化连接数据库类
            obj = MysqlSearch()
            result = obj.get_userinfo()
    
            username = self.ui.edt_username.text()
            password = self.ui.edt_password.text()
            username_lst = list()
            password_lst = list()
            for item in result:
                username_lst.append(item['usernm'])
                password_lst.append(item['passwd'])
            # 如取出用户,密码列表首位与从登录界面获取的文本内容进行比较
            # 这里应该将从数据库获取的用户密码放在二维数组,或者字典中
            if username == username_lst[0] and password == password_lst[0]:
                global main_win
                main_win = Window_Main()
                main_win.ui.show()
                self.ui.close()
    
    

    主界面

    ​ 在设计主窗口时也可以设计多个。我这里是利用了Tab标签页控件将四个画面显示在一个ui文件中,所以好处是在打开主窗口时仅加载如下一个ui文件,但是也体现了单一,不美观的弊端。

    class Window_Main:
        """定义新窗口"""
        def __init__(self):
            # 继承父类的init方法,同样可以使用super()去继承其他方法
            super().__init__()
            self.ui = QUiLoader().load('D:/pythonProject0826/ui/operation.ui')
    

    ​ 在实现功能时,无非是对按钮或其他控件定义响应函数,所以在设计界面时最好重新命名控件名称,在编写程序时能区分清楚,不至于数量多时弄混淆而出bug。

      # 房间查询标签页
            self.connect = self.ui.btn_select.clicked.connect(self.select_show)      # ‘显示’按钮
            self.connect = self.ui.btn_selectAdd.clicked.connect(self.select_add)    # ‘+’按钮
            self.connect = self.ui.btn_selectDel.clicked.connect(self.select_del)    # ‘-’按钮
            self.connect = self.ui.btn_selectSave.clicked.connect(self.select_save)  # '保存'按钮
    
            self.connect = self.ui.btn_show.clicked.connect(self.select_select)      # ‘查询’按钮
            # 房间具体信息标签页
            self.connect = self.ui.btn_typeselect.clicked.connect(self.type_show)    # ‘查询’按钮
            self.connect = self.ui.btn_typeAdd.clicked.connect(self.type_add)        # ‘+’按钮
            self.connect = self.ui.btn_typeDel.clicked.connect(self.type_del)        # ‘-’按钮
            # 入住标签页
            self.connect = self.ui.btn_inAdd.clicked.connect(self.in_add)            # ‘+’按钮
            self.connect = self.ui.btn_inDel.clicked.connect(self.in_del)            # ‘-’按钮
            self.connect = self.ui.btn_inSure.clicked.connect(self.in_sure)          # ‘确认’按钮
            # 结算标签页
            self.connect = self.ui.btn_outAdd.clicked.connect(self.out_add)          # ‘+’按钮
            self.connect = self.ui.btn_outSure.clicked.connect(self.out_sure)        # '确认'按钮
            # 当天交易额初值
            self.ui.edt_cost.setText('0')
    
    

    结果展示

    ​ 以顾客孙一入住306为例

    1.选房间。

    在这里插入图片描述

    2.录入入住记录,点击确定。

    def in_sure(self):
            """确定入住"""
            # 获取要入住的客户是表格中第几行
            rowcount_in = self.ui.tableWidget_in.currentRow()
            # print(rowcount_in)
            # 获取登录的房间号
            in_num = self.ui.tableWidget_in.item(rowcount_in, 0).text().strip()
            # 房间表中的行数
            all_count = self.ui.tableWidget_select.rowCount()
            # 在房间表中找到这位顾客的房间号并置为'0'
            for i in range(all_count):
                that_num = self.ui.tableWidget_select.item(i, 0).text().strip()
                room_state = self.ui.tableWidget_select.item(i, 3).text().strip()
                if in_num == that_num:
                    if int(room_state) == 0:
                        self.ui.edt_result.setText('该房间已被使用,请重新选择!')
                        break
                    else:
                        self.ui.tableWidget_select.setItem(i, 3, QTableWidgetItem('0'))
                        self.ui.edt_result.setText('入住成功!')
                        break
    
    

    结果:

    在这里插入图片描述

    3.房间306的状态由1变成0,证明306已被使用

    在这里插入图片描述

    4.退房信息录入,通过上方三个搜索框输入待办理的入住信息,点击+号从入住表中找到对应的顾客。

    在这里插入图片描述

    5.输入退房时间,点击确定,显示金额(金额计算还需要导入datetime、date模块),完成退房。

        def out_sure(self):
            """结算信息确认"""
            # 获取要结算的客户是结算表格中第几行(即当前光标所在行号)
            rowcount_out = self.ui.tableWidget_out.currentRow()
            # 获取退房客户的房间号,该房间的价格
            out_num = self.ui.tableWidget_out.item(rowcount_out, 0).text().strip()
            room_price = float(self.ui.tableWidget_select.item(rowcount_out, 2).text())
    
            # 将结算表中的‘退房时间’补充到入住表
            out_time = self.ui.tableWidget_out.item(rowcount_out, 5).text()
    
            in_date = self.ui.tableWidget_out.item(rowcount_out, 2).text()
            in_time = self.ui.tableWidget_out.item(rowcount_out, 3).text()
    
            in_rowcount = self.ui.tableWidget_in.rowCount()
            seq2 = [(self.ui.tableWidget_in.item(r, 0).text(),
                    self.ui.tableWidget_in.item(r, 1).text(),
                    self.ui.tableWidget_in.item(r, 2).text(),
                    self.ui.tableWidget_in.item(r, 3).text(),
                    self.ui.tableWidget_in.item(r, 4).text(),
                    self.ui.tableWidget_in.item(r, 5).text(),
                    self.ui.tableWidget_in.item(r, 6).text()) for r in range(in_rowcount)]
            # 遍历列表seq,找到匹配的元组
            k = 0
            while k < in_rowcount:
                if out_num == seq2[k][0] and in_date == seq2[k][4] and in_time == seq2[k][5]:
                    break
                k += 1
            # 补充完整‘退房时间’
            self.ui.tableWidget_in.setItem(k, 7, QTableWidgetItem(out_time))
    
            # 房间表中的行数
            all_count1 = self.ui.tableWidget_select.rowCount()
            # 在房间表中找到这个房间并把房间的状态置为'1'
            for j in range(all_count1):
                that_num1 = self.ui.tableWidget_select.item(j, 0).text().strip()
                if out_num == that_num1:
                    self.ui.tableWidget_select.setItem(j, 3, QTableWidgetItem('1'))
    
            # 退房顾客的入住日期,时间;退房日期,时间
            in_date = self.ui.tableWidget_out.item(rowcount_out, 2).text()
            in_time = self.ui.tableWidget_out.item(rowcount_out, 3).text()
            out_date = self.ui.tableWidget_out.item(rowcount_out, 4).text()
            out_time = self.ui.tableWidget_out.item(rowcount_out, 5).text()
            # 用于将一个日期字符串转成datetime日期格式
            d1 = time.strptime(in_date, "%Y/%m/%d")
            t1 = time.strptime(in_time, "%H:%M:%S")
            d2 = time.strptime(out_date, "%Y/%m/%d")
            t2 = time.strptime(out_time, "%H:%M:%S")
            # 表示日期时间
            date1 = datetime.datetime(d1[0], d1[1], d1[2])
            time1 = datetime.datetime(t1[0], t1[1], t1[2], t1[3], t1[4], t1[5])
            date2 = datetime.datetime(d2[0], d2[1], d2[2])
            time2 = datetime.datetime(t2[0], t2[1], t2[2], t2[3], t2[4], t2[5])
            # 时间差
            date_diff = (date2-date1).days
            time_diff = round((time2-time1).seconds/3600/24, 2)
            # duration = date_diff+time_diff	# 精确到时分秒
            duration = date_diff	# 仅精确到天数
            # 该顾客的折扣
            discount = float(self.ui.tableWidget_out.item(rowcount_out, 6).text())
            final_fee = room_price*duration*discount
            final_fee = round(final_fee, 2)
            # 设置结算表中该客户的金额
            self.ui.tableWidget_out.setItem(rowcount_out, 7, QTableWidgetItem('{fee}'.format(fee=final_fee)))
    
            all_money = float(self.ui.edt_cost.text())
            all_money += final_fee
            self.ui.edt_cost.setText('{}'.format(all_money))
    
            # 搜索框清除
            self.ui.edt_outRoom.clear()
            self.ui.edt_inDate.clear()
            self.ui.edt_inTime.clear()
    

    在这里插入图片描述

    6.自动补全入住表中信息,改变房间表中状态。

    在这里插入图片描述

    在这里插入图片描述
    参考代码(完整的未保存,这是之前编写的,细节地方都没处理,有些数据是直接定义的,未从数据库获取):

    """酒店管理系统"""
    from PySide2 import QtWidgets
    from PySide2.QtUiTools import QUiLoader
    from PySide2.QtWidgets import QTableWidgetItem
    import sys
    import pymssql
    import time
    import datetime
    
    main_win = None
    
    
    class MysqlSearch(object):
        """连接数据库及操作"""
    
        def __init__(self):
            """数据库操作功能"""
            self.get_conn()
    
        def get_conn(self):
            """获取连接"""
            self.conn = pymssql.connect(host='DESKTOP-HA83C8D',
                                        database='wgd',
                                        charset='GBK')
    
        def get_userinfo(self):
            """获取管理员登录信息"""
            # 使用cursor()方法获取操作游标
            cursor = self.conn.cursor()
            sql = 'select * from manager'
            # 使用cursor()方法获取操作游标
            cursor.execute(sql)
            # 使用fetchall()方法获取全部数据
            result = cursor.fetchall()
            # 将数据用字典模式存储
            result = [dict(zip([k[0] for k in cursor.description], row)) for row in result]
            # 关闭连接
            cursor.close()
            self.conn.close()
            return result
    
        def get_roomInfo(self):
            """获取房间信息"""
            # 使用cursor()方法获取操作游标
            cursor = self.conn.cursor()
            sql = 'select * from room'
            # 使用cursor()方法获取操作游标
            cursor.execute(sql)
            # 使用fetchall()方法获取全部数据
            result1 = cursor.fetchall()
            # 将数据用字典模式存储
            # result = [dict(zip([k[0] for k in cursor.description], row)) for row in result]
            # 关闭连接
            cursor.close()
            self.conn.close()
            return result1
    
        def get_roomType(self):
            """房间类型具体信息"""
            cursor = self.conn.cursor()
            sql2 = 'select * from roomtypes'
            cursor.execute(sql2)
            result2 = cursor.fetchall()
            cursor.close()
            self.conn.close()
            return result2
    
    
    class LoginWin:
        """登录主窗口"""
        def __init__(self):
            super().__init__()
            self.ui = QUiLoader().load('D:/pythonProject0826/ui/sign_in.ui')
            # 点击登录按钮/回车,实现跳转到主界面
            self.connect = self.ui.button1.clicked.connect(self.open_main)
            self.connect = self.ui.edt_password.returnPressed.connect(self.open_main)
    
        def open_main(self):
            """连接数据库,打开主窗口"""
            # 实例化连接数据库类
            obj = MysqlSearch()
            result = obj.get_userinfo()
    
            username = self.ui.edt_username.text()
            password = self.ui.edt_password.text()
            username_lst = list()
            password_lst = list()
            for item in result:
                username_lst.append(item['usernm'])
                password_lst.append(item['passwd'])
            if username == username_lst[0] and password == password_lst[0]:
                global main_win
                main_win = Window_Main()
                main_win.ui.show()
                self.ui.close()
    
    
    class Window_Main:
        """定义新窗口"""
        def __init__(self):
            # 继承父类的init方法,同样可以使用super()去继承其他方法
            super().__init__()
            self.ui = QUiLoader().load('D:/pythonProject0826/ui/operation.ui')
            # 房间查询标签页
            self.connect = self.ui.btn_select.clicked.connect(self.select_show)      # ‘显示’按钮
            self.connect = self.ui.btn_selectAdd.clicked.connect(self.select_add)    # ‘+’按钮
            self.connect = self.ui.btn_selectDel.clicked.connect(self.select_del)    # ‘-’按钮
            self.connect = self.ui.btn_selectSave.clicked.connect(self.select_save)  # '保存'按钮
    
            self.connect = self.ui.btn_show.clicked.connect(self.select_select)      # ‘查询’按钮
            # 房间具体信息标签页
            self.connect = self.ui.btn_typeselect.clicked.connect(self.type_show)    # ‘查询’按钮
            self.connect = self.ui.btn_typeAdd.clicked.connect(self.type_add)        # ‘+’按钮
            self.connect = self.ui.btn_typeDel.clicked.connect(self.type_del)        # ‘-’按钮
            # 入住标签页
            self.connect = self.ui.btn_inAdd.clicked.connect(self.in_add)            # ‘+’按钮
            self.connect = self.ui.btn_inDel.clicked.connect(self.in_del)            # ‘-’按钮
            self.connect = self.ui.btn_inSure.clicked.connect(self.in_sure)          # ‘确认’按钮
            # 结算标签页
            self.connect = self.ui.btn_outAdd.clicked.connect(self.out_add)          # ‘+’按钮
            self.connect = self.ui.btn_outSure.clicked.connect(self.out_sure)        # '确认'按钮
            # 当天交易额初值
            self.ui.edt_cost.setText('0')
    
        # 房间查询窗口中按钮的功能函数
        def select_show(self):
            """查询"""
            # 清除房间表信息
            self.ui.tableWidget_select.clearContents()
            self.ui.tableWidget_select.setRowCount(0)
            # 连接数据库获取数据
            obj2 = MysqlSearch()
            result01 = obj2.get_roomInfo()
            # 插入行号
            line_no = 0
            for i in range(len(result01)):
                self.ui.tableWidget_select.insertRow(line_no)
                self.ui.tableWidget_select.setItem(line_no, 0, QTableWidgetItem(result01[i][0]))
                self.ui.tableWidget_select.setItem(line_no, 1, QTableWidgetItem(result01[i][1]))
                self.ui.tableWidget_select.setItem(line_no, 2, QTableWidgetItem(str(result01[i][2])))
                self.ui.tableWidget_select.setItem(line_no, 3, QTableWidgetItem(result01[i][3]))
    
                line_no += 1
    
        def select_select(self):
            """空房间查询"""
            # 获取文本框中查询条件
            type_text = self.ui.edt_type.text().strip()
            state_text = self.ui.edt_state.text().strip()
            # 房间表中行数
            select_rowcount = self.ui.tableWidget_select.rowCount()
            # 将上一次操作的房间表存入列表
            # 这里列表per存放的是数据库中的房间表,这里应该是从MysqlSearch()中获取的,这里直接给出属于偷懒了
            per = [('301', '单人间', 50.0, '0'),
                   ('306', '单人间', 50.0, '1'),
                   ('401', '标准间', 100.0, '1'),
                   ('406', '标准间', 100.0, '1'),
                   ('501', '商务间', 150.0, '1'),
                   ('506', '商务间', 150.0, '1'),
                   ('601', '高档间', 180.0, '0'),
                   ('606', '豪华间', 200.0, '1')]
            # 清除房间表信息
            self.ui.tableWidget_select.clearContents()
            # 遍历列表per,找到匹配的元组
            i = 0
            j = 0
            while i < select_rowcount:
                if type_text == per[i][1] and state_text == per[i][3]:
                    self.ui.tableWidget_select.setItem(j, 0, QTableWidgetItem(per[i][0]))
                    self.ui.tableWidget_select.setItem(j, 1, QTableWidgetItem(per[i][1]))
                    self.ui.tableWidget_select.setItem(j, 2, QTableWidgetItem(str(per[i][2])))
                    self.ui.tableWidget_select.setItem(j, 3, QTableWidgetItem(per[i][3]))
                i += 1
                j += 1
            del i, j
    
        def select_add(self):
            """房间查询标签页中表格增加一行"""
            # 要插入的行是当前行的下一行
            rowcount = self.ui.tableWidget_select.currentRow()+1
            self.ui.tableWidget_select.insertRow(rowcount)
    
        def select_del(self):
            """房间查询标签页中表格删除一行"""
            # 删除选定的行
            rowcount = self.ui.tableWidget_select.currentRow()
            self.ui.tableWidget_select.removeRow(rowcount)
    
        def select_save(self):
            """房间查询标签页中表格中新增的数据保存"""
            # 待保存的行
            save_count = self.ui.tableWidget_select.currentRow()
            res2 = [self.ui.tableWidget_select.item(save_count, 0).text(),
                    self.ui.tableWidget_select.item(save_count, 1).text(),
                    float(self.ui.tableWidget_select.item(save_count, 2).text()),
                    self.ui.tableWidget_select.item(save_count, 3).text()]
    
            conn = pymssql.connect(host='DESKTOP-HA83C8D',
                                   database='wgd',
                                   charset='utf8')
            cursor = conn.cursor()
            sql2 = "insert into room values({0},{1},{2},{3})".format(res2[0], res2[1], res2[2], res2[3])
            cursor.execute(sql2)
            conn.commit()
            cursor.close()
            conn.close()
    
        # 房间具体信息中按钮的功能函数
        def type_show(self):
            """查询roomType"""
            obj2 = MysqlSearch()
            result02 = obj2.get_roomType()
            line_no = 0
            for i in range(len(result02)):
                self.ui.tableWidget_roomtype.insertRow(line_no)
                for j in range(7):
                    self.ui.tableWidget_roomtype.setItem(line_no, j, QTableWidgetItem(str(result02[i][j])))
                line_no += 1
    
        def type_add(self):
            """房间具体信息标签页中表格增加一行"""
            # 要插入的行是当前行的下一行
            rowcount = self.ui.tableWidget_roomtype.currentRow()+1
            self.ui.tableWidget_roomtype.insertRow(rowcount)
    
        def type_del(self):
            """房间具体信息标签页中表格删除一行"""
            # 删除选定的行
            rowcount = self.ui.tableWidget_roomtype.currentRow()
            self.ui.tableWidget_roomtype.removeRow(rowcount)
    
        # 入住信息窗口中按钮的功能函数
        def in_add(self):
            """入住信息添加"""
            rowcount = self.ui.tableWidget_in.currentRow() + 1
            self.ui.tableWidget_in.insertRow(rowcount)
    
        def in_del(self):
            """入住信息删除"""
            rowcount = self.ui.tableWidget_in.currentRow()
            self.ui.tableWidget_in.removeRow(rowcount)
    
        def in_sure(self):
            """确定入住"""
            # 获取要入住的客户是表格中第几行
            rowcount_in = self.ui.tableWidget_in.currentRow()
            # print(rowcount_in)
            # 获取登录的房间号
            in_num = self.ui.tableWidget_in.item(rowcount_in, 0).text().strip()
            # 房间表中的行数
            all_count = self.ui.tableWidget_select.rowCount()
            # 在房间表中找到这位顾客的房间号并置为'0'
            for i in range(all_count):
                that_num = self.ui.tableWidget_select.item(i, 0).text().strip()
                room_state = self.ui.tableWidget_select.item(i, 3).text().strip()
                if in_num == that_num:
                    if int(room_state) == 0:
                        self.ui.edt_result.setText('该房间已被使用,请重新选择!')
                        break
                    else:
                        self.ui.tableWidget_select.setItem(i, 3, QTableWidgetItem('0'))
                        self.ui.edt_result.setText('入住成功!')
                        break
    
        # 结算窗口的功能函数
        def out_add(self):
            """结算信息记录添加"""
            # 信息搜索
            out_room = self.ui.edt_outRoom.text()
            in_date = self.ui.edt_inDate.text()
            in_time = self.ui.edt_inTime.text()
    
            # 搜索入住表中客户信息, 此处也可以连接数据库用SQL语句查询,可以创建一个入住表的视图
            in_rowcount = self.ui.tableWidget_in.rowCount()
            # 至于此处展开而不简写是防止出错
            seq = [(self.ui.tableWidget_in.item(r, 0).text(),
                    self.ui.tableWidget_in.item(r, 1).text(),
                    self.ui.tableWidget_in.item(r, 2).text(),
                    self.ui.tableWidget_in.item(r, 3).text(),
                    self.ui.tableWidget_in.item(r, 4).text(),
                    self.ui.tableWidget_in.item(r, 5).text(),
                    self.ui.tableWidget_in.item(r, 6).text()) for r in range(in_rowcount)]
    
            # 遍历列表seq,找到匹配的元组
            k = 0
            while k < in_rowcount:
                if out_room == seq[k][0] and in_date == seq[k][4] and in_time == seq[k][5]:
                    break
                k += 1
            # 目标信息
            ans = seq[k]
    
            # 添加一空白行
            rowcount = self.ui.tableWidget_out.currentRow() + 1
            self.ui.tableWidget_out.insertRow(rowcount)
            # 填充数据
            self.ui.tableWidget_out.setItem(rowcount, 0, QTableWidgetItem(ans[0]))
            self.ui.tableWidget_out.setItem(rowcount, 1, QTableWidgetItem(ans[1]))
            self.ui.tableWidget_out.setItem(rowcount, 2, QTableWidgetItem(ans[4]))
            self.ui.tableWidget_out.setItem(rowcount, 3, QTableWidgetItem(ans[5]))
            self.ui.tableWidget_out.setItem(rowcount, 4, QTableWidgetItem(ans[6]))
    
        def out_sure(self):
            """结算信息确认"""
            # 获取要结算的客户是结算表格中第几行(即当前光标所在行号)
            rowcount_out = self.ui.tableWidget_out.currentRow()
            # 获取退房客户的房间号,该房间的价格
            out_num = self.ui.tableWidget_out.item(rowcount_out, 0).text().strip()
            room_price = float(self.ui.tableWidget_select.item(rowcount_out, 2).text())
    
            # 将结算表中的‘退房时间’补充到入住表
            out_time = self.ui.tableWidget_out.item(rowcount_out, 5).text()
    
            in_date = self.ui.tableWidget_out.item(rowcount_out, 2).text()
            in_time = self.ui.tableWidget_out.item(rowcount_out, 3).text()
    
            in_rowcount = self.ui.tableWidget_in.rowCount()
            seq2 = [(self.ui.tableWidget_in.item(r, 0).text(),
                    self.ui.tableWidget_in.item(r, 1).text(),
                    self.ui.tableWidget_in.item(r, 2).text(),
                    self.ui.tableWidget_in.item(r, 3).text(),
                    self.ui.tableWidget_in.item(r, 4).text(),
                    self.ui.tableWidget_in.item(r, 5).text(),
                    self.ui.tableWidget_in.item(r, 6).text()) for r in range(in_rowcount)]
            # 遍历列表seq,找到匹配的元组
            k = 0
            while k < in_rowcount:
                if out_num == seq2[k][0] and in_date == seq2[k][4] and in_time == seq2[k][5]:
                    break
                k += 1
            # 补充完整‘退房时间’
            self.ui.tableWidget_in.setItem(k, 7, QTableWidgetItem(out_time))
    
            # 房间表中的行数
            all_count1 = self.ui.tableWidget_select.rowCount()
            # 在房间表中找到这个房间并把房间的状态置为'1'
            for j in range(all_count1):
                that_num1 = self.ui.tableWidget_select.item(j, 0).text().strip()
                if out_num == that_num1:
                    self.ui.tableWidget_select.setItem(j, 3, QTableWidgetItem('1'))
    
            # 退房顾客的入住日期,时间;退房日期,时间
            in_date = self.ui.tableWidget_out.item(rowcount_out, 2).text()
            in_time = self.ui.tableWidget_out.item(rowcount_out, 3).text()
            out_date = self.ui.tableWidget_out.item(rowcount_out, 4).text()
            out_time = self.ui.tableWidget_out.item(rowcount_out, 5).text()
            # 用于将一个日期字符串转成datetime日期格式
            d1 = time.strptime(in_date, "%Y/%m/%d")
            t1 = time.strptime(in_time, "%H:%M:%S")
            d2 = time.strptime(out_date, "%Y/%m/%d")
            t2 = time.strptime(out_time, "%H:%M:%S")
            # 表示日期时间
            date1 = datetime.datetime(d1[0], d1[1], d1[2])
            time1 = datetime.datetime(t1[0], t1[1], t1[2], t1[3], t1[4], t1[5])
            date2 = datetime.datetime(d2[0], d2[1], d2[2])
            time2 = datetime.datetime(t2[0], t2[1], t2[2], t2[3], t2[4], t2[5])
            # 时间差
            date_diff = (date2-date1).days
            time_diff = round((time2-time1).seconds/3600/24, 2)
            # duration = date_diff+time_diff	# 精确到时分秒
            duration = date_diff	# 仅精确到
            # 该顾客的折扣
            discount = float(self.ui.tableWidget_out.item(rowcount_out, 6).text())
            final_fee = room_price*duration*discount
            final_fee = round(final_fee, 2)
            # 设置结算表中该客户的金额
            self.ui.tableWidget_out.setItem(rowcount_out, 7, QTableWidgetItem('{fee}'.format(fee=final_fee)))
    
            all_money = float(self.ui.edt_cost.text())
            all_money += final_fee
            self.ui.edt_cost.setText('{}'.format(all_money))
    
            # 搜索框清除
            self.ui.edt_outRoom.clear()
            self.ui.edt_inDate.clear()
            self.ui.edt_inTime.clear()
    
    
     if __name__ == '__main__':
       		MysqlSearch()
    
        	app = QtWidgets.QApplication(sys.argv)
        	wm = LoginWin()
        	wm.ui.show()
        	sys.exit(app.exec_())
    
    
    展开全文
  • 客房信息管理系统 需求概述 系统模块 数据流图 酒店客房管理系统的主要任务是通过计算机对酒店的旅客信息、客房信息以及其他资源进行系统化处理,以提高酒店的服务质量和服务效率,从而节约成、增加利润。通常,...
  • 设计完整,需求设计,概要设计,详细设计,操作手册,总结完整
  • 酒店管理系统数据库关系,有visio软件制作
  • java源码包33个实例源码,可以做为你的学习设计参考,详细实例源码如下: 一个支持servlet的web服务器.rar 一个较初级的EJB商业应用的例子.rar 一款Java网络格斗游戏源码.rar ...阳光酒店管理系统.rar
  • Eclipse 酒店管理 系统 java 1 2020 年 4 月 19 日 资料内容仅供参考如有不当或者侵权请联系本人改正或者删除 目录 摘 要 错误 !未定义书签 1 序言 错误 ...未定义书签 2.2 数据流图 错误 !未定义书签 4 数据库的逻辑设
  • 1.系统总流程: 2.系统功能模块 3.用例 转载于:https://www.cnblogs.com/gwy1107/p/9035013.html

    1.系统总流程图:


    2.系统功能模块图

     

     

    3.用例图

     

    转载于:https://www.cnblogs.com/gwy1107/p/9035013.html

    展开全文
  • 酒店管理系统功能结构 相关流程 转载于:https://www.cnblogs.com/chouqiuqiu/p/9035154.html
  • 酒店管理系统的分析与设计,包括业务流程,需求分析,整体架构设计等
  • 2.2数据流图 - 6 - 4 数据库的逻辑设计 - 9 - 5 系统设计 - 9 - 5.2用户身份验证模块 - 9 - 5.3酒店管理模块 - 9 - 5.3.1菜品管理 - 9 - 5.3.2菜系管理 - 9 - 5.3.3台号管理 - 9 - 5.3.4结账查询 - 9 - 5.4用户管理...
  • 基于C语言的酒店管理系统课程设计摘 要随着个人计算机的的普及,越来越多的重复性工作被交由计算机来完成。在这种大趋势下,传统的纸质档案管理方式已不适应现代服务业的发展。数字化的管理成为酒店等行业的必要条件...
  • 基于Android平台的酒店预订管理系统软件设计 摘要 随着智能手机的快速普及,智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机...
  • 基于Web酒店管理系统的设计与实现

    千次阅读 2020-12-24 04:56:37
    一、基本信息标题:基于Web酒店管理系统的设计与实现时间:2018年来源: 河北民族师范学院数学与计算机科学学院关键词:Web;酒店管理系统;设计实现;MySQL二、研究内容1.摘要构建基于Web的酒店管理系统,实现利用...
  • 酒店管理系统需求分析

    千次阅读 多人点赞 2019-06-19 20:32:00
    酒店管理系统需求分析 1引言 随着市场经济的发展,消费者消费意识的提高,酒店行业的竞争越来越激烈。为了提高办事效率,增加、保证酒店的销售额,树立酒店的良好形象,运用科学的管理方法非常必要,为此开发酒店...
  • 红薯酒店管理系统是根据多年酒店管理系统软件开发和工程实施经验,研发的新一代专业的酒店管理系统软件。软件以国内酒店业管理的先进经验为范本,主要服务于四星及四星以下的酒店客户。软件使用便捷,数据安全、防漏...
  • 数据库设计,酒店管理系统的设计与实现。主要用到数据流图,数据字典,用例图,系统的需求分析。
  • 2.5 数据流图 第三章 系统设计 3.1 系统功能结构设计 3.2 数据库设计 3.3 系统流程图 第四章 系统详细设计与实现 4.1 用户登录 4.3客房管理 4.3.1客房信息修改 4.3.2 入住管理 4.3.3 收银管理 4.3.4 客房...
  • 河 北 联 合 大 学机 械 工 程 学 院《结课课程设计》课程名称: 管理信息系统设计题目: 酒店管理系统专 业 :班 级 :姓 名 :指导教师 :2012 年 5 月 17 日.. ..设计基本情况设计题目设计参与者及分工姓名学号...
  • 数据流图(Data Flow Diagram)简称DFD,它是一种描述“分解”的图示工具。“它用直观的图形清晰地描绘了系统的逻辑模型,图中没有任何具体的物理元素,只是描述数据在系统中的流动和处理的情况,具有直观、形象、容易...
  • 包括:系统权限组件、数据权限组件、数据字典组件、核心工具组件、视图操作组件、工作组件、代码生成等。 前端界面风格采用了结构简单、性能优良、页面美观大气的Twitter Bootstrap页面展示框架。 采用分层设计、...
  • 1.超高频RFID智慧酒店管理系统项目背景 酒店行业作为我国第三产业的支柱产业之一,一直为社会的发展和人民生活发挥着重要作用,我国实行改革开放以来,酒店业迅猛发展,呈现出高速增长、繁荣兴旺的态势,同时,国家...
  • sql酒店管理系统

    千次阅读 2021-08-17 14:21:41
    简单sql server酒店管理系统 <1> 负责工作和功能分析,E/R设计 <2> 负责关系模式设计,存储过程,触发器,视图设计的使用 数据库概念模型设计 数据库逻辑设计 关系模型 酒店...
  • 整个JSP酒店客房管理系统用面向对象的开发思想,画出了系统结构图,数据流图和ER图。设计分为两大部分,后台的数据管理维护和前台的操作。后台数据的管理主要由数据库操作实现,前台操作由JSP和java实现。 在数据库...
  • 酒店管理系统的设计与实现摘 要:本系统是为酒店管理系统设计开发的大酒店网站,来研究基于B/S模式的网上信息管理的实现,采用的是PHP+MYSQL模式的电子...该酒店管理系统传袭了传统酒店管理系统甚至手工管理系统在信...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,071
精华内容 3,628
关键字:

酒店管理系统数据流图