引****言
随着全球经济一体化使酒店业客源更加丰富多样化,市场更加广阔多渠道的同时,酒店业更面临着日趋激烈的竞争环境和不断攀升的客户期望,迫使业内人士不断进一步寻求扩大酒店销售、改进服务质量、降低管理成本和提升客户满意度的新法宝来增强酒店的核心竞争力。其中最有效的手段之一就是大规模应用先进的信息化技术,变革传统意义上的酒店业竞争方式和经营管理模式以进而赢得新竞争优势,在这方面国际上领先的酒店业一直在不遗余力地探索、实施和推进。Internet作为全球性的计算机互联网,己深入到人们日常生活当中。现代计算机技术的巨大发展,使得酒店管理的方式发生了巨大得变化,就连酒店数据的储存方式也不再只拘泥于传统的方式。酒店管理系统是建立在分布式数据库上的,凡一切关于客户资料、客房资料和酒店资料的管理操作都是依靠分布式数据库来完成的。酒店管理系统主要管理操作包括:客户信息管理、客房管理以及对酒店资料管理等,它们是酒店管理系统的核心业务。
面对目前酒店发展的实际状况,我们通过调研,对宾馆客房管理系统的设计开发做了一个详细的概述。
目录
引 言… 3
1****需求分析… 5
1.1****功能分析… 5
1.3****宾馆入住流程… 5
1.4****系统功能… 7
1.5****数据字典… 8
**2.**概念结构设计阶段… 9
**3.**逻辑结构设计阶段… 12
**4.**物理结构设计阶段… 14
**5.**数据库实施… 14
5.1****创建数据库… 15
5.2****创建表… 15
5.3****创建视图和建立索引… 16
5.4****常用操作的实现… 18
5.5****触发器的设计… 19
总结… 20
参考文献… 20
宾馆客房管理系统
1****需求分析
1.1****功能分析
(1)宾馆要求该系统能实现住房信息管理、客户信息管理等功能。
(2)每个房间有房间号、收费标准、床位数目等信息。
(3)每位客人有身份证号码、姓名、性别和地址等信息。
(4)对每位客人的每次住宿,应该记录其入住日期、退房日期和预付款额信息。
(5)管理系统可查询出客人住宿相关信息、房间信息。
1.2****功能要求
(1)客人基本信息的录入。
(2)客人基本信息的查询、修改、增加、删除等。
(3)客房相关信息的录入,包括房间号、收费标准、床位、类别等。
(4)客房类别标准的制定、类别信息的输入。
(5)客房基本信息的查询、修改、删除等。
(6)住房信息的录入,包括房间号、客人姓名等。
(7)退房信息的更新。
1.3****宾馆入住流程
客户可有三种需求分别为入住请求,续住请求及退房请求,将其发送给管理员,可对其需求分别给予不同的响应:入住请求,查询有无空房,若有,则进行入住登记,否则,返回客房已满,并将结果回馈给客户;续住请求,首先确认客房号,进行续住登记,并将结果返回给客户;退房请求,同样需要先进行确认客房号,进行退房登记,查询有无损坏物品,若有,调出物品赔偿单,再查询入住时间,否则,直接查询入住时间,最后进行结算,将结果返回给客户。可得其整体流程图,如下图1 客房管理业务流程图。
1.4****系统功能
系统要处理的对象包括客户信息管理、客房信息管理、入住和退房管理、客房类型管理、费用管理、价目信息管理等6 个方面,各个对象包含的信息如下所示: (如下图2 系统的功能模块图)
(1)客户信息管理:可以新建客户,输入客户的身份证号码、姓名、性别和地址等信息,可以对于客户的信息进行相应的修改,还可以对客户的消费信息进行统计。
(2)客房信息管理:可以在相应的房间类型下面进行添加相应的房间,对相应的房间进行删除, 查看空房以及客房的情况。
(3)入住和退房管理:客户可以入住相应的房型下的空房,然后可以退房,系统自动将相应的订 单状态置为失效,入住状态置为已退房,将相应房间的状态置为空房。
(4)客房类型管理:管理员可以对相应的房型进行各种属性的修改,可以按照需求添加相应的房型,管理员、工作人员都可以查看相应的房型信息,管理员有需要时可以删除相应的房型系,统自动将 该房型下的房间删除。
(5)费用管理:管理员、工作人员都可以查看相应的费用信息,管理员有需要时可以对宾馆的收 入与支出进行查询或修改。
(6)价目信息管理:可以查看客房的收费标准,管理员可以对客房价格进行查询与修改,工作人 员可以查看价目信息。
1.5****数据字典
数据字典最重要的作用是作为分析阶段的工具。任何字典最重要的用途都是供人查询对不了解的条目的解释,在结构化分析中,数据字典的作用是给数据流图上每个成分加以定义和说明。换句话说,数据流图上所有的成分的定义和解释的文字集合就是数据字典,而且在数据字典中建立的一组严密一致的定义,很有助于改进分析员和用户的通信。数据库数据字典不仅是每个数据库的中心,而且对每个用户也是非常重要的信息。用户可以用SQL语句访问数据库数据字典。
表 1 客户基本信息表customers
表中列名
数据类型
可否为空
说明
Cno
Char(10)
Not null(主键)
客户编号
Cname
Char(10)
Not null
客户姓名
Csex
Char(2)
Not null
客户性别
Cid
Char(20)
Not null
客户身份证号
表 2 客房基本信息表 tb_rooms
属性名
数据类型
是否为主属性
是否为外键
完整性
属性描述
Rno
Char(10)
是
否
Not null
客房编号
Rstyle
char(10)
否
否
Not null
客房档次
Rprice
Int
否
否
Null
客房单价
Rstate
char(10)
否
否
Null
客房状态
Rtel
char(15)
否
否
Null
客房电话
表 3 客房物品信息表roomitem
属性名
数据类型
是否是主属性
是否为外键
完整性
属性描述
Ritemno
Char(10)
是
否
Not null
客房物品编号
Rno
Char(10)
否
是
Not null
物品的客房号
Citemname
char(20)
否
否
Not null
客房物品名称
Citemprice
Int
否
否
Null
客房物品单价
Citemstate
char(10)
否
否
Null
客房物品状态
Citemnum
Int
否
否
Null
客房物品数目
表 4 客户住宿信息living
属性名
数据类型
是否为主属性
是否为外键
完整性
属性描述
Cno
Char(10)
是
是
Not null
客户编号
Rno
Char(10)
是
是
Not null
客房编号
Tcomedate
Datetime
否
否
Not null
入住日期
Tleftdate
Datetime
否
否
Not null
结算日期
Ttime
Int
否
否
null
入住时间
Tamount
Int
否
否
null
房费金额
表 5 管理员基本信息表administrators
表中列名
数据类型
可否为空
说明
Ano
Char(10)
Not null(主键)
管理员编号
Aname
Char(10)
Not null
管理员姓名
Aposition
Char(10)
Not null
管理员职称
Apassword
Char(20)
Not null
密码
**2.**概念结构设计阶段
本系统的总体E-R图如图3所示:
以下是分E-R图:
**3.**逻辑结构设计阶段
把系统的E-R图转换成数据库模式如下(下列关系模型中标有黄色钥匙状的为主码):
表6 客户基本信息表customers
表7 客房基本信息表 tb_rooms
表8 客房物品信息表roomitem
表9 客户住宿信息living
表10 管理员基本信息表administrators
本系统的关系模型如下:
客户 customers( Cno,Cname,Csex,Cid) 客房 Rooms( Rno,Rstyle,Rprice,Rstate,Rtel) 客户住宿 Living( Tno,Rno,Ccomedate,Cleftdate,Ctime,Camount) 客房物品 Roomitem(Rno,Ritemno,Ritemname,Ritemprice,Ritemstate,Ritemnum) 宾馆管理员
Administrators(Ano,Aname,position,password)
**4.**物理结构设计阶段
数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最适合的应用要求的物理结构的过程,就是数据库的物理设计。
数据库的物理设计通常分为两步:
(1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构;
(2)对物理结构进行评价,评价的重点是时间和空间的效率。
确定数据库的存取方法,就是确定建立哪些存储路径以实现快速存取数据库中的数据。现行的DBMS一般都提供了多种存取方法,如索引法、HASH法等。其中,最常用的是索引法,本系统也采用的是索引法。我们在经常需要搜索的列和主关键字上建立了唯一索引。
由于不同PC机所安装的数据库软件位置不一定相同,所以数据文件与日志文件的存放位置也不一定相同。
**5.**数据库实施
本系统后台数据库采用MYSQL和Navicat可视化软件。
5.1****创建数据库
–创建数据库 宾馆客房管理系统
CREATE DATABASE hotel
GO
USE hotel
GO
5.2****创建表
Create table Customers(
Cno char(20) Primary key,
Cname char(10) not null,
Csex char(2) Check(Csex in (‘男’,’女’)),
Cid char(20) not null
);
Create table tb_Rooms(
Rno char(20) not null PRIMARY KEY,
Rstyle char(10) not null,
Rprice int,
Rstate char (10),
Rtel char(15)
);
Create table Roomitem(
Ritemno int not null,
Rno int not null,
Ritemname char(20) not null,
Ritemprice int,
Ritemstate char(10),
Ritemnum int,
Primary key (Ritemno));
Create table Living(
Cno char(10) not null,
Rno char(10) not null,
Ccomedate datetime not null,
Cleftdate datetime not null,
Ctime int,
Camount int,
Primary key (Cno,Rno),
Foreign key (Cno) references Customers(Cno),
Foreign key (Rno) references tb_Rooms(Rno)
);
Create table Administrators (
Ano char(10) Primary key,
Aname char(10) not null,
Aposition char(10) not null,
Apassword char(20) not null
);
5.3****创建视图和建立索引
1.创建视图
(1)查询客户(Customers)信息的视图定义如下。
Create view view_Customers (客户编号,客户姓名,客户性别,客户身份证号)
As select Cno,Cname,Csex,Cid
From Customers;
(2)查询客房(Rooms)信息的视图定义如下。
Create view view_Rooms (客房号,客房类型,客房单价,客房状态,客房电话)
As select Rno, Rstyle, Rprice, Rstate, Rtel
From tb_Rooms;
(3)查询客户住宿(Living)信息的视图如下。
Create view view_Living (客房编号,客房号,入住日期,结算日期,住宿时间,房费)
As select Cno,Rno,Ccomedate,Cleftdate,Ctime,Camount
From Living;
(4)查询客房物品(Roomitem)信息的视图定义如下。
Create view view_Roomitem(客房号,客房物品编号,客房物品名称,物品状态,客房物品单价,物品数量)As select Rno,Ritemno,Ritemname,Ritemstate,Ritemprice,Ritemnum
From Roomitem;
(5)查询管理员(Administrators)信息的视图定义如下。
Create view view_Administrators (管理员编号,管理员姓名,管理员职称)
As select Ano,Aname,Aposition
From Administrators;
(6)可计算出入住时间的视图定义如下。
Create view view_time (入住时间) as
select timediff(Cleftdate,Ccomedate) from living where Rno=‘0001’
(7)可计算出总开销,损坏金额和入住时间的视图定义如下。
Create view view_zhangdan9 (入住时间, 损坏总额, 总开销) as
select timediff(Cleftdate,Ccomedate),Sum(Ritemprice),(rprice+Sum(Ritemprice)) from living natural join tb_rooms natural join roomitem where Ritemstate=‘损坏’
**2.**建立索引
CREATE UNIQUE INDEX Custno ON Customers(Cno);
CREATE UNIQUE INDEX Roomno ON tb_Rooms(Rno);
CREATE UNIQUE INDEX Ritemno ON Roomitem(Ritemno);
CREATE UNIQUE INDEX Livno ON Living(Cno);
CREATE UNIQUE INDEX Admintno ON Administrators (Ano);
5.4****常用操作的实现
1.例如视图(1)view_Customers:
SQL语句:select 客户编号,客户姓名,客户性别,客户身份证号 from view_customers;
结果:Empty set
2.例如视图(7)view_zhangdan9:
SQL语句:select 入住时间, 损坏总额, 总开销 from view_zhangdan9;
结果:
±———±———±——-+
| 入住时间 | 损坏总额 | 总开销 |
±———±———±——-+
| 24:00:02 | 13 | 213 |
±———±———±——-+
1 row in set
3.使用SQL语句查询顾客信息
SQL语句:select 客户编号,客户姓名,客户性别,客户身份证号 from view_Customers;
查询结果:
±———±———±———±——————-+
| 客户编号 | 客户姓名 | 客户性别 | 客户身份证号 |
±———±———±———±——————-+
| 1 | 竹 | 男 | 413026200004059317 |
| 2 | 京 | 女 | 41302620000405918 |
| 3 | 崔 | 男 | 413026200004059318 |
±———±———±———±——————-+
3 rows in set
4.可使用Delete语句删除表living中Rno=0001的数据:
Delete from living where Rno=’0001’;
5.可使用Update语句对customers表中的Cno=’1’的数据进行修改:
Update customers Set Cname=’ha’ where Cno=’1’;
6.可通过执行Insert…Set…语句增加一个记录对于customers表:
Insert customers set Cno=’4’,Cname=’x’,Csex=’女’,Cid=’43256952158632862’;
5.5****触发器的设计
触发器 C1 的功能为当有一条信息插入Living 表中时,触发tb_rooms 表中的 Rstate=‘满’。 代码如下:
begin
update tb_Rooms
set Rstate=‘满’
where Rno=new.Rno;
end
触发器 C2 的功能为当从Living 表中删除一条信息时,触发tb_rooms表中的 Rstate=‘空’。 代码如下:
begin
update tb_Rooms
set Rstate=‘空’
where Rno=old.Rno;
end
总结
在设计的过程中,我也遇到了这样那样的问题,比如在添加触发器时,因new表和old表的,是navicat中的临时表,而不是inserted和deleted表,在网上查询了很多资料,试了很多次,也没能解决,后来经询问老师才得知,因此光凭一本书的知识是远远不够的,需要在实践中不断的积累经验与知识,才能够使所做系统更加完美。
通过此次数据库的课程设计,真正达到了学与用的结合,增强了对数据库方面应用的理解,对自己今后参与开发数据库系统积累了不少经验,在实验过程中,从建立数据开始,对数据库设计理念及思想上有更高的认识,从需求分析,到概念设计和逻辑设计,E-R 图的表示,数据字典的创建,懂得了不少有关数据库开发过程中的知识,增强了自己在数据库中应用SQL 语言的灵活性,其中包括,插入、删除、 修改、查询,牵涉表和表之间的联系,主建与外主键的定义,约束项的设置,使逻辑更严密,在学习过程中,我也能过上网查了不少资料,也看了一些别人设计的旅馆管理信息系统的设计报告,学以致用,自我创新,独立完成了这份自己的报告,从中在学到用,从用又到学,不断修改,系统更新。虽然不能达到完善系统,但也做到了尽善尽美,加强理论学习对完善系统会有很多帮助。
限于我们的技术水平有限这次的课程设计论文和编程软件的错误和不当之处在所难免,还请老师多多指教!在这次的课程设计中时间紧迫但我们学会了很多,也感到自身知识的贫乏,希望在日后的努力学习中把它做成更完善的系统,并能做其他完善的系统,发现其中的乐趣。
参考文献
[1]宋长龙,等.《基于互联网的数据库及程序设计》[M].清华大学出版社:北京市,2018.
[EB/OL].https://wenku.baidu.com/view/1e02399abf23482fb4daa58da0116c175e0e1eca,2020-03-04