资源描述
《数据库系统原理A》实验文档
酒店客房管理系统
作 者 姓 名: 李芳、沈若冰
专业、班级 : 计算机科学与技术095
学 号 : 09422034、09422023
指 导 教 师: 赵宏伟
完 成 日 期: 2023-6-26
大连大学
Dalian University
摘要
随着计算机技术的飞速发展,信息时代的到来,信息改变了我们这个社会。客房管理的信息化限度体现在将计算机及网络与信息技术应用于经营与管理,以现代化工具代替传统手工作业。酒店客房管理系统是酒店经营管理中不可缺少的部分,它的内容对于经营的决策者和管理者来说都至关重要。所以,使用网络信息化管理客房,不仅可以避免使用传统人工的方式管理文献档案时出现效率低、保密性差,误差多等弊端,并且对于查询空房间及已定房间极为方便。这些优点可以极大地提高客房经营管理的效率,也是公司的科学化、正规化管理,与世界接轨的重要条件。此外,办事效率也是决定收入的一个关键因素。所以,电脑技术和电脑服务引入酒店管理成为一种必然的趋势。建立酒店客房管理信息系统,采用计算机对客房信息进行管理,可以进一步提高酒店的经济效益和现代化水平,帮助酒店工作人员提高工作效率,实现客房信息管理工作流程的系统化、规范化和自动化。本系统采用Visual C#.NET程序来编写,同时一个系统的开发建立数据库是至关重要的,所以本课题数据库采用的是具有强大功能的关系数据库语言SQL Server2023,通过建立数据源使得Visual C#.NET与后台的数据库连接来运营。
目录
一、前景 3
1.1课题背景 3
1.2系统开发环境 3
二、需求分析 3
2.1 客房管理员对系统的需求 3
2.2 前台工作人员对功能的需求 4
2.3 数据流图构建 4
2.4 数据字典构建 5
三、系统功能总体设计 9
四、 数据库结构设计与实现 10
4.1 实体关系(E-R)图设计 10
4.2建立数据库模型 11
4.3创建表 12
4.4 创建触发器 13
4.4创建视图 14
4.5创建存储过程 16
五、参考文献 20
一、 前景
1.1课题背景
随着社会的发展,酒店服务行业与国际市场接轨已是大势所趋,酒店是一个服务至上的行业,从客人的预定开始,到入住登记直至最后退房结账,每一环节都要保持一致性。随着计算机科学的飞速发展,给酒店计算机应用带来了蓬勃生机,计算机在酒店的应用中,已进一步到各个部门,特别在信息解决方面,计算机成了最为重要的工具。在酒店现代管理理论中,酒店管理系统是酒店经营必不可少的工具。
本酒店管理系统是针对酒店的客房管理,以方便管理酒店的客房状态、信息,为用户提供了简朴、快速的服务,让用户及时了解酒店客房的运营状况、经营情况,从而提高酒店的服务质量,获得更好的经济效益
1.2系统开发环境
本系统采用单机版结构,前台开发工具是ASP.NET,后台数据库是Microsoft SQL Server 2023,软件规定:操作系统为Windows 2023或Windows XP或更高版本。
二、需求分析
酒店在正常运营中需要对客房资源、顾客信息、客房结算信息进行管理,运用酒店客房管理系统及时了解各个环节中信息的变更,提高管理的效率。系统开发的总体任务是实现客房信息的系统化、规范化和自动化。重要涉及客房管理员、前台工作人员对功能的需求。
2.1 客房管理员对系统的需求
(1)用户信息维护
浏览所有用户信息。用户信息涉及用户编号、用户角色、权限、密码、联系电话、电子邮件、所在部门等。还需要添加新用户、删除过期用户、修改用户信息等功能。
(2)客房信息维护
浏览所有客房信息。客房信息涉及房间编号、房间类型编号、房间位置、房间描述、房间状态等。还需要添加新客房、删除房间、修改房间信息等功能。
(3)客房类型维护
浏览所有客房类型信息。客房类型涉及类型编号、类型名称、价格、类型描述、是否配备空调等。还需要添加新客房类型、删除过期类型、修改客房类型等功能。
(4)营业状况记录
按照不同的需求,如按日期、房间号、房间类别等,对客房的营业额记录。
2.2 前台工作人员对功能的需求
(1)客房信息的查询,涉及空闲、已住、所有客房信息。
(2)订房信息的输入,涉及客房号、顾客身份证号、订房日期等。
(3)结算信息功能的实现。核对顾客信息后,点击“退房”系统自动显示结算金额、退房时间。这一功能重要涉及房间号、房间类型、顾客身份证号、订房日期、退房日期等信息。
2.3 数据流图构建
数据流图(date flow diagram , DFD),是SA方法中用于表达系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和解决的过程,由于它只反映系统必须完毕的逻辑功能,所以它是一种功能模型。数据流图是从数据的角度来描述一个系统,数据流图适合于宏观地分析一个组织业务概况。
图一:酒店客房管理系统第一层数据流图
图二:合法性检查的二层数据流图
图三:合法性检查的二层数据流图
图四:事务解决的二层数据流图
2.4 数据字典构建
数据字典的作用是在软件分析和设计的过程中给人提供关于数据的描述信息。它重要是对数据流图中的数据流、解决逻辑、外部实体、数据存储和数据项等方面进行具体的定义。数据流程图配以数据字典,就可以从图形和文字两个方面对系统的逻辑模型进行完整的描述。
(1) 数据项定义
数据元素是不可再分的数据单位,一般而言,涉及如下内容:数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}。其中,后两项定义了数据的完整性约束条件,用于数据校验。具体内容,如表3.1所示。
表3.1 酒店客房管理系统数据项定义
编号
名称
别名
数据类型
长度
I01
UserID
用户名
varchar
50
I02
UserPwd
用户密码
varchar
50
I03
UserRole
用户角色
varchar
50
I04
UserPower
用户权限
int
4
I05
UserSex
用户性别
bit
1
I06
UserName
用户姓名
varchar
50
I07
UserAddress
用户住址
varchar
50
I08
UserTel
用户联系电话
varchar
50
I09
UserEmail
用户电子邮箱
varchar
50
I10
UserDept
用户所在部门
varchar
50
I11
TypeID
客房类型编号
varchar
50
I12
TypeName
客房类型名称
varchar
50
I13
TypeArea
客房标准面积
float
8
I14
TypeBedSum
客房标准床位
int
2
I15
TypePrice
标准收费
money
8
I16
TypeAirCondition
是否配备空调
bit
1
I17
TypeTV
是否配备电视
bit
1
I18
TypeDescribe
类型描述
varchar
200
I19
RoomID
房间编号
varchar
50
I20
RoomPosition
房间位置
varchar
50
I21
RoomDescribe
房间描述
varchar
200
I22
CusName
入住客人姓名
varchar
50
I23
CusIDCard
入住客人身份证号
varchar
19
I24
CusBookDate
订房日期
datetime
I25
CusEndDate
退房日期
datetime
I26
CusPay
结账金额
money
8
I27
SID
状态编号
varchar
50
I28
SClean
清洁状况
varchar
50
I29
SDescribe
状态描述
varchar
50
I30
State
房间当前状态
bit
1
(2) 数据流定义
酒店客房管理系统数据流:
数据流编号:D1
数据流名称:登录信息
数据流来源:用户
数据流去向:管理系统
数据流组成:I01+I02
数据流编号:D2
数据流名称:用户名
数据流来源:用户
数据流去向:管理系统
数据流组成:I01
数据流编号:D3
数据流名称:权限
数据流来源: 系统用户表
数据流去向:管理系统
数据流组成:I04
数据流编号:D4
数据流名称:角色
数据流来源: 系统用户表
数据流去向:管理系统
数据流组成:I03
数据流编号:D13
数据流名称:用户密码
数据流来源: 管理系统
数据流去向:用户信息表
数据流组成:I2
数据流编号:D6
数据流名称:预订信息
数据流来源: 顾客
数据流去向:管理系统
数据流组成:I19+I22+I23+I24
数据流编号:D7
数据流名称:客房状态
数据流来源: 客房状态表
数据流去向:管理系统
数据流组成:I30
数据流编号:D8
数据流名称:退房请求
数据流来源: 顾客
数据流去向:管理系统
数据流组成:I22+I23+I19
数据流编号:D9
数据流名称:费用结算
数据流来源: 管理系统
数据流去向:顾客
数据流组成:I15+I24+I25
数据流编号:D10
数据流名称:退房信息
数据流来源: 顾客
数据流去向:管理系统
数据流组成:I25+I26
数据流编号:D11
数据流名称:客房信息变动
数据流来源: 客房
数据流去向:客房信息表
数据流组成:I11+I19+I20+I21+I27
数据流编号:D12
数据流名称:客房类型变动
数据流来源: 客房
数据流去向:客房类型表
数据流组成:I11—I18
(3) 数据存储的描述
数据存储编号:F1
数据存储名称:系统用户表
简 述: 记录用户的信息。
数据存储组成:数据项I1—I10
数据存储编号:F2
数据存储名称:入住信息
简 述:存放顾客入住信息
数据存储组成: 顾客编号+顾客姓名+顾客身份证号+入住房间号+预订日期+退房时间+结算金额
数据存储编号:F3
数据存储名称:客房信息
简 述: 记录客房信息
数据存储组成:房间编号+房间类型+房间描述+房间状态编号+房间位置
数据存储编号:F4
数据存储名称:客房类型
简 述: 存放客房类型信息
数据存储组成:数据项I11—I18
数据存储编号:F5
数据存储名称:客房状态
简 述: 存放客房状态
数据存储组成:房间编号+房间状态
三、系统功能总体设计
在需求分析的基础上,对酒店客房管理系统所要实现的功能可以细分为以下几个模块:新用户注册、用户信息维护、客房信息维护、客房类型维护、客房营业状况记录、客房经营管理、个人密码修改。系统用户可以分为两类权限:客房管理员、前台工作人员。其中客房经营管理模块分为客房状况浏览、客房状况控制,重要用于客房的预订和退房结算解决。
系统功能图如图所示:
客房管理系统
客房经营管理模块
用户信息维护模块
房间管理
退房操作
订房操作
营业状况记录
房间信息维护模块
房间信息维护模块
个人密码修改
删除用户信息
添加用户信息
新 用户注册
房间类型高查询
添加房间类型
删除房间类型
房间类型修改
删除房间信息
房间信息修改
房间信息查询
添加房间信息
四、 数据库结构设计与实现
由于在数据库设计是要同时考虑多方面的问题,也使设计工作变得十分复杂,我们需要使用数据库分析工具来实现。在酒店客房管理系统数据库的设计中,我们使用了PowerDesigner来进行E-R图的设计和数据库模型的实现。
4.1 实体关系(E-R)图设计
通过度析酒店客房管理系统的需求和系统功能,我们将酒店客房管理系统的实体分为用户、客房、客房状态、客房类型和入住客户。本系统的E-R图如下:
4.2建立数据库模型
在E-R图的基础上运用Powerdesigner生成的数据库模型如下:
4.3创建表
表一:用户信息表Users
序号
英文名
中文名
数据类型
长度
1
UserID
用户名
varchar
50
2
UserPwd
用户密码
varchar
50
3
UserPower
用户权限
int
4
4
UserRole
用户角色
varchar
50
5
UserName
用户姓名
varchar
50
6
UserSex
性别
tinyint
1
7
UserAddress
住址
varchar
50
8
UserTel
联系电话
varchar
50
9
UserEmail
电子邮件
varchar
50
10
UserDept
所在部门
varchar
50
表二:入住信息表OccupyGuest
序号
英文名
中文名
数据类型
长度
1
RoomID
房间编号
varchar
50
2
CusName
顾客姓名
varchar
50
3
CusIDCard
顾客身份证号
varchar
19
4
CusBookDate
订房日期
datetime
8
5
CusEndDate
退房日期
datetime
8
6
CusPay
结账金额
money
8
表三:房间状态表RoomState
序号
英文名
中文名
数据类型
长度
1
SID
状态编号
varchar
50
2
State
空闲
tinyint
1
3
Sclean
清洁
varchar
50
4
SDescribe
描述
varchar
50
表四:房间类型表RoomType
序号
英文名
中文名
数据类型
长度
1
TypeID
类型编号
varchar
50
2
TypeName
类型名称
varchar
50
3
TypeArea
面积
real
4
4
TypeBedSum
床位数量
int
4
5
TypePrice
价格
money
8
6
TypeAirCondition
是否有空调
tinyint
1
7
TypeTV
是否有电视
tinyint
1
8
TypeDescribe
类型描述
varchar
200
表五:房间信息表Room
序号
英文名
中文名
数据类型
长度
1
RoomID
房间编号
varchar
50
2
TypeID
类型编号
varchar
50
3
SID
状态编号
varchar
50
4
RoomPosition
房间位置
varchar
50
5
RoomDescribe
房间描述
varchar
200
4.4 创建触发器
create trigger insert_OccupyGuest on OccupyGuest
for insert
as begin
declare @CusEndDate datetime
declare @CusBookDate datetime
select @CusBookDate=CusBookDate,@CusEndDate=CusEndDate
from inserted
if (@CusBookDate>@CusEndDate)
rollback transaction
end
当退房时结账日期在预定日期前时触发
create trigger insert_Users on Users
for insert
as begin
declare @sex tinyint
select @sex=UserSex from inserted
if (@sex not in ('1','0'))
rollback transaction
end
性别插入错误是触发,1表达男,0表达女
4.4创建视图
创建AllRoomList视图,显示所有房间的相关信息
Create view AllRoomList
(RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe,State)
as select
RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe,State
from RoomType,Room,RoomState
where Room.TypeID=RoomType.TypeID and Room.SID=RoomState.SID
创建FreeRoomList视图显示空闲房间的相关信息,订房时使用
create view FreeRoomList
(RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe)
as select
RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe
from RoomType,Room,RoomState
where Room.TypeID=RoomType.TypeID and
Room.SID=RoomState.SID and RoomState.State=0
创建RoomLiveDetail视图,显示已住房间的相关信息,退房时使用
create view RoomLiveDetail
RoomLiveDetail
(RoomID,TypeName,CusBookDate,TypePrice,CusIDCard,CusName)
As select
OccupyGuest.RoomID,TypeName,CusBookDate,TypePrice,CusIDCard,CusName
from RoomType,Room,RoomState,OccupyGuest
where Room.TypeID=RoomType.TypeID and OccupyGuest.CusPay=0
and Room.SID=RoomState.SID and RoomState.State=1
and OccupyGuest.RoomID=Room.RoomID
创建RoomDetail视图,显示所有客房的信息,对房间信息查询,更新时使用
Create view RoomDetailList
(RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe)
as select RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe
from RoomType,Room
where Room.TypeID=RoomType.TypeID
create view RoomLiveCheckOut
(RoomID,CusName,CusBookDate,CusIDCard,TypePrice)
as select OccupyGuest.RoomID,CusName,CusBookDate,CusIDCard,TypePrice
from OccupyGuest,Room,RoomType
where OccupyGuest.CusPay=0 and OccupyGuest.RoomID=Room.RoomID
and Room.TypeID=RoomType.TypeID
创建RoomLiveCheckOut视图,顾客退房时从视图获取信息,做修改
create view RoomLiveCheckOut
(RoomID,CusName,CusBookDate,CusIDCard,TypePrice)
as select OccupyGuest.RoomID,CusName,CusBookDate,CusIDCard,TypePrice
from OccupyGuest,Room,RoomType
where OccupyGuest.CusPay=0 and OccupyGuest.RoomID=Room.RoomID and Room.TypeID=RoomType.TypeID
创建TypeDetailList视图,用于前台查询和更新操作
create view TypeDetailList
(TypeID,TypeName,TypeArea,TypeBedSum,TypePrice,TypeDescribe)
as select TypeID,TypeName,TypeArea,TypeBedSum,TypePrice,TypeDescribe
from RoomType
创建视图UserDetailList,用于管理员进入系统时查询和更新用户信息
create view UserDetailList
(UserID,UserName,UserEmail,UserTel,UserRole)
as select UserID,UserName,UserEmail,UserTel,UserRole
from Users
创建SellBill视图,用于查询客房的营业情况
create view SellBill
(RoomID,TypeName,CusBookDate,CusEndDate,CusPay)
As select
OccupyGuest.RoomID,RoomType.TypeName,CusBookDate,CusEndDate,CusPay
from RoomType,Room,OccupyGuest
where Room.TypeID=RoomType.TypeID
and OccupyGuest.RoomID=Room.RoomID and CusPay>0
create view TypeDetailList
(TypeID,TypeName,TypeArea,TypeBedSum,TypePrice,TypeDescribe)
as select TypeID,TypeName,TypeArea,TypeBedSum,TypePrice,TypeDescribe
from RoomType
create view UserDetailList
(UserID,UserName,UserEmail,UserTel,UserRole)
as select UserID,UserName,UserEmail,UserTel,UserRole
from Users
4.5创建存储过程
用户密码修改的存储过程
create procedure [PasswordModify]
(
@UserID [varchar](50), @UserPwd [varchar](50)
)
as update [Users]
set [UserPwd]=@UserPwd
where UserID=@UserID
GO
顾客退房结账时将结算金额,退房时间存入OccupyGuest表
CREATE procedure [RoomCheckOut]
( @RoomID [varchar](50),@CusIDCard [varchar](50),
@CusEndDate [datetime], @CusPay [money]
)
as update [HRM].[dbo].[OccupyGuest]
set [CusEndDate]=@CusEndDate, [CusPay]=@CusPay
where
(
[RoomID]=@RoomID and [CusPay]=0 and [CusIDCard]=@CusIDCard
)
GO
结账退房后将房间状态修改
CREATE procedure [RoomStateUpdate2]
(
@RoomID [varchar](50)
)
as update [HRM].[dbo].[Room]
set [SID]=0
where RoomID=@RoomID
GO
顾客订房时,将住房信息存入OccupyGuest表
CREATE procedure [OrderRoom]
(
@RoomID [varchar](50), @CusName [varchar](50),
@CusIDCard [varchar](50), @CusBookDate [datetime]
)
as insert into [HRM].[dbo].[OccupyGuest]
(
[RoomID],[CusName],[CusIDCard],[CusBookDate],[Cuspay]
)
values
(
@RoomID,@CusName,@CusIDCard,@CusBookDate,0
)
GO
订房后对房间状态做修改
CREATE procedure [RoomStateUpdate1]
(
@RoomID [varchar](50)
)
as update [HRM].[dbo].[Room]
set [SID]=1
where RoomID=@RoomID
GO
添加房间信息时,将新的信息存入Room表
create procedure [RoomAdd]
(
@RoomID [varchar](50), @TypeID [varchar](50),
@SID [varchar](50), @RoomPosition [varchar](50),
@RoomDescribe [varchar](50)
)
as insert into [HRM].[dbo].[Room]
(
[RoomID],[TypeID],[SID],[RoomPosition],[RoomDescribe]
)
values
(
@RoomID,@TypeID,@SID, @RoomPosition,@RoomDescribe
)
GO
在Room表中删除房间信息
create procedure [GuestRoomUpdate]
(
@RoomID [varchar](50),
@TypeID [varchar](50),@SID [varchar](50),
@RoomPosition [varchar](50), @RoomDescribe [varchar](50)
)
as update [HRM].[dbo].[Room]
set
[TypeID]=@TypeID,[SID]=@SID,
[RoomPosition]= @RoomPosition,[RoomDescribe]=@RoomDescribe
where ([RoomID]=@RoomID)
GO
添加新的房间类型到RoomType表
create procedure [RoomTypeAdd]
(
@TypeID [varchar](50),@TypeName [varchar](50),@TypeArea [real],
@TypeBedSum [int],@TypeAirCondition [bit],@TypeTV [bit],
@TypePrice [money],@TypeDescribe [varchar](50)
)
as insert into [HRM].[dbo].[RoomType]
(
[TypeID],[TypeName],[TypeArea],[TypeBedSum], [TypeAirCondition],[TypePrice], [TypeTV],[TypeDescribe]
)
values
(
@TypeID,@TypeName,@TypeArea,@TypeBedSum,
@TypeAirCondition,@TypePrice,@TypeTV,@TypeDescribe
)
GO
房间类型有更新时,将新的信息插入RoomType表中
create procedure [RoomTypeUpdate]
(
@TypeID [varchar](50),@TypeName [varchar](50),@TypeArea [float] (8),
@TypeBedSum [int],@TypeAirCondition [bit],@TypeTV [bit],
@TypePrice [money],@TypeDescribe [varchar](50)
)
as update [HRM].[dbo].[RoomType]
set
[TypeName]=@TypeName,[TypeArea]=@TypeArea,[TypeBedSum]=@TypeBedSum,
[TypeAirCondition]=@TypeAirCondition,[TypePrice]=@TypePrice, [TypeTV]=@TypeTV,[TypeDescribe]=@TypeDescribe
where ([TypeID]=@TypeID)
GO
为用户信息表添加新的用户,或注册新的用户
CREATE PROCEDURE [UserAdd]
(
@UserID [varchar](50),@UserPwd [varchar](50),
@UserPower [int], @UserSex [bit],@UserName [varchar](50),
@UserAddress [varchar](50), @UserTel varchar](50),
@UserEmail [varchar](50), @UserDept [varchar](50),
@UserRole [varchar](50)
)
AS INSERT INTO [HRM].[dbo].[Users]
(
[UserID],[UserPwd],[UserPower],[UserSex],[UserName],
[UserAddress],[UserTel],[UserEmail],[UserDept],[UserRole]
)
VALUES
(
@UserID,@UserPwd,@UserPower,@UserSex,@UserName,
@UserAddress, @UserTel,@UserEmail,@UserDept,@UserRole
)
GO
从用户信息表中删除用户
CREATE procedure [UserDelete]
(
@UserID [varchar](50)
)
as delete [HRM].[dbo].[Users]
where ([UserID]=@UserID)
GO
五、参考文献
[1] 王珊,萨师煊. 数据库系统概论第四版 [M]. 高等教育出版社. 2023
[2] 孙印杰. ASP.NET+SQL Server动态网站设计实例精解 [M]. 电子工业出版社. 2023
展开阅读全文