1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 客房管理系统 学 院 专 业 班 级 学 号 姓 名 指导教师 教师职称 年 月 日 摘要 【摘要】 随着改革开放步伐的加快, 中国服务业取得了巨大的发展。而宾馆是中国的改革开放过程中起步最早的、 开拓发展最快、 收效最为明显、 市场化程度高的服务行业之一。而随着信息科技的发展, 传统的管理模式逐渐被信息化及数字化的管理模式所取代, 如何得用先进的管理手段,
2、提 高宾馆的管理水平, 已成为宾馆行业的当务之急。面对信息时代的机遇和挑战, 得用科技手段提高企业管理无疑是一条行之有效的途径。 客房管理系统的开发充分利用了信息技术提高了宾馆客房的管理水平、 服务水平。系统实现了客房预定、 住宿登记、 宿费提醒、 追加押金、 调房登记、 退房结帐、 挂帐、 查询统计等功能。其中宿费提醒能够在住宿费超过押金时预警, 提示前台要客人补交押金, 该功能可明显提高对住宿人员住宿的有效管理。将动态实时的住宿登记、 客房调整、 销售报表、 追加押金等有机地联系在一起, 对宾馆客房进行全方位的管理。 【关键词】客房管理系统 目录 摘要 2 目录 3 0 引言
3、 1 1 需求分析 1 2 总体设计 1 2.1 项目规划 1 2.2 系统功能结构 1 2.3 设计目标 2 3 系统设计 2 3.1 开发及运行环境 2 4 主要功能模块设计 2 4.1 程序主界面的设计 2 4.2 系统登录界面设计 3 4.3 客房信息设计 5 4.4 退宿结帐设计 12 4.5 住宿查询设计 18 附录A 参考文献 20 附录B 数据表 21 附录C 文件架构 25 0 引言 随着中国经济的迅速发展, 人们的生活水平有了明显的提高, 假日经济和旅游经济已经成为人们的消费热点。各地也把旅游
4、也当作本地经济发展的重要支柱之一, 从而促进了宾馆酒店业的发展。同时, 随着宾馆酒店越来越多, 人们的要求越来越高, 宾馆酒店的竞争也越来越激烈。如何在激烈的竞争中生存发展, 是每个宾馆酒店必须面临的问题。对宾馆经营状况起决定作用的是宾馆的服务管理水平。如何利用先进的管理手段, 提高宾馆的管理水平, 已成为宾馆酒店也发展的当务之急。 客房管理系统的开发能够帮助系统管理员完成日常的客人入住及客人的退房信息的管理及查询等工作, 大大提高了的工作效率。虽然计算机管理并不是宾馆管理走向成功的关键元素, 但它能够最大限度地发挥准确、 快捷、 高效等作用, 对宾馆的服务管理提供有力的支持。 1 需求
5、分析 根据该宾馆的具体情况, 系统主要的功能包括: l 前台管理: ”客房预定”、 ”住宿登记”、 ”调房登记”、 ”追加押金”、 ”退房结帐”。 l 客房管理: ”客房查询”、 ”房态查看”。 l 查询统计: ”预定房查询”、 ”住宿查询”、 ”退宿查询”、 ”宿费提醒”。 l 挂帐管理: ”挂帐管理”、 ”客人结帐”。 l 基础信息设置: ”客房信息”、 ”客房类型信息”、 ”员工信息”、 ”挂帐单位信息”。 l 系统初始化: ”本单位定义”、 ”业务部门定义”、 ”操作员管理”、 ”权限设置”。 系统维护: ”系统初始化”、 ”数据备份”、 ”数据恢复”。 2 总体
6、设计 2.1 项目规划 客房管理系统主要是针对中小型的宾馆、 酒店开发的客房管理系统, 系统由前台管理、 客房管理、 查询统计、 挂帐管理、 基础信息设置、 系统初始化、 系统维护和帮助等几个功能模块组成, 规划系统功能模块如下: q 前台管理 前台管理: 客房预定、 住宿登记、 调房登记、 追加押金、 退宿结帐和退出。 q 客房管理 客房管理: 客房查询和房态查看。 q 查询统计 查询统计: 预定房查询、 住宿查询、 退宿查询、 宿费提醒。 q 挂帐管理 挂帐管理: 挂帐查询和客人结帐。 q 基础信息设置 基础信息设置: 客房信息、 客房类型信息、 员工信息和帐挂
7、单位信息。 q 系统初始化 系统初始化: 本单位定义、 业务部分定义、 操作员管理和权限设置。 q 系统维护 系统维护: 系统初始化、 数据备份和数据恢复。 q 帮助 帮助: 帮助和关于本软件2部分。 2.2 系统功能结构 本系统共分7大部分、 24个完整的功能模块。系统结构图如图1所示。 图1 客房管理系统结构图 2.3 设计目标 本系统主要是针对中小型的宾馆、 酒店开发的的客房管理系统, 主要实现能够下目标: q 界面设计美观友好。 q 操作员能够随时修改自己的口令, 而且不同的操作员设置不同的操作权限, 以增强系统的安全性。 q 数据保密性强, 为每
8、个用户设置相应的权限级别。 q 信息查询灵活、 方便、 快捷, 数据存储安全可靠。 q 能够实现数据备份和数据恢复, 保证数据安全。 q 系统运行稳定, 安全可靠。 3 系统设计 3.1 开发及运行环境 系统开发平台: Microsoft Visual FoxPro 6.0。 运行平台: Windows XP/ Windows / Windows 。 分辨率: 最佳效果1024×768像素2 数据库设计。 1.数据库概要说明 数据库在一个管理系统中占居非常重要的地位, 数据库结构设计的好坏将直接影响系统的效率和实现的效果。本系统采用的是Visual FoxPro自
9、带的数据库, 数据库文件名为Roommanage。 2.主要数据表的结构 数据库中的数据表请参见附录B。 4 主要功能模块设计 4.1 程序主界面的设计 程序启动后, 在系统登录界面验证操作员密码后, 将进入主程序界面。经过主程序界面能够执行相应权限的操作, 而且经过选择主界面的菜单, 来调用相应程序并进行相应操作。主程序界面如图2所示。 图2 程序主界面 1.表单设计 ( 1) 创立一个标准项目, 名称为客房管理系统, 在该项目中添加一个新表单, 名称为Fdesktop。 ( 2) 在表单中插入名称为Vcxmain的ToolBar类, 在类中添加Command控件
10、 Image控件。 2.代码设计 在”客房预定”按钮的Click事件中添加以下代码: do form kfgl\form\kfyd 在”住宿登记”按钮的Click事件中添加以下代码: do form kfgl\form\zsdj 在”退宿结帐”按钮的Click事件中添加以下代码: do form kfgl\form\tsjz 在”住宿查询”按钮的Click事件中添加以下代码: do form kfgl\form\zsquery 在”客房查询”按钮的Click事件中添加以下代码: do form kfgl\form\kfquery 在”房态查看”按钮的Clic
11、k事件中添加以下代码: do form kfgl\form\fangtaiquery 在”宿费提醒”按钮的Click事件中添加以下代码: do form kfgl\form\sftx 在”客房信息”按钮的Click事件中添加以下代码: do form kfgl\form\kfmanage 根据用户的使用权限, 设置按钮是否有效。在vcxmain1类的Init事件中添加以下代码: if purview>4 or pqtgl=.f. this.parent.vcxmain1.kfyd.enabled=.f. this.parent.vcxmain1.zsdj.
12、enabled=.f. this.parent.vcxmain1.tsjz.enabled=.f. else this.parent.vcxmain1.kfyd.enabled=.t. this.parent.vcxmain1.zsdj.enabled=.t. this.parent.vcxmain1.tsjz.enabled=.t. endif if purview>4 OR pcxtj=.f. this.parent.vcxmain1.zscx.enabled=.f. this.parent.vcxmain1.sftx.enabled=
13、f. else this.parent.vcxmain1.zscx.enabled=.t. this.parent.vcxmain1.sftx.enabled=.t. endif if purview>4 OR pkfgl=.f. this.parent.vcxmain1.kfcx.enabled=.f. this.parent.vcxmain1.ftck.enabled=.f. else this.parent.vcxmain1.kfcx.enabled=.t. this.parent.vcxmain1.ftck.enabled
14、t. endif if purview>4 OR pjcinfo=.f. this.parent.vcxmain1.kfinfo.enabled=.f. else this.parent.vcxmain1.kfinfo.enabled=.t. endif 在 vcxmain1类的”退出”按钮的Click事件中添加以下代码: quit 4.2 系统登录界面设计 用户进入系统前, 必须经过系统登录进入主程序界面, 系统登录界面主要用于确认用户的身份及使用权限, 而且可对系统信息起到保密作用。系统登录界面如图3所示。 图3 系统登录界面运行结果 1.
15、表单设计 ( 1) 在客房管理系统项目中, 添加一个新表单, 名称为Admin。 ( 2) 在表单中添加Combo控件、 Text控件、 Label控件、 Command控件、 Image控件。 ( 3) 重要控件属性如表1所示。 表1 重要控件的重要属性及值 控件名 属性 值 Combo1 RowSource RowSourceType tabpurview.操作员姓名 6-字段 Text1 PasswordChar * 2.代码设计 定义全局变量cn, manager, cn存放输入操作员或密码的次数,
16、 当cn大于3时, 将自动退出系统。manager存放操作员姓名, 在系统中应用到操作员姓名时, 系统自动添加。 在表单的Init事件中添加以下代码: public cn ,manager &&定义全局变量 cn=0 &&给全局变量赋初值 在表单的Resize事件中添加根据用户选择操作员所拥有的权限级别为全局变量赋值的代码。 purview=val(alltrim(tabpurview.权限级别)) pqtgl=tabpurview.前台管理 pkfgl=tabpurview.客房管理 pcxtj=tabpurview.查询统计 pgzgl=tabpurvie
17、w.挂帐管理 pjcinfo=tabpurview.基础信息设置 psyscsh=tabpurview.系统初始化 psyswh=tabpurview.系统维护 在”确定”按钮的Click事件中添加以下代码实现判断操作员和密码是否正确的功能。如果操作员或密码不正确, 将提示重新输入, 三次后仍不正确, 系统将自动退出。 public manager &&定义全局变量 manager=alltrim(bo1.value) use kfgl\database\tabpurview &&打开数据表 cname=alltrim(thisform.Combo1.value)
18、 ppassword=alltrim(thisform.text1.value) set order to 操作员姓名 &&指定操作员姓名为控制索引 if empty(操作员姓名) thisform.resize &&执行表单的Resize事件 manager=alltrim(bo1.displayvalue) store .t.to pqtgl,pkfgl,pcxtj,pgzgl,pjcinfo,psyscsh,psyswh do form form\fdesktop &&调入表单 thisform.release els
19、e seek cname &&快速查询 set exact on &&设置字符精确比较 if alltrim(tabpurview.操作员姓名)!=cname cn=cn+1 cMessagetitle='系统登录' cMessagetext='操作员错误, 请重新输入! ' nDialogtype=4+32 nanswer=messagebox(cmessagetext,ndialogtype,cmessagetitle) do case case nanswer=6 &&选择”是”时的操作 bo1.value='
20、' bo1.setfocus case nanswer=7 &&选择”否”时的操作 messagebox('不要乱来! ',48, '系统登录') thisform.release &&释放表单 endcase if cn=3 thisform.release endif else if alltrim(tabpurview.密码)!=ppassword cn=cn+1 cmessagetitle='系统登录' cmessagetext='密码错误, 请重新输入! ' ndialogtype=4+32 nanswer=message
21、box(cmessagetext,ndialogtype,cmessagetitle) do case case nanswer=6 &&当用户单击”是”按钮 thisform.text1.value='' thisform.text1.setfocus case nanswer=7 messagebox('不要乱来! ',48, '系统登录') thisform.release endcase
22、 if cn=3 thisform.release endif else thisform.resize &&执行表单的Resize事件 manager=alltrim(bo1.displayvalue) do form form\fdesktop thisform.release endif endif endif set exact off &&设置字符非精确比较 在”取消”按钮的Click事件
23、中添加以下代码: cmessagetitle='系统登录' cmessagetext='真的想要退出吗? ' nDialogtype=4+32 nanswer=messagebox(cMessagetext,nDialogtype,cMessagetitle) if nanswer=6 thisform.release &&释放表单 endif 4.3 客房信息设计 用户进入系统后, 单击主菜单基础信息设置下的客房信息子菜单选项, 进入客房信息界面时能够经过查询条件查询客房基本信息, 并以文本框和列表两种方式显示客房信息。客房信息表单运行结果如图4所示。
24、图4 客房管理表单运行结果 1.表单设计 ( 1) 在客房管理系统项目中, 添加一个新表单, 名称为Kfmanage。 ( 2) 在表单中添加Label控件、 Combo控件、 Text控件、 Edit控件、 Command控件、 Commandgroup控件、 PageFrame控件和Grid控件。 ( 3) 重要控件属性如表2所示。 表2 重要控件的重要属性及值 控件名 属性 值 Combo1 DisplayValue RowSource RowSourceType 房间号 房间号,房间类型,房态 1-值 C
25、ombo2 RowSource RowSourceType Style All,like,=,>,< 1-值 2-下拉列表框 2.代码设计 在表单的Load事件中添加以下代码: public cx,l &&定义全局变量 cx=0 l=.f. 在表单的Resize事件中添加以下代码: thisform.pageframe1.page1.text1.value=tabkfinfo.房间号 &&赋值给Text1等 bo1.value=tabkfinfo.房间类型 thisform.pageframe1.page1.text3.value=tabkfin
26、fo.价格 bo2.value=tabkfinfo.房态 thisform.pageframe1.page1.text5.value=tabkfinfo.营业时间 thisform.pageframe1.page1.text6.value=tabkfinfo.备注 thisform.pageframe1.page1.text7.value=tabkfinfo.使用设置 thisform.pageframe1.page1.edit1.value=tabkfinfo.配置 L是全局变量, 当L为.T.或.F.时, 这个值会集体赋给相关控件的Enabled属性。这种写法其实将Init事件
27、当成一个设相关控件是否有效的函数。在表单的Init事件中添加以下代码: store l to bo1.enabled=l bo2.enabled=l thisform.pageframe1.page1.text5.enabled=l thisform.pageframe1.page1.text6.enabled=l thisform.pageframe1.page1.text7.enabled=l thisform.pageframe1.page1.edit1.enabled=l 在combo2控件的InteractiveChange事件中添加以下代码: if alltr
28、im(bo2.value)="All" thisform.text1.value='' thisform.text1.enabled=.f. else thisform.text1.enabled=.t. endif 在”查询”按钮的Click事件中添加能够根据用户选择的条件查找记录的代码。 cx=0 cif=alltrim(bo1.displayvalue) ccif=alltrim(bo2.displayvalue) ctext=alltrim(thisform.text1.value) if empty(ccif) messagebox('
29、请输入查询条件! ',48,'操作失败! ') bo2.setfocus &&Combo2获得焦点 else if empty(ctext) if ccif!="All" messagebox('请输入查询条件! ',48,'操作失败! ') thisform.text1.setfocus else select *; &&选择所有字段 from roommanage!tabkfinfo; &&指定查询的数据库文件
30、 order by tabkfinfo.房间号; &&查询结果升序排序 into cursor lindeping thisform.pageframe1.page2.grid1.recordsource='lindeping' &&赋数据源 lkfnumber=lindeping.房间号 select tabkfinfo set order to 房间号 &&指定控制索引文件 seek lkfnumber
31、 &&快速查询 thisform.resize &&执行表单的Resize事件 thisform.pageframe1.page1.text1.enabled=.f. thisform.pageframe1.page1.text3.enabled=.f. l=.f. thisform.init &&执行表单的Init事件 mandgroup2.enabled=.t. endif else
32、 if bo2.displayvalue='like' MySQL=cif+" "+ccif+" '"+"%"+ctext+"%'" else MySQL=cif+" "+ccif+" '"+alltrim(thisform.text1.value)+"'" endif select * from roommanage!tabkfinfo where &MySQL.into cursor lindeping go top if eof() go bottom
33、 messagebox('客房不存在',48,'信息窗口') mandgroup2.enabled=.f. mandgroup1.cmodify.enabled=.f. mandgroup1.cdel.enabled=.f. cx=1 else lkfnumber=lindeping.房间号 select tabkfinfo set order to 房间号 se
34、ek lkfnumber thisform.resize &&执行表单的Resize事件 thisform.pageframe1.page1.text1.enabled=.f. thisform.pageframe1.page1.text3.enabled=.f. l=.f. thisform.init &&执行表单的Init事件 mandgroup2.enabled=.t. endif this
35、form.pageframe1.page2.grid1.recordsource='lindeping' endif endif mand1.setfocus thisform.refresh 在页框控件的Init事件中添加以下代码: thisform.pageframe1.page1.text1.enabled=.f. thisform.pageframe1.page1.text3.enabled=.f. l=.f. thisform.init &&执行表单的Init事件 thisform.resize &&执行表单的Resize事件 在”
36、客房基本信息”选项卡的Activate事件中添加以下代码: mandgroup1.csave.enabled=.f. mandgroup1.ccancel.enabled=.f. mandgroup1.cadd.enabled=.t. mandgroup1.cexit.enabled=.t. mandgroup1.cmodify.enabled=.t. mandgroup1.cdel.enabled=.t. mandgroup2.enabled=.t. 在”客房基本信息列表”选项卡的Activate事件中添加以下代码: mandgroup1.csave.enabled=.
37、f. mandgroup1.ccancel.enabled=.f. mandgroup1.cadd.enabled=.f. mandgroup1.cmodify.enabled=.f. mandgroup1.cdel.enabled=.f. mandgroup1.cexit.enabled=.t. mandgroup2.enabled=.f. thisform.refresh 在edit1控件的KeyPress事件中添加以下代码: if nKeycode=3 mandgroup1.csave.setfocus endif 在Combo1控件的Interactive
38、change事件中添加以下代码: kftype=alltrim(bo1.displayvalue) select *; from roommanage!tabkflx; where 客房类型=kftype; order by tabkflx.类型编号; into cursor linshi thisform.pageframe1.page1.text3.value=linshi.价格 在”|<”按钮的Click事件中添加以下代码: go top &&把记录指针定位到第一条记录 mand1.enabled=.f. mand2.enabled=.f. if
39、 cx=1 mand3.enabled=.f. mand4.enabled=.f. mandgroup1.cmodify.enabled=.f. mandgroup1.cdel.enabled=.f. else mand3.enabled=.t. mand4.enabled=.t. endif thisform.resize &&执行表单的Resize事件 thisform.refresh 在”<”按钮的Click事件中添加以下代码: if cx=1 messagebox('已是第一个记录',48,'信息窗口
40、') mand1.enabled=.f. mand2.enabled=.f. mand3.enabled=.f. mand4.enabled=.f. mandgroup1.cmodify.enabled=.f. mandgroup1.cdel.enabled=.f. thisform.resize &&执行表单的Resize事件 else skip-1 &&记录指针向上移一条记录 thisform.resize &&执行表单的Resize事件 if bof() mess
41、agebox('已是第一个记录',48,'信息窗口') mand1.enabled=.f. mand2.enabled=.f. thisform.resize &&执行表单的Resize事件 else mand1.enabled=.t. mand2.enabled=.t. endif mand3.enabled=.t. mand4.enabled=.t. endif thisform.refresh 在”>”按钮的Click事件中添加以下代码: if eof()
42、 messagebox('已经是最后一条记录',48,'管理窗口') skip-1 &&记录指针向上移一条记录 thisform.resize &&执行表单的Resize事件 mand1.enabled=.f. mand2.enabled=.f. mand3.enabled=.f. mand4.enabled=.f. mandgroup1.cmodify.enabled=.f. mandgroup1.cdel.enabled=.f. else skip &&将把记录指针向下移一条记录
43、 thisform.resize &&执行表单的Resize事件 if eof() messagebox('已经是最后一条记录',48,'管理窗口') skip-1 &&记录指针向上移一条记录 thisform.resize &&执行表单的Resize事件 mand3.enabled=.f. mand4.enabled=.f. else mand3.enabled=.t. mand4.enabled=.t. endif ma
44、nd1.enabled=.t. mand2.enabled=.t. endif thisform.refresh 在”>|”按钮的Click事件中添加以下代码: mand3.enabled=.f. mand4.enabled=.f. go bottom &&记录指针移动到最后一条记录 if cx=1 mand1.enabled=.f. mand2.enabled=.f. mandgroup1.cmodify.enabled=.f. mandgroup1.cdel.enabled=.f. else mand1.enabl
45、ed=.t. mand2.enabled=.t. endif thisform.resize &&执行表单的Resize事件 thisform.refresh 在”添加”按钮的Click事件中添加以下代码: thisform.pageframe1.page1.text1.enabled=.t. &&设置控件有效 thisform.pageframe1.page1.text3.enabled=.f. l=.t. thisform.init &&执行表单的Init事件 *清空各文本框 bo1.value='' thisform.pa
46、geframe1.page1.text3.value=0 bo2.value='' thisform.pageframe1.page1.text5.value={//::} thisform.pageframe1.page1.text6.value='' thisform.pageframe1.page1.text7.value='' thisform.pageframe1.page1.edit1.value='' thisform.pageframe1.page1.text1.value='' thisform.pageframe1.page1.text1.setfocus &&Text1获得焦点 mandg






