浅谈客房管理系统.doc
2022年-2023年建筑工程管理行业文档 齐鲁斌创作浅谈客房管理系统 摘要: 21世纪是一个”知识经济”时代,信息爆炸是这个时代的特征。因此,信息时代对企业的信息管理和应用提出了更高的要求,这主要体现在两个方面:一是由于我们所处的这个世界已经成为知识信息的海洋,企业必须具备从企业环境中获取、处理和应用这些信息的能力;二是企业还必须具备管理和应用企业本身不断产生的反映企业状态的数据信息和描述管理活动的控制信息。毋庸讳言,Visual Basic是近年来发展最快的一种计算机语言,其简洁与实用性受到众多计算机用户和程序员的青睐。通过Microsoft 的概念化,Visual Basic的创建者以一种广为人知的Basic语言为基础,并赋予这个语言方便地建立windows 应用的能力,从而提供了开发各种企业系统所需的多任务和高性能。关键词: Database Databasename Recordsource Recordset Field Connect DatasourceData Dao Select系统设计的目的在现代的宾馆服务行业中,由于客流量巨增,传统的管理方法已经不适合现代社会的需要,因此客房管理系统是各大中小型宾馆所需要使用的一个管理系统。由于客房系统往往是一个大型的信息管理系统,他需要专业的开发人员才能完成复杂的功能,而且每一个宾馆的管理内容和服务方式均有所区别,本文只是制作了一个有一定代表意义的小型的客房管理系统。系统架构本系统是一个小型客房管理系统,适合25人左右非大量并发的数据库操作访问,采用桌面DBMS access作为底层平台,通过data进行连接访问,界面实现采用visual basic开发,单机运行,数据库平台和程序可以运行windows 操作系统上. 数据库访问方法采用DAO对象访问ODBC或者直接访问.功能分析 本系统为采用三层结构体系,以低层access数据库作为数据库系统,通过一个通用的数据访问接口层来统一操作,如果更改了数据源平台,只需前换该层即可,业务逻辑层是一些能够完成客房操作业务的接口,本系统逻辑层在数据查询结构结果返回方面,采用DAO访问技术,对数据集进行浏览,更新,删除等操作.系统功能设计在本系统中,将实现如下一些功能:1. 用户权限管理2. 客户住宿管理3. 客户退房管理4. 客户综合查询管理本系统将基本实现小型标准客房管理的部分功能。数据库及数据表设计 数据库设计是整个软件的重中之重,数据库设计包含了对系统实体划分,关键是逻辑设计和运行平台设计,通过对数据库设计可以清楚地划分软件中所有的实体和关系,也可以中抽象出系统的所有对象. 在该数据库中,创建一个客户信息数据表,系统用户权限表,客房情况表。客房管理数据库的建立数据库是数据表的集合,系统开发首先应该开发一个数据库,用于存放系统中的数据表。在visual basic集成开发环境中制作客房管理数据库的步骤如下:(1) 启动vb应用系统,出现vb应用系统开发主界面。(2) 在vb主菜单中单击外接程序|可视化数据管理器菜单项,出现可视化数据管理器界面。(3) 单击文件|新建|Microsoft access(m)|version 7.0 mdb(7)菜单项,vb默认的数据库类型为Microsoft access数据库类型,它与Microsoft office 2000的基本数据库类型一致,而且在Microsoft access数据库类型中,version 7.0 mdb为最新版本的数据库类型。选择该类型的数据库,数据库文件的扩展名为.mdb,在创建数据库时不必输入扩展名,可视化数据管理器将自动为数据库生成扩展名。(4) 再单击菜单后出现文件保存对话框,在对话框中选择磁盘驱动器和文件夹名称,此处选择文件夹,并将数据库命名为客房管理数据库,随后将出现数据库窗口。客户信息数据表的创建 数据库只是一个容器,它是数据表的集合。数据库一经创建,用户就可以在数据库中创建应用系统开发制作所需要的数据表。其步骤如下:(1) 在可视化数据管理器中打开数据库(2) 在数据管理器中选择数据库文件(3) 右击数据库文件客房管理数据库,出现一个弹出式菜单(4) 在弹出式菜单中单击新建表菜单项,出现数据表结构设计器对话框.数据表结构就是对一个数据表中的字段名称,类型,大小的定义,在数据表结构创建对话框中,不仅可以制定表的结构,还可以对数据表进行各种操作,如显示每一个字段的结构信息,增加或删除字段,建立索引,对每一字段进行有效性输入规则的定制等.在客房管理数据库中我们将创建”客房信息数据表”,其结构参数定义如下:字段名称字段类型字段大小索引忽略空值房号singledefault惟一 主索引No姓名Text20No性别Text2No年龄SingledefaultNo国籍Text20No身份证号Text50No客房级别Text20No用房天数SingledefaultNo住店日期Date/timedefaultNo离店日期Date/timedefaultNo系统用户权限表的设计与创建,在整个系统中,使用系统均要通过权限认证,他包括系统准入认证,权限修改认证等,因此需要创建一个用户权限表,其结构如下所示:字段名称字段类型字段大小索引忽略空值操作员Text20No密码single4关键No 客房情况表的设计和创建他用于整个客房所有房间的信息,以及已经住宿的情况和未住宿的情况其结构如下表所示: 字段名称字段类型字段大小索引忽略空值房号Singledefault惟一 主索引No客房级别Text10No用房标志Text1No创建系统启动界面 系统启动封面是一个应用系统开始的界面,通常是系统登录的界面进入该界面后,通过用户权限的认证,判断使用本程序的用户是是合法用户.然后进入系统主窗体。创建系统启动界面也就意味着创建系统的开始,本文采用数据工程的方法创建。创建的过程如下:1. 启动vb应用系统,进入开发平台主界面2. 在开发平台中,创建一个新的工程,此处创建数据工程3. 在工程类型中选择数据工程4. 单击打开按钮,出现一个数据工程,其中包括一个数据工程窗体,一个数据源环境和数据报表的设计器数据工程的关键在于使用数据源,创建数据源的方法如下:1. 单击数据设计器/数据环境条目,出现一个数据环境中的连接界面2. 右击连接条目connection1,出现一个弹出式菜单,单击属性,出现数据源驱动程序类型3. 选择microsoft access,单击next按钮,出现数据库设置对话框,选择数据库4. 单击确定按钮,成功引入数据源接下来,创建系统启动界面,在工程管理器中打开数据工程已经创建的第一个窗体form1保存该工程和该窗体接下来设计form1其制作过程如下:1. 设置窗体的基本属性如表所示:属性项名属性设置内容Startuupposition2-屏幕中心Windowsstate2-maxmizedpicture图片文件2. 在窗体中放置一个数据控件data1,该控件主要作为登录的系统用户权限表的数据源控件,设置他的基本属性如表所示:属性项名属性设置内容DatabasenameConnectaccessRecordsourceklvisibleFalse3. 在窗体中放入两个按纽控件,分别设置其caption属性为登录和退出,并为这两个赋予过程代码,其过程代码如下:Dim TIM As Integer '定义一个整型变量Dim myval As String '定义一个字符串变量Private Sub Command1_Click()Data1.Recordset.CloseEndEnd SubPrivate Sub combo1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Text2.SetFocus '按回车键,text2获得焦点 End IfEnd SubPrivate Sub Form_Activate()Data1.RefreshData1.Recordset.MoveLastIf Data1.Recordset.RecordCount = 0 Then MsgBox ("请先设置操作员和密码的权限!") From2.Show Unload Me Data1.Recordset.CloseElse Combo1.SetFocusEnd IfEnd SubPrivate Sub Form_Load() Data1.DatabaseName = App.Path & "kl.mdb" Data1.RefreshEnd SubPrivate Sub text2_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyReturn Then Command1.SetFocus '按回车键cmd1获得焦点If KeyCode = vbKeyUp Then combol1.SetFocusIf KeyCode = vbKeyDown Then Command1.SetFocusEnd SubPrivate Sub command2_Click()With Data1.RecordsetDim mmmm = .BookmarkIf .BOF = False Then .MoveFirstEnd IfIf Combo1.Text = "" Then MsgBox "请输入用户名" Combo1.SetFocus Exit SubElse.FindFirst "操作员 like" + Chr(34) + Combo1.Text + Chr(34) + ""If .NoMatch Then MsgBox ("操作员输入错误,请重新输入!") .Bookmark = mm Combo1.SetFocus Exit Sub Else Data1.RecordSource = "select * from kl where 操作员='" & Combo1.Text & "'" Data1.Refresh If Text2.Text = "" Then MsgBox ("请输入用户密码!") Text2.SetFocus Exit Sub Else mm = .Bookmark .FindFirst "密码 like" + Chr(34) + Text2.Text + Chr(34) + "" If TIM > 2 Then MsgBox "你无权使用本系统,请向系统管理员查询!" End Else If .NoMatch Then MsgBox ("密码输入错误,请重新输入!") TIM = TIM + 1 .Bookmark = mm Text2.Text = "" Text2.SetFocus Exit Sub Else Unload Me Form2.Show .Close End If End If End IfEnd IfEnd IfEnd WithEnd Sub该代码首先用于判断用户权限,如果输入的用户和密码存在,则系统允许登录.创建系统主界面接下来,首先需要创建系统的主窗体,该窗体用于对其他功能模块的调用,其创建过程如下:1. 启动VB应用程序,出现开发平台主窗口.2. 新建立一个标准的EXE工程,并为其命名3. 主窗体的基本属性设置及其基本结构和前面类似略在本窗体中,为了修饰窗体的效果,我们特别为它加载了一幅图片,作为窗体的背景.制作系统主菜单在VB集成开发环境中,制作一个菜单是比较简单的,其操作过程如下:1. 右击主窗体form2,出现一个弹出式菜单2. 在弹出式菜单中单击”菜单编辑器”菜单项,即进入菜单编辑器.在本文中我们将创建如下四个菜单.l 登记住房: 用于调用客户住宿信息处理的信息窗体.l 退房间: 用于调用客户情况窗体,如删除客户标记,编辑客户情况的记录等.l 客户查询: 用于调用一个客户查询窗体,综合查询客户信息l 权限设置: 用于用户修改设置l 退出系统: 用于执行退出系统的功能.3. 在窗体中放置一个statursbar用来显示系统的某些信息,本系统为日期和时间,可以提醒用户当天日期和时间,同时也可以为界面增色,其中statursbar的第一栏中显示日期,第二栏中显示时间 菜单与命令按纽的功能是一致的.它主要用于对事务或行为动作的执行,因此同样需要他们编制过程代码.要为菜单编制过程代码,只需要在创建菜单之后,单击菜单条目,即出现他们的过程代码编辑器窗口,选择适当的过程类型,如CLICK过程.各个菜单的过程代码如下:程序代码:Option ExplicitPrivate Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszname As String, ByVal hmodule As Long, ByVal dwflags As Long) As LongPrivate Sub Command1_Click()Form1.ShowUnload MeEnd SubPrivate Sub Form_Load() Call PlaySound(App.Path + "credit.wav", 0&, &H1) StatusBar1.Panels(1).Text = " 今天的日期是:" & Format(Date, "yyyy年m月d日") StatusBar1.Panels(2).Text = " 现在时间是:" & Format(Time, "h:mm:ss am/pm")End Subl “登记住房”菜单的过程代码private sub 登记住房-click()form3.showend subl “退房间”菜单的过程代码private sub退房间-click()form7.showend subl “客户查询”菜单的过程代码private sub客户查询-click()form6.showend sub l “权限设置”菜单的过程代码 Private Sub 权限设置_Click()Form5.ShowEnd Subl “退出系统”菜单的过程代码private sub退出系统-click()unload meForm2.HideForm1.Showend sub制作客户信息登记窗体 该功能实现了对客户信息的管理。该功能可以对客户信息进行增加、删除和修改。客户信息包括对信客户进行登记,登记内容包括房号、姓名、性别、年龄、国籍、客房级别、住房天数、住店日期、离店日期等。在宾馆住宿管理系统中,客户信息记录是很重要的,因此我们需要制作该窗体,其制作过程如下:(1) 在工程中增加一个新的窗体FORM3, 其设置和前面类似省略同样,放置一个图片文件以修饰窗体.(2) 在窗体中放入一个数据控件Data1, 其设置和前面类似省略 数据控件是为本窗体引入数据源的控件 .(3) 在窗体中放入一些标签控件,其个数比数据表的字段个数多一个.注意,由于窗体中放置了一个图片控件,因此,标签控件应该使用”透明”属性,以使标签与窗体融为一体.我们以其中的一个标签为例,说明全部标签的属性设置,如表所示.属性项名属性设置内容Caption客户信息登记FontForecolor&h00008080&BackstyleTransparentborderstyle1-fixed style(3) 在窗体中设置若干个文本框控件,其个数与数据表的字段个数一致.文本框的基本属性设置如表所示:对象名称属性项名属性设置内容Text1DatasouceData1datafield房号Text2datasourceData1datafield姓名Text3DatasourceData1datafield性别Text4datasourceData1datafield年龄Text5DatasourceData1datafield国籍Text6DatasourceData1datafield身份证号Text7DatasourceData1datafield客房级别Text8datasourceData1datafield用房天数Text9DatasourceData1datafield住店日期Text10datasourceData1datafield离店日期 表1(4) 在窗体中防如六个命令按纽,用于增加记录、确认记录、修改、记录状态、删除记录和返回主窗体.程序代码如下:Private Sub Command1_Click()Dim prompt$Dim rrprompt$ = "enter the new record"rr = MsgBox(prompt$, vbOKCancel, "add record")If rr = vbOK Then Data1.Recordset.AddNew Command1.Enabled = False Text1.SetFocusEnd IfEnd SubPrivate Sub Command2_Click()If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Or Text5.Text = "" Or_ Text6.Text = "" Or Text7.Text = "" Or Text8.Text = "" Or Text9.Text = "" Or Text10.Text = "" Then MsgBox "这些选项不能为空,请输入相应的值" Text1.SetFocus Exit SubElseOn Error Resume NextData1.Recordset.UpdateData1.RefreshCommand2.Enabled = FalseCommand1.SetFocusEnd IfEnd SubPrivate Sub Command3_Click()Dim result As IntegerIf Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Or Text5.Text = "" Or_ Text6.Text = "" Or Text7.Text = "" Or Text8.Text = "" Or Text9.Text = "" Or Text10.Text = "" Then MsgBox "这些选项不能为空,请输入相应的值" Text1.SetFocus Exit SubElse result = MsgBox("删除记录将不能再恢复,确实需要删除记录吗?", vbOKCancel + vbQuestion, "提示信息") If result = 1 Then Data1.Recordset.Delete If Data1.Recordset.EOF Then Data1.Recordset.MoveLast Else Data1.Recordset.MoveNext Command1.SetFocus End If End IfEnd IfEnd SubPrivate Sub Command4_Click()Unload Memain.Enabled = TrueEnd SubPrivate Sub Command6_Click()Data1.Recordset.EditData1.Recordset.UpdateEnd SubPrivate Sub Data1_Error(DataErr As Integer, Response As Integer)'这就是放置错误处理代码的地方'如果想忽略错误,注释掉下一行代码'如果想捕捉错误,在这里添加错误代码MsgBox "数据错误事件命中错误:" & Error$(DataErr)Response = 0 '忽略错误End SubPrivate Sub Command5_Click()Dim mWith Data1.Recordsetm = .Bookmark.MoveLastStatusBar1.Panels(1).Text = " 记录总数 : " + CStr(.RecordCount).Bookmark = mStatusBar1.Panels(2).Text = " 当前记录号 : " + CStr(.AbsolutePosition + 1)End WithEnd SubPrivate Sub Form_Load()main.Enabled = FalseData1.DatabaseName = App.Path & "kfxx.mdb"Data1.RefreshEnd SubPrivate Sub Form_Unload(Cancel As Integer)main.Enabled = TrueEnd Subprivate sub text1_dblclick(index as integer)form3.showend sub运行工程,检验窗体的显示效果注意,在进行房号记录时,可以双击文本框1,出现该房号作标记的窗体,即调出退房信息窗体.在退房信息窗体中,可以给该房号作已经占用的标记.文本框的双击过程代码如下:权限维护窗体的制作 在该窗体中,我们制作了一个具有修改用户权限的功能.但无论是增加用户或是删除用户或是修改用户密码,均需要确认原有密码,在确认之后,才确认为合法用户.它同样是系统安全的一部分.窗体制作过程如下:1. 在工程中增加一个窗体form52. 设置form4的基本属性,和前面类似省略3. 在该窗体中放入一个数据控件data1,:和前面类似省略4. 在窗体中放入三个文本框控件,其属性和结构如下:对象名称属性项名属性设置内容combo1datasourceData1datafield操作员TextdatasourceData1datafield密码passwordchar*5. 在窗体中放入三个标签控件,用于说明文本框控件6. 在窗体中放入两个按钮控件,用于对密码进行维护其程序代码为:Dim numPrivate Sub Form_Load() Me.Top = (Form2.Top - Me.Top) / 3 Me.Left = (Form2.Left - Me.Left) * 2 / 3 Data1.DatabaseName = App.Path & "kl.MDB" Data1.Refresh Text1.Enabled = False Text3.Enabled = False Form2.Enabled = FalseEnd SubPrivate Sub Form_Activate() Combo1.SetFocusEnd SubPrivate Sub Form_Unload(Cancel As Integer)Form2.Enabled = TrueEnd SubPrivate Sub combo1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Text2.SetFocusEnd SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = vbKeyReturn ThenText3.Enabled = TrueText3.SetFocusEnd IfEnd SubPrivate Sub text2_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then Command1.SetFocus End SubPrivate Sub Command1_Click() Data1.RecordSource = "select * from kl where 操作员='" & Combo1.Text & "'" If Combo1.Text <> "" And Text2.Text <> "" And Text2.Text = Data1.Recordset.Fields("密码") Then If num > 2 Then MsgBox "你无权修改密码!" End Else Text1.Enabled = True If Text1.Text <> "" Then Data1.Recordset.Edit Data1.Recordset.Fields("操作员") = Text1.Text Data1.Recordset.Fields("密码") = Text3.Text n = MsgBox("密码修改成功,退出操作员密码修改!", vbOKCancel + vbQuestion, "") If n = 1 Then On Error Resume Next Data1.Recordset.Update Unload Me Else Unload Me End If Else MsgBox ("请输入新用户名和密码!") Text1.SetFocus Exit Sub End If End If Else If Combo1.Text = "" Then MsgBox ("请输入操作员!") Combo1.SetFocus Exit Sub Else If Combo1.Text <> Data1.Recordset.Fields("操作员") Then Combo1.SetFocus Combo1.Text = "" MsgBox ("无此操作员,请重新输入!") Exit Sub End If End If If Text2.Text = "" Then MsgBox ("请输入操作员原密码!") Text2.SetFocus Exit Sub Else If Text2.Text <> Data1.Recordset.Fields("密码") Then MsgBox ("原密码错误,请重新输入原密码!") num = num + 1 Text2.Text = "" Text2.SetFocus Exit Sub End If End If End IfEnd SubPrivate Sub command2_Click() Data1.Recordset.Close Form2.Enabled = True Unload MeEnd Sub制作退房信息处理窗体 退房信息处理窗体的主要功能有两个,一个是设置全部房间的信息,并在记录客户信息时给出相关的房间做占用标记:第二是: 当客户退房时,给退还的房间删除占用标记.窗体的制作过程如下:1. 再工程中增加一个新的窗体form7,其属性与结构设置和前面类似,省略2. 在该窗体中放入一个数据控件data1, 其属性与结构设置和前面类似,省略3. 在窗体中放入三个文本框控件,其属性如下:对象名称属性项名属性设置内容Text1DatasourceData1datafield房号Text2DatasourceData1datafield客房级别Text3DatasourceData1datafield用房标记代码如下:Private Sub Command1_Click()On Error Resume NextData1.Recordset.AddNewCommand1.Enabled = FalseCommand2.Enabled = TrueText1(0).SetFocusEnd SubPrivate Sub command2_Click()If Text1(0).Text = "" Or Combo1.Text = "" Or Text1(2).Text = "" Then MsgBox "请输入数据" Command1.Enabled = True Text1(0).SetFocus Exit SubEnd IfData1.Recordset.EditCommand3.Enabled = TrueCommand3.SetFocusEnd SubPrivate Sub Command3_Click()If Text1(0).Text = "" Or Combo1.Text = "" Or Text1(2).Text = "" ThenMsgBox "请输入数据"Command3.Enabled = FalseCommand2.Enabled = TrueText1(0).SetFocusExit SubEnd IfData1.Recordset.UpdateCommand3.Enabled = FalseEnd SubPrivate Sub Command4_Click()Dim msgDim oldmarkoldmark = Data1.Recordset.Bookmarkmsg = Trim(InputBox("请输入房号", "查询")msg = "房号 like ' " & msg & " ' "Data1.Recordset.FindFirst msgIf Data1.Recordset.NoMatch Then MsgBox ("没有符合条件的房间,请重新输入") Command1.Enabled = True Command1.SetFocus Exit SubElse msg = "用户标志 like ' " & 1 & " ' " Data1.Recordset.FindFirst msg If Data1.Recordset.NoMatch Then MsgBox ("没有符合条件的房间,请重新输入") Command1.Enabled = True Command1.SetFocus End If End IfEnd SubPrivate Sub Command5_Click() Text1(2).Text = ""End SubPrivate Sub Command6_Click() Data1.Refresh Data1.Recordset.Close Unload MeEnd SubPrivate Sub Data1_Error(DataErr As Integer, Response As Integer)'这就是放置错误处理代码的地方'如果想忽略错误,注释掉下一行代码'如果想捕捉错误,在这里添加错误处理代码MsgBox "数据错事件命中错误:" & Error$(DataErr)Response = 0 '忽略错误End SubPrivate Sub Data1_Reposition()Data1.Caption = "记录:" & (Data1.Recordset.AbsolutePosition + 1)End SubPrivate Sub Form_Load() Data1.DatabaseName = App.Path & "kfqk.mdb" Data1.RefreshEnd Sub制作客户查询窗体该窗体主要为已经住店和离店的客户进行查找的窗体,查找方式按综合查询方式进行,制作过程如下:1. 再工程中增加一个新的窗体form4,其属性与结构设置和前面类似, 省略