《数据库系统原理A》实验文档酒店客房管理系统作者姓名:李芳、沈若冰专业、班级:计算机科学与技术095学号: 09422034、09422004指导教师:赵宏伟完成日期: 2011-6-26大连大学Dalian University摘要随着计算机技术的飞速发展,信息时代的到来,信息改变了我们这个社会。
客房管理的信息化程度体现在将计算机及网络与信息技术应用于经营与管理,以现代化工具代替传统手工作业。
酒店客房管理系统是酒店经营管理中不可缺少的部分,它的内容对于经营的决策者和管理者来说都至关重要。
所以,使用网络信息化管理客房,不但能够避免使用传统人工的方式管理文件档案时出现效率低、保密性差,误差多等弊端,而且对于查询空房间及已定房间极为方便。
这些优点能够极大地提高客房经营管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
此外,办事效率也是决定收入的一个关键因素。
所以,电脑技术和电脑服务引入酒店管理成为一种必然的趋势。
建立酒店客房管理信息系统,采用计算机对客房信息进行管理,可以进一步提高酒店的经济效益和现代化水平,帮助酒店工作人员提高工作效率,实现客房信息管理工作流程的系统化、规范化和自动化。
本系统采用Visual C#.NET程序来编写,同时一个系统的开发建立数据库是至关重要的,所以本课题数据库采用的是具有强大功能的关系数据库语言SQL Server2000,通过建立数据源使得Visual C#.NET 与后台的数据库连接来运行。
目录一、前景 (3)1.1课题背景 (3)1.2系统开发环境 (3)二、需求分析 (3)2.1 客房管理员对系统的需求 (3)2.2 前台工作人员对功能的需求 (4)2.3 数据流图构建 (4)2.4 数据字典构建 (5)三、系统功能总体设计 (9)四、数据库结构设计与实现 (10)4.1 实体关系(E-R)图设计 (10)4.2建立数据库模型 (11)4.3创建表 (12)4.4 创建触发器 (13)4.4创建视图 (14)4.5创建存储过程 (16)五、参考文献 (20)一、前景1.1课题背景随着社会的发展,酒店服务行业与国际市场接轨已是大势所趋,酒店是一个服务至上的行业,从客人的预定开始,到入住登记直至最后退房结账,每一步骤都要保持一致性。
随着计算机科学的飞速发展,给酒店计算机应用带来了蓬勃生机,计算机在酒店的应用中,已深入到各个部门,特别在信息处理方面,计算机成了最为重要的工具。
在酒店现代管理理论中,酒店管理系统是酒店经营必不可少的工具。
本酒店管理系统是针对酒店的客房管理,以方便管理酒店的客房状态、信息,为用户提供了简单、快速的服务,让用户及时了解酒店客房的运行状况、经营情况,从而提高酒店的服务质量,获得更好的经济效益1.2系统开发环境本系统采用单机版结构,前台开发工具是,后台数据库是Microsoft SQL Server 2000,软件要求:操作系统为Windows 2003或Windows XP或更高版本。
二、需求分析酒店在正常运营中需要对客房资源、顾客信息、客房结算信息进行管理,利用酒店客房管理系统及时了解各个环节中信息的变更,提高管理的效率。
系统开发的总体任务是实现客房信息的系统化、规范化和自动化。
主要包括客房管理员、前台工作人员对功能的需求。
2.1 客房管理员对系统的需求(1)用户信息维护浏览所有用户信息。
用户信息包括用户编号、用户角色、权限、密码、联系电话、电子邮件、所在部门等。
还需要添加新用户、删除过期用户、修改用户信息等功能。
(2)客房信息维护浏览所有客房信息。
客房信息包括房间编号、房间类型编号、房间位置、房间描述、房间状态等。
还需要添加新客房、删除房间、修改房间信息等功能。
(3)客房类型维护浏览所有客房类型信息。
客房类型包括类型编号、类型名称、价格、类型描述、是否配备空调等。
还需要添加新客房类型、删除过期类型、修改客房类型等功能。
(4)营业状况统计按照不同的需求,如按日期、房间号、房间类别等,对客房的营业额统计。
2.2 前台工作人员对功能的需求(1)客房信息的查询,包括空闲、已住、所有客房信息。
(2)订房信息的输入,包括客房号、顾客身份证号、订房日期等。
(3)结算信息功能的实现。
核对顾客信息后,点击“退房”系统自动显示结算金额、退房时间。
这一功能主要包括房间号、房间类型、顾客身份证号、订房日期、退房日期等信息。
2.3 数据流图构建数据流图(date flow diagram , DFD),是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。
数据流图是从数据的角度来描述一个系统,数据流图适合于宏观地分析一个组织业务概况。
图一:酒店客房管理系统第一层数据流图图二:合法性检查的二层数据流图图四:事务处理的二层数据流图2.4 数据字典构建数据字典的作用是在软件分析和设计的过程中给人提供关于数据的描述信息。
它主要是对数据流图中的数据流、处理逻辑、外部实体、数据存储和数据项等方面进行具体的定义。
数据流程图配以数据字典,就可以从图形和文字两个方面对系统的逻辑模型进行完整的描述。
(1)数据项定义数据元素是不可再分的数据单位,一般而言,包括如下内容:数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}。
其中,后两项定义了数据的完整性约束条件,用于数据校验。
具体内容,如表3.1所示。
表3.1 酒店客房管理系统数据项定义(2)数据流定义酒店客房管理系统数据流:数据流编号:D1数据流名称:登录信息数据流来源:用户数据流去向:管理系统数据流组成:I01+I02数据流编号:D2数据流名称:用户名数据流来源:用户数据流去向:管理系统数据流组成:I01数据流编号:D3数据流名称:权限数据流来源: 系统用户表数据流去向:管理系统数据流组成:I04数据流编号:D4数据流名称:角色数据流来源: 系统用户表数据流去向:管理系统数据流组成:I03数据流编号:D13数据流名称:用户密码数据流来源: 管理系统数据流去向:用户信息表数据流组成:I2数据流编号:D6数据流名称:预订信息数据流来源: 顾客数据流去向:管理系统数据流组成:I19+I22+I23+I24数据流编号:D7数据流名称:客房状态数据流来源: 客房状态表数据流去向:管理系统数据流组成:I30数据流编号:D8数据流名称:退房请求数据流来源: 顾客数据流去向:管理系统数据流组成:I22+I23+I19数据流编号:D9数据流名称:费用结算数据流来源: 管理系统数据流去向:顾客数据流组成:I15+I24+I25数据流编号:D10数据流名称:退房信息数据流来源: 顾客数据流去向:管理系统数据流组成:I25+I26数据流编号:D11数据流名称:客房信息变动数据流来源: 客房数据流去向:客房信息表数据流组成:I11+I19+I20+I21+I27数据流编号:D12数据流名称:客房类型变动数据流来源: 客房数据流去向:客房类型表数据流组成:I11—I18(3)数据存储的描述数据存储编号:F1数据存储名称:系统用户表简述:记录用户的信息。
数据存储组成:数据项I1—I10数据存储编号:F2数据存储名称:入住信息简述:存放顾客入住信息数据存储组成:顾客编号+顾客姓名+顾客身份证号+入住房间号+预订日期+退房时间+结算金额数据存储编号:F3数据存储名称:客房信息简述:记录客房信息数据存储组成:房间编号+房间类型+房间描述+房间状态编号+房间位置数据存储编号:F4数据存储名称:客房类型简述:存放客房类型信息数据存储组成:数据项I11—I18数据存储编号:F5数据存储名称:客房状态简述:存放客房状态数据存储组成:房间编号+房间状态三、系统功能总体设计在需求分析的基础上,对酒店客房管理系统所要实现的功能可以细分为以下几个模块:新用户注册、用户信息维护、客房信息维护、客房类型维护、客房营业状况统计、客房经营管理、个人密码修改。
系统用户可以分为两类权限:客房管理员、前台工作人员。
其中客房经营管理模块分为客房状况浏览、客房状况控制,主要用于客房的预订和退房结算处理。
系统功能图如图所示:四、数据库结构设计与实现由于在数据库设计是要同时考虑多方面的问题,也使设计工作变得十分复杂,我们需要使用数据库分析工具来实现。
在酒店客房管理系统数据库的设计中,我们使用了PowerDesigner来进行E-R图的设计和数据库模型的实现。
4.1 实体关系(E-R )图设计通过分析酒店客房管理系统的需求和系统功能,我们将酒店客房管理系统的实体分为用户、客房、客房状态、客房类型和入住客户。
本系统的E-R 图如下:客房状态房间状态编号房间当前空否房间清洁状况房间状态备注<pi>Variable characters (50)Byte (1)Variable characters (50)Variable characters (50)<M>Identifier_1<pi>入住信息客人姓名身份证号订房日期退房日期结账金额<pi><pi>Variable characters (50)Variable characters (19)Date & Time Date & Time Money (8)<M><M>Identifier_1<pi>客房房间编号房间位置房间描述<pi>Variable characters (50)Variable characters (50)Variable characters (200)<M>Identifier_1<pi>用户用户名用户密码用户权限用户角色用户姓名用户性别用户住址用户联系电话用户电子邮箱用户所在部门<pi>Variable characters (50)Variable characters (50)Integer Variable characters (50)Variable characters (50)Byte (1)Variable characters (50)Variable characters (50)Variable characters (50)Variable characters (50)<M><M><M>Identifier_1<pi>客房类型客房类型编号客房类型名称客房标准面积客房标准床位标准收费是否配备空调是否配备电视类型描述<pi>Variable characters (50)Variable characters (50)Float (8)Integer Money (8)Byte (1)Byte (1)Variable characters (200)<M>Identifier_1<pi>4.2建立数据库模型在E-R 图的基础上利用Powerdesigner 生成的数据库模型如下:客房状态房间状态编号房间当前空否房间清洁状况房间状态备注varchar(50) tinyintvarchar(50) varchar(50)<pk>入住信息客人姓名身份证号订房日期房间编号退房日期结账金额varchar(50)varchar(19)datetimevarchar(50)datetimemoney<pk><pk><fk>客房房间编号房间状态编号客房类型编号房间位置房间描述...varchar(50)varchar(50)varchar(50)varchar(50)varchar(200)<pk><fk2><fk1>用户用户名用户密码用户权限用户角色用户姓名用户性别用户住址用户联系电话用户电子邮箱用户所在部门...varchar(50)varchar(50)intvarchar(50)varchar(50)tinyintvarchar(50)varchar(50)varchar(50)varchar(50)<pk>客房类型客房类型编号客房类型名称客房标准面积客房标准床位标准收费是否配备空调是否配备电视类型描述varchar(50) varchar(50)float(8)intmoneytinyinttinyintvarchar(200)<pk>4.3创建表4.4 创建触发器create trigger insert_OccupyGuest on OccupyGuestfor insertas begindeclare @CusEndDate datetimedeclare @CusBookDate datetimeselect @CusBookDate=CusBookDate,@CusEndDate=CusEndDate from insertedif (@CusBookDate>@CusEndDate)rollback transactionend当退房时结账日期在预定日期前时触发create trigger insert_Users on Usersfor insertas begindeclare @sex tinyintselect @sex=UserSex from insertedif (@sex not in ('1','0'))rollback transactionend性别插入错误是触发,1表示男,0表示女4.4创建视图创建AllRoomList视图,显示所有房间的相关信息Create view AllRoomList(RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe,State)as selectRoomID,TypeName,RoomPosition,TypePrice,RoomDescribe,Statefrom RoomType,Room,RoomStatewhere Room.TypeID=RoomType.TypeID and Room.SID=RoomState.SID创建FreeRoomList视图显示空闲房间的相关信息,订房时使用create view FreeRoomList(RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe)as selectRoomID,TypeName,RoomPosition,TypePrice,RoomDescribefrom RoomType,Room,RoomStatewhere Room.TypeID=RoomType.TypeID andRoom.SID=RoomState.SID and RoomState.State=0创建RoomLiveDetail视图,显示已住房间的相关信息,退房时使用create view RoomLiveDetailRoomLiveDetail(RoomID,TypeName,CusBookDate,TypePrice,CusIDCard,CusName)As selectOccupyGuest.RoomID,TypeName,CusBookDate,TypePrice,CusIDCard,CusName from RoomType,Room,RoomState,OccupyGuestwhere Room.TypeID=RoomType.TypeID and OccupyGuest.CusPay=0 and Room.SID=RoomState.SID and RoomState.State=1and OccupyGuest.RoomID=Room.RoomID创建RoomDetail视图,显示所有客房的信息,对房间信息查询,更新时使用Create view RoomDetailList(RoomID,TypeName,RoomPosition,TypePrice,RoomDescribe)as select RoomID,TypeName,RoomPosition,TypePrice,RoomDescribefrom RoomType,Roomwhere Room.TypeID=RoomType.TypeIDcreate view RoomLiveCheckOut(RoomID,CusName,CusBookDate,CusIDCard,TypePrice)as select OccupyGuest.RoomID,CusName,CusBookDate,CusIDCard,TypePrice from OccupyGuest,Room,RoomTypewhere OccupyGuest.CusPay=0 and OccupyGuest.RoomID=Room.RoomID and Room.TypeID=RoomType.TypeID创建RoomLiveCheckOut视图,顾客退房时从视图获取信息,做修改create view RoomLiveCheckOut(RoomID,CusName,CusBookDate,CusIDCard,TypePrice)as select OccupyGuest.RoomID,CusName,CusBookDate,CusIDCard,TypePrice from OccupyGuest,Room,RoomTypewhere OccupyGuest.CusPay=0 and OccupyGuest.RoomID=Room.RoomID and Room.TypeID=RoomType.TypeID创建TypeDetailList视图,用于前台查询和更新操作create view TypeDetailList(TypeID,TypeName,TypeArea,TypeBedSum,TypePrice,TypeDescribe) as select TypeID,TypeName,TypeArea,TypeBedSum,TypePrice,TypeDescribe from RoomType创建视图UserDetailList,用于管理员进入系统时查询和更新用户信息create view UserDetailList(UserID,UserName,UserEmail,UserTel,UserRole)as select UserID,UserName,UserEmail,UserTel,UserRolefrom Users创建SellBill视图,用于查询客房的营业情况create view SellBill(RoomID,TypeName,CusBookDate,CusEndDate,CusPay)As selectOccupyGuest.RoomID,RoomType.TypeName,CusBookDate,CusEndDate,CusPay from RoomType,Room,OccupyGuestwhere Room.TypeID=RoomType.TypeIDand OccupyGuest.RoomID=Room.RoomID and CusPay>0create view TypeDetailList(TypeID,TypeName,TypeArea,TypeBedSum,TypePrice,TypeDescribe) as select TypeID,TypeName,TypeArea,TypeBedSum,TypePrice,TypeDescribe from RoomTypecreate view UserDetailList(UserID,UserName,UserEmail,UserTel,UserRole)as select UserID,UserName,UserEmail,UserTel,UserRolefrom Users4.5创建存储过程用户密码修改的存储过程create procedure [PasswordModify](@UserID [varchar](50), @UserPwd [varchar](50))as update [Users]set [UserPwd]=@UserPwdwhere UserID=@UserIDGO顾客退房结账时将结算金额,退房时间存入OccupyGuest表CREATE procedure [RoomCheckOut]( @RoomID [varchar](50),@CusIDCard [varchar](50),@CusEndDate [datetime], @CusPay [money])as update [HRM].[dbo].[OccupyGuest]set [CusEndDate]=@CusEndDate, [CusPay]=@CusPaywhere([RoomID]=@RoomID and [CusPay]=0 and [CusIDCard]=@CusIDCard )GO结账退房后将房间状态修改CREATE procedure [RoomStateUpdate2](@RoomID [varchar](50))as update [HRM].[dbo].[Room]set [SID]=0where RoomID=@RoomIDGO顾客订房时,将住房信息存入OccupyGuest表CREATE procedure [OrderRoom](@RoomID [varchar](50), @CusName [varchar](50),@CusIDCard [varchar](50), @CusBookDate [datetime] )as insert into [HRM].[dbo].[OccupyGuest]([RoomID],[CusName],[CusIDCard],[CusBookDate],[Cuspay] )values(@RoomID,@CusName,@CusIDCard,@CusBookDate,0)GO订房后对房间状态做修改CREATE procedure [RoomStateUpdate1](@RoomID [varchar](50))as update [HRM].[dbo].[Room]set [SID]=1where RoomID=@RoomIDGO添加房间信息时,将新的信息存入Room表create procedure [RoomAdd](@RoomID [varchar](50), @TypeID [varchar](50),@SID [varchar](50), @RoomPosition [varchar](50),@RoomDescribe [varchar](50))as insert into [HRM].[dbo].[Room]([RoomID],[TypeID],[SID],[RoomPosition],[RoomDescribe] )values(@RoomID,@TypeID,@SID, @RoomPosition,@RoomDescribe)GO在Room表中删除房间信息create procedure [GuestRoomUpdate](@RoomID [varchar](50),@TypeID [varchar](50),@SID [varchar](50),@RoomPosition [varchar](50), @RoomDescribe [varchar](50))as update [HRM].[dbo].[Room]set[TypeID]=@TypeID,[SID]=@SID,[RoomPosition]= @RoomPosition,[RoomDescribe]=@RoomDescribewhere ([RoomID]=@RoomID)GO添加新的房间类型到RoomType表create procedure [RoomTypeAdd](@TypeID [varchar](50),@TypeName [varchar](50),@TypeArea [real],@TypeBedSum [int],@TypeAirCondition [bit],@TypeTV [bit],@TypePrice [money],@TypeDescribe [varchar](50))as insert into [HRM].[dbo].[RoomType]([TypeID],[TypeName],[TypeArea],[TypeBedSum], [TypeAirCondition],[TypePrice], [TypeTV],[TypeDescribe])values(@TypeID,@TypeName,@TypeArea,@TypeBedSum,@TypeAirCondition,@TypePrice,@TypeTV,@TypeDescribe)GO房间类型有更新时,将新的信息插入RoomType表中create procedure [RoomTypeUpdate](@TypeID [varchar](50),@TypeName [varchar](50),@TypeArea [float] (8), @TypeBedSum [int],@TypeAirCondition [bit],@TypeTV [bit],@TypePrice [money],@TypeDescribe [varchar](50))as update [HRM].[dbo].[RoomType]set[TypeName]=@TypeName,[TypeArea]=@TypeArea,[TypeBedSum]=@TypeBedSum, [TypeAirCondition]=@TypeAirCondition,[TypePrice]=@TypePrice, [TypeTV]=@TypeTV,[TypeDescribe]=@TypeDescribewhere ([TypeID]=@TypeID)GO为用户信息表添加新的用户,或注册新的用户CREATE PROCEDURE [UserAdd](@UserID [varchar](50),@UserPwd [varchar](50),@UserPower [int], @UserSex [bit],@UserName [varchar](50), @UserAddress [varchar](50), @UserTel varchar](50), @UserEmail [varchar](50), @UserDept [varchar](50),@UserRole [varchar](50))AS INSERT INTO [HRM].[dbo].[Users]([UserID],[UserPwd],[UserPower],[UserSex],[UserName],[UserAddress],[UserTel],[UserEmail],[UserDept],[UserRole] )VALUES(@UserID,@UserPwd,@UserPower,@UserSex,@UserName,@UserAddress, @UserTel,@UserEmail,@UserDept,@UserRole )GO从用户信息表中删除用户CREATE procedure [UserDelete](@UserID [varchar](50))as delete [HRM].[dbo].[Users]where ([UserID]=@UserID)GO五、参考文献[1] 王珊,萨师煊. 数据库系统概论第四版 [M]. 高等教育出版社. 2006[2] 孙印杰. +SQL Server动态网站设计实例精解 [M]. 电子工业出版社. 2005(注:可编辑下载,若有不当之处,请指正,谢谢!)。