数据库课程设计客房管理系统.docx
《数据库课程设计客房管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计客房管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
数据库课程设计客房管理系统
信息工程学院
《数据库原理与应用》课程设计
题目:
客房管理系统数据库设计
学号:
09108067
专业班级:
计算机083
姓名:
曹俊
指导老师:
陈勇
完成日期:
2010年1月22日
摘要
关键字:
客房管理;管理系统;服务。
随着我国经济的迅速发展和假日经济的出现,宾馆酒店业的竞争愈来愈激烈。
要想在竞争中取得优势,必须在经营管理、产品服务等方面提高服务管理意识。
而对对酒店的经营状况去决定行作用的是酒店的管理。
如何利用先进的管理手段,提高酒店的管理水平,是每一家酒店的管理者所面临的重要课题。
简单的服务标准已经不是制胜的锦囊,只有做到最细微之处才有机会让顾客体会到酒店服务的优点,而精准、快捷、周全往往就是最基本的成功要素。
因此,采用全新的计算机网络和管理系统,将成为提高酒店的管理效率,改善服务水准的重要手段之一。
信息与科技在酒店管理与现代化建设中显现出越来越重要的地位。
在某种意义上,酒店客房状态管理方面的信息化与科学化,已成为现代化酒店的重要标志。
1引言
本次数据库实习不要求界面和外部应用程序的设计,只设计数据库部分。
客房管理系统采用SQLserver2000作为数据库后台。
客房管理系统可以实现对客房的科学化、规范化、查询顾客情况、订房信息、以及结算信息等。
有助于提高管理的效率,客房管理系统是根据某宾馆对客房的实际情况进行集中的查询与管理工作,以及提高整个客房管理的工作效率。
2数据库设计
2.1需求设计
2.1.1总体分析
建立客房管理信息系统的必要性已被广大的管理人员所接受和认可,建立客房管理信息系统是为宾馆的管理服务的,其根本米的是要创造客房的经济效益。
然而客房知道接的经济效益的提高应该包括直接的经济效益和间接地经济效益两方面。
客房的直接经济效益是指由于系统的建立是客房的生产经营或客房的管理取得的直接利润收益。
根据一般宾馆的工作流程及环境,以及顾客的要求设计了这个客房管理系统。
这个数据库主要完成房间信息查询,住房信息统计,和账务结算。
其中信息查询用来给顾客查询各种房间类型,房间价格等,住房信息统计用来给客房管理人员查询是否有空房间,有多少空房,哪个顾客需要结账了,等等信息管理,还可以根据数据库储存的资料统计什么样的人订房多,什么时段生意好,哪些服务是大多数顾客所喜爱的等等。
基于这个数据库,可以根据不同的需要对数据库进不同的查询。
2.12业务流程图
根据了解到的情况,了解到了顾客住房的基本流程,根据客房管理的基本流程,从业务流程图基本的功能模块分别用下面图形表示:
根据宾馆实际管理过程和各种操作,由了解到的业务画出业务流程图,本系统的业务流程图如下所示:
2.1.3数据流图
2.1.4数据字典
数据流图表达了数据和处理的关系,数据字典则是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果。
数据字典在数据库设计中占有很重要的地位。
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程5个部分。
其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构,数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
2.1.4.1数据项定义
数据项是不可在分的数据单位。
下面定义了客房管理系统需要的数据项:
表2.1数据项定义
数据项编号
数据项名称
简述
类型及宽度
I1
Rtype
描述房间的不同类型
char(10)
I2
Rno
表示房间的号码
char(20)
I3
Rstatus
房间的状态(是否有人住)
char(4)
I4
Rprice
描述房间的价格
int
I5
Cno
顾客编号
char(10)
I6
Cname
顾客姓名
char(10)
I7
Cage
顾客年龄
int
I8
Csex
顾客性别
char
(2)
I19
IDno
顾客身份证号码
char(18)
I110
Date
入住时间
datetime
I11
Time
顾客订房天数
int
I12
Sname
服务名称
char(10)
I13
Samount
服务次数(个数)
int
I14
Sprice
每次(个)服务单价
float
2.1.4.2数据结构
数据结构反映了数据之间的组合关系,。
一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
对数据结构的描述通常包括数据结构名、含义等。
表2-2数据结构
数据结构定义
数据结构名
数据结构含义
组成
DS-1
customer
入住客人信息
Cno,Cname,Csex,Cage,IDno
DS-2
room
房间信息
Rtype,Rno,Rprice,Rstatus
DS-3
information
入住登记表
Cname,Rno,Date,Time,Rtype,IDno
DS-4
Servies
服务清单
Rno,Sname,Samount,Sprice
DS-5
Menu
服务菜单
Sname,Samount,Sprice
2.1.4.3数据流
数据流是数据结构在系统内传输的路径。
对数据流的描述通常包括以下内容:
数据流名、说明、数据流来源、数据流去向、组成等。
表2-3数据流
数据流编号
数据流名称
简述
数据流来源
数据流去向
数据流组成
F1
房间信息表
供用户查询房间信息,选择房间类型
前台服务部
顾客
Rtype,Rno,Rfloor,Rprice,Rstatus
F2
发票
收费凭证
前台服务部
顾客
房间类型,房间价格,发票编号,日期
F3
入住登记表
登记订房客人的信息及房间信息
前台服务部
顾客,后勤服务部
Cname,Cage,Csex,Cno,
Rno,Date,Time
IDno,Rtype
F4
房卡
作为订房、退房凭证,开房门
前台
顾客
Rno,Rfloor
F5
服务菜单
供用户选择相应服务
后勤服务部
顾客
Sname,Samount,Sprice
F6
服务清单
客人选择的服务的信息
顾客
后勤服务部
Rno,Sname,Samount,Sprice
F7
退房信息
某顾客退房登记的信息
前台服务部
存盘
Cname,Rno,Date,Time
2.1.4.4数据存储
数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。
他可以是手工文档或手工凭单,也可以是计算机文档。
表2-4数据存储
数据存储编号
数据存储名称
简述
数据存储组成
相关处理
S1
入住信息数据
记录住宿信息,包括房间信息和客人信息
Cname,Rno,Date,Time
P1,P2,
P3,P4
S2
登记记录
记录顾客订房的信息
Cname,Rno,Date,Time
IDno,Rtype
P1
2.1.4.5处理过程
处理过程的具体处理逻辑一般是用判定表或判定树来描述。
数据字典中只需要描述处理过程的说明信息,通常包括处理过程编号、名称、说明、输入数据流、输出数据流、处理等。
表2-5处理过程
处理过程编号
处理过程名称
简述
输入的数据流
处理
输出地数据流
P1
更新住房信息
有顾客后,要及时更新住房信息
入住登记表
对住房信息数据进行更新操作
新的住房信息
P2
选择房间
顾客更具需要选择房间类型
房间信息表
选择需要的房间类型
房卡、发票
P3
对该顾客进行相应服务
顾客选择服务,对顾客进行服务
服务菜单
按照顾客所选服务提供服务
服务清单
P4
退房
顾客离开时办理退房结算手续
入住登记表
办理退房结算手续
退房信息
2.2概念设计
将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。
它是整个数据库设计的关键。
2.2.1分E-R图
面对每一个局部应用主义设计分E-R图:
2.2.2总E-R图
各子系统的E-R图设计好以后,下一步就是要将所有的分E-R图综合成一个系统的总E-R图。
多个分E-R图一次集成总E-R图,如下图所示:
在消除各种冲突和不必要的冗余之后,基本E-R图就生成了,下一步就是根据概念结构设计结果来进行逻辑结构设计了。
2.3逻辑设计
概念结构是独立于任何一种数据模型的信息结构。
逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与所选用的DBMS产品所支持的数据模型想符合的逻辑结构。
2.3.1E-R图向关系模型转换
把总E-R图转换成为关系模式,关系的码用下划线标出。
顾客(顾客编号,顾客姓名,顾客身份证号,顾客性别,顾客年龄)
此为顾客实体所对应的关系模式。
房间(房间编号,房间类型,房价状态,房间单价)
此为房间实体所对应的关系模式。
入住登记表(顾客姓名,房间号码,顾客身份证号,入住日期,订房天数,)
此为入住登记表所对应的关系模式,该关系模式已包含了联系“登记”所对应的关系模式。
服务菜单(服务名称,服务次数,服务单价)
此为服务菜单实体对应的关系模式。
服务清单(房间编号,服务名称,服务次数,服务单价)
此为服务清单所对应的关系模式,该关系模式已包含了联系“选择”所对应的关系模式。
2.3.2数据模型的优化
数据逻辑设计的结果不是唯一的。
为了进一步提高数据库应用系统的性能,还应该分局应用系统的需要适当的修改,调整数据模型的结构,这就是数据模型的优化。
关系数据库模型的优化通常以规范化理论为指导,方法为:
1.确定数据依赖。
2.对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
3.按照数据依赖的理论对关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定个关系模式分别属于第几范式。
4.按照需求分析阶段得到的处理要求,分析对于这样的应用环境这些模式是否合适,确定是否要求对某些模式进行合并或分解。
5.对关系模式进行必要的分解,提高数据操作的效率和存储空间利用率。
常用的两种分解发事水平分解法和垂直分解法。
规范化理论为数据库设计人员判断关系模式优劣提供了理论标准,可以来预测模式可能出现的问题,使数据库设计工作有了严格的理论基础。
2.3.3设计用户子模式—视图
将概念模型转换为全局逻辑模型之后,还应该根据局部应用需求,结合具体DBMS的特点,设计用户的外模式。
目前关系数据库管理系统一般都提供了视图(view)概念,可利用这一功能设计更符合局部用户需要的用户外模式。
对于本系统,综合顾客和管理者的角度,设计了如下视图:
对于顾客,只需要建立状态为空的房间信息的视图:
1.建立空房间的视图,方便顾客查询和选择房间。
空房间(房间编号,房间类型,房间单价)
对于管理者,则要建立如下几个视图:
1.建立满房间视图,方便管理者了解入住客人的信息
满房间(房间编号,房间类型,房间单价)
2.建立所有顾客应缴纳房间费用的视图,方便管理者预算房间收入
房间费用(顾客姓名,房间费用)
3.建立所有顾客应缴纳服务费用的视图,方便预算服务收入,且可以根据统计数据来分析那种服务受欢迎,从而增加和推广相应服务
服务费用(房间编号,服务综费用)
4.建立所有顾客应缴纳的总费用的视图,方便结算
总费用(房间编号,总费用)
2.4物理设计
数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统。
为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。
2.4.1建立触发器
这个系统为数据表的更新建立了两个触发器,一个是在有新的客人入住时,插入客人入住信息,触发触发器,使房间信息得到更新。
另外就是在有客人退房结账之后,使触发器触发,更新房间信息表。
表2-6定义触发器
触发器名
触发器的作用
View_delete
在顾客退房之后,触发器触发,删除住房登记表中的入住记录
in_status
用来在插入了一条顾客订房纪录之后触发,使该房间状态由‘空’更新为‘满’
Out_status
用来在插入了一条顾客退房记录之后触发,使该房间状态由‘满’更新为‘空’
2.4.2建立存储过程
存储过程是存储在服务器端由一组编译的Transact—SQL语句构成的SQLSever数据库应用程序,它能够检索系统信息、管理数据库或执行其他操作。
为了方便操作,为本系统建立了如下存储过程:
表2-7存储过程
存储过程编号
存储过程名称
存储过程作用
P1
roominf
查询某个房间的信息
P2
Priceinf
查询某个房间的价格
P3
Statusinf
查询某个房间的状态
P4
menuinf
查询有哪些服务
P5
updateinf
更新房间信息
2.5数据库实施阶段
2.5.1建立数据库
用SQL语句建立数据库,具体定义如下:
createdatabasehotel
2.5.2建立数据表
用SQL语句建立数据表,具体定义如下:
createtablecustomer
(Cnochar(10),
Cnamechar(10),
Cageint,
Csexchar
(2),
IDnochar(18),
primarykey(Cno)
)
createtableroom
(Rnochar(10),
Rtypechar(10),
Rstatuschar(4),
Rpriceint,
primarykey(Rno)
)
createtableinformation
(Cnamechar(10),
Rnochar(10),
IDnochar(18),
Thedatedatetime,
daysint
primarykey(Cname,Rno)
)
createtablecheckout
(Cnochar(10),
Rnochar(10),
primarykey(Cno)
)
createtablemenu
(Snamechar(10),
Spriceint,
primarykey(Sname)
)
createtableservice
(Rnochar(10),
Snamechar(10),
Samountint,
primarykey(Rno,Sname)
)
2.5.3数据库入库
本次数据采用Excel表导入的方法导入数据。
数据导入后基本表如下所示:
1.基本表—customer
2.基本表room。
3.
基本表menu。
4.
基本表information。
5.
基本表service
6.
基本表checkout
2.6调试与测试
2.6.1触发器定义
定义房间信息在有人入住之后更新的触发器
createtriggerin_status
oninformation
afterinsert,update
as
declare@Rnochar(10)
select@Rno=Rno
frominserted
updateroom
setRstatus='满'
whereroom.Rno=@Rno
定义房间信息在有人退房之后更新的触发器
createtriggerout_status
oncheckout
afterinsert,update
as
declare@Rnochar(10)
select@Rno=Rno
frominserted
updateroom
setRstatus='空'
whereroom.Rno=@Rno
2.6.2视图的定义
建立空房间信息视图
createviewview_eroom
as
select*
fromroom
whereRstatus='空'
建立满房间视图
createviewview_froom
as
select*
fromroom
whereRstatus='满'
建立客房所有顾客应缴纳的房间费用视图
createviewview_roomcost(Cname,rcost)
as
selectinformation.Cname,Rprice*Days
fromroom,information
whereroom.Rnoin
(selectRno
frominformation
)andinformation.Rno=room.Rno
建立所有顾客应缴纳服务费用的视图
createviewview_servicecost(Rno,cost)
as
selectservice.Rno,sum(Samount*Sprice)
frommenu,service
wheremenu.Sname=service.Sname
groupbyservice.Rno
建立顾客应缴纳的总费用的视图
createviewview_allcost(Rno,allcost)
as
selectview_servicecost.Rno,cost+Rprice*Days
fromview_servicecost,room,information
whereview_servicecost.Rno=room.Rnoandroom.Rno=information.Rno
2.6.3存储过程定义
建立查询某个房间信息的存储过程
createprocedureroominf
@Rnochar(10)
as
select*
fromroom
whereRno=@Rno
roominf'101'
建立查询某个房间价格的信息的存储过程
createprocedurepriceinf
@pRnochar(10)
as
selectRprice
fromroom
whereRno=@pRno
priceinf'101'
建立某个房间状态的存储过程
createprocedurestatusinf
@sRnochar(10)
as
selectRstatus
fromroom
whereRno=@sRno
某个客人入住,建立存储过程更新房间信息
createprocedureupdateinf
@P_Cnamechar(10),
@P_Rnochar(10),
@P_IDnochar(18),
@P_Thedatedatetime,
@P_Daysint
as
insertintoinformation
values(@P_Cname,@P_Rno,@P_IDno,@P_Thedate,@P_Days)
2.6.4数据操纵验证
数据操纵验证见附录
3收获与体会
经历了两周的数据库课程设计,我从开始只知道写几句SQL语句到对数据库设计有了一个全新的认识,从理论上升到了实践的高度,收获颇丰。
在实习的过程当中,我遇到了很多问题,特别是在开始需求分析阶段,觉得什么也不会做,什么也不知道去做。
后来在网上了解到了好多关于客房管理的知识,对数据库设计也有了一定的了解,在自己的努力下和老师悉心教导了下,我学到了课堂上学不到的很多东西,虽然也被老师批评过,但是批评之后,我对知识的记忆将更加深刻。
从中我知道了,只要我们不畏艰辛,坚持不懈,我们能做到很多不敢想不敢做的事情,经历风雨,就是彩虹!
4存在的问题与建议
4.1存在问题
1.对书本知识不熟悉,课程设计过程当中需要不断的查阅课本,这样造成了时间的浪费。
2.对SQLServer2000操作不熟悉,导致导入数据是经常出错,造成了一些不必要的麻烦,应该提高操作熟练程度。
3.对于触发器和存储过程定义不是很熟悉,有的稍微难点的语句写不出来,对于数据库定义语句应该要熟练掌握。
4.对数据库设计总体把握不是很准确,导致中间多次反复的改动前面的业务流程图、数据流图和E-R图。
4.2建议
在实习中,老师对我们细心辅导让我很感动,同学也热情的解答了我问的问题,唯一觉得不太适应的就是数据库实习的时间太短暂,没有充分的时间去全面考虑整个数据库的设计,这使得数据库的设计有很多方面不是很全面,这也是这次实习中的唯一一个遗憾吧。
但总体来说,这次数据库课程设计给我提供了一个锻炼自我,提高自我的机会,让我觉得计算机专业课其实很有意思,改变了我对计算机专业课难、没意思的看法,相信我以后会喜欢上这个专业的。
5.附录
存储过程功能的验证
图5-4存储过程updateinf验证