客房管理系统设计.docx
- 文档编号:13377176
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:10
- 大小:30.14KB
客房管理系统设计.docx
《客房管理系统设计.docx》由会员分享,可在线阅读,更多相关《客房管理系统设计.docx(10页珍藏版)》请在冰点文库上搜索。
客房管理系统设计
最新资料,word文档,可以自由编辑!
!
精
品
文
档
下
载
【本页是封面,下载后可以删除!
】
客房管理系统设计
在当今经济和商务往来交往日益频繁的状况下,宾馆服务行业正面临客流量骤增的压力。
越来越多的宾馆饭店都认识到传统的管理方法已经不能适合当今社会的需要,必须借助先进的计算机信息技术对宾馆服务进行管理。
“客房管理系统”可以说是整个宾馆计算机信息管理的中心子系统,因为宾馆最主要的功能就是为旅客提供客房。
设计客房管理这样一个系统,可以涉及到大多数SQLServer数据库的重要数据库对象、重要功能和特性,比如:
视图、触发器和存储过程等。
由此,通过这个课程设计可以加深对这些SQLServer数据库知识的学习、理解,积累在实际工程应用中运用各种数据库对象的经验,使学生掌握使用应用软件开发工具开发数据库管理系统的基本方法。
本课程设计的主要目的是学习和练习SQLServer数据库的实际应用。
1.系统功能设计
1).数据录入功能
在本系统中提供客人信息登记功能。
可以录入客人的姓名、性别、年龄、身份证号码、入住时间、预计入住天数、客房类别、客房号、离店时间以及缴纳押金金额等信息。
在客人退房时,系统根据输入的离店时间及客房单价自动计算客人住宿费金额。
2).数据查询功能
系统需要提供以下查询功能:
1查某类客房的入住情况及空房情况,显示所有该类客房空房数目和客房号。
2根据客人姓名信息查询客人信息;根据客房号查询入住客人的信息。
3查询某个客人住宿费用情况,显示客人缴纳押金金额,实际入住天数、客房价格、实际住宿费、住宿费差额及余额等信息。
4查询所有入住时间达到或超过预计入住天数的客人。
3).数据统计功能
①统计一段时间内各种客房的入住情况。
②统计全年各月份的客房收入。
③统计一段时间内各类客房的入住率。
2.数据库设计
1).数据库与数据表设计
2).数据完整性设计
①主键约束、非空值约束
②CHECK约束离店时间>入住时间
③使用缺省值入住时间、预计入住天数
④惟一约束客房类别
⑤外键约束
⑥规则身份证长度15OR18
3).视图、触发器和存储过程设计
1、客人选择客房处理
客人来到饭店入住前要做的第一件事是选择合适的客房,客人将告知饭店服务员自己需要的客房类型,服务员在系统中选择指定的客房类型后系统将现实所有空余的该类型客房,并显示该类型客房价格供客人参考选择。
这个处理过程可以通过一个存储过程来实现。
在这个存储过程中,需要的输入参数是客房类型,输出的结果集是所有这种客房类型的空房记录和价格。
定义这个存储过程名为SelRoom,定义输入的参数名为RoomType,定义输出的价格参数名为RoomPrice。
根据存储过程的创建语法,编写SelRoom的实现代码如下:
createprocedureselroom
@roomtypechar
(2),
@roomPricesmallmoneyoutput
as
select客房号from客房信息
where(客房类型编号=@roomtype)and(客房状态='N')
select@roomprice=价格from客房类型
where客房类型编号=@roomtype
在上面的代码中包含了两个Select语句,第一个SELECT语句从客房信息表中选择了所有客房类型为输入参数指定类型并且客房状态为“空”(N)的客房号,并将所有记录作为结果集返回;第二个SELECT语句从客房类型中取得了制定客房类型的价格,作为输出参数Roomprice返回。
2、客人入住登记处理
客人入住登记操作完成后,入住的客房状态应该及时做相应的改变,并记录客人的序号供以后查询。
这一功能可以使用触发器来自动进行:
因为进行客人入住登记操作是在客人信息表中添加一条新记录,所以可以为客人信息表设计一个INSERT触发器,当客人信息执行INSERT操作后自动更改客房信息相应客房记录的数据。
定义这个触发器名称为client_insert。
其实现代码如下:
createtriggerclient_insertondbo.客人信息
forinsert
as
update客房信息
set客房状态='F',客房信息.入住客人序号=B.序号
from客房信息ASA,insertedasB
WHEREA.客房号=b.客房号
3、客人离店退房处理
客人在离店退房时,服务员输入客人的退房时间,然后计算出客人的住宿费用,以便于客人结帐。
同时,系统应该将客人所退房的状态更改为“空”,以便于再次接待下一位客人入住。
这一功能也可以通过一个触发器来实现。
为客人信息表设计一个名为client_update的UPDATE触发器,当系统对客人信息的离店时间进行UPDATE操作后,将会自动触发它。
该触发器将自动取得当前所退客房的单价,并根据客人入住的天数计算出客人的住宿费用,将费用值写入住宿费列,最后触发器将客房信息的相应客房记录的客房状态和入住序号更新,即将客房状态置为空房,并清除对于该客人的入住标识信息。
下面是client_update触发器的定义代码:
createtriggerclient_updateondbo.客人信息
forupdate
as
ifupdate(离店时间)/*只有对离店时间列进行更改时才处理*/
begin/*求出客人所住客房的单价*/
declare@pricesmallmoney
set@price=(select价格from客房类型rightjoin客房信息on
客房类型.客房类型编号=客房信息.客房类型编号rightjoin客人信息on客房信息.客房号=客人信息.客房号
where客人信息.序号in(select序号frominserted))
/*求客人住宿费并更改住宿费列*/
update客人信息
set住宿费=@price*datediff(day,b.入住时间,b.离店时间)
from客人信息asa,insertedasb
wherea.序号=b.序号
/*更新客房信息相应客房的状态*/
update客房信息
set客房状态='N',入住客人序号=''
from客房信息,inserted
where客房信息.入住客人序号=inserted.序号
end
在上面的代码中,首先定义了一个变量@price,然后通过一个右联合直接得到当前客人所住客房的单价。
在第二段语句中,使用SQL函数DATEDIFF求得客人入住时间和退房时间之差,求出入住天数,乘以@price变量就得到了客人最终的住宿费用。
值得注意的是:
UPDATE触发器可以使用inserted表和deleted表,这里必须使用inserted表,它的离店时间才识最新更改的离店时间,如果使用deleted表,将得不到正确的结果。
最后,触发器对客房信息表中入住序号为当前客人的入住序号的记录的客房状态列和入住序号列进行了更新。
4、客人信息查询处理
在实际应用中,经常会有这样的要求:
服务员需要通过客人的部分资料查询客人的全部信息以及客人住在哪一个客房。
由于需要通过输入查询条,才能得到结果集,所以可以设计一个带输入参数的存储过程来实现。
定义一个名为spClientInfo的存储过程,该存储过程以客人姓名(@ClientName)作为输入参数,存储过程返回到查询到的结果集。
spClientInfo的定义代码如下:
createprocedurespClientInfo
@ClientNamevarchar(8)='%'
as
select*from客人信息
where姓名like@clientname+'%'
在上面的代码中,想spClientInfo传入客人姓名参数。
在WHERE子句中使用LIKE,并在参数前、后添加“%”,使得该存储过程具有模糊查询的功能。
比如,@ClientName参数中只输入客人的姓,就可以查询到所有该姓氏的客人信息。
5、查询客人住宿费用的处理
在本系统的功能需求中要求能够查询客人住宿费用的详细情况,包括客人入住时交付的押金金额、客人住宿天数、客房价格、客人住宿费金额、住宿费和押金差额等信息。
实现该功能可以通过一个存储过程,以客人序号为输入参数,输出上面要求的各种信息数值。
设计一个名为spClientCost的存储过程,定义代码如下:
createprocedurespClientCost
@ClientIdchar(9)
as
declare@clientPricesmallmoney
declare@clientDayssmallint
declare@clientCostsmallmoney
declare@clientBalancesmallmoney
select
@clientPrice=(
select价格from客房类型rightjoin客房信息
on客房信息.客房类型编号=客房类型.客房类型编号
rightjoin客人信息
on客人信息.客房号=客房信息.客房号
where客人信息.序号=@clientId),
@clientDays=(datediff(day,入住时间,getdate())),
@clientCost=(@clientPrice*@clientDays),
@clientBalance=(押金金额-@clientCost)
from客人信息where序号=@clientId
select押金金额,@clientPriceas价格,
@clientDaysas天数,@clientCostas住宿费,@clientBalanceas余额
from客人信息
where序号=@clientId
在上面代码中,首先定义了4个变量,分别是:
@clientPrice,@clientDays,@clientCost,@clientBalance,它们分别表示:
客人入住房间的单价客人住宿的时间,客人的住宿费用和客人所缴纳押金与住宿费用的差额。
第一个SELECT语句起赋值作用,分别把各个表达式的结果赋值给各个变量。
第二个SELECT语句是一个选择,将客人信息表的押金金额以及前面求得的各个变量值作为存储过程的结果集返回。
6、查询住宿时间到期的客人
客房管理服务员通常根据客人入住时登记的预住天数收取相应押金,当客人住宿时间达到预住天数时就应该通知客人,以便客人补交押金或退房。
系统为管理服务员提供这样的查询功能,可以显示出所有住宿时间达到预住日期的客人信息。
完成这个功能只需要在表中选择入住天数大于等于预住天数的记录,而不需要输入参数,所以,可以使用一个视图来实现这一查询功能。
定义视图的名称为vClient_Day,定义代码如下:
createviewdbo.vClient_Day
as
select序号,姓名,客房号,预计入住天数,入住时间,datediff(day,入住时间,getdate())as入住天数
fromdbo.客人信息
where(离店时间isnull)and(datediff(day,入住时间,getdate())>=预计入住天数)
代码中使用DATEDIFF函数求得入住日期与当前日期之间的天数,即客人实际住宿天数。
所有住宿天数大于或等于预住天数,并且离店时间为NULL的客人记录都将成为结果集中的记录。
7、客房销售统计
作为一个简单的客房管理系统,应该提供给管理者一定的统计数据。
系统中最基本的统计数据就是各种类型客房在一定时间段内的销售收入情况。
设计一个存储过程,以管理人员输入的统计起始日期和终止日期作为输入参数,在这段时期内所有类型客房的销售收入、销售次数(客人入住次数)为结果集。
这个存储过程名为spRoomSale,两个输入参数分别为@StartDate,@EndDate。
设计代码如下:
createprocedurespRoomSale
@StartDatesmalldatetime,
@EndDatesmalldatetime
as
select客房类型编号,客房类型,(selectsum(住宿费)from客人信息leftjoin客房信息
ON客人信息.客房号=客房信息.客房号where(客人信息.入住时间between@startdateand@enddate)
and(客房类型.客房类型编号=客房信息.客房类型编号))as销售额,
(selectcount(客人信息.序号)from客人信息
leftjoin客房信息on客人信息.客房号=客房信息.客房号
where(客人信息.入住时间between@startdateand@enddate)
and(客房类型.客房类型编号=客房信息.客房类型编号))as消费次数
from客房类型
代码中使用了两个SELECT子查询,分别求得起始日期与终止日期之间、客房类型为当前客房类型的所有住宿费用总和(客房销售收入sale)及客房销售次数salenum。
然后这两个值作为新的列与客房类型的客房类型编号、客房类型名称列一起作为结果集。
注意BETWEEN的用法。
8、统计某年份每月的客房销售数据
饭店管理人员常常需要比较一年中各个月份的客房销售收入,并把它制作成表格。
实现这一功能可以使用一个存储过程以输入一个年度作为参数,产生该年度12个月份的销售收入统计。
定义该存储过程名为spMonthSum,输入参数为@thisYear,实现代码如下:
createprocedurespMonthSum
@thisyearchar(4)
as
selectdatepart(mm,入住时间)as月份,Sum(住宿费)as营业额
from客人信息
wheredatepart(yyyy,入住时间)=@thisyear
groupbydatepart(mm,入住时间)
注意上面的代码中如何使用GROUPBY子句来实现统计功能。
代码中还使用了日期函数DATEPART和求和函数SUM。
⑨统计一段时间内各类客房的入住率。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 客房 管理 系统 设计