本系统针对宾馆住宿的一般管理模式,采用基于计算机网络技术的宾馆管理解决方案,按照宾馆的现代化管理要求设计,实现对宾馆住宿的接待,客房,订房,收支情况,电话等服务设施的全面全方位计算机管理。目标在于提高宾馆营业体系的作业效率,提高服务的客户满意度,加强宾馆的市场竞争力,树立良好的企业形象.通过计算机管理,一方面提供给客户快捷准确可靠的服务,另一方面提高宾馆自身的管理水平,及时准确获取营业信息,辅助对市场需求变化的决策.
第一章 系统概述
1.1系统开发的背景和意义
随着我国经济的迅速发展,人们的生活水平有了显著的提高,假日经济和旅游经济已成为人们消费的热点。各地也把旅游业当作本地经济发展的重要经济支柱之一,从而促进了宾馆酒店业的快速发展。同时,随着宾馆酒店越来越多,人们的要求越来越高,宾馆酒店业的竞争也愈来愈激烈。
如何在激烈的竞争中生从发展,是每一个宾馆酒店必须面临的问题。对宾馆的经营状况起决定作用的是宾馆的服务管理水平。如何利用先进的管理手段、提高宾馆的管理水平,以成为宾馆酒店业发展的当务之急。面对信息时代的机遇和挑战,利用科技手段提高企业管理水平是企业管理无疑的一条行之有效的途径。现在的宾馆行业已经发生拉巨大变化,已不仅是提供给人们一个吃住行的简单场所,所以,将计算机管理引入宾馆的管理体系中,无疑对宾馆的服务水平更上一层楼提供了一种有利的支持。
虽然计算机管理并不是宾馆管理走向成功的关键元素,但它可以最大限度地发挥准确、快捷、高效等作用,对宾馆的服务管理提供强有力的支持。因此,采用全新的计算机网络和宾馆管理系统,已成为提高宾馆的管理效率、改善服务的水准的重要手段之一。在某种意义上,宾馆客房管理方面的信息话已成为现代化宾馆的重要标志。
1.2系统所要实现功能
该系统应充分利用信息技术提高宾馆客房的管理水平、服务水平。酒店客房管理系统要实现客房住宿的登记、宿费提醒、追加押金、调房登记、退房结帐、查询统计等功能。其中宿费提醒可以在住宿费超过押金时预警,提示前台要客人补交押金,该功能可明显提高对住宿人员宿费的有效管理。将动态时的住宿登记、客房调整追加押金等有机的联系在一起,对酒店进行全方位的管理。
1.3系统开发工具
开发数据库管理信息系统需要选择两种工具,即前台开发语言和后台数据库。本系统运用了Visual Basic作为开发工具,SQL Server2000作为后台数据库。
1.4系统模块分析
(1)系统管理模块
该模块实现操作员的管理,如添加删除和修改操作,并设置操作员的操作权限对指定的用户进行密码修改.
(2)客房管理模块状
该模块实现对客房的基本信息的设置,如客房的地点,客房等级,客房物品等信息.同时提供对客房信息的查询。
(3)订房管理模块状
该模块实现用户订房信息管理,提供对订房客户资料的登记,查询和退订操作。其中订房信息包括客房的类型和订房的时间等。
(4)收银管理模块状
该模块实现用户的确订房信息管理,提供对订房客户资料的登记,查询,并提供当日报表的打印。
第二章 系统需求分析
2.1编写目的
本文档对《酒店管理系统》的开发需求进行描述,目的是明确酒店管理系统对用户的功能要求.该文档对《酒店管理系统》做全面细致的用户需求分析,明确所要开发的系统应有的功能、性能与界面,使有关人士能够清楚的了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。
2.2开发背景
随着人民生活水平的提高,旅游出行的人越来越多,酒店的客流量不断增加,传统的酒店管理方法已经不适应现代社会的需求。宾馆在正常运营中需要对客房资源、顾客信息、退房信息等进行管理,利用客房管理系统及时了解各个环节中信息的变更,有利于提高管理的效率。
本项目作为《软件工程课程设计》课程的训练项目提出,目的是为了提高同学们软件的开发和数据库的创建链接,以及软件文档的相关标准和编写原则,提高大家的实践能力。
2.3实现目标
建立一套功能完善的管理信息系统,既能满足业务人员日常处理的需要,增强企业经营全过程的数字化管理水平;又能满足管理人员决策分析的需要,提高公司管理层对公司经营反馈信息的响应速度。从而大幅度提高工作效率,提高实施管理的准确性、科学性,使担负管理的工作人员从繁杂的手工劳作中解脱出来。
面对酒店行业的高速发展和酒店行业信息化发展的过程中出现的各种情况,酒店客房管理系统在实施后,应能达到以下目标:
(1)实现多点操作的信息共享,相互之间的信息传递准确、快捷和顺畅。
(2)服务管理信息化,可随时掌握客人住宿、客房状态、客人挂帐等情况。
(3)系统界面友好美观,操作简单易行,查询灵活方便,数据存储安全。
(4)客户档案、挂帐信息、预警系统的结合,可对往来可户进行住宿监控,防止坏帐发生。
(5)通过酒店客房管理系统的实施,可逐步提高宾馆的管理水平,提升员工的素质。
(6)系统维护方便可靠、有较高的安全性,满足实用性、先进性的要求。
2.4数据描述
2.4.1信息需求
(1)顾客信息:姓名、有效证件、证件号码、联系电话、工作单位、详细地址。
(2)客房信息:房间号、房间类型 、房间价格、所在楼层、
(3)住宿信息:顾客姓名、房间编号、有效证件、房间标准、房间位置、折扣、入住时间、预交押金。
(4)退房信息:顾客姓名、房间编号、客房标准、退房时间、折扣、预交押金、所付金额、找还金额。
(5)调房信息:顾客姓名、客房标准、原始房、目标房、住宿天数、入住时间、预交押金、联系电话。
2.4.2 处理需求
宾馆在运营中需要对宾馆资源、顾客信息、结算信息进行管理,如果有顾客来往,经过对客房状态的查询,查看是否有房间能及时为客户办理登记手续,如果有顾客来退房,能及时为顾客登记并办理退房手续,并且修改客房信息,因此,利用开发完成后的宾馆管理系统能够十分便利的对住房系统进行管理有利于提高效率。
酒店住房管理系统开发的任务是实现各种住房信息的系统规范化、自动化主要完成的功能有以下几个方面。
(1)住宿管理
这个模块包括四个部分,即住宿登记、追加押金、调房登记、退宿结帐。该模块要实现客人的住宿登记,收取客人的预交宿费,自动计算折前宿费、实际宿费等;能够收取客人的续交押金,自动计算宿费提醒日期,并能够实现客户调房登记、退宿结帐、自动计算住宿费用及退还费等。
(2)客房管理
这个模块包括三个部分,即客房设置、客房查询、房态查看。宾馆客房在不同的时间有不同的状态,如空静房、空脏房、清理房、占用房、毛病房、修理房等。该部分要完成客房基本信息的查询、能够按房间号检索所需的客房基本信息,以及显示当前客房的入住数、空闲数、维修数、客房的使用率等。
(3)查询管理
这个模块包括三个部分,即住宿查询、退宿查询、宿费提醒。该部分要实现对客房的查询,查询客房的住宿情况、退宿情况以及宿费提醒等。尤其是宿费提醒,当客人的上帐金额超过押金时系统自动提示要求客人补交押金,以防止宾馆财产损失。
(4)日结设置
该模块包括两个部分:客房销售报表、客房销售统计。该模块中要实现按任意时间汇总客人结帐后所需费用的总额的功能及按任意年汇总应收宿费、电话费等的功能。
(5)结帐管理
这个模块包括两个模块,挂帐查询模块、客户结款模块。主要实现选择挂帐单位或个人,检索符合条件的挂帐信息、还款信息及统计欠款余额等。
(6)设置管理
这个模块包括三个部分,主要用来完成操作员及密码设置,操作员密码的修改以及实现清空选定表的数据的功能。
2.5数据流图
数据流图描绘信息流和数据从输入移动到输出过程中在系统中流动和处理的情况。
2.5.1总体数据流图
退宿信息 D1退房信息
住宿信息
客房号码 住宿信息 D2住宿信息
客房信息
客房信息 D3 客房信息
图2.1 总数据流图
2.5.2 分数据流图
①住宿数据流图
客房号码
客房信息
查询信息
预定信息 客房信息
D3 客房信息 D4 退宿信息
图2.2 住宿数据流图
②退房数据流图
退宿信息
住宿信息
住 宿
信 息 住宿信息 退房信息
D1 住宿信息 D2 退宿信息
图2.3 退房数据流图
③客房数据流图
住宿信息
客房信息
住 宿
信 息 客房号码 住宿对象
D5 客房信息 D6 房客信息
图2.4 客房数据流图
2.6数据字典
数据字典是关于数据信息的集合,即对数据流图中包含的所有元素的定义的集合。
2.7数据库概念设计
概念性信息模型是一种面向 问题的数据模型,是按照用户的观点来对数据和信息建模。它描述了从用户角度看到的数据,它反映了用户的现实环境。最常用的表示概念性数据模型方法,是实体——联系方法(Entity-Relationship Approach)。这种方法用E——R图描述现实世界中的实体,而不涉及这些实体在系统中的实现方法。用这种方法表示的概念性数据模型又称为ER模型。ER模型包含“实体”、“联系”、“属性”等三个基本成份。
2.7.1局部E-R图
1顾客属性如图2.5
图2.5 顾客实体属性图
2客房属性如图2.6
图2.6 客房实体属性图
3服务员属性如图2.7
图2.7 服务员实体属性图
4 经理属性如图2.8
图2.8 经理实体属性图
2.7.2 总E-R 图
1 1
1
N
N
N
1
1
图2.9 总E-R实体图
第三章 系统总体设计
3.1系统功能模块设计
3.1.1功能模块图
图3.1 功能模块图
3.2系统主要功能描述
(1)住宿管理:住宿登记、追加押金、调房登记、推房结帐。
(2)客房管理:客房设置、客房查询、房态查看。
(3)查询统计:住宿查询、退宿查询、宿费提醒。
(4)系统设置:初始化、密码设置、权限设置。
(5)日结设置:客房销售报表、客房销售统计。
(6)挂帐管理:客户结款、挂帐查询。
3.3系统流程分析
查询
选房
确定手牌 退 牌
建立账户
图3.2 系统流程图
第四章 系统详细设计
4.1程序流程设计
所谓系统流程分析,就是用户使用系统时的工作过程。不同的用户有着不同的工作流程和使用权限。但是所有的用户都是从用户登录模块开始的。登录主要是判断是否是合法的用户,在数据库设计中用户的登录名是固定的,如果要添加用户则在用户主界面进行添加用户信息。本系统的系统流程分析如下图所示:
否
重试
否
失败 是
成 功 用户管理模块 宾馆管理模块
A dmin用户
领班用户
普通用户
图4.1程序流程图
4.2系统结构的实现
该系统采用了SQL Server2000数据库,数据库名称为kfgl.数据库包含以下几个表:客房基本信息表kf、登记表djb、密码表ma、权限设置表qxsz、退房登记表tfdj、挂帐明细表gzmx。
表4-1 密码表
字段名称 | 数据类型 | 字段大小 |
操作员 | 文本 | 10 |
密码 | 文本 | 6 |
字段名称 | 数据类型 | 字段大小 |
房间号 | 文本 | 30 |
房间类型 | 文本 | 50 |
价格 | 货币 | 8 |
房态 | 文本 | 4 |
标志 | 是/否 | 1 |
备注 | 文本 | 100 |
配置 | 文本 | 100 |
使用设置 | 文本 | 10 |
营业日期 | 时间/日期 | 8 |
字段名称 | 数据类型 | 字段大小 |
日期 | 日期/时间 | 100 |
挂帐单位 | 文本 | 100 |
摘要 | 文本 | 8 |
住宿金额 | 货币 | 8 |
欠款金额 | 货币 | 8 |
还款金额 | 货币 | 8 |
金额累计 | 文本 | 16 |
姓名 | 文本 | 100 |
证件号码 | 文本 | 100 |
票号 | 文本 | 20 |
时间 | 日期/时间 | 8 |
房间标准 | 文本 | 10 |
房间价格 | 文本 | 10 |
字段名称 | 数据类型 | 字段大小 |
姓名 | 文本 | 50 |
证件名称 | 文本 | 20 |
证件号码 | 文本 | 20 |
详细地址 | 文本 | 50 |
房间号 | 文本 | 20 |
客房类型 | 文本 | 10 |
联系电话 | 文本 | 20 |
客房价格 | 货币 | 8 |
住宿日期 | 日期/时间 | 8 |
住宿时间 | 日期/时间 | 8 |
住宿天数 | 数字 | 双精度型 |
宿费 | 货币 | 8 |
折扣 | 数字 | 双精度型 |
应收宿费 | 货币 | 8 |
预收金额 | 货币 | 8 |
提醒日期 | 日期/时间 | 8 |
提醒时间 | 日期/时间 | 8 |
退宿日期 | 日期/时间 | 8 |
退宿时间 | 日期/时间 | 8 |
备注 | 文本 | 50 |
结款方式 | 文本 | 10 |
摘要 | 文本 | 200 |
应收宿费 | 货币 | 8 |
杂费 | 货币 | 8 |
电话费 | 货币 | 8 |
存车费 | 货币 | 8 |
赔偿费 | 货币 | 8 |
金额总计 | 货币 | 8 |
预收宿费 | 日期/时间 | 8 |
退还宿费 | 日期/时间 | 8 |
退还日期 | 日期/时间 | 8 |
备注 | 文本 | 8 |
字段名称 | 数据类型 | 字段大小 |
编号 | 是/否 | 50 |
操作员 | 是/否 | 50 |
密码 | 是/否 | 双精度型 |
住宿登记 | 是/否 | 1 |
退宿登记 | 是/否 | 1 |
追加押金 | 是/否 | 1 |
客房管理 | 是/否 | 1 |
客房查询 | 是/否 | 1 |
住宿查询 | 是/否 | 1 |
退宿查询 | 是/否 | 1 |
宿费查询 | 是/否 | 1 |
客房销售报表 | 是/否 | 1 |
操作员设置 | 是/否 | 1 |
密码设置 | 是/否 | 1 |
权限设置 | 是/否 | 1 |
调房登记 | 是/否 | 1 |
客户结款 | 是/否 | 1 |
5.1系统登陆窗口界面
程序启动后,首先进入系统登陆界面验证操作密码。在系统登陆模块中主要实现如下功能:
(1)可选择操作员,支持鼠标和键盘操作。
(2)操作员和密码验证成功后,进入主界面。
(3)操作员错误或密码错误提醒并返回错误点。
(4)输入三次错误密码,自动退出系统。
图5.1 用户登陆界面
[登陆代码实现]
Option Explicit
Dim cnt As Integer '记录确定次数
Private Sub Command1_Click()
Dim sql As String
Dim rs_login As New ADODB.Recordset
If Trim(text1.Text) = "" Then '判断输入的用户名是否为空
MsgBox "没有这个用户", vbOKOnly + vbExclamation, ""
text1.SetFocus
Else
sql = "select * from 系统管理 where 用户名='" & text1.Text & "'"
rs_login.Open sql, conn, adOpenKeyset, adLockPessimistic
If rs_login.EOF = True Then
MsgBox "没有这个用户", vbOKOnly + vbExclamation, ""
text1.SetFocus
Else '检验密码是否正确
If Trim(rs_login.Fields(1)) = Trim(text2.Text) Then
userID = text1.Text
userpow = rs_login.Fields(2)
rs_login.Close
Unload Me
MDIForm1.Show
Else
MsgBox "密码不正确", vbOKOnly + vbExclamation, ""
text2.SetFocus
End If
End If
End If
cnt = cnt + 1
If cnt = 3 Then
Unload Me
End If
Exit Sub
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Form_Load()
Dim connectionstring As String
connectionstring = "provider=Microsoft.Jet.oledb.4.0;" & _
"data source=jiudian.mdb"
conn.Open connectionstring
cnt = 0
End Sub
5.2系统主程序窗口界面
程序启动后,在系统登陆界面验证完操作员及操作员密码后,将进入主程序界面。主程序界面要实现:
(1)选择菜单或工具栏,调用相应程序,进行相应操作。
(2)根据操作员不同,确定操作员相应的权限。
图5.2 主程序窗口
[登陆代码实现]
Private Sub add_user_Click()
frmadduser.Show
End Sub
Private Sub double_check_Click()
frmfind_double.Show
End Sub
Private Sub check_Click()
frmfind.Show
End Sub
Private Sub double_client_Click()
frmdouble_client.Show
End Sub
Private Sub exit_Click()
Unload Me
End Sub
Private Sub khts_Click()
frmkhts.Show
End Sub
Private Sub MDIForm_Load()
frmdata = False
find = False
End Sub
Private Sub modify_pw_Click()
frmchangepwd.Show
End Sub
Private Sub only_check_Click()
frmfind.Show
End Sub
Private Sub only_client_Click()
frmonly_client.Show
End Sub
Privte Sub zbgl_Click()
frmzhiban.Show
End Sub
5.3住宿管理设计
程序启动后,选择“客人入住”菜单下的“散客入住”和“团客入住”项,将进入住宿登记模块。在住宿登记模块主要实现如下功能:
(1)自动生成住宿登记凭证号码。
(2)提供空房间供用户选择。
(3)实现客人住宿登记,收取客人预交宿费。
(4)自动计算折前宿费、实际宿费、宿费提醒时间、退宿时间。
5.3.1 散客入住
图.5.3 散客入住界面
[登陆代码实现]
Option Explicit
Dim rs_client As New ADODB.Recordset
Private Sub Command1_Click()
If Not IsNull(DataGrid1.Bookmark) Then
If Trim(DataGrid1.Columns("房号").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "房号不能为空!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Trim(DataGrid1.Columns("房价").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "房价不能为空!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Trim(DataGrid1.Columns("姓名").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "姓名不能为空!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Trim(DataGrid1.Columns("性别").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "性别不能为空!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Not IsDate(Trim(DataGrid1.Columns("抵达日").CellText(DataGrid1.Bookmark))) Then
MsgBox "请按照格式hh-mm输入抵达日", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Not IsDate(Trim(DataGrid1.Columns("离店日").CellText(DataGrid1.Bookmark))) Then
MsgBox "请按照格式hh-mm输入离店日", vbOKOnly + vbExclamation, ""
Exit Sub
End If
rs_client.Update
MsgBox "添加信息成功!", vbOKOnly + vbExclamation, ""
DataGrid1.AllowAddNew = False
DataGrid1.AllowUpdate = False
Else
MsgBox "没有添加信息!", vbOKOnly + vbExclamation, ""
End If
Command1.Caption = "新增记录"
Command2.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
End If
adderror:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Command2_Click()
Dim answer As String
On Error GoTo cmdmodify
If Command2.Caption = "修改记录" Then
answer = MsgBox("确定要修改吗?", vbYesNo, "")
If answer = vbYes Then
Command2.Caption = "确定"
Command1.Enabled = False
Command3.Enabled = False
Command4.Enabled = True
DataGrid1.AllowUpdate = True
Else
Exit Sub
End If
Else
If Not IsNull(DataGrid1.Bookmark) Then
rs_client.Update
End If
Command2.Caption = "修改记录"
Command1.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
DataGrid1.AllowUpdate = False
MsgBox "修改成功!", vbOKOnly + vbExclamation, ""
End If
cmdmodify:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Command3_Click()
Dim answer As String
On Error GoTo delerror
answer = MsgBox("确定要删除吗?", vbYesNo, "")
If answer = vbYes Then
DataGrid1.AllowDelete = True
rs_client.Delete
rs_client.Update
DataGrid1.Refresh
MsgBox "成功删除!", vbOKOnly + vbExclamation, ""
DataGrid1.AllowDelete = False
Else
Exit Sub
End If
delerror:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Command4_Click()
If Command4.Caption = "确定" Then
rs_client.Cancel
DataGrid1.ReBind
DataGrid1.AllowAddNew = False
DataGrid1.AllowUpdate = False
Command1.Caption = "新增记录"
Command2.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
ElseIf Command2.Caption = "确定" Then
rs_client.Cancel
DataGrid1.ReBind
DataGrid1.Refresh
DataGrid1.AllowUpdate = False
Command2.Caption = "修改记录"
Command1.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
End If
Frame2.Enabled = True
End Sub
Private Sub Command5_Click()
Unload Me
End Sub
Private Sub Form_Load()
Dim sql As String
On Error GoTo loaderror
sql = "select * from 散客资料"
rs_client.CursorLocation = adUseClient
rs_client.Open sql, conn, adOpenKeyset, adLockPessimistic '打开数据库
'设定datagrid控件属性
DataGrid1.AllowAddNew = False '不可增加
DataGrid1.AllowDelete = False '不可删除
DataGrid1.AllowUpdate = False
Set DataGrid1.DataSource = rs_client
Command4.Enabled = False
Set DataGrid1.DataSource = Nothing
rs_client.Close
End Sub
5.3.2 团客入住
图5.4 团客入住界面
[登陆代码实现]
Option Explicit
Dim rs_dclient As New ADODB.Recordset
Private Sub Command1_Click()
On Error GoTo adderror
If Command1.Caption = "新增记录" Then '当此按钮的状态为为“增加记录”时
Command1.Caption = "确定" '按钮名称改为“确定”
Command2.Enabled = False '删除与修改按钮不可用
Command3.Enabled = False
Command4.Enabled = True '取消按钮可用
DataGrid1.AllowAddNew = True
DataGrid1.AllowUpdate = True '设定datagrid可以增加记录
Else
If Not IsNull(DataGrid1.Bookmark) Then
If Trim(DataGrid1.Columns("团队名称").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "团队名称不能为空!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Trim(DataGrid1.Columns("负责人姓名").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "负责人姓名不能为空!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Trim(DataGrid1.Columns("证件号码").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "证件号码不能为空!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Trim(DataGrid1.Columns("房间号码").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "房间号码!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
rs_dclient.Update
MsgBox "添加信息成功!", vbOKOnly + vbExclamation, ""
DataGrid1.AllowAddNew = False
DataGrid1.AllowUpdate = False
Else
MsgBox "没有添加信息!", vbOKOnly + vbExclamation, ""
End If
Command1.Caption = "新增记录"
Command2.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
End If
adderror:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Command2_Click()
Dim answer As String
On Error GoTo cmdmodify
If Command2.Caption = "修改记录" Then
answer = MsgBox("确定要修改吗?", vbYesNo, "")
If answer = vbYes Then
Command2.Caption = "确定"
Command1.Enabled = False
Command3.Enabled = False
Command4.Enabled = True
DataGrid1.AllowUpdate = True
Else
Exit Sub
End If
Else
If Not IsNull(DataGrid1.Bookmark) Then
rs_dclient.Update
End If
Command2.Caption = "修改记录"
Command1.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
DataGrid1.AllowUpdate = False
MsgBox "修改成功!", vbOKOnly + vbExclamation, ""
End If
cmdmodify:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Command3_Click()
Dim answer As String
On Error GoTo delerror
answer = MsgBox("确定要删除吗?", vbYesNo, "")
If answer = vbYes Then
DataGrid1.AllowDelete = True
rs_dclient.Delete
rs_dclient.Update
DataGrid1.Refresh
MsgBox "成功删除!", vbOKOnly + vbExclamation, ""
DataGrid1.AllowDelete = False
Else
Exit Sub
End If
delerror:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Command4_Click()
If Command4.Caption = "确定" Then
rs_dclient.Cancel
DataGrid1.ReBind
DataGrid1.AllowAddNew = False
DataGrid1.AllowUpdate = False
Command1.Caption = "新增记录"
Command2.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
ElseIf Command2.Caption = "确定" Then
rs_dclient.Cancel
DataGrid1.ReBind
DataGrid1.Refresh
DataGrid1.AllowUpdate = False
Command2.Caption = "修改记录"
Command1.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
End If
Frame2.Enabled = True
End Sub
Private Sub Command5_Click()
Unload Me
End Sub
Private Sub Form_Load()
Dim sql As String
On Error GoTo loaderror
sql = "select * from 团队资料"
rs_dclient.CursorLocation = adUseClient
rs_dclient.Open sql, conn, adOpenKeyset, adLockPessimistic '打开数据库
'设定datagrid控件属性
DataGrid1.AllowAddNew = False '不可增加
DataGrid1.AllowDelete = False '不可删除
DataGrid1.AllowUpdate = False
Set DataGrid1.DataSource = rs_dclient
Command4.Enabled = False
Exit Sub
loaderror:
MsgBox Err.Description
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set DataGrid1.DataSource = Nothing
rs_dclient.Close
EndSub
5.4客人信息查询
在该模块中主要实现输入客户的姓名检索住宿信息的功能。
图.5.5 客人信息查询界面
[登陆代码实现]
Option Explicit
Dim rs_find As New ADODB.Recordset
Private Sub Command1_Click()
On Error GoTo cmderror
Dim find_date1 As String
Dim find_date2 As String
If Option1.Value = True Then
sqlfind = "select * from 散客资料 where 房号 between '" & _
Combo1(0).Text & "'" & " and " & "'" & Combo1(1).Text & "'"
End If
If Option2.Value = True Then
find_date1 = Format(CDate(Comboy(0).Text & "-" & _
Combom(0).Text & "-" & Combod(0).Text), "yyyy-mm-dd")
find_date2 = Format(CDate(Comboy(1).Text & "-" & _
Combom(1).Text & "-" & Combod(1).Text), "yyyy-mm-dd")
sqlfind = "select * from 散客资料 where 抵达日 between #" & _
find_date1 & "#" & " and" & " #" & find_date2 & "#"
End If
rs_data1.Open sqlfind, conn, adOpenKeyset, adLockPessimistic
frmdatamanage.displaygrid1
Unload Me
cmderror:
If Err.Number <> 0 Then
MsgBox "请输入正确的查询条件!", vbOKOnly + vbExclamation, "警告"
End If
End Sub
Private Sub Command2_Click()
Unload Me
MDIForm1.Show
End Sub
Private Sub Form_Load()
Dim i As Integer
Dim sql As String
'If findok = True Then
' rs_data1.Close
'End If
sql = "select * from 散客资料 order by 房号 desc"
rs_find.CursorLocation = adUseClient
rs_find.Open sql, conn, adOpenKeyset, adLockPessimistic
If rs_find.EOF = False Then '添加编号
With rs_find
Do While Not .EOF
Combo1(0).AddItem .Fields(0)
Combo1(1).AddItem .Fields(0)
.MoveNext
Loop
End With
End If
For i = 2001 To 2005 '添加年
Comboy(0).AddItem i
Comboy(1).AddItem i
Next i
For i = 1 To 12 '添加月
Combom(0).AddItem i
Combom(1).AddItem i
Next i
For i = 1 To 31 '添加日
Combod(0).AddItem i
Combod(1).AddItem i
Next i
End Sub
Private Sub Form_Unload(Cancel As Integer)
rs_find.Close
End Sub
5.5 系统管理
系统管理包括“新增用户”,“修改密码”二部分。
5.5.1 新增用户
图5.6 新增用户界面
[登陆代码实现]
Private Sub Command1_Click()
Dim sql As String
Dim rs_add As New ADODB.Recordset
If Trim(text1.Text) = "" Then
MsgBox "用户名不能为空", vbOKOnly + vbExclamation, ""
Exit Sub
text1.SetFocus
Else
sql = "select * from 系统管理"
rs_add.Open sql, conn, adOpenKeyset, adLockPessimistic
While (rs_add.EOF = False)
If Trim(rs_add.Fields(0)) = Trim(text1.Text) Then
MsgBox "已有这个用户", vbOKOnly + vbExclamation, ""
text1.SetFocus
text1.Text = ""
text2.Text = ""
Text3.Text = ""
Combo1.Text = ""
Exit Sub
Else
rs_add.MoveNext
End If
Wend
If Trim(text2.Text) = "" Then
MsgBox "密码不能为空,请重新输入!", vbOKOnly + vbExclamation, "警告"
text2.Text = ""
text2.SetFocus
Exit Sub
End If
If Trim(text2.Text) <> Trim(Text3.Text) Then
MsgBox "两次密码不一致", vbOKOnly + vbExclamation, ""
text2.SetFocus
text2.Text = ""
Text3.Text = ""
Exit Sub
ElseIf Trim(Combo1.Text) <> "system" And Trim(Combo1.Text) <> "guest" Then
MsgBox "请选择正确的用户权限", vbOKOnly + vbExclamation, ""
Combo1.SetFocus
Combo1.Text = ""
Exit Sub
Else
rs_add.AddNew
rs_add.Fields(0) = text1.Text
rs_add.Fields(1) = text2.Text
rs_add.Fields(2) = Combo1.Text
rs_add.Update
rs_add.Close
MsgBox "添加用户成功", vbOKOnly + vbExclamation, ""
Unload Me
End If
End If
End Su
Private Sub Command2_Click()
Unload Me
End Su
Private Sub Form_Load()
Combo1.AddItem "system"
Combo1.AddItem "guest"
End Sub
5.5.2 修改密码
图5.7修改密码界面
[登陆代码实现]
Private Sub Command1_Click()
Dim rs_chang As New ADODB.Recordset
Dim sql As String
If Trim(text1.Text) <> Trim(text2.Text) Then
MsgBox "密码不一致!", vbOKOnly + vbExclamation, ""
text1.SetFocus
text1.Text = ""
text2.Text = ""
Else
sql = "select * from 系统管理 where 用户名='" & userID & "'"
rs_chang.Open sql, conn, adOpenKeyset, adLockPessimistic
rs_chang.Fields(1) = text1.Text
rs_chang.Update
rs_chang.Close
MsgBox "密码修改成功", vbOKOnly + vbExclamation, ""
Unload Me
End If
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
5.6人事管理
图5.8 人事管理界面
[登陆代码实现]
Option Explicit
Dim rs_zhiban As New ADODB.Recordset
Private Sub cmdadd_Click()
On Error GoTo adderror
If cmdadd.Caption = "确定增加记录" Then '当此按钮的状态为为“增加记录”时
cmdadd.Caption = "确定" '按钮名称改为“确定”
cmddel.Enabled = False
cmdcancel.Enabled = True
DataGrid1.AllowAddNew = True
DataGrid1.AllowUpdate = True '设定datagrid可以增加记录
Else
If Not IsNull(DataGrid1.Bookmark) Then
If Not IsDate(Trim(DataGrid1.Columns("值班开始日期").CellText(DataGrid1.Bookmark))) Then
MsgBox "请按照格式yyyy-mm-dd输入值班开始日期", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Not IsDate(Trim(DataGrid1.Columns("值班开始时间").CellText(DataGrid1.Bookmark))) Then
MsgBox "请按照格式hh-mm输入值班开始时间", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Not IsDate(Trim(DataGrid1.Columns("值班截止日期").CellText(DataGrid1.Bookmark))) Then
MsgBox "请按照格式yyyy-mm-dd输入值班截止日期", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Not IsDate(Trim(DataGrid1.Columns("值班截止时间").CellText(DataGrid1.Bookmark))) Then
MsgBox "请按照格式hh-mm输入值班截止时间", vbOKOnly + vbExclamation, ""
Exit Sub
End If
If Trim(DataGrid1.Columns("值班人").CellText(DataGrid1.Bookmark)) = "" Then
MsgBox "值班人不能为空!", vbOKOnly + vbExclamation, ""
Exit Sub
End If
rs_zhiban.Update
'MsgBox "添加信息成功!", vbOKOnly + vbExclamation, ""
DataGrid1.AllowAddNew = False
DataGrid1.AllowUpdate = False
Else
MsgBox "没有添加信息!", vbOKOnly + vbExclamation, ""
End If
cmdadd.Caption = "确定增加记录"
cmddel.Enabled = True
End If
adderror:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub cmdcancel_Click()
Unload Me
MDIForm1.Show
End Sub
Private Sub cmddel_Click()
Dim answer As String
On Error GoTo delerror
answer = MsgBox("确定要删除吗?", vbYesNo, "")
If answer = vbYes Then
DataGrid1.AllowDelete = True
rs_zhiban.Delete
rs_zhiban.Update
DataGrid1.Refresh
MsgBox "成功删除!", vbOKOnly + vbExclamation, ""
DataGrid1.AllowDelete = False
Else
Exit Sub
End If
delerror:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
Private Sub Form_Load()
Dim sql As String
On Error GoTo loaderror
sql = "select * from 值班管理"
rs_zhiban.CursorLocation = adUseClient
rs_zhiban.Open sql, conn, adOpenKeyset, adLockPessimistic '打开数据库
'设定datagrid控件属性
DataGrid1.AllowAddNew = False '不可增加
DataGrid1.AllowDelete = False '不可删除
DataGrid1.AllowUpdate = False
Set DataGrid1.DataSource = rs_zhiban
Exit Sub
loaderror:
MsgBox Err.Description
End Sub
Private Sub Form_Unload(Cancel As Integer)
第六章 系统测试
6.1 测试目的
在系统开发过程中存在许多复杂的问题,为了保证系统在投入运行中;保证软件的质量和运行的安全行,测试过程是必不可少的,同时也是关键的。测试是为了发现软件在运行过程中所出现的问题,并在出现问题时能够及时的做出相应的修改。测试的目标是保证系统在投入运行中的安全性和稳定性。
6.2 测试方法
本系统采用黑盒测试,测试方法是测试过程中至关重要的环节,采用的测试方法不同所产生的效果和所用的测试经费也是不同的。一个好的测试方法能够提高测试的效率,缩短测试的时间,也能够减少测试的经费。
6.3 测试记录与运行结果
6.3.1管理员登陆测试
输入密码错误:
图6.1登录测试界面
密码错误显示结果密码不正确:
图6.2密码错误显示界面
6.3.2信息查询测试
未输入查询信息:
图6.3查询测试界面
查询成功:
图6.4查询成功界面
6.3.3新增用户测试
用户输入重复:
图6.5新增用户测试界面
用户重复显示已有这个用户:
图6.6用户重复测试界面
经过测试,对于拥有正确管理员帐号和密码的管理员可以进入宾馆客房管理系统主菜单进行权限所允许的各项功能操作,并能正确实现已完成的各种功能。对不拥有正确帐号和密码的用户则拒绝其进入系统,以保护系统的秘密数据和保证其运行安全,防止恶意破坏。
结束语
在做宾馆客房管理系统以前,我对管理信息系统开发的理解只是停留在理论知识的水平上,是纸上谈兵,缺乏实际的软件开发经验。这次通过做软件工程课程设计,完成了《宾馆客房管理信息系统》的软件开发任务。在整个开发过程中遇到了很多的问题,但最终都一一解决,对其中比较深刻的几点体会总结如下:
第一,让我发愁的是对宾馆客房的具体业务流程不太熟悉,通过走访各宾馆和查阅资料,经过反复的修改论证,才完成了系统的分析和设计工作。
第二,面临的困难是不熟悉软件开发工具。我只好翻阅了有关VB的书籍,同时又不断向老师和同学们请教,才逐渐熟练和掌握了开发工具。
第三,从教条主义到理论联系实际的转变。因为没有写论文的经验,所以开始总是生搬硬套书本上的理论和概念,结果写出的论文就非常死板,缺乏新意,不能真正描述出自己软件的开发过程,犯了教条主义的错误。后来经过老师的多次指点,才对论文从结构和内容上都进行了大幅度的调整和修改,删掉了论文中过多的理论和概念,利用理论知识把自己实际的开发过程,用自己的语言和科学方法准确的表达出来,经过多次修改终于完成了论文的写作。这使作者真正体会到什么叫理论联系实际。
第四,在软件开发的过程中,开始编写菜单、窗口、表结构时,进展还是比较顺利,但当有些字段、表关联、数据窗口混淆在一起的时候,作者被搞得晕头转向。最后不得不重新整理表结构,修改字段名称,到 SQLServer中去修改数据库,才将系统的结构最终确定下来。对于源代码的编写,也是经过反复的修改测试,才使系统的设计功能得以正确实现。
总之,理论+实践=知识,程序设计过程中,我以理论为指导,以实践为主体,将理论与实践紧密结合起来,亲身体会到只有将理论与实践有效的结合起来,才能使理论指导实践,又反过来丰富理论,二者相得益彰,使学习效率大大提高。
参考文献
[1] 萨师煊,王珊 .数据库系统概论.北京:高等教育出版社,1998年.
[2] 张海藩.软件工程导论(第三版).北京:清华大学出版社,1998年.
[3] 刘志铭,高春燕 .数据库开发实例解析VB.北京:机械工业出版社,1999年
[4] 龚沛曾,陆慰民.VB程序设计简明教程(第二版).北京:高等教育出版社,2003年.
[5] 张国有.软件工程上机指导书.太原:太原科技大学印刷厂,2007年.
[6] 白尚旺.PowerDesigner数据库建模技术.西安:西安电子科技大学出版社,1999年.