源码地址:https://github.com/majunbo2044/Hotel-Management-System/tree/master
一、 需求分析
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图向关系形式的转化如下所述。
房间:房间(房间号,房间类型,房间价格)。客户:客户(客户编号,客户姓名,客户性别,客户身份证号,客户类别,客户联络方式,办证时间)。员工:员工(员工编号,员工姓名,员工性别,员工身份证号,员工职位,员工工资,员工密码)。管理员:管理员(管理员编号,管理员姓名,管理员密码)。客户类别:客户类别(类别编号,类别名称,超时罚款金额,折扣)。入住记录:入住记录(入住编号,客户姓名,客户类型,客户入住时间,客户应退房时间,房间号,办理人)。退房记录:退房记录(退房编号,客户姓名,客户类型,客户入住时间,客户退房时间,房间号,罚款金额,办理人)。
(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)客户信息表的建立- CREATETABLECustomer(
- CustomerID nvarchar(10)PRIMARYKEY,
- CustomerName nvarchar(10)NOTNULL,
- CustomerSex nvarchar(2)DEFAULT'男'CHECK(CustomerSex ='男'OR CustomerSex ='女'),
- CustomerIDNumber nvarchar(18)NOTNULL,
- CustomerType nvarchar(10)NOTNULL,
- CustomerPhone nvarchar(11)NOTNULL,
- CustomerCreateDate date NOTNULL,FOREIGNKEY(CustomerType)REFERENCESCustomerType(TypeName));
复制代码 2) 员工信息表的建立- CREATETABLEWorker(
- WorkerID nvarchar(10)PRIMARYKEY,
- WorkerName nvarchar(10)NOTNULL,
- WorkerSex nvarchar(2)DEFAULT'男'CHECK(WorkerSex ='男'OR WorkerSex ='女'),
- WorkerIDNumber nvarchar(18)NOTNULL,
- WorkerPosition nvarchar(10)NOTNULL,
- WorkerPassword nvarchar(20)NOTNULL);
复制代码 3)房间信息表的建立- CREATETABLERoom(
- RoomID nvarchar(10)PRIMARYKEY,
- RoomType nvarchar(10)NOTNULL,
- RoomPrice float NOTNULL,
- RoomState nvarchar(10)DEFAULT'未入住'CHECK(RoomState ='已入住'OR RoomState ='未入住'));
复制代码 4)管理员信息表的建立- CREATETABLEManager(
- ManagerID nvarchar(10)PRIMARYKEY,
- ManagerName nvarchar(10)NOTNULL,
- ManagerPassword nvarchar(20)NOTNULL);
复制代码 5) 客户类型表的建立- CREATETABLECustomerType(
- TypeName nvarchar(10)PRIMARYKEY,
- Discount float NOTNULL,
- Fine float NOTNULL);
复制代码 6) 入住记录表的建立- CREATETABLEInHistory(
- InID nvarchar(10)PRIMARYKEY,
- CustomerID nvarchar(10)NOTNULL,
- CustomerType nvarchar(10)NOTNULL,
- CustomerInDate date NOTNULL,
- CustomerOutDate date NOTNULL,
- RoomID nvarchar(10)NOTNULL,
- Worker nvarchar(10)NOTNULL,FOREIGNKEY(CustomerID)REFERENCESCustomer(CustomerID),FOREIGNKEY(CustomerType)REFERENCESCustomerType(TypeName),FOREIGNKEY(RoomID)REFERENCESRoom(RoomID),FOREIGNKEY(Worker)REFERENCESWorker(WorkerID));
复制代码 7)退房记录表的建立- CREATETABLEOutHistory(
- OutID nvarchar(10)PRIMARYKEY,
- CustomerID nvarchar(10)NOTNULL,
- CustomerType nvarchar(10)NOTNULL,
- CustomerInDate nvarchar(10)NOTNULL,
- CustomerOutDate nvarchar(10)NOTNULL,
- RoomID nvarchar(10)NOTNULL,
- Worker nvarchar(10)NOTNULL,FOREIGNKEY(CustomerID)REFERENCESCustomer(CustomerID),FOREIGNKEY(CustomerType)REFERENCESCustomerType(TypeName),FOREIGNKEY(RoomID)REFERENCESRoom(RoomID),FOREIGNKEY(Worker)REFERENCESWorker(WorkerID));
复制代码 (2)建立视图
1)客户根本信息视图
用于查询客户根本信息的视图定义如下:- CREATEVIEWCustomerView(
- 客户编号,
- 客户姓名,
- 客户性别,
- 客户类型,
- 客户联络方式,
- 办卡时间
- )ASSELECT CustomerID, CustomerName, CustomerSex, CustomerType, CustomerPhone
- , CustomerCreateDate
- FROM Customer
复制代码 2)房间根本信息视图
用于查询房间根本信息的视图定义如下:- CREATEVIEWRoomView(
- 房间号,
- 房间类型,
- 房间价格
- )ASSELECT RoomID, RoomType, RoomPrice
- FROM Room
复制代码 3)入住记录根本信息视图
用于查询入住记录的视图定义如下:- CREATEVIEWInHistoryView(
- 入住编号,
- 客户编号,
- 客户类型,
- 客户入住时间,
- 客户应退房时间,
- 房间号
- )ASSELECT InID, CustomerID, CustomerType, CustomerInDate, CustomerOutDate
- , RoomID
- FROM InHistory
复制代码 4)退房记录根本信息视图
用于查询退房记录的视图定义如下:- CREATEVIEWOutHistoryView(
- 退房编号,
- 客户编号,
- 客户类型,
- 客户入住时间,
- 客户退房时间,
- 房间号,
- 超时罚款
- )ASSELECT OutID, CustomerID, CustomerType, CustomerInDate, CustomerOutDate
- , RoomID, Fine
- FROM OutHistory
复制代码 五、窗体设计
==================2021.6.22 ===========
当初写这篇文章本意是做个记录,当时作为一个大二小白刚刚接触C#没学习过软件工程随手做的一个课设,之后也并没有朝C#方向继续开展。如今回忆感觉代码质量较低且不规范,逻辑也不够明晰,私认为并没有什么值得学习的地方,也怕误人子弟本想雪藏,但最近越来越多的同学希望我分享源码学习,如今分享给大家。由于时间久远、才干缺乏等原因不提供答疑希望大家理解。
源码地址:https://github.com/majunbo2044/Hotel-Management-System/tree/master
==================2023.3.12 ===========
好久没登过csdn了,今天上来看了下没想到竟然有这么多人对这个项目感兴趣,在私信询问和求源码,源码其实早已公布,可能没什么人看到最后吧2333,因而我把源码地址置顶了,这下应该都能看到了。
其实这篇博客当初分享出来主要目的还是记录下我学完数据库这门课后的一些考虑,在只学习了高级语言根底和数据库根底的情况下我是如何去做的,因而我觉得真正有价值的是设计时的考虑过程,代码反而是次要的。 无非是些crud,依照设计思路从需求分析开端一步步走下去,代码要怎么去写自然而然就明晰了。 |