SQL课程设计VB 客房管理系统Word格式文档下载.docx

上传人:b****6 文档编号:8327487 上传时间:2023-05-11 格式:DOCX 页数:40 大小:903.60KB
下载 相关 举报
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第1页
第1页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第2页
第2页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第3页
第3页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第4页
第4页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第5页
第5页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第6页
第6页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第7页
第7页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第8页
第8页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第9页
第9页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第10页
第10页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第11页
第11页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第12页
第12页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第13页
第13页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第14页
第14页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第15页
第15页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第16页
第16页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第17页
第17页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第18页
第18页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第19页
第19页 / 共40页
SQL课程设计VB 客房管理系统Word格式文档下载.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SQL课程设计VB 客房管理系统Word格式文档下载.docx

《SQL课程设计VB 客房管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《SQL课程设计VB 客房管理系统Word格式文档下载.docx(40页珍藏版)》请在冰点文库上搜索。

SQL课程设计VB 客房管理系统Word格式文档下载.docx

数据库设计是根据系统功能的要求和数据规模规划数据库服务器选型、数据表结构定义、分配数据库服务器端的功能实现以及创建数据库对象。

1、数据库与数据表设计

分析前面的系统功能要求,需要一个表来存储和管理客人信息,使系统能够接受客人入住时输入的各项数据,以实现数据录入、查询或统计客人信息等功能。

客人是本系统的第一个实体。

为了能实现查询和统计客房入住情况等功能,必须有一个表来存储和管理所有客房的信息,包括客房的类型、客房号、是否入住客人等。

客房是本系统的第二个实体。

一般来说,客房价格是以客房的类型来制定的。

为了保证系统数据库最小的数据冗余和数据完整性,需要建立一个表来记录各种客房类型的信息。

它主要为各种查询和统计功能提供客房价格数据。

它与客房表是一对多的关系,在客房价格变动时,只需要在客房类型表中更改。

综上所述,在客房管理(KFGL)数据库中需要建立3个数据表:

客人信息数据表、客房信息数据表和客房类型数据表。

(1)客人信息数据表定义

根据系统功能要求,客人信息表需要能接受客人登记入住和离店时输入的所有信息.还必须包括客人最终的住宿费金额,因为住宿费金额是统计客房收入的基本数据。

客人信息表的结构定义如表1所示。

表1客人信息数据表定义

列名

数据类型大小空值键说明

cId

int4主键(标识列)序号

cName

char8姓名

cSex

bit1性别

cAge

tinyint1√年龄

cPNum

char18身份证号码

cAdd

varchar50√家庭住址

cWork

varchar50√工作单位

cFrom

char10来自地的地名

cInTime

smalldatetime4入住时间

cDay

Tinyint1预计入住天数

rNum

char5客房号

cOutTime

smalldatetime4√离店时间

cDeposit

smallmoney4√押金金额

cCost

smallmoney4√住宿费

其中,cId(序号)是表的主键,唯一标识一个入住的客人。

设计时定义它为标识列,系统自动地产生连续的永不重复的序列号。

rNum(客房号)在客人信息表中是外键,它是客房信息表的主键,唯一标识一个房间。

通过它,系统将引用到客房类型、客房单价等信息。

客人信息表取名为tblClient。

(2)客房信息数据表定义

客房信息表中应该记录每一个客房的信息和状态,系统查询这些信息并决定客人能否入住。

每个客房的类型决定了客房的价格,可供客人入住时选择房间及离店时结算住宿费用。

客房数据表的定义如表2所示。

表2客房信息数据表定义

列名

数据类型大小空值键说明

rStats

rType

cID

char5主键客房号

char1客房状态

char2客房类型编号

char9√入住客人序号

其中,rNum(客房号)是该表的主键,唯一标识一个客房房间。

它将作为客人信息表的外键,保证客人信息表的参照完整性。

rStats表示房间的状态,设定其值为“N”时,表示客房没有入住客人;

值为“F”时,表示客房以有客人入住;

值为“P”时,表示客房被预定。

rType表示客房的类型,它是该表的一个外键,来自下面将要说明的客房类型数据表。

cId将记录入住客人的序号,在客房信息表中增加这一列时,虽然增加了数据冗余,但可以在查询房间中入住客人信息时,提高系统的性能。

因为客房信息表的记录数相对固定,相比之下,增加这个冗余的列对于整个系统来说是有利的。

客房信息表取名为tblRoom。

(3)客房类型数据表定义

客房类型主要描述客房的服务标准和收费价格,这些信息如果包含进每个客房的记录中,将会使客房信息表产生较大的数据冗余,特别在客房数量大的情况下。

此外,如果客房信息表的每条记录都包括价格信息,那当某种类型的客房价格变动时,用户就不得不对客房信息表中的记录逐一进行修改。

客房类型数据表的定义如表3-3所示。

 

表3-3客房类型数据表定义

数据类型大小空值键说明

rName

rPrice

char2主键客房类型编号

char10客房类型名称

smallmoney4该类型客房价格

其中,rType表示客房类型的编号,作为该表的主键,唯一标识某一类客房。

它将作为客房信息表的外键,保证客房信息表数据的完整性。

客房类型数据表取名为tblRoomType。

(4)根据上面三个数据表的设计,可执行下面的步骤创建数据表

1)在服务器计算机上安装MSSQLServer2000。

2)打开企业管理器,在本地服务器上创建新的数据库KFGL。

3)展开KFGL数据库,单击“表”,按照设计,创建表tblClient、tblRoom和tblRoomType

2、数据完整性设计

设计好表的结构后,需要根据实际应用和操作规则为表制定一系列约束和规则,从而达到保证数据完整性原则的目的。

约束

(1)主键约束、非空值约束

在三个表的设计中已经规定了每个表的主键列、非空列,这些规定都是在实际应用环境中所必需的。

比如tblRoom表中定义了房间号rNum为主键,则在表tblRoomr中Num必须是唯一的——一个饭店不可能出现两个房间号码相同的客房;

客房类型Type和客房状态rStats不能为空值,因为rType是辨别客人入住客房中类、住宿费用结算的依据,所以不能为空值;

rStats是辨别客人能否入住的依据,所以也不能为空值。

(2)CHECK约束

对于tblClient表,应该建立一个检查约束,即所有客人的离店时间都不可能小于入住时间。

按下列步骤创建这个约束:

1)打开企业管理器,展开服务器,展开“数据库”,展开“KFGL”数据库,单击“表”。

2)用鼠标右键单击“tblClent”表,选择“设计表”,系统将弹出“设计表”对话窗口。

3)用鼠标右键单击此窗口的上方窗格,单击“CHECK约束”,单击“新建”按钮,在“约束表达式”文本框中输入表达式:

([cOutTime]>

=[cInTime])。

4)选择“对INSERT和UPDATE操作强制约束”复选框,单击“关闭”按钮,完成CHECK约束创建操作。

(3)使用缺省值

可以将三个数据表中所有货币类型的列都定义为缺省值,特别是指定了“非空”约束的列。

tblClient表的预住天数cDay的默认值可定义为1,而客人入住时间cInTime的缺省值应该就是添加客人记录的时间(除非是客房预定,在本系统中暂不考虑客房预定),所以可以设定缺省值为“(GETDATE)”。

(4)唯一约束

除了每个表的主键需定义为唯一外,对于tblRoomType的客房类型名rName,也应该定义为唯一的名称。

因为在系统功能需求中,要求按客房类型对数据进行统计,如果在统计结果中只显示客房类型编号,用户就必须记忆那种类型是什么编号,这样很不直观。

所以应按照相关的SQLServer数据库教材中建立唯一约束的方法进行创建。

(5)外键约束

在数据表设计中已经讨论了各个表的外键,这里以tblClient为例说明创建步骤,tblRoom和tblroomType表可以按照相同的步骤进行操作。

2)用鼠标右键单击此“tblClient”表,选择“设计表”,系统将弹出“设计表”对话窗口。

3)用鼠标右键单击此窗口的上方窗格,单击“关系”,在“主键表”下拉框中选择“tblRoom”

4)在“外键表”中选择“tblClient”。

5)在“主键表”和“外键表”下方的窗格中都选择列名“rNum”,表明tblRoom表中的主键“rNum”就是tubClient表中的外键。

选择“对INSERT和UPDAET操作强制约束”复选框,表明以后对tblClient表中的rNum所有的添加和更新操作都会检查在tblRoom表中是否存在与此相应的rNum。

单击“关闭”按钮,完成创建操作。

(6)规则

为了检查tblClinent表中输入的身份证号码cPNum是有效位数(我国身份证号码有旧的15位数字和18位数字两种),可以创建一个规则邦定到该列,在数据操作时进行检查。

规则的定义语句为:

(LEN(@CardNum)=15)OR(LEN(@CardNum)=18)

创建和绑定的方法及步骤请参见教材中的相关内容。

(7)标识列

在设计客人信息表tblClient时,我们把客人序号cId定义为标识列,使其在添加记录时自动产生序列号,并且每个序号唯一地标识一次客人入住信息。

完成数据完整性设计后,登入模拟数据。

3、视图、触发器和存储过程设计

定义了系统需要的数据库和表的结构后,下面进一步分析整个客房管理系统中的业务流程。

在这里,需要确定哪些业务处理和数据处理的功能使用MSSQLServer来实现,那些数据处理的功能由应用程序实现,从而设计特定的视图、触发器或存储过程。

下面将讨论系统需要设计并创建的视图、触发器和存储过程。

(1)客人选择客房处理

客人来到饭店入住前要做的第一件事是选择合适的房间,客人将告知饭店服务员自己需要的客房类型,服务员在系统中选择指定的客房类型后系统将显示所有的空余的该类型房间,并显示该类型客房价格供客人参考选择。

这个过程可以通过一个存储过程来实现。

在这个存储过程中,需要的输入参数是客房类型,输出的结果集是所有这种客房类型的空房记录和价格。

定义这个存储过程为SelRoom,定义输入的参数名为RoomType,定义输出的价格参数名为RoomPrice。

根据存储过程的创建语法,编写SelRoom的实现代码如下:

CREATEPROCEDURESelRoom

@RoomTypechar

(2)

@RoomPricesmallmoneyOUTPUT

AS

SELECTrNUMFROMtblRoom

WHERE(rType=@RoomType)AND(rStats=‘N’)

SELECT@RoomPrice=rpriceFROMtblRoomType

WHERErType=@RoomType

GO

在上面的代码中包含了两个SELECT语句,第一个SELECT语句从tblRoom表中选择了所有客房类型为输入参数指定类型并且客房状态为“空”(N)的客房号,并将所有记录作为结果集返回;

第二个SELECT语句从tblRoomType中取得了指定客房类型的价格,作为输出参数RoomType返回。

(2)客人入住登记处理

客人入住登记操作完成后,入住的客房状态应该及时做相应的改变,并记录客人的序号供以后查询。

这一功能可以使用触发器来自动进行:

因为进行客人入住登记操作是在客人信息表tblClient中添加一条新的记录,所以可以为tblClient设计一个Insert触发器,当tblClient执行Insert操作后自动更改tblRoom相应客房记录的数据。

定义这个触发器名称为client-insert。

其实现代码如下:

CREATETRIGGERclient-insertON[dbo].[tblClent]

FORINSERT

UPDATEtblRoom

SETrStats=‘F’,cId=b.cId

FROMtblRooma,insertedb

WHEREa.rNum=b.rNum

(3)客人离店退房处理

客人在离店退房时,服务员输入客人的退房时间,然后要计算出客人的住宿费用,以便于客人结帐。

同时,系统应该将客人所退客房的状态更改为“空”,以便于接待下一个客人入住。

这一功能也可以通过一个触发器来实现。

为tblClient表设计一个名为client-update的UPDATE触发器,当系统对tblClient的cOutTime(退房时间)进行UPDATE操作后,将会自动触发它。

该触发器将自动取得当前所退房的单价,并根据客人入住天数计算出客人的住宿费用,把费用值写入cCost列,最后触发器将tb1Room相应客房记录的rStats和cId更新,即将客房状态置为空房,并清除对应于该客人的入住标识信息。

下面是client-update触发器的定义代码:

CREATETRIGGERclient-updateON[dbo].[tblClient]

FORUPDATE

IFUPDATE(cOutTime)/*只有对cOutTime列进行更改时才处理*/

BEGIN

/*求出当前客人诉诸客房的单价*/

DECLARE@pricesmallmoney

SET@price=(SELECTrPriceFROMtblRoomTypeRIGHTJOINtblRoom

ONtblRoom.rType=tblRoomType.rType

RIGHTJOINtblClient

ONtblClient.rNum=tblRoom.rNum

WHEREtblClient.cIdIN(SELECTcIdFROMinserted))

/*求客人住宿费并更改cCost列*/

UPDATEtblClient

SETcCost=@price*DATEDIFF(DAY,b.cInTime,b.cOutTime)

FROMtblClienta,inseretedb

WHEREa.cId=b.cId

/*更新tblRoom相应客房的状态*/

SETrStats=‘N’,cId=’’

FROMtblRooma,insteredb

END

在上面的代码中,首先定义了一个变量@price,然后通过一个右连接直接得到当前客人所住客房的单价。

在第二段语句中,使用SQL函数DATEDIFF求得客人入住时间和退房时间之差,求出入住天数,乘以@price变量就得到了客人最终的住宿费用。

值得注意的是:

UPDATE触发器可以使用inserted表和deleted表,这里必须使用inserted表,它的cOutTime才是最新更改的退房时间,如果使用deleted表,将得不到正确的结果。

最后,触发器对tblRoom表中的cId为当前客人cId的记录的rStats烈和cId列进行了更新。

(4)客人信息查询处理

在实际应用中,经常会有这样的要求:

服务员需要通过客人的部分资料查询客人的全部信息以及客人住在哪一个客房。

由于需要通过输入查询条件,才能得到结果集,所以可以设计一个带输入参数的存储过程来实现。

定义一个名为spClientInfo的存储过程,该存储过程以客人姓名(@ClientName)、单位(@ClientWork)、家住地址(@ClientAdd),及来自地的地名(@ClientForm)等作为输入参数,存储过程返回查询到的结果集。

spClientInfo的定义代码如下:

CREATEPROCEDUREspClientInfo

@ClientNamevarchar(8)=’%’,

@ClientWorkvarchar(50)=’%’,

@ClientAddvarchar(50)=’%’,

@ClientFromvarchar(10)=’%’,

SELECT*FROMtblClient

WHERE

((cNameLIKE@ClientName+’%’)AND

(cWorkLIKE’%’+@ClientWork+’%’)AND

(cAddLIKE’%’+@ClientAdd+’%’)AND

(cFromLIKE@ClientFrom+’%’))

在上面的代码中,向spClientInfo传入四个参数,依次是:

客人姓名、客人工作单位、客人家庭住址和客人来自地的地名。

在WHERE子句中使用LIKE,并在参数前、后添加“%”,使得该存储过程具有模糊查询的功能。

比如,@ClientName参数中输入客人的姓,就可以查询到所有该姓氏的客人信息。

4个参数可以同时给出,也可以只输入一个参数,但是参数的位置顺序不能改变。

(5)查询客人住宿费用的处理

在本系统的功能需求中要求能够查询客人住宿费用的详细情况,包括客人入住时交付的押金金额、客人住宿天数、客房价格、客人住宿费金额、住宿费与押金差额等信息。

实现该功能可以通过一个存储过程,以客人序号为输入参数,输出上面要求的各种信息数值。

设计一个名为spClientCost的存储过程,定义代码如下:

CREATEPROCEDUREspClientCost

@ClientIdchar(9)

DECLARE@ClientPricesmallmoney

DECLARE@ClientDayssmallint

DECLARE@ClientCostsmallmoney

DECLARE@ClientBalancesmallmoney

SELECT

@ClientPrice=(

SELECTrPriceFROMtblRoomTypeRIGHTJONEtblRoom

ONtblRoom.rType=tblRoomType.rType

RIGHTJOINtblClient

ONtblClient.rNum=tblRoom.rNum

WHEREtblClient.cId=@ClientId

),

@ClientDays=(DATEDIFF(DAY,cInTime,GETDATE())

@ClientCost=(@ClientPrice*@ClientDays),

@ClientBalance(cDeposit-@ClientCost)

FORMtblClient

WHEREcId=@Client

SELECTcDeposit,@ClientPriceascRoomPrice,

@ClientDayascDays,@ClientCostascCCost,

@ClientBalanceascBalance

FROMtblClient

WHEREcId=@ClientId

在上面的代码中,首先定义了4个变量,分别是:

@ClientPrice、@ClientDays@ClientCost、@ClientBalance,它们分别表示:

客人入住房间的单价、客人入住的时间、客人的住宿费用和客人所缴纳押金与住宿费用的差额。

第一个SELECT语句起赋值作用,分别把各个表达式的结果赋值给各个变量。

第二个SELECT语句是一个选择,将tblClient表的cDeposit以及前面求得的各个变量值作为存储过程的结果集返回。

(6)查询住宿时间到期的客人

客房管理服务员通常根据客人入住时登记的预住天数收取相应的押金,当客人住宿时间达到预住天数时就应该通知客人,以便客人补交押金或退房。

系统为管理服务员提供这样的查询功能,可以显示出所有入住时间达到预住日期的客人信息。

完成这个功能只需要在表中选择入住天数大于等于预住天数的记录,而不需要输入参数,所以,可以使用一个视图来实现这一查询功能。

定义视图的名称为vClient_Day,定义代码如下:

CREATEVIEWdbo.vClient_Day

SELECTcid,cName,rNum,cFrom,cDay,cInTime,

DAYEDIFF(DAY,cInTime,GETDATE())AscPDay

FORMdbo.tblClient

WHERE(cOutTimeISNULL)AND(DATEDIFF(DAY,cInTime,GETDATE())>

=cDay)

代码中使用DATEDIFF函数求得cInTime与当前日期之间的天数,即客人实际住宿天数。

所有住宿天数大于或等于预住天数cDay,并且离店时间cOutTime为NULL的客人记录都将成为结果集中的记录。

(7)客房销售统计

作为一个简单的客房管理系统,应该提供给管理者一定的统计数据。

系统中最基本的统计数据就是各种类型客房在一定时间段内的销售收入情况。

设计一个存储过程,以管理人员输入的统计起始日期和终止日期作为输出参数,在这段时间内所有类型客房的销售收入、销售次数(客人入住次数)为结果集。

这个存储过程名为spRoomSale,两个输入参数分别为@StartDate和@EndDate。

设计代码如下:

CREATEPROCEDUREspRoomSale

@StartDatesmalldatetime,

@EndDatesmalldatetime

SELECTrtype,rname

(SELECTSUM(cCost)FROMtblClient

LEFTJOINtblRoom

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2