数据库 酒店管理系统 课程设计
(基于 SQL server 2000)
实现过程
1.1 通过查询分析器实现建立数据库、数据表
------------------------------创建数据库和数据表----------------------------------
(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)客户信息查询视图
CREATE VIEW 客户信息查询
AS SELECT * FROM 客户
(2)客房信息查询
CREATE VIEW 客房信息查询
AS SELECT
* FROM 客房
(3)入住信息查询
CREATE VIEW 入住登记信息查询
AS SELECT
* FROM 入住登记
(4)入住信息查询
CREATE VIEW 入住信息查询
AS SELECT 入住登记.客房编号,客户名称,入住登记.客户编号,客房.客房类型,
价格,使用状态
FROM 客房,客户,入住登记
WHERE 客房.客房编号=入住登记.客房编号 AND 入住登记.客户编号=客户.
客户编号
----------------------------------------------建立索引------------------------------------------------------
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.4.1 客房信息存储过程
插入客房信息存储过程:
CREATE PROCEDURE 插入客房信息
(@KFB CHAR(8),
@KFL CHAR(8),
@JG SMALLMONEY,
@CWS INT,
@SYZT CHAR(8)
)
AS
INSERT INTO 客房 VALUES (@KFB,@KFL,@JG,@CWS,@SYZT)
修改客房信息存储过程:
CREATE PROCEDURE 修改客房信息
(@KFB CHAR(8),
@KFL CHAR(8),
@JG SMALLMONEY,
@CWS INT,
@SYZT CHAR(8)
)
AS
UPDATE 客房
SET 客房类型=@KFL,价格=@JG,床位数=@CWS,使用状态=@SYZT
WHERE 客房编号=@KFB
删除客房信息存储过程:
CREATE PROCEDURE 删除客房信息
(@KFB CHAR(8)
)
AS
DELETE FROM 客房 WHERE 客房编号=@KFB
1.4.2 客户信息存储过程
插入客户信息
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.3 创建入住信息存储过程
插入入住信息
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
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 )
酒店管理系统数据库脚本
------------------------数据库初始化-------------------------------------
set nocount on
set dateformat mdy
go
use master
go
if exists(select * from sysdatabases where name='酒店管理系统')
/*删除在 master 中已存*/
/*在的名为酒店管理系统的数据库*/
drop database 酒店管理系统
go
--------------------------酒店管理系统的建立--------------------------------
create database 酒店管理系统
on primary
(name='酒店管理系统_data',
filename='d:\酒店管理系统.mdf',
size=10,
maxsize=50,
filegrowth=5)
/*设定系统主文件*/
/*创建事务日志文件*/
log on
(name='酒店管理系统_log',
filename='d:\酒店管理系统.ldf',
size=5,
maxsize=25,
filegrowth=5)
go
---------(注:删除查询分析器中的以上代码后,运行以下代码)----------
--------------------------------------建立信息表-----------------------------------------
use 酒店管理系统
if exists(select * from sysobjects where name='客户')
drop table 客户
go
print 'drop table 客户'
print 'create table 客户'
go
/*客户信息表*/
CREATE TABLE 客户
/*创建客户信息表*/