《酒店管理系统设计设计.doc》由会员分享,可在线阅读,更多相关《酒店管理系统设计设计.doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流酒店管理系统设计设计.精品文档. 酒店管理系统设计张平(德州学院物理系,山东德州253023)摘 要 本论文针对酒店管理系统的简单的功能进行设计,以求达到对酒店的简单管理。共分为三章。第一章主要阐述了该应用系统的设计思路,其中包括系统的功能目标、功能模块的设计图以及应用系统的开发工具;第二章主要讲述数据库设计过程,包括数据库的需求分析、概念结构设计以及逻辑结构设计;第三章是整个论文的主体部分,主要介绍各个主体模块的功能实现以及源程序代码。本论文的设计过程中,应用了图形界面的应用程序开发环境Power Builder 9.0以及SQL Serv
2、er 7 作为后台数据库支持,通过PB9.0 与数据库的连接完成了对数据库现存数据的操作,从而实现了对整个酒店系统的管理。关键词 酒店管理系统; 功能模块; 数据库; Power Builder 9.0; SQL; Server 7绪论在科技高速发展的今天,一切的商业行为都能跟计算机搭上边。这不仅仅是为了不落后于时代,不被主流所淘汰,更是为了更好的借助于计算机来实现更大的商业利益。随着更多的人接受电子商务,以及年轻一代享受电脑带来的方便、迅速,酒店行业也不例外的加入了电子商务时代的行列。现代化的酒店是集客房、餐饮、通讯、娱乐,商务文化及其他各种服务与设施为一体化的消费场所。酒店在正常的运营中需
3、要对客房资源、顾客信息、结算信息等进行管理,但是酒店组织庞大,服务项目多,信息量大,要想提高效率,降低成本,提高服务质量和管理水平,进而促进经济效益,必须借助计算机来进行现代化的信息管理。酒店管理系统正是为此而设计的。1 系统的功能框架设计1.1 功能目标 该酒店管理系统主要有两大功能模块,即:客房部管理和餐饮部管理。 1.1.1 客房管理 该模块主要用来实现客户登记,并打印入住单。根据客人的需求查询房间,进而选定房间,并填写客人信息,完成登记,最后打印入住单。要求实现查询客房状态(占用或空房)、显示客房类型(标准间、单人间、豪华间等)和查看已入住客户信息等功能。 1.1.2 餐饮管理餐饮管理
4、分菜单、点菜、结帐、报表、菜谱编辑等。下面列举一些最主要的功能: 菜单:列出常用菜名称、编号、所属类别、定价等内容。 点菜:记录点菜单、定价、台号、就餐人数、就餐人员类别、就餐时间、服务员等。结帐:记录结算信息。 1.1.3 系统维护 该功能模块为用户提供维护、设置功能。在相应的设置模块中用户可以自行设置系统的数据,设置完成以后该设置立刻会在系统中生效,并在下一次的使用中反映出来。在这里,数据维护非常重要的,它的作用是将系统中用户选择的数据进行初始化,一旦操作完成,系统中原有的数据将会被全部删除,所以需慎重使用。1.2 功能模块图酒店管理系统的功能模块如图1-1。 酒店管理系统 餐饮部 客房部
5、系统维护统计分析卡 就餐结帐修改登记就餐登记用户设置退房结帐预定房间开房登记图1-1 酒店管理系统功能模块图1.3 开发工具选择 1.3.1 前台开发工具的选择 该酒店管理系统前端开发工具为PowerBuilder9.0,PowerBuilder是一个图形界面的应用程序开发环境。在Client/Server结构的应用中,PowerBuilder具有描述多个数据库连接与检索的前端能力。尤其是PowerBuilder能从大多数流行的RDBMS中存取数据,且不管数据存放在什么地方。另外,各种应用程序又可以独立于RDBMS,因为PowerBuilder可以与数据库的标准操纵语言SQL(结构化查询语言)
6、进行通信。 PowerBuilder相对于其他应用程序开发环境来说,可使开发人员的工作更快、成本更低、质量更高、功能更强。PowerBuilder为应用开发提供了全面支持,可以概括为如下五点。 事件驱动应用程序 PowerScript 语言与函数 面向对象的编程 跨平台开发 与数据库的连接性 1.3.2 数据库OS平台的选择 该酒店管理系统选用sql server7作为后台数据库支持。2 数据库设计2.1 数据库需求分析根据对客房部的功能需求分析,画出系统的数据流图,如图2-1。开房登记 帐单打印 登记管理 退房结帐 报表统计登记查询图2-1 客房部数据流图 通过对酒店客房部管理的内容和数据流
7、程分析,设计的数据项和数据结构如下: 客房信息:包括的数据项有房间号、房间类型、房间状态。 客房登记信息:包含数据项有姓名、性别、职业、工作单位、联系电话、证件名称、 证件号码、住址、国籍、房间号、登记时间、预付金、折扣、备注。 客房结帐信息:包含数据项有房间号、姓名、性别、证件名称、证件号、国籍、退房时间、住宿天数、预付金、住宿费、其他费用、总费用、折扣、收银员、备注。 客房预定信息:包含数据项有房间号、预定人姓名、证件名称、证件号码、押金、联系电话、操作员、备注。 根据对餐饮部的功能需求分析,画出系统的数据流图,如图2-1。就餐登记 帐单打印 登记管理 就餐结帐 报表统计就餐查询图2-2
8、客房部数据流图餐桌信息:桌号、状态。菜单信息:包括的数据项有菜名、所属类别、所属子类、价格、折扣、实收价格、备注。菜统计:菜名、份数、金额、桌号、就餐时间、是否结帐。就餐结帐:桌号、就餐人数、就餐时间、结帐时间、服务员名、就餐费、其他费用、总费用、支付方式、收银员、备注。定餐信息:桌号、定餐人姓名、联系电话、定餐时间、就餐时间、备注。2.2 数据库概念结构设计根据上面设计,规划出实体ER图有:客房实体、客户实体、开房登记实体、退房结帐实体。 房间信息 类型 状态 价格图2-3 客房实体ER图 客户信息 联系方式 个人信息 客户号 姓名 单位信息图2-4 客户实体ER图 开房登记信息 价格 日期
9、 房间号图2-5 开房登记实体ER图 退房结帐 结帐日期 费用 房间号 折扣图2-6 退房结帐实体ER图 菜单信息 菜名 类别 价格 折扣图2-7 菜单信息实体ER图 就餐结帐 结帐日间 桌号 费用图2-8 就餐结帐实体ER图 菜统计 桌号 菜名 份数 金额图2-9 菜统计实体ER图 定餐信息 桌号 就餐时间 定餐人姓名图2-10 定餐信息实体ER图2.3 数据库逻辑结构设计表2-1 客房类型(kf_leixing)字段名字段类型字段长度可否为空 说明Kf_leixing varchar10Not null 客房类型(主键)Kf_jageNumeric8.2Null 客房价格Kf_mzzong
10、shuintegerNull 每种客房总数Kf_beizhuvarchar100Null 备注表2-2 房间信息(kf_xinxi)字段名字段类型字段长度可否为空 说明Kf_noVarchar6Not null 房间号(主键)Kf_leixingVarchar10Null 客房类型(外键)Kf_kongfouVarchar2Null 是否空闲表2-3 客房登记信息(kf_dengjixinxi)字段名字段类型字段长度可否为空 说明NameVarchar10Not null 登记人姓名SexVarchar2Null 登记人性别ZhiyeVarchar40Null 职业GzdanweiVarcha
11、r40Null 工作单位TelVarchar12Null 联系电话ZhengjiannameVarchar10Null 证件名称ZhengjianhaoVarchar20Null 证件号码ZhuzhiVarchar40Null 住址GuojiVarchar10Null 国籍Kf_noVarchar6Null房间号(外键)DengjishijianTimestampNull 登记时间YufujinNumeric6.2Null预付金zhifufangshiVarchar20Null 支付方式(外键)zhekouNumeric2.1Null 折扣beizhuVarchar100Null 备注表2-4
12、 客房预定(kf_yuding)字段名字段类型字段长度可否为空 说明IdVarchar10Not null Id号Kf_noVarchar3Null 客房号NameVarchar10Null 预定人姓名ZhengjiannameVarchar20Null 证件名ZhengjianhaoVarchar20Null 证件号YajinNumeric9Null 押金LianxitelVarchar12Null 联系电话CaozuoyuanVarchar10Null 操作员beizhuVarchar512Null 备注表2-5 客房结帐(kf_jiezhang)字段名字段类型字段长度可否为空 说明Kf_
13、noVarchar6Not null 房间号(主键)NameVarchar10Not null 姓名SexVarchar2Null 性别ZhengjiannameVarchar10Null 证件名称ZhengjianhaoVarchar20Null 证件号GuojiVarchar10Null 国籍TuifangdateTimestampNull 退房时间YufujinNumeric6.2Null 预付金ZhekouNumeric2.1Null 折扣Zhusutianshuinteger3Null 住宿天数ZhusufeiNumeric6.2Null 住宿费QitafeiNumeric6.2Nu
14、ll 其他费用ZongfeiNumeric6.2Null总费用XujiaofeiNumeric6.2Null 续交费用ShouyinyuanVarchar10Null 收银员beizhuVarchar100Null 备注表2-6 菜单信息(caidan1)字段名字段类型字段长度可否为空 说明cainameVarchar10Not null 菜名classVarchar20Null 所属类别subclassVarchar20Null 所属子类JiageNumeric11.2Null 价格ZhekouNumeric4.2Null折扣ShishoujiageNumeric11.2Null 实收价格b
15、eizhuVarchar512Null 备注表2-7 就餐结帐(jc_jiezhang)字段名字段类型字段长度可否为空 说明zhuohaovarchar5Not null 桌号jiucanrenshuint2Null 就餐人数jiucanshijianTimestampNull 就餐时间jiezhangshijianTimestampNull 结帐时间Fuwuyuan_noVarchar10Null 服务员名jiucanfeiNumeric9.2Null 就餐费QitafeiNumeric9.2Null 其他费用ZongfeiyongNumeric9.2Null 总费用zhifufangshi
16、Varchar20Null 支付方式(外键)ShouyinyuanVarchar10Null 收银员BeizhuVarchar1000Null 备注表2-8 定餐信息(dc_xinxi)字段名字段类型字段长度可否为空 说明Zhu_noVarchar5Not null 桌号NameVarchar10Null 定餐人姓名telVarchar12Null 联系电话DizhiVarchar60Null 地址DctimeTimestampNull 定餐时间JctimeTimestampNull 就餐时间Beizhuvarchar512Null 备注表2-9 餐桌信息(canzhuoinfo)字段名字段类
17、型字段长度可否为空 说明Zhuohaovarchar5Not null 桌号(主键)zhuangtaiVarchar10Null 状态表2-10 菜统计(cai_tongji)字段名字段类型字段长度可否为空 说明IdVarchar10Not null (主键)CaimingVarchar30Null 菜名FenshuIntNull 份数JineNumeric9Null 金额ZhuohaoVarchar5Null 桌号JiucantimeDatetimeNull 就餐时间shifoujiezhangvarchar4Null 是否结帐表2-11 就餐登记字段名字段类型字段长度可否为空 说明idva
18、rchar5Not null id号zhuohaoVarchar5Not null 桌号Jiucanren_nameVarchar10Null 姓名renshuVarchar2Null人数jiucantimedatetimeNull 就餐时间FuwuyuanVarchar10Null 服务员姓名3 系统实现3.1 客房登记模块 该系统模块完成的功能主要为用户登记并打印入住单发票,是客房管理系统的重要模块之一。展现给用户的两个界面,即两个窗口分别为w_kf_dengji和w_kf_dengji_ruzhudan和以上窗口相关连还有三个数据窗口和四个表,分别为dw_kf_all,dw_kf_zhu
19、angtai,dw_kf_rzxx;kf_dengjixinxi,kf_leixing,kf_xinxi,kf_jiezhang。其实现登记功能的界面如图3-1所示。图3-1 实现登记功能的界面 该界面主要分为两大区域,即客房状态区和用户注册区。在客房状态区的左上角的下拉列表框中显示的是所有可供选择的房间的类别,根据住客需求来选择某类房间时,在下拉菜单选项中“空房间”,即可进行检索。检索结果在左边的下半部(数据窗口dw_1)中显示出来,其中包括房号,类别,价格。具体实现代码如下:if ddlb_1.text=所有可供 thenddlb_1.text=所有可供dw_1.dataobject=dw
20、_kf_alldw_1.settransobject(sqlca)dw_1.retrieve(空房间)dw_1.selectrow(0,false)elsedw_1.dataobject=dw_kf_zhuangtaidw_1.settransobject(sqlca)dw_1.retrieve(ddlb_1.text,空房间)dw_1.selectrow(0,false)end if 在dw_1中双击某一行时,该行相关信息将显示在该窗口的右半部分,即用户注册区。实现代码为:sle_1.text=dw_1.GetItemstring(dw_1.getrow(),1)sle_2.text=dw_
21、1.GetItemstring(dw_1.getrow(),2)sle_3.text=string(dw_1.GetItemnumber(dw_1.getrow(),3) 当成功的完成了用户信息的注册后,即点击cb_1按扭则具有该用户信息的空房间记录将被修改为入住房,则在下一次检索空房间记录时,此房间信息将不被显示。该过程用insert语句将用户的信息插入到表kf_dengjixinxi和kf_jiezhang中。具体实现代码如下:select count(id) into :num from kf_dengjixinxi;bb=string(num+1)insert into kf_deng
22、jixinxivalues (:bb,:sle_9.text,:sle_8.text,:sle_6.text,:sle_5.text,:sle_7.text,:ddlb_2.text,:sle_12.text,:sle_15.text,:sle_14.text,:sle_1.text,:dt,:cc,:ddlb_3.text,:dd,:mle_1.text,:sle_16.text,否);update kf_xinxi set kf_zhuangtai=入住房 where kf_no=:sle_1.text;select count(id) into :num1 from kf_jiezhan
23、g;jz_num=string(num1+1)insert into kf_jiezhang (id,kf_no,name,sex,zhengjianname,zhengjianhao,guoji,yufujin,shouyinyuan,beizhu,shifoujiezhang)values (:jz_num,:sle_1.text,:sle_9.text,:sle_8.text,:ddlb_2.text,:sle_12.text,:sle_14.text,:cc,:sle_16.text,:mle_1.text,否);commit;dw_1.dataobject=dw_kf_alldw_1
24、.settransobject(sqlca)dw_1.retrieve(空房间)sle_4.setfocus()sle_13.text=string(datetime(today(),now()此窗口中用游标实现数据窗口取数据的代码为:string chint shu,i DECLARE kf_lx CURSOR FOR SELECT kf_leixing FROM kf_leixing;select count(kf_leixing) into :shu from kf_leixing; open kf_lx;for i=1 to shufetch kf_lx into :ch ;ddlb_
25、1.additem(ch)nextclose kf_lx;ddlb_1.text=所有可供dw_1.dataobject=dw_kf_alldw_1.settransobject(sqlca)dw_1.retrieve(空房间)dw_1.selectrow(0,false)if dw_1.rowcount()1 thenmessagebox(,暂时没有空房间!)cb_1.enabled=falseelsesle_4.setfocus()sle_13.text=string(datetime(today(),now()end if当点击cb_2(代码为:open(w_kf_dengji_ruzh
26、udan))时显示的是客房入住单的界面,如图3-2。图3-2 客房入住单界面此窗口中实现数据窗口取数据代码为:dw_1.settransobject(sqlca)dw_1.retrieve(rzxx_kfno1,否)完成的功能为打印发票单据。3.2 就餐登记模块客人在就餐前,一定要定下菜,主食和酒水等,即就餐登记,所以该系统包含了就餐登记,也就是开单的功能。该功能所涉及的数据库表为:菜单信息表(candan1)、菜统计表(cai_tongji)。 实现该功能的第一个界面如图3-3。图3-3 第一个界面 该界面主要分两个区域,左边是桌号图标显示区,右边是桌号图标调整区。具体操作过程为:选中一个桌
27、号后,点击确定按钮即可显示该餐桌的详细信息,是否可用。 确定的代码如下:string zhuohao,zhuoztcurrentbnum=integer(left(currentitem.label,3)zhuohao=string(currentbnum) SELECT canzhuoinfo.zhuangtai INTO :zhuozt FROM canzhuoinfo WHERE canzhuoinfo.zhuohao = :zhuohao; if zhuozt=结帐 then UPDATE canzhuoinfo SET zhuangtai = 开单 WHERE canzhuoinfo
28、.zhuohao = :zhuohao; open(w_cy_kaidan)close(parent)elsemessagebox(抱歉,对不起,此桌已被占用!)end if 实现该功能的第二个界面如图3-4。图3-4 第二个界面 该界面主要分两个区域,左边(数据窗口dw_1)显示所有菜的名称、价格、折扣。右边(数据窗口dw_2)显示桌的详细信息,其中包括该桌所点的所有菜的名称、数量、金额以及合计多少钱等。 要添加菜,只需双击左下方的数据窗口中相应的菜即可,或选中该菜,单击添加按钮即可添加。要删除菜,只需在右侧窗口中选中要删除的菜,单击删除按钮即可。 该功能实现的具体思路是:在窗口打开代码中检
29、索出数据窗口dw_1、dw_2的数据,在窗口打开后就将菜谱信息显示出来。添加菜时,首先检索表cai_tongji中是否有要添加的菜的信息,如果有,用update语句将该菜的份数加一,金额增加相应的数目,如果没有则在cai_tongji表中用insert语句插入该菜的信息,包括菜的名称、数量、金额、所属桌号等。然后数据窗口dw_2重新检索数据,即所添加的菜显示在数据窗口dw_2中。 在下拉列表框中使用了游标技术,代码如下: string chint shu,i DECLARE cai_subclass CURSOR FOR SELECT subclass FROM cai_subclass WH
30、ERE cai_subclass.suoshuclass = :this.text; SELECT count(subclass) into :shu FROM cai_subclass WHERE cai_subclass.suoshuclass = :this.text; open cai_subclass;/ do while cai_subclass -1 ddlb_2.reset()ddlb_2.additem(全部)ddlb_2.text=全部for i=1 to shufetch cai_subclass into :ch ;ddlb_2.additem(ch)next/loop
31、close cai_subclass;if this.text=全部 thendw_1.dataobject=dw_cai_xinxidw_1.settransobject(sqlca)dw_1.retrieve()elsedw_1.dataobject=dw_cai_xinxi1dw_1.settransobject(sqlca)dw_1.retrieve(ddlb_1.text)end if 在此下拉列表框中,用户可以对各种菜,主食,酒水等分类进行选择,然后再在另一个下拉列表框中对它们的子类进行选择。例如:在第一个下拉列表框中选择了“主食”,就可以在第二个下拉列表框中选择“馒头”,或是“米
32、饭”等。选中的菜显示在第一个数据窗口中。在第一个数据窗口中,有选自表caidan1的caiming,jiage,zhekou等字段。在第二个数据窗口中,有选自表cai_tongji的caiming,jine,Fenshu,zhuohao等字段。第二个数据窗口也可实现合计的功能;用“退出”实现返回。 3.3 就餐登记修改模块 3.3.1 功能实现 考虑客人就餐时,随时都可能加菜、退菜和换菜,所以该系统包含了修改就餐登记的功能。该功能所涉及的数据库表为:餐桌信息表(canzhuoinfo)、菜统计表(cai_tongji)。实现该功能的界面如图3-5。图3-5 实现餐桌信息表、菜统计表功能的界面
33、该界面主要分三个区域,左上角显示所有未结帐的桌号(数据窗口dw_3),左边的下半部显示菜谱(数据窗口dw_1),右侧显示要修改信息的桌的详细信息(数据窗口dw_2),其中包括该桌所点的所有菜的名称、数量、金额以及合计多少钱等。 具体操作过程为:先在未结帐的桌号中选择要修改信息的桌号,双击该桌号,则该桌的点菜的详细信息就显示在右侧的数据窗口中。要添加菜,只需双击左下方的数据窗口中相应的菜即可,或选中该菜,单击添加按钮即可添加。要删除菜,只需在右侧窗口中选中要删除的菜,单击删除按钮即可。 该功能实现的具体思路是:在窗口打开的代码中检索出数据窗口dw_1、dw_3的数据,在窗口打开后就将未结帐的桌号
34、以及菜谱信息显示出来。窗口打开后,在数据窗口dw_3的双击事件中,将选中桌的菜的详细信息显示在数据窗口dw_2中。其过程为:首先取选中桌的桌号,然后数据窗口dw_2以所取桌号为检索参数进行检索,即将该桌的菜的详细信息显示在数据窗口dw_2中。 添加时,首先检索表cai_tongji中是否有要添加的菜的信息,如果有,用update语句将该菜的份数加一,金额增加相应的数目,如果没有则在cai_tongji表中用insert语句插入该菜的信息,包括菜的名称,数量、金额、所属桌号等。然后数据窗口dw_2重新检索数据,即所添加的菜显示在数据窗口dw_2中。 3.1.2 程序代码具体实现的代码如下:zh=
35、dw_3.getitemstring(dw_3.getrow(),1)cai=dw_1.getitemstring(dw_1.getrow(),1)SELECT count(cai_tongji.id) INTO :shu FROM cai_tongji;shu1=string(shu+1)SELECT caidan1.jiage,zhekou INTO :jg,:zhk FROM caidan1 WHERE caidan1.cainame = :cai; SELECT count(cai_tongji.caiming)INTO :fshFROM cai_tongji WHERE ( cai_
36、tongji.caiming = :cai ) AND ( cai_tongji.zhuohao = :zh ) AND ( cai_tongji.shifoujiezhang = 否 );SELECT fenshuINTO :fennumFROM cai_tongji WHERE ( cai_tongji.caiming = :cai ) AND ( cai_tongji.zhuohao = :zh ) AND ( cai_tongji.shifoujiezhang = 否 );je=jg*(fennum+1)*zhkif fsh= 1 thenUPDATE cai_tongji SET j
37、ine = :je,fenshu = fenshu+ 1 where ( cai_tongji.caiming = :cai ) AND ( cai_tongji.zhuohao = :zh ) AND ( cai_tongji.shifoujiezhang = 否 );commit;else INSERT INTO cai_tongji ( id, caiming, fenshu, jine, zhuohao, jiucantime, shifoujiezhang) VALUES ( :shu1, :cai, 1, :je, :zh, :kaidandt, 否);commit;end ifd
38、w_2.settransobject(sqlca)dw_2.retrieve(zh,否) 删除时,首先检索表cai_tongji表中该菜的份数为多少,如果份数大于1,将份数更新为原份数减1,如果份数等于1,则删除该菜的信息。然后数据窗口2重新检索数据,即删除的菜在菜的详细信息中也没有了。具体实现的代码如下:if dw_2.getrow()0 thencai=dw_2.getitemstring(dw_2.getrow(),1)zh=dw_2.getitemstring(dw_2.getrow(),4)SELECT fenshu INTO :fennum FROM cai_tongji WHERE ( cai_tongji.caiming = :cai ) AND ( cai_tongji.zhuohao = :zh ) AND ( cai_tongji.shifoujiezhang = 否 );if fennum1 thenSELECT caidan1.jiage INTO :jg FROM caidan1 WHERE caidan1.cainame = :cai;je=jg*(fennum - 1)UPDATE cai_tongji SET jine = :je, fenshu = fenshu- 1 where ( cai_tongji.caiming = :cai )