5 系统环境与软件安装
5.1 硬件环境要求
为运行本例,计算机的硬件应满足如下条件:
486DX/66MHz或更高的处理器(推荐Pentium或更高的处理器),或任何运行于
MicrosoftWindowsNTWorkstation的Alpha处理器。
MicrosoftWindows支持的VGA或分辨率更高的监视器。
16MB内存以上。
鼠标或其他定点设备。
5.2 软件环境要求
本系统是在MicrosoftWindowsXP下开发的,所采用的开发工具是Microsoft公司的VisualBasic6.0企业版。推荐桌面显示方式为1024X768像素。
5.3 软件安装
1.建议用户在系统上安装Microsoft公司的VisualBasic6.0企业版。
2.打开光盘中的“酒店服务管理系统”文件夹,将其中的“酒店客房管理系统”文件夹复制到机器内,并去掉所有文件的只读属性。
3.运行程序。打开VisualBasic6.0,运行“酒店客房管理系统”下的“酒店客房管理系统.VBP"工程,或执行“酒店客房管理系统.EXE”文件。
6 酒店服务管理系统的详细设计
6.1 主界面设计
主程序界面如图6-1所示
图6-1主程序界面
6.1.1 实现目标
程序启动后,在系统登录界面验证完操作员及操作员密码后,将进入主程序界面。主程序界面主要实现如下功能:
1.选择菜单或工具栏,调用相应程序,进行相应操作。
2.根据操作员不同,确定操作员的相应权限。
3.显示系统时间、公司网址和操作员。
6.1.2 实现过程
1.新建一个标准工程,命名为“客房管理系统”,在该工程中会自动创建一个新窗体,将该窗体命名为main.
2.单击“工程”菜单下的“部件”选项,在弹出的列表中,选定"MicrosoftWindows CommonControl6.0"选项,然后单击“确定”按钮,StatusBar控件将被添加到工具箱中。
3.在窗体中添加1个StatusBar控件,用鼠标右键单击StatusBar控件,在弹出菜单中选择“属性”。在属性页中,单击“窗格”选项卡,设置4个窗格。设置索引为1的窗格的样式为6-sbrDate;设置索引为2的窗格的样式为5-sbrTime;设置索引为3的窗格的样式为0-sbrtext,并输入文本“http://www.mingrisoft.com”;设置索引为4的窗格的样式为0-sbrtexto4)单击“工具”菜单下的“菜单编辑器”,在菜单编辑器中设置程序的菜单。
6.2 系统登录模块设计
6.2.1 实现目标
程序启动后,首先进入系统登录界面验证操作员及密码。在系统登录模块中主要实现如下功能:
可选择操作员,支持鼠标和键盘操作。
操作员和密码验证成功后,进入主界面。
操作员错误或密码错误提醒并返回错误点。
输入三次错误的密码,自动退出系统。
系统登录界面如图6-2所示
图
6-2 登录界面
6.2.2 实现过程
1.在“客房管理系统”工程中,添加一个新窗体,命名为maIn-nllma。
2.单击“工程”菜单下的“部件”选项,在弹出的列表中,选定“MicrosoftDat BoundListControl6.0”选项,然后单击“确定”按钮,DBCombo控件将被添加到工具箱中。
3.在窗体中添加2个Data控件、1个DBC0mbo控件、2个Label控件、1个Text控件、2个Conunand控件。
6.3 住宿管理设计
6.3.1 住宿登记模块设计
实现目标
程序启动后,选择“住宿管理”菜单下的“住宿登记”项,将进入住宿登记模块。在住宿登记模块中主要实现如下功能:
自动生成住宿登记凭证号码。
提供空闲房间供用户选择。
实现客人住宿登记,收取客人预交宿费。
自动计算折前宿费、实际宿费、宿费提醒时间、退宿时间。
打印住宿登记单据。
住宿登记界面如图6-3所示。
图6-3 住宿登记界面
2.实现过程
(l) 在“客房管理系统”工程中,添加一个新窗体,命名为main_kfdj。
(2)程序代码:
Private Sub ZSDJ_Change(Index As Integer)
Select Case Index
Case 6
ZSDJ(7).Text=Format(Val(ZSDJ(6).Text)*Val(ZSDJ(5).Text), "0.00") '计算折前宿费
ZSDJ(9).Text = ZSDJ(7).Text '赋值给ZSDJ(9)
ZSDJ(8).Text = 100
DTP3.Value = DTP1.Value + Val(ZSDJ(6).Text) '计算退宿日期
Case 8
ZSDJ(9).Text=Format(Val(ZSDJ(7).Text) * Val(ZSDJ(8).Text) / 100, "0.00") '计算实际宿费
Case 10
If ZSDJ(10).Text <> "" Then
ZSDJ(10).Text = Val(ZSDJ(10).Text) '用val函数将字符串转换为数字
DTP2.Value=DTP1.Value+Int(Val(ZSDJ(10).Text)/
If (Val(ZSDJ(10).Text) - Int(Val(ZSDJ(10).Text) / Val(ZSDJ(5).Text))) > 0.5 * Val(ZSDJ(5).Text) Then
tim2.Value = #6:00:00 PM#
Else
tim2.Value = #12:00:00 AM#
End If
End If
End Select
End Sub
追加押金界面如图6-4所示
图6-4 追加押金界面
6.4.1 实现目标
程序启动后,选择“住宿管理”菜单下的“追加押金”项,将进入追加押金模块。在追加押金模块中主要实现如下功能:
提供凭证号码列表供用户选择。
收取客人的续交押金,自动计算宿费提醒日期和宿费提醒时间。
6.4.2 实现过程
1.在“客房管理系统”工程中,添加一个新窗体,命名为main_zjyj
2.在窗体中添加3个Data控件、1个DBCombo控件、6个DTPicker控件、8个Text控件、5个Command控件等。
6.5 调房登记模块设计
6.5.1 实现目标
程序启动后,选择“住宿管理”菜单下的“调房登记”项,将进入调房登记模块。在调房登记模块中主要实现如下功能:
可以选择客人住宿房和空闲房。
实现客户调房登记(系统只允许调换等价客房)。
调房登记界面如图6-5所示。
图6-5 调房登记界面
6.5.2 实现过程
1.在“客房管理系统”工程中,添加一个新窗体,命名为mainesjdj。
2.在窗体中添加4个Data控件、2个DBCombo控件、l个Combo控件、7个Text控件、4个COnunand控件等。
6.5.3 调房的实现方法
由于客人的住宿习惯不同,有些客人会在住宿过程中要求调房,例如客人要求换一个朝阳的房间或空调房等,这就要求客房管理系统有调房的功能。调房模块的思路是:首先查看目标客房是否空闲,如果空闲,查看目标客房的房价(本系统只允许用户调换等价的房间),如果房价与客人原住客房等价,则可确认客人调房。调房后,应对原客房、目标客房的状态进行编辑,再对住宿登记表中的信息进行编辑。
Data1.Recordset.FindFirst’房间号Like”+Chr(34)+DBCombo4.Text+Chr(34)+"anddjb.标志like“+Chr(34)+”1”+Chr(34)+"and姓名like"+Chr(34)+Textl8.Text+”*”+Chr(34)+"and凭证号码like"+Chr(34)+bh.Text+Chr(34)+””
Datal.Recordset.Edit
IfDBCombol.Text<>”“ThenDatal.Recordset.Fields("房间号‑)=Val(DBCombol.Text)
IfDBCombo2.Text<>””ThenDatal.Recordset.Fields(”客房类型”)=DBCombo2.Text
IfDBCombo3.Text<>””ThenDatal.Recordset.Fields("客房价格”)=Val(DBCombo3.Text)
IfTextlO.Text<>”“ThenDatal.Recordset.Fields("备注”)=TextlO.Text
Datal.Recordset.Fields("标志”)=”1”
Datal.Recordset.Field(“摘要”)=”由源房”&DBCombo4.Text&“调到目标房”&DBCombol.Text
6.6 退宿结账模块设计
6.6.1 实现目标
程序启动后,选择“住宿管理”菜单下的“退宿结账”项,将进入退宿结账模块。在退宿结账模块中主要实现如下功能:
提供需结账客人的凭证号码供用户选择。
实现现金结账、现金打折结账、挂账结账等功能。
自动计算住宿费用(宿费、电话费、杂费、会议费、停车费、赔偿费等)和退还费用。
实现打印退宿结账单据功能。
退宿结账界面如图6-6所示。
图6-6 退宿结账界面
6.6.2 实现过程
1.在“客房管理系统”工程中,添加一个新窗体,命名为main_tf.
2.在窗体中添加5个Da1La控件、4个DBCombo控件、4个DTPieb沈控件、3个Colllbo控件、21个Text控件、5个Co~and控件等。
3.程序代码:
本部分为该系统的关键:
在开发酒店客房管理系统过程中,从客人入住到客人退宿涉及到客房管理的方方面面,如处理不当,便会给酒店造成很大的损失。
客房宿费的算法
由于每个酒店的管理方法不同,所以宿费算法也有不同,如果采用人工运算既耽误时间,又容易出现运算错误,很容易给酒店和客人造成不必要的麻烦和损失。如果使用程序计算宿费,那么既方便又规范,同时也避免了运算错误。下面是针对酒店客房管理设计的宿费运算公式:
宿费=房价x天数
如果客人退宿结账时间在住宿当天,可以按如下算法:
如客人退宿结账时间早于18:00,那么住宿天数为0.5天;
如客人退宿结账时间超过18:00,那么住宿天数为1天。
如果客人退宿结账时间不在住宿当天,可以按如下算法(定义A为天数):
如客人退宿结账时间在中午12:00之前,住宿天数为(退宿日期一住宿日期)+0.5天;
如客人退宿结账时间在中午12:00之后,住宿天数为(退宿日期一住宿日期)+1天。
PublicSubJSQ’定义计算住宿天数的函数
IfDTP2.Value>DTP1.ValueThen
Iftim2.Value>#11:59:00PM#Then
Iftim2.Value>#12:00:00PM#Then
Iftim2.Value>#6:00:00PM#Then
Texts.Text=DTP2.Value一DTP1.Value+1
Else
Texts.Text=DTP2.Value一DTP1.Value+0.5
EndIf
Flse
Texts.Text=UTP2.Value一DTP1.Value
EndIf
RIeP
Texts.Text=DTP2.Value一DTP1.Value
EndIf
Else
Iftiml.Value<#2:00:00AM#Then
Iftim2.Value>#2:00:00AM#Then
Iftim2.Value>#12:00:00PM#Then
Iftim2.Value>#6:00:00PM#Then
Texts.Text=1+1
Else
Texts.Text=1+0.5
EndIf
Else
Texts.Text=1
FnriIf
Flan
Texts.Text=1
EndIf
EISe
Texts.Text=l
Elldlf
Endlf
EndSub
PublicSubssje()’定义计算实收金额和退还金额的函数
Texssje.Text=Val(Texzhje.Text)+Val(Texzf.Text)+Val(Texdhf.Text)+Val(Texpef.Text)+Val(Texh江Text)+Val(Textef.Text)
Texthje.Text=Val(Texyj·Text)一Val(Texssje·Text)
EndSub
6.7 客房管理设计
6.7.1 客房设置模块设计
实现目标
程序启动后,选择“客房管理”菜单下的“客房设置”项,将进入客房设置模块。在客房设置模块中主要实现如下功能:
完成客房基本信息的录入、保存、修改。
完成客房基本信息的查询。
客房设置界面如图6-7所示。
图6-7 客房设置
6.7.2 客房查询模块设计
1.实现目标
程序启动后,选择“客房管理”菜单下的“客房查询”项,将进入客房查询模块。在客房查询模块中主要实现如下功能:
按房间号检索所需的客房基本信息。
完成客房基本信息的修改与删除。客房查询界面如图6-8所示
图6-8 客房查询
2.实现过程
(1)在“客房管理系统”工程中,添加一个新窗体,命名为mainwekrcxa
(2)程序代码:
Data1.DatabaseName = App.Path & "\KFGL.MDB"
End Sub
Private Sub Form_Unload(Cancel As Integer)
main.Enabled = True
End Sub
Private Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)
End Sub
Private Sub Text1_Change()
'查询客房信息
Data1.RecordSource = "select * from kf where kf.房间号 like " + Chr(34) + Text1.Text + "*" + Chr(34) + ""
Data1.Refresh
End Sub
Private Sub Command1_Click() '允许修改客房信息
DBGrid1.AllowUpdate = True
End Sub
Private Sub Command2_Click() '删除客房信息
If Data1.Recordset.RecordCount > 0 Then
Data1.Recordset.Delete
Data1.Refresh
End If
End Sub
Private Sub Command3_Click()
main.Enabled = True
Unload Me
End Sub
6.7.3 房态查看模块设计
1.实现目标
程序启动后,选择“客房管理”菜单下的“房态查看”项,将进入房态查看模块。在房态查看模块中主要实现如下功能:
以图形方式显示入住房、空闲房、维修房。
计算当前客房入住数、空闲数、维修数、客房的使用率。
点击入住图形的按钮,查看客人详细的住宿信息。
房态查看界面如图6-9所示
图6-9 房态查看界面
2.实现过程
(1)在“客房管理系统”工程中,添加一个新窗体,命名为mainftcx.
(2)在窗体中添加1个Commandl数组(1-25)、2个Image控件、1个Text控件等。
6.8 挂账管理设计
6.8.1 挂账查询模块设计
实现目标
程序启动后,选择“挂账管理”菜单下的“挂账查询”项,将进入挂账查询模块。在挂账查询模块中主要实现如下功能:
选择挂账单位(单位或个人),检索符合条件的挂账信息、还款信息。
按日期检索符合条件的挂账信息、还款信息。
挂账查询界面如图6-10所示。
图6-10 挂账查询界面
6.8.2 客户结款模块设计
实现目标
程序启动后,选择“挂账管理”菜单下的“客户结款”项,将进入客户结款模块。在客户结款模块中主要实现如下功能:
选择挂账单位(单位或个人),检索符合条件的挂账信息、还款信息。
选择结款方式,实现挂账结款的功能。
统计尚欠余额。
客户结款界面如图6-11所示。
图6-11“客户结款”界面
6.9 查询统计设计
6.9.1 住宿查询模块设计
1.实现目标
程序启动后,选择“查询统计”菜单下的“住宿查询”项,将进入住宿查询模块。在住宿查询模块中主要实现输入客人姓名检索住宿信息的功能。
住宿查询界面如图6-12所示。
图6-12 住宿查询界面
2.实现过程
(1)在“客房管理系统”工程中,添加一个新窗体,命名为main_zscx.
(2)程序代码:
PrivateSubFormesLoed()
Datal.DatabaseName=App.Path&’入KI息l.MD丑”’自动识别数据库路径
EndSub
PrivateSubFormesUnfoad(CaneelAsInteger)
rnain.Enabled=True
EndSUb
PrivateSubCommandl_cliek()’查询住宿信息
Datal.Reeordsource=”seleet*fromonldjbwhere姓名like”+Chr(34)+textl.text+”*”+Chr(34)+”“
Datal.Refresh
EndSllb
PrlvateSubCornrnand2_Cliek()
main.Enabled=True
UnloadMe
EndSub
6.10 宿费提醒模块设计
宿费提醒的实现方法:
客人在住宿前首先要说明住宿天数,根据客人住宿天数和房间价格,酒店要向客人收取一定的住宿押金。如果客人住宿了10天,而只交付了5天的宿费,入住时间超过5天后,如果没有及时催要住宿费,很容易造成客人未交宿费便离宿,这样便会给酒店造成损失。为了解决这种情况,本系统设计了宿费提醒功能,可以及时提醒酒店客人什么时间需补交多少宿费。例如,本例根据押金的多少计算提醒日期。代码如下(Text9为押金金额,DBCombo3为房间价格,Text14为提醒日期):
IfText9.Text<>”“Then
Text9.Text=Val(Text9.Text)
DTP2.Value=DTP1.Value+Int(Val(Text9.Text)/Val(DBCombolText))
Text14.Text=DTP2.Value
EndIf
6.11 日结设计
该部分包括登记预收报表模块、客房销售报表模块和客房销售统计模块。便于酒店对于业务进行管理。其中:
在登记预收报表模块中主要实现按时间汇总应收宿费总额、预收宿费总额的功能。
在客房销售报表模块中主要实现按任意时间汇总客人结账后所需费用的总额的功能。
在客房销售统计模块中主要实现按任意年汇总客房应收宿费、杂费、电话费、会议费等的功能。
图6-13 登记预收报表界面
图6-14 客房销售报表界面
图6-15 客房销售统计界面
6.12 系统设置设计
6.12.1 操作员设置模块设计
程序启动后,选择“系统设置”菜单下的“操作员设置”项,将进入操作员设置模块。
在操作员设置模块中主要实现如下功能:
完成操作员及密码的设置。
支持鼠标和键盘操作。
操作员设置界面如图6-16所示。
图6-16 操作员设置界面
6.12.2 密码设置模块设计
程序启动后,选择“系统设置”菜单下的“密码设置”项,将进入密码设置模块。在密码设置模块中主要实现如下功能:
完成操作员密码的修改。
支持鼠标和键盘操作。
密码设置界面如图6-17所示。
图6-17 密码设置界面
程序代码:
Private Sub label1_Click() '修改操作员密码
Data1.RecordSource = "select * from qxsz where 操作员='" & Text1.Text & "'"
Data1.Refresh
If Text1.Text <> "" And Text2.Text <> "" And Text2.Text = Data1.Recordset.Fields("密码") Then
If Text3.Text <> "" Then
Data1.Recordset.Edit
Data1.Recordset.Fields("密码") = Text3.Text
MsgBox ("密码修改成功,退出操作员密码修改!")
Data1.Recordset.Update
main.Enabled = True
Unload Me
Else
MsgBox ("请输入新密码!!")
End If
Else
If Text1.Text = "" Then
MsgBox ("请输入操作员!")
Text1.SetFocus
Else
If Text1.Text <> Data1.Recordset.Fields("操作员") Then
Text1.SetFocus
Text1.Text = ""
MsgBox ("无此操作员,请重新输入!")
End If
End If
If Text2.Text = "" Then
MsgBox ("请输入操作员原密码!")
Text2.SetFocus
Else
If Text2.Text <> ma.Text Then
MsgBox ("原密码错误,请重新输入原密码!")
Text2.SetFocus
End If
End If
End If
End Sub
6.12.3 初始化模块设计
初始化界面如图6-18所示。
图6-18 初始化界面
6.12.4 权限设置模块设计
在权限设置模块中主要实现删除操作员信息及设置操作员权限的功能。
权限设置界面如图6-19所示
图6-19 权限设置界面