数据库客房管理系统代码文档格式.docx
《数据库客房管理系统代码文档格式.docx》由会员分享,可在线阅读,更多相关《数据库客房管理系统代码文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
三、数据库逻辑结构设计
根据E-R图,将图转换为关系模型即:
将实体、实体的属性和实体之间的联系转换为关系模式,然后对数据模型进行优化得到如下关系数据表。
客户入住登记:
{客户编号,客户姓名,年龄,性别,身份证号,户籍,客房号,客房类型,客房价格,住宿日期住宿时间,离宿日期,离宿时间,押金,账单编号}
客房表:
{客房号,客房类型,客房价格,房间状态}
退房登记表:
{客户编号,客户姓名,身份证号,客房号,客房类型,客房价格,住宿日期,住宿价格,
住宿天数,宿费,水费,电话费,总额}
关系数据表确定后要进行数据表的逻辑结构设计,即定义关系数据表中字段名称、数据结构、是否允许为空、关键字、说明等。
(1)客户入住登记表
用于存放客户的入住信息,例如:
客户名,房号等。
表3.1客户入住登记
字段名称
数据结构
是否允许为空
说明
客户编号
Int
NOTNULL,主键
客户姓名
Varchar(8)
Notnull
入住客户的姓名
年龄
性别
Char
身份证号
Varchar(20)
客户的身份证号
户籍
Varchar(50)
客户的户籍地址
客房号
客房类型
Text
客房价格
Money
住宿日期
Datetime
住宿时间
Varchar(15)
离宿日期
离宿时间
押金
账单编号
NOTNULL,主键
唯一标识每个房间
NOTNULL
客房状态
Varchar
(2)
(2)客房表
用于存放客房的相关信息,例如:
房号,房间类型,房间状态等。
表3.2客房表
(3)退房登记表
退房登记表表用于存放客户消费的信息。
表3.3退房登记表
唯一标示每个客户
Int
Moeny
住宿天数
宿费
水费
电话费
总额
四、数据库物理结构设计
根据代码自动生成表,其物理结构表如下
1.“客房”表的物理结构
“客房”表的物理结构如图4.1所示,关键字为”客房号”
图4.1
2.“客户入住登记”表的物理结构
“客户”表的物理结构如图4.2所示,关键字为”客户编号”,利用”客房号”可及”退房登记”表和”客房号”表建立联系。
图4.2
3.“退房登记”表的物理结构
“退房登记”表的物理结构如图4.3所示,关键字为”客户编号”。
图4.3
五、数据库的实施
根据以上所进行的调查、设计和进行方案,建立并实施数据库。
此系统运用
SQLServer2000进行数据库的开发。
1.数据库建表语句
⑴名称:
客户入住登记
标示:
建表语句如下:
createtable客户入住登记
(
客户编号intnotnull,
客户姓名varchar(8)notnull,
年龄int
constraintC1check(年龄between1and80),
性别char
(2)check(性别in('
男'
'
女'
)),
身份证号varchar(20)notnull,
户籍varchar(50)notnull,
客房号intcheck(客房号>
=1and客房号<
=100),
客房类型textnotnull,
客房价格moneynotnull,
住宿日期datetimenotnull,
住宿时间varchar(15)notnull,
离宿日期datetimenotnull,
离宿时间varchar(15)notnull,
押金moneynotnull,
账单编号intnotnull,
primarykey(客户编号),
foreignkey(客房号)references客房表(客房号)
ondeletecascade
onupdatecascade,
);
⑵名称:
客房表“客房”
标识:
建表语句如下:
createtable客房表
客房号intcheck(客房号between1and100),
客房状态varchar
(2)check(客房状态in('
满'
空'
primarykey(客房号)
(3)名称:
结算账单表“结算账单”
createtable退房登记表
客房号intnotnull,
住宿天数intnotnull,
宿费moneynotnull,
水费moneynotnull,
电话费moneynotnull,
总额moneynotnull,
)
2.数据库的建立触发器语句
(1)建立触发器名“登记”
CREATETRIGGER登记
ON客户入住登记
FORINSERT
AS
declare@idint
declare@statevarchar
(2)
begin
set@id=(select客房号frominserted)
set@state=(select客房状态from客房表where客房号=@id)
if@state='
begin
update客房表set客房状态='
where客房号=@id
print'
登记成功'
end
else
登记失败,已有人'
end
(2)建立触发器名“登记”
CREATETRIGGER退房
FORdelete
declare@namevarchar(8)
declare@cardIdvarchar(20)
declare@houseNoint
declare@houseTypevarchar(15)
declare@housePriceint
declare@registerDatedatetime
declare@leaveDatedatetime
declare@registerTimevarchar(15)
declare@sumDayint
declare@homePaymoney
declare@waterPaymoney
declare@phonePaymoney
declare@payCheckmoney
select@id=客户编号,@name=客户姓名,@cardId=身份证号,@houseNo=客房号,@houseType=客房类型,@housePrice=客房价格,@registerDate=住宿日期,@registerTime=住宿时间,@leaveDate=离宿日期,@homePay=客房价格fromdeleted
set@sumDay=abs(datediff(dd,@registerDate,@leaveDate))
set@phonePay=cast(20asmoney)
set@waterPay=cast(10asmoney)
set@payCheck=@housePrice*@sumDay
Insertinto退房登记表values(@id,@name,@cardId,@houseNo,@houseType,@housePrice,convert(varchar
(10),@registerDate,101),@registerTime,@sumDay,@payCheck,@waterPay,@phonePay,(@waterPay+@phonePay+@housePrice)*@sumDay)
update客房表set客房状态='
where客房号=@houseNo
End
六、数据库的操作
备注(1-5普通单人间,6-10豪华单人间,11-15豪华套房,16-30总统套房)
--数据库设计功能调试步骤
--
(1)首先创建触发器名为“登记”,然后调试插入新客户信息
--代码如下
--创建触发器代码
CREATETRIGGER登记
ON客户入住登记
FORINSERT
AS
declare@idint
declare@statevarchar
(2)
set@id=(select客房号frominserted)
set@state=(select客房状态from客房表where客房号=@id)
if@state='
else
end
--插入新客户信息则显示成功
insertinto客户入住登记
values(7,'
钱想'
20,'
3426911'
江苏泰州'
30,'
总统套房'
500,'
2011-1-07'
convert(varchar(5),getdate(),108),'
2011-8-23'
18:
09'
50,2011002)
--查询客户入住登记以及客房信息
select*from客户入住登记where客户编号=7
--查询客房表信息
select*from客房表where客房号=30
--删除触发器
dropTRIGGER登记
--如果重复分配客房号,则显示错误,因为违背完整性定义
values(22,'
李二'
deletefrom客户入住登记where客户编号=22
--
(2)创建触发器名为“退房”,然后退房信息
--创建触发器“退房”代码
CREATETRIGGER退房
FORdelete
declare@namevarchar(8)
declare@cardIdvarchar(20)
declare@houseNoint
declare@houseTypevarchar(15)
declare@housePriceint
declare@registerDatedatetime
declare@leaveDatedatetime
declare@registerTimevarchar(15)
declare@sumDayint
declare@homePaymoney
declare@waterPaymoney
declare@phonePaymoney
declare@payCheckmoney
select@id=客户编号,@name=客户姓名,@cardId=身份证号,@houseNo=客房号,@houseType=客房类型,@housePrice=客房价格,@registerDate=住宿日期,@registerTime=住宿时间,@leaveDate=离宿日期,@homePay=客房价格fromdeleted
set@sumDay=abs(datediff(dd,@registerDate,@leaveDate))
set@phonePay=cast(20asmoney)
set@waterPay=cast(10asmoney)
set@payCheck=@housePrice*@sumDay
insertinto退房登记表values(@id,@name,@cardId,@houseNo,@houseType,@housePrice,convert(varchar
(10),@registerDate,101),@registerTime,@sumDay,@payCheck,@waterPay,@phonePay,(@waterPay+@phonePay+@housePrice)*@sumDay)
--删除客户信息(从退房登记表中删除,则此人已经退房)
deletefrom退房登记表where客户编号=7
--查询客房信息
--须首先从客户入住登记中删除
deletefrom客户入住登记where客户编号=7
--查询该客房号信息
--删除触发器“退房”
dropTRIGGER退房
--(3)修改客户信息
--修改客户信息
update客户入住登记
set客户姓名='
钱达'
身份证号='
342691'
客房类型='
标准单人间'
where客户编号=9
--查询修改后的信息
select*
from客户入住登记where客户编号=9