SQL server 客房信息管理系统
★新浪微博名:99加油站 ★绝密
课程设计说明书
课程设计名称: 数据库系统概论
课程设计题目: 客房信息管理子系统
学院名称: 信息工程学院
专业:班级:
学号:姓名:
评分: 教师:
20 13 年 1 月14
日
引言
本次数据库实习不要求界面和外部应用程序的设计,只设计数据库部分。客房管理系统采用SQL server 2005作为数据库后台。客房管理系统可以实现对客房的科学化、规范化、查询顾客情况、订房信息、以及结算信息等。有助于提高管理的效率,客房管理系统是根据某宾馆对客房的实际情况进行集中的查询与管理工作,以及提高整个客房管理的工作效率。
数据库设计
1. 需求分析
随着时代的发展,建立客房管理信息系统的必要性已越来越被广大的宾馆管理人员所接受和认可,建立客房管理信息系统是为宾馆的管理服务的,其根本目的是要提高客房管理效率,增加客房的经济效益。因此,我根据一般宾馆的工作流程及环境,以及顾客的要求设计了这个客房管理系统。这个数据库主要完成如下功能:
1. 实现客房信息、顾客信息的添加、删除、修改和查询等功能 2. 实现顾客预订或入住等信息的添加、删除、修改等功能 3. 实现统计各类信息并能合理安排住房的决策等问题
4. 实现查询某位顾客的消费情况,并拥有完善的结账报表系统 5. 实现完整性约束:每位顾客只能预订和入住一间客房,客房已满时提示顾客无法入住,规定预订客房的超出期限为3个小时,超期则取消本次预订。
2. 系统功能需求分析
客房信息管理子系统根据系统需求分析设计功能,管理功能功能是比较简单的。主要实现了对客房信息、顾客信息、顾客预订、顾客入住和结账报表信息等的管理,具体管理功能有添加、修改、删除、查询和统计等。系统的功能模块图如下图所示,其中的“信息管理”板块中的每一功能管理项都包括查看、添加、删除、修改等功能。
3. 数据库概念结构设计
3.1 数据流程图
根据了解到的情况,了解到了顾客住房的基本流程,结合宾馆实际管理过程和各种操作,由了解到的业务画出业务流程图,本系统的业务流程图如下所示:
3.2 系统E-R 图
经调研分析后得简化客房信息管理子系统整体的基本功能,设计了如下E-R 图:
4. 数据库逻辑结构设计 4.1 关系模式
按照E-R 图到逻辑关系模式的转换规则,可将上面E-R 图转换成如下5
个关
系:
1. Room(rno,rsize,rprice,rstatus)
2.
Client(cnum,rno,cname,csex,cage,cphone,eorb) 3. Book(cnum,rno,booktime,bookday,maxtime,bookway)
4. Inhotel(cnum,rno,daynum,cost,paid,unpaid,cometime,paidtime) 5. Account(cnum,rno,cost,paid,paidtime)
其中带下划线的为关系的主码,既带下划线又加波浪线的为外码
4.2 数据项定义
根据关系模式中的各属性,定义数据项及其说明如下
5. 数据库物理结构设计
本系统数据库表的物理设计通过创建表的SQL 命令及数据关系图来呈现,下面列出SQL 创建表的命令和数据库关系图:
5.1 创建表的命令
创建客房信息表room : create table room (
rno char(10) primary key, rsize char(10), rprice int,
rstatus char(2)check(rstatus in('满',' 空')), )
创建顾客信息表client : create table client (
cnum char(18) primary key, rno char(10), cname char(10),
csex char(2)check(csex in('男',' 女')), cage int,
cphone char(11),
foreign key(rno)references room(rno) )
创建顾客入住信息表inhotel :
create table inhotel (
cnum char(18), rno char(10),
cometime datetime, paidtime datetime, days int, cost int,
paid int, unpaid int,
primary key(cnum,rno),
foreign key(rno)references room(rno),
foreign key(cnum)references client(cnum), )
创建顾客预订信息表book : create table book (
cnum char(18), rno char(10),
booktime datetime, bookdays int,
bookway char(20), maxtime datetime,
primary key(cnum,rno),
foreign key(rno)references room(rno),
foreign key(cnum)references client(cnum), )
创建结账报表account : create table account (
cnum char(18), rno char(10), cost money, paid money,
paidtime datetime,
primary key(cnum,rno),
foreign key(rno)references room(rno) )
5.2 数据库关系图
根据数据库中表的创建命令,在SQL sever 2000的企业管理器中生成的数据库关系图如下:
6. 系统功能的实现
6.1 建立触发器
这个系统为数据表的更新建立了三个触发器,一个是在有新的客人入住时,插入客人入住信息,触发触发器,使房间信息得到更新;
一个是在有客人入住之后,
使触发器触发,更新入住信息表;另外一个是顾客预订时,触发触发器,更新预订信息。
触发器名 Client1 Book1 Inhotel
表 2-6 定义触发器 触发器的作用
在顾客入住之后,触发器触发,更新住房登记表中的入住记录,根据顾客选择入住还是预订,相应更新入住信息表或预订信息表
在预订信息表更新后,触发器触发,根据顾客的预订时间,修改其超期时间
在入住信息表更新后,触发器触发,根据顾客的付款时间,修改其付款时间
6.2 建立存储过程
存储过程是存储在服务器端由一组编译的Transact —SQL 语句构成的SQL Sever 数据库应用程序,它能够检索系统信息、管理数据库或执行其他操作。
为了方便操作,为本系统建立了如下存储过程:
表2-7 存储过程
存储过程名称 Bovertime Delbook Delinhotel Information
存储过程作用
查询某个房间预订是否超期,超期则删除预订信息,更新房间信息,删除顾客信息
预订结束后,删除预订信息,更新房间信息,删除顾客信息
退房后,删除入住信息,更新房间信息,删除顾客信息
查询某间房间的信息,若为‘满’,查询该房间的顾客信息
6.3 创建视图
为了方便查询房间信息,为本系统建立了如下视图:
表2-7 视图
视图名称 Emptyfull
视图作用
查询所有空房信息,
Fulltime Accountsum
查询所有满房信息
查询酒店客房的所有消费信息
6.4 具体代码实施及验证
6.4.1 触发器代码及其验证 1. 顾客登记触发器Client1
代码:
create trigger client1 on client
after insert asbegin
declare @rno char(10),@eorb char(10),@cnum char(18) select @rno = rno,@eorb = eorb ,@cnum=cnum from inserted update room
set rstatus = '满'
where room.Rno = @Rno; if(@eorb='inhotel')
insert into inhotel(cnum,rno,cometime)values(@cnum,@rno,getdate()) else
if(@eorb='book')
insert into book(cnum,rno)values(@cnum,@rno) end
验证
插入预订信息:
select * from client select * from book
select rno,rstatus from room where rno='101' select rno,rstatus from room where rno='102' insert into client
values('[***********]','101','张三',' 男',20,'[1**********]','book') insert into client
values('[***********]','102','李四',' 男',20,'[1**********]','book') select * from client
select * from book
select rno,rstatus from room where rno='101' select rno,rstatus from room where rno='102'
截图:
插入入住信息:
select * from client select * from inhotel
select rno,rstatus from room where rno='103' select rno,rstatus from room where rno='104' insert into client
values('[***********]','103','王五',' 男
',20,'[1**********]','inhotel')
insert into client
values('[***********]','104','赵六',' 男',20,'[1**********]','inhotel')
select * from client select * from inhotel
select rno,rstatus from room where rno='103' select rno,rstatus from room where rno='104'
截图:
2. 顾客预订信息更新触发器Book1
代码:
Create trigger book1 on book after update
as begin
declare @rno char(10)
select @rno=rno from inserted
update book set maxtime=dateadd(hh,3,booktime) where book.rno=@rno end
验证
更新book 的预订时间:
select * from book where rno='101'
update book set booktime=getdate() where rno='101' select * from book where rno='101' 截图:
3. 顾客预订信息更新触发器Inhotel
代码:
Create trigger inhotel1 on inhotel after update as begin
declare @rno char(10)
select @rno=rno from inserted
update inhotel set paidtime=getdate() where inhotel.rno=@rno end
验证:
更新入住消费信息
select * from inhotel
update inhotel set days=1,cost=60,paid=60,unpaid=0 where rno='103' select * from inhotel
截图:
6.4.2存储过程代码及其验证
1. 建立顾客预订超期处理存储过程Bovertime
代码:
create proc bovertime @rno char(10) as begin
declare @maxtime datetime
select @maxtime=maxtime from book where book.rno=@rno if(datediff(mi,getdate(),@maxtime)
delete from book where book.rno=@rno
delete from client where client.rno=@rno
update room set room.rstatus='空' where room.rno=@rno
print+@rno+'房间预定已超期,系统已将其全部相关信息自动删除!' end
else print+@rno+'房间正在预定中...' end
验证:
调用存储过程
Select * from book
Select * from client
Select * from room where rno='101' exec bovertime @rno='101'
Select * from book Select * from client
Select * from room where rno='101'
以下为预订未超期结果截图:
2. 建立删除顾客预订信息存储过程Delbook
代码:
Create proc delbook @rno char(10)
as begin
delete from book where book.rno=@rno
delete from client where client.rno=@rno
update room set room.rstatus='空' where room.rno=@rno print+@rno+'房间的信息全部删除了' end
验证:
select * from book select * from client
select rno,rstatus from room where rno='101' exec delbook @rno='101' select * from book
select * from client
select rno,rstatus from room where rno='101' 截图:
3. 建立删除顾客入住信息存储过程存储过程delinhotel
代码:
Create proc delinhotel @rno char(10) as begin
insert into Account(cnum,rno,cost,paid,paidtime)
select cnum,rno,cost,paid,paidtime from inhotel where inhotel.rno=@rno
delete from inhotel where inhotel.rno=@rno
delete from client where client.rno=@rno
update room set room.rstatus='空' where room.rno=@rno print+@rno+'房间的信息全部删除了' end
验证:
select * from inhotel select * from client
select rno,rstatus from room where rno='103'
select * from account
exec delinhotel @rno='103' select * from inhotel
select * from client
select rno,rstatus from room where rno='103' select * from account
截图:
4. 建立查询房间状态信息存储过程information
代码:
Cretae proc information @rno char(10) as begin
select * from room where room.rno=@rno
if((select rstatus from room where room.rno=@rno)='满') begin
print+@rno+'的其他相关信息如下:'
select * from client where client.rno=@rno end end
验证:
Exec information @Rno='102'
6.4.3视图代码及其验证
1. 建立查询结账报表视图accountsum
代码:
Create view accountsum
As select * from account
验证:
select * from accountsum
截图:
2. 建立查询状态为’空’的房间视图emptyroom
代码:
Create view emptyroom
As select * from room where rstatus='空'
验证:
select * from emptyroom
3. 建立查询状态为’满’的房间视图fullroom
代码:
Create view fullroom
As select * from room where rstatus='满'
验证:
select * from fullroom
截图:
7. 收获与体会
经历了两周的数据库课程设计,我从开始只知道写几句SQL 语句到对数据库设计有了一个全新的认识,从理论上升到了实践的高度,收获颇丰。
在实习的过程当中,我遇到了很多问题,特别是在开始需求分析阶段,觉得什么也不会做,什么也不知道去做。后来在网上了解到了好多关于客房管理的知识,对数据库设计也有了一定的了解,在自己的努力下和老师悉心教导了下,我学到了课堂上学不到的很多东西, 从中我知道了,只要我们不畏艰辛,坚持不懈,我们能做到很多不敢想不敢做的事情,经历风雨,就是彩虹!
参考文献
1. 王珊、萨师煊 《数据库系统概论》、高等教育出版社、2006.5
2. 钱雪忠、罗海驰、陈国俊《数据库原理及技术课程设计》、清华大学出版社、 2009.2
3. 赵喜来、崔程、夏素广 《SQL Server 2005 中文版从入门到精通:普及版》、电子工业出版社、2007.9