数据库客房管理系统代码.docx
《数据库客房管理系统代码.docx》由会员分享,可在线阅读,更多相关《数据库客房管理系统代码.docx(18页珍藏版)》请在冰豆网上搜索。
数据库客房管理系统代码
酒店客房管理系统设计
一、需求分析
1.1系统需求分析
“客房管理信息系统”以实现宾馆客房各种信息的系统化、规范化、自动化为目标,具
体要达到以下几个基本要求:
(一)客户入住管理
通过该管理功能,系统可以通过计算机对客户的一些基本信息进行录入,成为客房管理信息系统查询的数据资料。
(1)新客人信息的录入。
(2)客人信息的修改。
(3)客人信息的查询。
(4)客人信息的删除。
(5)客人信息的保存。
(6)客房信息的查询。
(二)结算管理
(1)退房结算:
输入客户房号,查找该客户信息、住房信息以及费用情况。
(2)收银处理:
确认客户总费用,并自动登记总费用帐。
同时,自动将房间用房标志(占)改为(空);并将客户信息保存。
1.2数据分析
通过进行系统调查,了解用户需求、分析应用软件系统的功能需求。
总结出了系统逻辑模型,即系统业务流程图、数据流图、应用软件功能结构图和数据字典等。
各流程图如下面的图所示:
1.2.2客房管理系统数据流图
客房管理系统
入住管理
结算管理
信息查询
客户登记
退房结算
收银处理
1.2.3客房管理系统功能模块
客户查询
客房查询
二、数据库概念结构设计
客户
客户编号
客户姓名
年龄
性别
身份证号
户籍
客房号
客房类型
客房价格
住宿日期
住宿时间
离宿日期
离宿时间
押金
账单编号
退房
入住登记
客房号
客房类型
客房价格
客房状态
客房
返回
退房登记
客户编号
客户姓名
身份证号
客房号
客房类型
客房价格
住宿日期
住宿时间
住宿天数
宿费
水费
电费
总额
经考察和分析,本案例客房管理系统包括以下实体:
客户实体、客房实体、操作员实体、退房实体,它们的E-R图如以下所示。
三、数据库逻辑结构设计
根据E-R图,将图转换为关系模型即:
将实体、实体的属性和实体之间的联系转换为关系模式,然后对数据模型进行优化得到如下关系数据表。
客户入住登记:
{客户编号,客户姓名,年龄,性别,身份证号,户籍,客房号,客房类型,客房价格,住宿日期住宿时间,离宿日期,离宿时间,押金,账单编号}
客房表:
{客房号,客房类型,客房价格,房间状态}
退房登记表:
{客户编号,客户姓名,身份证号,客房号,客房类型,客房价格,住宿日期,住宿价格,
住宿天数,宿费,水费,电话费,总额}
关系数据表确定后要进行数据表的逻辑结构设计,即定义关系数据表中字段名称、数据结构、是否允许为空、关键字、说明等。
(1)客户入住登记表
用于存放客户的入住信息,例如:
客户名,房号等。
表3.1客户入住登记
字段名称
数据结构
是否允许为空
说明
客户编号
Int
NOTNULL,主键
客户姓名
Varchar(8)
Notnull
入住客户的姓名
年龄
Int
Notnull
性别
Char
Notnull
身份证号
Varchar(20)
Notnull
客户的身份证号
户籍
Varchar(50)
Notnull
客户的户籍地址
客房号
Int
Notnull
客房类型
Text
Notnull
客房价格
Money
Notnull
住宿日期
Datetime
Notnull
住宿时间
Varchar(15)
Notnull
离宿日期
Datetime
Notnull
离宿时间
Varchar(15)
Notnull
押金
Money
Notnull
账单编号
Int
Notnull
字段名称
数据结构
是否允许为空
说明
客房号
Int
NOTNULL,主键
唯一标识每个房间
客房类型
Text
NOTNULL
客房价格
Money
NOTNULL
客房状态
Varchar
(2)
NOTNULL
(2)客房表
用于存放客房的相关信息,例如:
房号,房间类型,房间状态等。
表3.2客房表
(3)退房登记表
退房登记表表用于存放客户消费的信息。
表3.3退房登记表
字段名称
数据结构
是否允许为空
说明
客户编号
Int
Notnull
唯一标示每个客户
客户姓名
Varchar(8)
Notnull
身份证号
Varchar(20)
Notnull
客房号
Int
Notnull
客房类型
Text
Notnull
客房价格
Moeny
Notnull
住宿日期
Datetime
Notnull
住宿时间
Varchar(15)
Notnull
住宿天数
Int
Notnull
宿费
Money
Notnull
水费
Money
Notnull
电话费
Money
Notnull
总额
Money
Notnull
4、数据库物理结构设计
根据代码自动生成表,其物理结构表如下
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),
客房类型textnotnull,
客房价格moneynotnull,
客房状态varchar
(2)check(客房状态in('满','空')),
primarykey(客房号)
);
(3)名称:
结算账单表“结算账单”
标识:
客户编号
建表语句如下:
createtable退房登记表
(
客户编号intnotnull,
客户姓名varchar(8)notnull,
身份证号varchar(20)notnull,
客房号intnotnull,
客房类型textnotnull,
客房价格moneynotnull,
住宿日期datetimenotnull,
住宿时间varchar(15)notnull,
住宿天数intnotnull,
宿费moneynotnull,
水费moneynotnull,
电话费moneynotnull,
总额moneynotnull,
primarykey(客户编号),
foreignkey(客房号)references客房表(客房号)
ondeletecascade
onupdatecascade,
)
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
print'登记失败,已有人'
end
(2)建立触发器名“登记”
CREATETRIGGER退房
ON客户入住登记
FORdelete
AS
declare@idint
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
begin
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
6、数据库的操作
备注(1-5普通单人间,6-10豪华单人间,11-15豪华套房,16-30总统套房)
--数据库设计功能调试步骤
--
(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
print'登记失败,已有人'
end
--插入新客户信息则显示成功
insertinto客户入住登记
values(7,'钱想',20,'男','342690199082312311','江苏泰州',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登记
--如果重复分配客房号,则显示错误,因为违背完整性定义
insertinto客户入住登记
values(22,'李二',20,'男','342690199082312311','江苏泰州',30,'总统套房',500,'2011-1-07',convert(varchar(5),getdate(),108),'2011-8-23','18:
09',50,2011002)
deletefrom客户入住登记where客户编号=22
--
(2)创建触发器名为“退房”,然后退房信息
--创建触发器“退房”代码
CREATETRIGGER退房
ON客户入住登记
FORdelete
AS
declare@idint
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
begin
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
--删除客户信息(从退房登记表中删除,则此人已经退房)
deletefrom退房登记表where客户编号=7
--查询客房信息
--须首先从客户入住登记中删除
deletefrom客户入住登记where客户编号=7
--查询该客房号信息
select*from客房表where客房号=30
--删除触发器“退房”
dropTRIGGER退房
--(3)修改客户信息
--修改客户信息
update客户入住登记
set客户姓名='钱达',身份证号='342690188002312311',客房类型='标准单人间'
where客户编号=9
--查询修改后的信息
select*
from客户入住登记where客户编号=9