数据库及应用课程设计示例_第1页
数据库及应用课程设计示例_第2页
数据库及应用课程设计示例_第3页
数据库及应用课程设计示例_第4页
数据库及应用课程设计示例_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计示例客房管理系统设计一、课程设计的目的和意义在当今经济和商务交往日益频繁的状况下,宾馆服务行当正面临客流量骤增的压力。越来越多的宾馆饭店都认识到传统的管理方法已经不能适合当今社会的需要,必须借助先进的计算机信息技术对宾馆服务进行管理。“客房管理系统”可以说是整个宾馆计算机信息管理系统的中心子系统,因为宾馆最主要的功能就是为旅客提供客房。设计客房管理这样一个系统,可以涉及到大多数SQL Server数据库的重要数据库对象、重要功能和特性,比如:视图、触发器和存储过程等。由此,通过这个课程设计可以加深对这些SQL Server数据库知识的学习、理解,积累在实际工程应用中运用各种数据库对象的

2、经验,使学生掌握使用应用软件开发工具开发数据库管理系统的基本方法。在实用性方面,客房管理系统是很普遍的一种应用,选择该系统作为课程设计也可以为学生以后可能遇到的实际开发提供借鉴。二、系统功能设计系统功能是在实际开发设计过程中经过调研、分析用户需求,和用户一起共同确定下来的,是系统为满足用户需求所应完成的功能。本课程设计模拟一个小型客房管理系统。本系统要求实现以下主要功能:1、 数据录入功能:在本系统中提供客人信息登记功能。可以录入客人的姓名、性别、年龄、身份证号码、 家庭住址、工作单位、来自地的地名、入住时间、预计入住天数、客房类别、客房号、离店时间以及缴纳押金金额等信息。在客人退房时,系统根

3、据输入的离店时间以及客房单价自动计算客人住宿费金额。2、 数据查询功能系统需要提供以下查询功能:1) 查某类客房的入住情况及空房情况,显示所有该类客房空房数目和客房号。2) 根据客人姓名、来自地的地名、工作单位或家庭住址等信息查询客人信息;根据客房号查询入住客人的信息。3) 查询某个客人住宿费用情况,显示客人缴纳押金金额、实际入住天数、客房价格、实际住宿费、住宿费差额及余额等信息。4) 查询所有入住时间达到或超过预计入住天数的客人。3、数据统计功能1)统计一段时间内各类客房的入住情况。2)统计全年各月份的客房收入。3)统计一段时间内各类客房的入住率。三、数据库设计 数据库设计是根据系统功能的要

4、求和数据规模规划数据库服务器选型、数据表结构定义、分配数据库服务器端的功能实现以及创建数据库对象。1、数据库与数据表设计分析前面的系统功能要求,需要一个表来存储和管理客人信息,使系统能够接受客人入住时输入的各项数据,以实现数据录入、查询或统计客人信息等功能。客人是本系统的第一个实体。为了能实现查询和统计客房入住情况等功能,必须有一个表来存储和管理所有客房的信息,包括客房的类型、客房号、是否入住客人等。客房是本系统的第二个实体。一般来说,客房价格是以客房的类型来制定的。为了保证系统数据库最小的数据冗余和数据完整性,需要建立一个表来记录各种客房类型的信息。它主要为各种查询和统计功能提供客房价格数据

5、。它与客房表是一对多的关系,在客房价格变动时,只需要在客房类型表中更改。综上所述,在客房管理(KFGL)数据库中需要建立3个数据表:客人信息数据表、客房信息数据表和客房类型数据表。(1)客人信息数据表定义根据系统功能要求,客人信息表需要能接受客人登记入住和离店时输入的所有信息.还必须包括客人最终的住宿费金额,因为住宿费金额是统计客房收入的基本数据。客人信息表的结构定义如表1所示。表1 客人信息数据表定义 列名数据类型 大小 空 值 键 说明cIdint 4 主键(标识列) 序号cNamechar 8 姓名cSexbit 1 性别cAgetinyint 1 年龄cPNumchar 18 身份证号

6、码cAddvarchar 50 家庭住址cWorkvarchar 50 工作单位cFromchar 10 来自地的地名cInTimesmalldatetime 4 入住时间cDayTinyint 1 预计入住天数rNumchar 5 客房号cOutTimesmalldatetime 4 离店时间cDepositsmallmoney 4 押金金额cCostsmallmoney 4 住宿费 其中,cId(序号)是表的主键,唯一标识一个入住的客人。设计时定义它为标识列,系统自动地产生连续的永不重复的序列号。 rNum(客房号)在客人信息表中是外键,它是客房信息表的主键,唯一标识一个房间。通过它,系统

7、将引用到客房类型、客房单价等信息。 客人信息表取名为tblClient。(2)客房信息数据表定义客房信息表中应该记录每一个客房的信息和状态,系统查询这些信息并决定客人能否入住。每个客房的类型决定了客房的价格,可供客人入住时选择房间及离店时结算住宿费用。客房数据表的定义如表2所示。表2 客房信息数据表定义列名数据类型 大 小 空 值 键 说明rNumrStatsrTypecIDchar 5 主键 客房号char 1 客房状态char 2 客房类型编号char 9 入住客人序号 其中,rNum(客房号)是该表的主键,唯一标识一个客房房间。它将作为客人信息表的外键,保证客人信息表的参照完整性。 rS

8、tats 表示房间的状态,设定其值为“N”时,表示客房没有入住客人;值为“F”时,表示客房以有客人入住;值为“P”时,表示客房被预定。 rType 表示客房的类型,它是该表的一个外键,来自下面将要说明的客房类型数据表。 cId 将记录入住客人的序号,在客房信息表中增加这一列时,虽然增加了数据冗余,但可以在查询房间中入住客人信息时,提高系统的性能。因为客房信息表的记录数相对固定,相比之下,增加这个冗余的列对于整个系统来说是有利的。客房信息表取名为tblRoom。(3)客房类型数据表定义客房类型主要描述客房的服务标准和收费价格,这些信息如果包含进每个客房的记录中,将会使客房信息表产生较大的数据冗余

9、,特别在客房数量大的情况下。此外,如果客房信息表的每条记录都包括价格信息,那当某种类型的客房价格变动时,用户就不得不对客房信息表中的记录逐一进行修改。客房类型数据表的定义如表3-3所示。表3-3 客房类型数据表定义列名数据类型 大 小 空 值 键 说明 rTyperNamerPricechar 2 主键 客房类型编号char 10 客房类型名称smallmoney 4 该类型客房价格其中,rType 表示客房类型的编号,作为该表的主键,唯一标识某一类客房。它将作为客房信息表的外键,保证客房信息表数据的完整性。客房类型数据表取名为tblRoomType。(4)根据上面三个数据表的设计,可执行下面

10、的步骤创建数据表1)在服务器计算机上安装 MS SQL Server 2000。2)打开企业管理器,在本地服务器上创建新的数据库KFGL。3)展开KFGL数据库,单击“表”,按照设计,创建表tblClient、tblRoom和tblRoomType2、数据完整性设计设计好表的结构后,需要根据实际应用和操作规则为表制定一系列约束和规则,从而达到保证数据完整性原则的目的。约束(1)主键约束、非空值约束在三个表的设计中已经规定了每个表的主键列、非空列,这些规定都是在实际应用环境中所必需的。比如tblRoom表中定义了房间号rNum为主键,则在表tblRoomr中Num必须是唯一的一个饭店不可能出现两

11、个房间号码相同的客房;客房类型Type和客房状态rStats 不能为空值,因为rType是辨别客人入住客房中类、住宿费用结算的依据,所以不能 为空值;rStats是辨别客人能否入住的依据,所以也不能为空值。(2)CHECK 约束对于tblClient表,应该建立一个检查约束,即所有客人的离店时间都不可能小于入住时间。按下列步骤创建这个约束:1) 打开企业管理器,展开服务器,展开“数据库”,展开“KFGL”数据库,单击“表”。2) 用鼠标右键单击“tblClent”表,选择“设计表”,系统将弹出“设计表”对话窗口。3) 用鼠标右键单击此窗口的上方窗格,单击“CHECK约束”,单击“新建”按钮,在

12、“约束表达式”文本框中输入表达式:(cOutTime=cInTime)。4) 选择“对INSERT和UPDATE操作强制约束”复选框,单击“关闭”按钮,完成CHECK约束创建操作。(3)使用缺省值可以将三个数据表中所有货币类型的列都定义为缺省值,特别是指定了“非空”约束的列。tblClient表的预住天数cDay的默认值可定义为1,而客人入住时间cInTime的缺省值应该就是添加客人记录的时间(除非是客房预定,在本系统中暂不考虑客房预定),所以可以设定缺省值为“(GETDATE)”。(4)唯一约束除了每个表的主键需定义为唯一外,对于tblRoomType的客房类型名rName,也应该定义为唯一

13、的名称。因为在系统功能需求中,要求按客房类型对数据进行统计,如果在统计结果中只显示客房类型编号,用户就必须记忆那种类型是什么编号,这样很不直观。所以应按照相关的SQL Server数据库教材中建立唯一约束的方法进行创建。(5)外键约束在数据表设计中已经讨论了各个表的外键,这里以tblClient为例说明创建步骤,tblRoom和tblroomType表可以按照相同的步骤进行操作。1)打开企业管理器,展开服务器,展开“数据库”,展开“KFGL”数据库,单击“表”。2)用鼠标右键单击此“tblClient”表,选择“设计表”,系统将弹出“设计表”对话窗口。3)用鼠标右键单击此窗口的上方窗格,单击“

14、关系”,在“主键表”下拉框中选择“tblRoom”4)在“外键表”中选择“tblClient”。5) 在“主键表”和“外键表”下方的窗格中都选择列名“rNum”,表明tblRoom表中的主键“rNum”就是tubClient表中的外键。选择“对INSERT和UPDAET操作强制约束”复选框,表明以后对tblClient表中的rNum所有的添加和更新操作都会检查在tblRoom表中是否存在与此相应的rNum。单击“关闭”按钮,完成创建操作。(6)规则为了检查tblClinent表中输入的身份证号码cPNum是有效位数(我国身份证号码有旧的15位数字和18位数字两种),可以创建一个规则邦定到该列,

15、在数据操作时进行检查。规则的定义语句为: (LEN(CardNum)=15) OR (LEN(CardNum)=18)创建和绑定的方法及步骤请参见教材中的相关内容。(7)标识列在设计客人信息表tblClient时,我们把客人序号cId定义为标识列,使其在添加记录时自动产生序列号,并且每个序号唯一地标识一次客人入住信息。完成数据完整性设计后,登入模拟数据。3、视图、触发器和存储过程设计定义了系统需要的数据库和表的结构后,下面进一步分析整个客房管理系统中的业务流程。在这里,需要确定哪些业务处理和数据处理的功能使用MS SQL Server来实现,那些数据处理的功能由应用程序实现,从而设计特定的视图

16、、触发器或存储过程。下面将讨论系统需要设计并创建的视图、触发器和存储过程。(1)客人选择客房处理客人来到饭店入住前要做的第一件事是选择合适的房间,客人将告知饭店服务员自己需要的客房类型,服务员在系统中选择指定的客房类型后系统将显示所有的空余的该类型房间,并显示该类型客房价格供客人参考选择。这个过程可以通过一个存储过程来实现。在这个存储过程中,需要的输入参数是客房类型,输出的结果集是所有这种客房类型的空房记录和价格。定义这个存储过程为SelRoom,定义输入的参数名为RoomType,定义输出的价格参数名为RoomPrice。根据存储过程的创建语法,编写SelRoom的实现代码如下:CREATE

17、 PROCEDURE SelRoomRoomType char(2)RoomPrice smallmoney OUTPUTASSELECT rNUM FROM tblRoomWHERE(rType=RoomType) AND(rStats=N)SELECT RoomPrice=rprice FROM tblRoomTypeWHERE rType=RoomTypeGO在上面的代码中包含了两个SELECT语句,第一个SELECT语句从tblRoom表中选择了所有客房类型为输入参数指定类型并且客房状态为“空”(N)的客房号,并将所有记录作为结果集返回;第二个SELECT语句从tblRoomType中

18、取得了指定客房类型的价格,作为输出参数RoomType返回。(2)客人入住登记处理客人入住登记操作完成后,入住的客房状态应该及时做相应的改变,并记录客人的序号供以后查询。这一功能可以使用触发器来自动进行:因为进行客人入住登记操作是在客人信息表tblClient中添加一条新的记录,所以可以为tblClient设计一个Insert触发器,当tblClient执行Insert操作后自动更改tblRoom相应客房记录的数据。定义这个触发器名称为client-insert。其实现代码如下:CREATE TRIGGER client-insert ON dbo.tblClentFOR INSERTASUP

19、DATE tblRoomSET rStats=F,cId=b.cIdFROM tblRoom a,inserted bWHERE a.rNum=b.rNum(3) 客人离店退房处理客人在离店退房时,服务员输入客人的退房时间,然后要计算出客人的住宿费用,以便于客人结帐。同时,系统应该将客人所退客房的状态更改为“空”,以便于接待下一个客人入住。这一功能也可以通过一个触发器来实现。为tblClient表设计一个名为client-update的UPDATE触发器,当系统对tblClient的cOutTime(退房时间)进行UPDATE操作后,将会自动触发它。该触发器将自动取得当前所退房的单价,并根据客

20、人入住天数计算出客人的住宿费用,把费用值写入cCost列,最后触发器将tb1Room相应客房记录的rStats和cId更新,即将客房状态置为空房,并清除对应于该客人的入住标识信息。下面是client-update触发器的定义代码:CREATE TRIGGER client-update ON dbo.tblClientFOR UPDATEASIF UPDATE(cOutTime) /*只有对cOutTime列进行更改时才处理*/BEGIN/*求出当前客人诉诸客房的单价*/DECLARE price smallmoneySET price=(SELECT rPrice FROM tblRoomT

21、ype RIGHT JOIN tblRoomON tblRoom.rType=tblRoomType.rTypeRIGHT JOIN tblClientON tblClient.rNum=tblRoom.rNumWHERE tblClient.cIdIN(SELECT cIdFROM inserted)/*求客人住宿费并更改cCost列*/UPDATE tblClientSET cCost=price*DATEDIFF(DAY,b.cInTime,b.cOutTime)FROM tblClient a,insereted bWHERE a.cId=b.cId/*更新tblRoom相应客房的状态

22、*/UPDATE tblRoomSET rStats=N,cId=FROM tblRoom a,instered bWHERE a.cId=b.cIdEND在上面的代码中,首先定义了一个变量price,然后通过一个右连接直接得到当前客人所住客房的单价。在第二段语句中,使用SQL函数DATEDIFF求得客人入住时间和退房时间之差,求出入住天数,乘以price变量就得到了客人最终的住宿费用。值得注意的是:UPDATE触发器可以使用inserted表和deleted表,这里必须使用inserted表,它的cOutTime才是最新更改的退房时间,如果使用deleted表,将得不到正确的结果。最后,触发

23、器对tblRoom表中的cId为当前客人cId的记录的rStats烈和cId列进行了更新。(4)客人信息查询处理在实际应用中,经常会有这样的要求:服务员需要通过客人的部分资料查询客人的全部信息以及客人住在哪一个客房。由于需要通过输入查询条件,才能得到结果集,所以可以设计一个带输入参数的存储过程来实现。定义一个名为spClientInfo的存储过程,该存储过程以客人姓名(ClientName)、单位(ClientWork)、家住地址(ClientAdd),及来自地的地名(ClientForm)等作为输入参数,存储过程返回查询到的结果集。spClientInfo 的定义代码如下:CREATE PR

24、OCEDURE spClientInfoClientName varchar(8)=%,ClientWork varchar(50)=%,ClientAdd varchar(50)=%,ClientFrom varchar(10)=%,ASSELECT * FROM tblClientWHERE(cName LIKE ClientName+%)AND(cWork LIKE %+ClientWork+%)AND(cAdd LIKE %+ClientAdd+%)AND(cFrom LIKE ClientFrom+%)GO在上面的代码中,向spClientInfo传入四个参数,依次是:客人姓名、客人

25、工作单位、客人家庭住址和客人来自地的地名。在WHERE子句中使用LIKE,并在参数前、后添加“%”,使得该存储过程具有模糊查询的功能。比如,ClientName参数中输入客人的姓,就可以查询到所有该姓氏的客人信息。4个参数可以同时给出,也可以只输入一个参数,但是参数的位置顺序不能改变。(5)查询客人住宿费用的处理在本系统的功能需求中要求能够查询客人住宿费用的详细情况,包括客人入住时交付的押金金额、客人住宿天数、客房价格、客人住宿费金额、住宿费与押金差额等信息。实现该功能可以通过一个存储过程,以客人序号为输入参数,输出上面要求的各种信息数值。设计一个名为spClientCost的存储过程,定义代

26、码如下:CREATE PROCEDURE spClientCostClientId char(9)ASDECLARE ClientPrice smallmoneyDECLARE ClientDays smallintDECLARE ClientCost smallmoneyDECLARE ClientBalance smallmoney SELECTClientPrice=(SELECT rPrice FROM tblRoomType RIGHT JONE tblRoom ON tblRoom.rType=tblRoomType.rType RIGHT JOIN tblClient ON tb

27、lClient.rNum=tblRoom.rNumWHERE tblClient.cId=ClientId),ClientDays=(DATEDIFF(DAY,cInTime,GETDATE()ClientCost=(ClientPrice*ClientDays),ClientBalance(cDeposit-ClientCost)FORM tblClientWHERE cId=ClientSELECT cDeposit,ClientPrice as cRoomPrice, ClientDay as cDays,ClientCost as cCCost, ClientBalance as cB

28、alanceFROM tblClientWHERE cId=ClientIdGO在上面的代码中,首先定义了4个变量,分别是:ClientPrice、ClientDaysClientCost、ClientBalance,它们分别表示:客人入住房间的单价、客人入住的时间、客人的住宿费用和客人所缴纳押金与住宿费用的差额。第一个SELECT语句起赋值作用,分别把各个表达式的结果赋值给各个变量。第二个SELECT语句是一个选择,将tblClient表的cDeposit以及前面求得的各个变量值作为存储过程的结果集返回。(6)查询住宿时间到期的客人客房管理服务员通常根据客人入住时登记的预住天数收取相应的押金

29、,当客人住宿时间达到预住天数时就应该通知客人,以便客人补交押金或退房。系统为管理服务员提供这样的查询功能,可以显示出所有入住时间达到预住日期的客人信息。完成这个功能只需要在表中选择入住天数大于等于预住天数的记录,而不需要输入参数,所以,可以使用一个视图来实现这一查询功能。 定义视图的名称为vClient_Day,定义代码如下:CREATE VIEW dbo.vClient_DayASSELECT cid,cName,rNum,cFrom,cDay,cInTime,DAYEDIFF(DAY,cInTime,GETDATE()As cPDayFORM dbo.tblClientWHERE(cOut

30、Time IS NULL) AND (DATEDIFF(DAY,cInTime,GETDATE()=cDay)代码中使用DATEDIFF函数求得cInTime与当前日期之间的天数,即客人实际住宿天数。所有住宿天数大于或等于预住天数cDay,并且离店时间cOutTime为NULL的客人记录都将成为结果集中的记录。(7)客房销售统计作为一个简单的客房管理系统,应该提供给管理者一定的统计数据。系统中最基本的统计数据就是各种类型客房在一定时间段内的销售收入情况。设计一个存储过程,以管理人员输入的统计起始日期和终止日期作为输出参数,在这段时间内所有类型客房的销售收入、销售次数(客人入住次数)为结果集。这

31、个存储过程名为spRoomSale,两个输入参数分别为StartDate和EndDate。设计代码如下:CREATE PROCEDURE spRoomSaleStartDate smalldatetime,EndDate smalldatetimeASSELECT rtype,rname(SELECT SUM(cCost)FROM tblClient LEFT JOIN tblRoom ON tblClient,rnum=tblRoom.rnum WHERE(tblClient.cInTime BETWEEN StartDate AND EndDate) AND(tblRoomType.rty

32、pe=tblRoom.rtype) AS sale(SELECT COUNT(tblClient.cId) FROM tblClient LEFT JOIN tblRoom ON tblClient.r.num=tblRoom.rnum WHERE(tblClient.cInTime BETWEENStartDate AND EndDate) AND (tblRoomType.rtype=tblRoom.rtype) AS salenumFROM tblRoomType代码中使用了两个SELECT子查询,分别求得起始日期与终止日期之间、客房类型为当前客房类型的所有住宿费用总和(客房销售收入sa

33、le)及客房销售次数salenum。然后这两个值作为新的列与tblRoomType的rType、rName列一起作为结果集。注意BETWEEN的用法。(8)统计某年份每月的客房销售数据饭店管理人员常常需要比较一年中各个月份的客房销售收入,并把它制作成表格。实现这一功能可以使用一个存储过程,以输入一个年度作为参数,产生该年度12个月份的销售收入统计。定义该存储过程名为spMonthSum,输入参数为This Year。实现代码如下:CREATE PROCEDURE spMonthSumThis Year CHAR(4)ASSELECT DATEPART(mm,cInTime) AS cMonth

34、,SUM(cCost) AS cAmountFROM tblClientWHERE DATEPART(mm,cInTime)=ThisYearGROUP BY DATEPART(mm,cInTime)GO注意上面的代码中如何使用GROUP BY字句来实现统计功能。代码中还使用了日期函数DATEPART和求和函数SUM。(9)统计一段时间内各类客房的入住率饭店经营决策最关心的数据之一就是客房的入住率,他们以一段时间内各类型客房的入住情况为依据,从而调整饭店的经营策略。客房的入住率通过下面的公式来计算:入住率=该类客房时间段内有客人的天数之和 / 时间段总天数 / 该类客房数若要实现统计入住率这一

35、系统功能,就需要设计一个比较复杂的存储过程。将这个存储过程命名为spRoomFullRate,使用输入参数StartDate、EndDate作为统计的开始时间和结束时间。存储过程实现代码如下: CREATE PROCEDURE spRoomFullRate StartData smalldatetime, EndData smalldatetime AS SELECT b.rName,a.rTypeNum,b.rFullDays, (CAST( ( (CAST(b.rFullDays as decimal(5,2)/ (CAST(a.rTypeNum as decimal(5,2)/ (CAS

36、T(DATEDIFF(day,StartDate,EndDate) AS decimal(5,2)*100 ) AS decimal(5,2) ) )AS rFullRate FROM ( SELECT COUNT(tblRoom.rNum) AS rTypeNum,tblRoom.rTypeFROM tblRoomGROUP BY tblRoom.rType) a, ( SELECT tblRoomType.rName,tblRoomType, (SUM(DATEDIFF(day,tblClient.cInTime,tblClient.cOutTime) AS rFullDaysFROM t

37、blClient,tblRoom,tblRoomType.rType,WHERE (tblClient.cInTime between StartDate and EndDate) AND (tblClient.rNum=tblRoom.rNum)AND (tblClient.rType=tblRoomType.rType) GROUP BY rName,tblRoomType.rType)bWHERE a.rType=b.rTypeGO这是个比较复杂的设计,第一个SELECT语句查询到4个列,其中rName 表示客房类型名称,rTypeNum表示该类型的客房总数量,rFullDays表示统计

38、时间段内该类客房有客人入住的天数,rFullRate表示该类客房在统计时间段内的入住率。rTypeNum需要从子查询中得到,rFullDays则需要从第二个子查询中的聚合函数SUM得到。另一点值得注意的是,在计算rFullRate时,需要把各个参加计算的项转换为小数类型,这样才能得到正确的结果。CAST函数为数据类型转换函数。 到目前为止,基本完成了所有数据库对象的设计和创建工作,余下的工作就是使用VB与SQL Server数据库连接,正确组织、处理和显示这些内容,使其成为真正的系统。四、“客房管理系统”应用程序结构设计设计客房管理系统的应用程序结构,需要从该管理系统的用户需求入手,根据系统功

39、能和实际应用业务流程设计科学、合理的程序流程和操作流程。这里的设计工作可以分为功能模块设计和用户界面设计。1、 功能模块设计 功能模块设计是根据系统功能的需求,合理地将各类相关的功能分解成相对独立的功能模块。划分功能模块有利于提高系统开发效率,便于设计代码的维护和更新,并且使系统更加结构化。根据系统功能的要求,把程序分为信息录入、查询和统计3个模块。(1)入住登记与离店结帐模块此模块主要处理系统中所有的数据输入,包括客人入住登记以及客人离店结帐。(2)查询模块此模块是接受用户输入的各种条件,对数据库进行各种查询并返回查询结果,组织结果的显示。(3)统计模块此模块是接受用户输入的参数,按要求统计

40、各类数据。2、用户界面设计用户界面是用户控制和使用系统的工具和手段。友好易用的操作界面可以使用户更快地熟悉系统、更加规范的操作系统,使系统为用户提供更大的帮助,并且可以相对减少用户的错误操作,增强系统的稳定性。在这个简单的事例系统中,根据功能模块的设计,系统的主界面为一个MDI窗口,所有的功能模块窗口都将作为MDI子窗口中显示。主窗口提供系统菜单,用户可通过菜单选择调用各个功能模块并进行操作。(1)系统主窗口主窗口设计样式如图3-1所示。 图3-1 系统主窗口 系统菜单根据功能模块设计为“登记”“查询”和“统计”3项,“退出系统”菜单将关闭运行中的系统。 “登记”菜单中包含“客人登记/结账”和

41、“浏览所有记录”两个菜单项。“客人登记/结账”将调用系统中用于客人信息登记和结账的模块,“浏览所有记录”将显示系统中所有客人的信息记录。 “查询”菜单中包含“客房查询”“客人信息查询”“客人住宿费查询”和“客人入住天数查询”等4个菜单项。分别调用查询功能模块中相应的客房状态查询、客人信息查询、客人住宿费用情况查询和客人入住天数情况查询的处理窗口。“查询”菜单内容如图3-2所示。图3-2“查询“(左)和“统计”(右) “统计”菜单中包含“客房销售统计”、“客房月销售统计”和“入住统计率”3个菜单项。“客房销售统计”将显示统计一段时间内客房销售情况的窗口;“客房月销售统计”将显示统计一个年度中各个

42、月份客房销售情况的窗口;“入住统计率”将显示统计一段时间内各类型客房入住率的窗口。(2)“客人登记和结账”窗口系统处理客人信息登记和客人离店结账将通过这个窗口进行操作,窗口设计如图3-3所示。图3-3中的“新客人资料”区域放置了若干文本输入框用于输入新的客人信息,“现有客人信息”表格中将显示系统数据库中当前入住的客人信息,这些客人都没有退房。“入住登记”按钮将把“新客人资料”区域中所有的资料写入数据库,而“离店结账”按钮将对“现有客人信息”表格中被选中的客人进行结账处理。图3-3 客人登记和结帐窗口界面设计(3)“查询空余客房”窗口该窗口用于客房信息查询,用于查询指定类型的客房情况,显示该类型

43、空余的客房。窗口设计如图3-4所示。图3-4 用于客房查询的窗口设计窗口中一个下拉框中包含系统中所有客房类型,从此下拉框选择要查询的客房类型,单击“查询”按钮将开始查询指定类型的客房,并将该类型客房的价格显示在“客房价格”文本框中,所有空房的客房号将显示在“现余空房”表格中。(4)“客人信息查询窗口”将在查询客人信息时显示,用于接受用户输入查询条件和显示查询结果。窗口设计如图3-5所示。图3-5 用于客人费用查询的窗口设计窗口中“客人姓名”、“工作单位”、“家庭住址”和“来自何地”文本输入框用于输入各种相应的查询条件,“查询”按钮将启动查询处理,查询的结果将显示在“查询结果”数据表格中。(5)

44、“客人费用查询”窗口该窗口将在进行客人费用查询时显示,窗口设计如图3-6所示。在该窗口中“客人序号”输入框中输入需要查询的客人序号,“查询”按钮用于启动查询过程。产旬得到的客人姓名将显示在“客人”标签上;在“0000房间”处显示客房号码。在“押金金额”、“客房房价”、“入住天数”、“住宿费”和“差额”等文本框中将显示查询结果中的相应内容。图3-6 用于客人费用查询的窗口设计另外,该窗口也用于显示在对客人进行“结账”处理以后客人应付款金额或者饭店应退还给客人的金额。(6)“客人入住天数”窗口该窗口用于显示客人客人入住天数查询得到结果,窗口设计如图3-7所示。图3-7 “客人入住天数”窗口(7)“

45、统计”窗口图3-8用于统计功能的窗口设计 该窗口将用于系统中3个统计功能,接受用户输入统计参数,显示统计结果。窗口设计如图3-8所示。 窗口中“统计时间段”区域中有一个输入框和两个日期选择框,在执行按年份统计各类客房销售情况的统计功能时,输入框用于输入年份,而在执行按时间段统计客房销售情况和客房入住率时,两个日期选择框用于输入日期。由于3个统计功能共用这个窗口进行处理,所以在代码设计阶段将根据具体的统计功能显示或隐藏输入框和日期选择框。 “统计结果”表格将显示统计的结果数据。五、使用VB创建工程并编写代码在这一节里,将具体讨论VB与SQL Server数据库的连接方法以及如何在VB处理SQL

46、Server的数据库对象和数据。为了更好、更熟练的掌握VB中ADO数据对象的知识,本结的内容中将涉及几种不同的运用ADO对象的方法,便于读者参考。 在本结的内容里将首先创建一个VB工程,然后根据功能模块的设计以及用户界面的设计一步一步地编写各个窗口中相应的代码。1、 创建工程首先在VB中创建一个数据工程。在VB菜单中选择“文件”,单击“新建工程”菜单项,在“新建工程”窗口中选择“数据工程”,并单击“确定”按钮。这时,VB将自动产生一个窗体、一个数据环境对象和一个数据报表以及其它的相关文件,同时系统自动为工程装入了Adodc等几个数据对象组件。 这几个自动产生的对象是VB的默认数据工程对象。由于

47、在本客房管理系统中不需要数据报表,而其它的功能模块将另外创建窗体,所以可以把自动产生的窗体和数据报表从工程中删除。在删除窗体之前需要另外创建一个主窗体:选择“工程”菜单中“添加MDI窗体”菜单项,在“添加MDI窗体”中选择“MDI窗体”,单击“确定”按钮,完成“MDI窗体”的创建。此时工程中添加一个名为“MDIForm1”的MDI窗体,更改窗体名称为“frmMain”。在“工程”菜单中选择“DataProject属性”,打开工程属性对话框。更改工程名称为“KFGL”,设置“启动对象”为frmMain窗体。 单击“菜单编辑器”按钮编辑系统菜单,按照前面界面设计中的内容编辑菜单项。将“DataEnvir

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论