酒店管理系统数据库的分析与设计
随着市场经济的高速发展,酒店管理越来越重要,如何降低成本,提高服务水 平是酒店管理者需要解决的一个实际问题,本系统从实际出发,在分析目前酒店管 理中存在的问题基础上,结合管理信息系统开发的概念,结构及系统开发的基本原 理和方法开发的。系统支持多形式客户的数据共享、提高作业效率、监控整个酒店 运营、客户管理、客房管理、财务管理、人事管理以及环节业务的监控等功能。
1 系统功能设计
1.1系统功能目标
酒店管理系统主要提供以下几个功能:
客房管理系统,
客人管理系统,
住宿管理系统。
1.2系统功能分析
通过对系统的调查和可行性分析系统功能流程分析,确定该系统由一种用户使用。
客户
客户可实现的操作有;
客户客房编号查询
客户预订日期查询
客户预订数量查询
1.3 数据库的需求分析
根据医院的系统功能,可以设计成以下数据结构
客房基本信息表:存放客房编号信息,客房类型信息,客房价格信息以及客房床位数信息,使用状态等信息。
住宿基本信息表:存放客房编号,客户编号,预定日期,预订数量等信息。
客户基本信息表:存放客户编号,名称,身份证号,联系地址,联系电话等信息。
根据以上分析,按照E-R图的规定,画出E-R关系模型,如下所示:
图7—1酒店管理系统E-R图
2.1 数据表的实现
根据上面数据表的逻辑设计,可执行下面的步骤来创建数据表.也可用相应的SQL语句执行来实现。
1、用企业管理器来实现
(1)在服务器上安装MS SQL Server 2000。
2)打开企业管理器,在本地服务器上创建新的数据库(hotel)。
(3)展开hotel数据库,单击“表”按照设计分别创建所需数据表。
2、用SQL语句来实现
在查询分析器中分别输入以下代码来执行。
create database 酒店管理系统
use 酒店管理系统
(1)创建酒店管理系统数据库
CREATE DATABASE 酒店管理系统
(2)创建客房信息表
CREATE TABLE 客房
(客房编号 CHAR(8) PRIMARY KEY,
客房类型 CHAR(8)NOT NULL,
价格 SMALLMONEY NOT NULL,
床位数 INT NOT NULL,
使用状态 CHAR(8) NOT NULL)
---------------------------------------------------
INSERT INTO 客房 VALUES('101','一',100,1,'在使用')
INSERT INTO 客房 VALUES('102','二',200,2,'在使用')
INSERT INTO 客房 VALUES('103','二',200,1,'在使用')
INSERT INTO 客房 VALUES('104','三',300,2,'在使用')
INSERT INTO 客房 VALUES('105','三',300,1,'未使用')
-------------------------------------------------------------------
(3)创建客户信息表
CREATE TABLE 客户
(客户编号 CHAR(8)PRIMARY KEY,
客户名称 CHAR(10)NOT NULL,
身份证号 CHAR(18)NOT NULL,
联系地址 CHAR(25),
联系电话 CHAR(10))
---------------------------------------------------------------------------
INSERT INTO 客户 VALUES('1001','王一',12234,'江西','3245354')
INSERT INTO 客户 VALUES('1002','张三',34234,'江西','2442442')
INSERT INTO 客户 VALUES('1003','李四',56465,'江西','5654645')
INSERT INTO 客户 VALUES('1004','王钱',65435,'江西','5676577')
INSERT INTO 客户 VALUES('1005','孙志',11464,'江西','4234343')
-----------------------------------------------------------------------------
(4)创建入住登记表
CREATE TABLE 入住登记
(客房编号 CHAR(8)FOREIGN KEY REFERENCES 客房(客房编号),
客户编号 CHAR(8)FOREIGN KEY REFERENCES 客户(客户编号),
预定日期 DATETIME,
预定数量 INT,
PRIMARY KEY(客房编号,客户编号))
------------------------------------------------------------------
INSERT INTO 入住登记 VALUES('101','1001',2010-10-10,1)
INSERT INTO 入住登记 VALUES('102','1002',2010-12-10,1)
INSERT INTO 入住登记 VALUES('103','1003',2010-12-26,1)
INSERT INTO 入住登记 VALUES('104','1004',2010-12-9,1)
---------------------------------------创建查询视图----------------------------------------
--1.2系统功能相应的查询视图:
--(1)客户信息查询视图
--(2)客房信息查询
CREATE VIEW 客房信息查询
AS
SELECT *
FROM 客房
--(3)入住信息查询
CREATE VIEW 入住登记信息查询
AS
SELECT *
FROM 入住登记
--(4)入住信息查询
CREATE VIEW 入住信息查询
AS
SELECT 入住登记.客房编号,客户名称,入住登记.客户编号,客房.客房类型,价格,使用状态
FROM 客房,客户,入住登记
WHERE 客房.客房编号=入住登记.客房编号 AND 入住登记.客户编号=客户.客户编号
select * FROM 客房信息查询
select * FROM 入住登记信息查询
select * FROM 入住信息查询
----------------------------------------------建立索引------------------------------------------------------
--1.3建立索引及数据入库
--1.建立客房编号,价格,客户编号,客户名称的索引
--创建客房表索引:
CREATE UNIQUE INDEX UKF ON 客房(客房编号,价格)
--创建客户表索引:
CREATE UNIQUE INDEX UKH ON 客户(客户编号,客户名称)
--创建入住表索引:
CREATE UNIQUE INDEX URZ ON 入住登记(客户编号,客房编号)
--2.数据入库
--方法一 酒店管理系统包括客房信息表,客户信息表,入住登记信息表。采用Excel中录入数据,然后使用SQL Server 2000数据导入、导出功能直接将数据导入到相应的基本表。
--方法二 在查询分析器中插入相关数据,用SQL语句插入。
-----------------------------------------创建存储过程-----------------------------------------------------
--1.4.1客户信息存储过程
--插入客户信息
CREATE PROCEDURE 插入客户信息
(@KHB CHAR(8),
@KFM CHAR(10),
@SFZ CHAR(18),
@LXDZ CHAR(25),
@LXDH CHAR(10)
)
AS
INSERT INTO 客户 VALUES (@KHB,@KFM,@SFZ,@LXDZ,@LXDH)
--修改客户信息
CREATE PROCEDURE 修改客户信息
(@KHB CHAR(8),
@KFM CHAR(10),
@SFZ CHAR(18),
@LXDZ CHAR(25),
@LXDH CHAR(10)
)
AS
UPDATE 客户
SET 客户名称=@KFM,身份证号=@SFZ,联系地址=@LXDZ,联系电话=@LXDH
WHERE 客户编号=@KHB
--删除客户信息
CREATE PROCEDURE 删除客户信息
(@KHB CHAR(8))
AS
DELETE
FROM 客户
WHERE 客户编号=@KHB
EXEC 删除客户信息 @KHB='10009'
--3.4.2创建入住信息存储过程
--插入入住信息
CREATE PROCEDURE 插入入住信息
(@KFB CHAR(8),
@KHB CHAR(8),
@YDRQ DATETIME,
@YDSL INT
)
AS
INSERT INTO 入住登记 VALUES(@KFB,@KHB,@YDRQ,@YDSL)
--修改入住信息
CREATE PROCEDURE 修改入住信息
(@KFB CHAR(8),
@KHB CHAR(8),
@YDRQ DATETIME,
@YDSL INT
)
AS
UPDATE 入住登记
SET 客房编号=@KFB,预定日期=@YDRQ ,预定数量=@YDSL
WHERE 客户编号=@KHB
--删除入住信息
CREATE PROCEDURE 删除入住信息
(
@KHB CHAR(8)
)
AS
DELETE
FROM 入住登记
WHERE 客户编号=@KHB
----------------------------------------------------------------------------------------------------
--1.5查询存储过程的创建
--客房编号查询
CREATE PROCEDURE 客房编号查询
(@KFB CHAR(8),
@KFL CHAR(8)OUTPUT,
@JG SMALLMONEY OUTPUT,
@CWS INT OUTPUT,
@SYZT CHAR(8)OUTPUT
)
AS
SELECT @KFL=客房类型,@JG=价格,@CWS=床位数,@SYZT=使用状态
FROM 客房
WHERE 客房编号=@KFB
--户编号查询
CREATE PROCEDURE 客户编号查询
(@KHB CHAR(8),
@KFM CHAR(10)OUTPUT ,
@SFZ CHAR(18)OUTPUT,
@LXDZ CHAR(25)OUTPUT,
@LXDH CHAR(10)OUTPUT
)
AS
SELECT @KFM=客户名称,@SFZ=身份证号,@LXDZ=联系地址,@LXDH=联系电话
FROM 客户
WHERE 客户编号=@KHB
--入住客户编号查询
CREATE PROCEDURE 入住客户编号查询
(@KFB CHAR(8)OUTPUT,
@KHB CHAR(8),
@YDRQ DATETIME OUTPUT,
@YDSL INT OUTPUT
)
AS
SELECT @KFB=客房编号,@YDRQ=预定日期,@YDSL=预定数量
FROM 入住登记
WHERE 客户编号=@KHB
---------------------------------------建立触发器---------------------------------------------
1.6、建立触发器保证数据的一致性
--客房使用状态的控制
CREATE TRIGGER 控制触发器
ON 入住登记
FOR INSERT
AS
UPDATE 客房
SET 使用状态='使用中'
WHERE 客房编号=ANY (SELECT 客房编号 FROM INSERTED )
--客户信息删除的控制
CREATE TRIGGER 客户删除触发器
ON 客户
FOR DELETE
AS
BEGIN
DELETE
FROM 入住
WHERE 客户编号=ANY (SELECT 客户编号 FROM DELETED )
UPDATE 客房
SET 使用状态='未使用'
WHERE 客房编号=ANY(SELECT 客房编号 FROM DELETED)
END
--客房删除触发器
CREATE TRIGGER 客房删除触发器
ON 客房
FOR DELETE
AS
DELETE
FROM 入住
WHERE 客户编号=ANY (SELECT 客户编号 FROM DELETED )
2.2数据录入信息的查询
3 本章小结
本章介绍了一个酒店管理系统的数据库设计部分。从数据库应用程序角度介绍了如何分析用户需求、如何设计数据库。系统功能设计为整个系统构建了框架,数据库设计理顺了系统的思路,各个功能模块实现了各个细节部分。该数据库实例采用了视图、触发器,事务或自定义函数来实现对数据库快速、高效、简洁的访问,这样优化了程序代码,增强了程序的可读性和可维护性。