1、宾馆管理信息系统系统平台:Windows 2000数据库服务器:Microsoft SQL Server 2000开发工具:Visual Basic 6.0系统开发人员: 编写目的宾馆在正常的运营中需要对客房资源、顾客信息、结算信息进行管理,利用宾馆管理信息系统及时了解各个环节中信息的变更,有利于提高管理效率。系统功能分析 系统开发的总体任务是实现宾馆各种信息的系统化、规范化和自动化。主要完成功能: 有关客房标准的制定、标准信息的输入,包括标准编号、标准名称、房间面积、床位数量、住房单价、是否有空调、电视机、电话以及单独卫生间等。 客房标准信息的修改、查询等。 客房基本信息的输入,包括客房编号
2、、客房类型、客房位置、客房单价、备注等。 客房基本信息的查询、修改,包括客房编号、客房类型、客房位置、客房单价、备注等。 剩余客房信息的查询等。 订房信息的输入,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。 订房信息的修改和查询,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。 结算信息的输入,包括客房编号、客房种类、位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、结算日期、备注信息等。 结算信息的修改和查询,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入
3、住日期、折扣、结日期、备注信息等。系统功能模块设计 按结构化程序设计思想,分析得出如下系统功能模块图 宾馆管理信息系统结算信息管理订房信息管理客房信息管理系统管理结算信息查询结算信息修改结算信息添加订房信息查询订房信息修改订房信息添加剩余客房信息查询设置客房信息设置客房标准密码管理用户管理客房信息查询客房信息修改客房信息添加客房标准修改客房标准添加 图系统功能模块图数据库设计数据库设计步骤: 数据库需求分析 数据库概念结构设计 数据库逻辑结构设计数据库需求分析分析调查有关宾馆管理信息需求的基础上得本系统所处理的数据流程 客房标准设置基本信息输入客房登记基本信息录入客房信息管理顾客登记订房信息管
4、理订房信息管理结算信息输入结算信息管理客房信息返回图 宾馆管理信息系统数据流程图 针对一般宾馆管理信息系统的需求,通过对宾馆管理过程的内容和流程分析,设计如下面所示的数据项和数据结构: 客房标准信息,包括的数据项有:标准编号、标准名称、房间面积、床位数量、住房单价、是否有空调、电视、电话、单独卫生间等。 客房信息,包括的数据项有:客房编号、客房种类、客房位置、客房单价、备注等。 订房信息,包括的数据项有:订房编号、客房编号、客房种类、客房位置、客房备注信息、顾客姓名、顾客身份证号码、入住时间、折扣、备注等。 结算信息,包括的数据项有:订房编号、客房编号、客房种类、客房位置、客房备注信息、顾客姓
5、名、顾客身份证号码、入住时间、折扣、结算时间、备注等。数据库概念结构设计 本系统根据以上的设计规划出的实体有:客房标准信息实体、客房信息实体、订房信息实体、结算信息实体。各个实体具体的描述-图如下:客房标准信息实体标准编号标准名称床位数量客房单价客房标准信息实体-图客房信息实体客房标准客房编号客房位置客房单价客房信息实体-图订房信息实体客房信息顾客信息折 扣入住时间订房信息实体-图结算信息实体客房信息顾客信息结算时间结算金额结算信息实体-图客房标准信息客房登记客房信息管理订 房订房信息管理结算信息管理客房结算实体之间关系-图数据库逻辑结构设计 首先将宾馆管理信息系统的数据库概念结构转化为SQL
6、 2000数据库系统所支持的实际数据模型,即:数据库的逻辑结构。其各个表格的设计结果如下列名数据类型可否为空说明TypeidVarcharNOT NULL标准编号TypenameVarcharNOT NULL标准名称AreaNumericNULL房间面积BednumNumericNULL床位数量HairconditionVarcharNULL是否有空调HtelephoneVarcharNULL是否有电话HtelevisionVarcharNULL是否有电视HtoiletVarcharNULL是否有单独卫生间PriceNumericNULL单价Roomtype 客房标准信息表列名数据类型可否为空
7、说明roomNOVarcharNOT NULL客房编号RoomtypeVarcharNOT NULL客房种类RoompositionVarcharNULL客房位置RoompriceNumericNULL单价PutupVarcharNOT NULL是否被预定RoommemoTextNULL备注Rooms 客房信息表列名数据类型可否为空说明Bookno VarcharNOT NULL订房编号CustomnameVarcharNOT NULL 顾客姓名CustomIDVarcharNOT NULL身份证号码RoomnoVarcharNOT NULL客房编号IndateDatetimeNULL入住日期
8、DiscountNumericNULL折扣InmenoTextNULL备注CheckdateDatetimeNULL结算日期AmountNumericNULL金额Bookin 订房信息表数据库结构的实现利用SQL 2000数据库系统中的查询分析实现数据库的逻辑结构,其表格如下:创建系统用户表格 user_Info CREATE TABLE dbo.user_Info1( user_IDchar(10) COLLATE Chinese_PRC_CI_AS NOT NULL, user_PWD char (10) COLLATE Chinese_PRC_CI_AS NULL, user_Des c
9、har(10) COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY 创建客房标准信息表格roomtype CREATE TABLE dbo.roomtype( typeidchar(10) COLLATE Chinese_PRC_CI_AS NOT NULL, typenamechar(10) COLLATE Chinese_PRC_CI_AS NOT NULL, areanumeric(5,0) NULL, bednumnumeric(2,0) NULL, hairconditionchar(2) COLLATE Chinese_PRC_CI_AS NUL
10、L, htelephonechar(2) COLLATE Chinese_PRC_CI_AS NULL, htelevisionchar(2) COLLATE Chinese_PRC_CI_AS NULL, htoiletchar(2) COLLATE Chinese_PRC_CI_AS NULL, pricenumeric(10,2)NULL ) ON PRIMARY创建客房信息表格roomsCREATE TABLE dbo.rooms( roomNOchar(10) COLLATE Chinese_PRC_CI_AS NOT NULL, roomtypechar(10) COLLATE C
11、hinese_PRC_CI_AS NOT NULL, roompositionchar(20) COLLATE Chinese_PRC_CI_AS NULL, roompricenumeric(10,2) NULL, putupchar(2) COLLATE Chinese_PRC_CI_AS NOT NULL, roommemotext COLLATE Chinese_PRC_CI_AS NULL ) ON PRIMARY TEXTIMAGE_ON PRIMARY创建订房信息表bookinCREATE TABLE dbo.bookin( booknochar(14) COLLATE Chin
12、ese_PRC_CI_AS NOT NULL, customnamechar(10) COLLATE Chinese_PRC_CI_AS NOT NULL, customIDchar(18) COLLATE Chinese_PRC_CI_AS NOT NULL, roomnochar(10) COLLATE Chinese_PRC_CI_AS NOT NULL, indatedatetime NULL, discountnumeric(2,0) NULL, inmemotext COLLATE Chinese_PRC_CI_AS NULL, checkdatedatetime NULL, am
13、mountnumeric(10,2) NULL) ON PRIMARY TEXTIMAGE_ON PRIMARY宾馆管理信息系统具体程序实现创建公用模块 Module1.bas 添加公共数据操作函数,用以执行各种SQL语句。添加函数ExecuteSQL,代码如下:Public Function ExecuteSQL(ByValSQL As String,MsgString AsString)_ As ADODB.Recordset 执行SQL语句,并返回记录集对象Dim cnn As ADODB.ConnectionDim rst As ADODB.RecordsetDim sTokens()
14、 As String异常处理On Error GoTo ExecuteSQL_Error用Split函数产生一个包含各个子串的数组 sTokens=Split(SQL) Set cnn=NEW ADODB.Connection打开连接 cnn.Open ConnectString If InStr(“INSERT,DELETE,UPDATE”,UCase$(sTokens(0) Then Cnn.Execute SQL MsgString=sTokens(0)&”query successful” Else Set rst=NEW ADODO.Recordset rst.Open Trim$(
15、SQL),cnn,adOpenKeyset,adLockOptimistic rst.MoveLast get RecordCount 返回记录集对象 Set ExecuteSQL=rst MsgString=”查询到”&rst.RecordCount&”条记录” End IfExecuteSQL_Exit: Set rst=Nothing Set cnn=Nothing Exit FunctionExecuteSQL_Error: MsgString=”查询错误:”&Err.Description Resume ExecuteSQL_ExitEnd FunctionPublic Sub En
16、terToTab(Keyasc As Integer)判断是否为回车键 If Keyasc=13 Then Keyasc用来保存当前按键 转换成Tab键 SendKeys”TAB” End IfEnd sub添加全局变量,用来记录各个窗口的读写状态,代码如下:Public flagTedit As Boolean 标示是否进入修改的窗体Public flagRedit As BooleanPublic flagBedit As BooleanPublic flagCedit As BooleanPublic gintCmode As Integer Public gintTmode As In
17、teger 记录是添加还是修改状态,1为添加,2为修改Public gintRmode As IntegerPublic gintBmode As Integer Public flagSedit As Boolean系统用户管理模块的创建 用户管理模块主要实现: 用户登陆。 添加用户。修改用户 具体客房标准添加代码:Private Sub Form_Load() 载入窗体后,判断所处状态 Dim intCount As Integer Dim MsgText As String Dim i As Integer If gintTmode=1 Then 判断是否属于添加状态 Me.Captio
18、n=Me.Caption & ”添加” For i=0 To 3 Combo1(i).AddItem ”否” Combo1(i).AddItem ”是” Combo1(i).ListIndex=0 Next i ElseIf gintTmode=2 Then 判断是否处于修改状态 Set mrc=ExecuteSql(txtSQL,MsgText) If mrc.EOF=false Then With mrc For intCount=0 To 3 txtItem(intCount)=.Fields(intCount) Next intCount txtItem(4)=.Fileds(8) F
19、or i=0 To 3 Combo1(i).Additem ”否” Combo1(i).Additem ”是” Combo1(i).ListIndex=0 Next i End With txtItem(0).Enabled=False End If Me.Caption=Me.caption&”修改”End IfmblChang=False End SubPrivate Sub cmd_Click()用户输入内容完毕后,单击cmdSave按钮触发Click事件 Dim intCount As Integer Dim sMeg As String Dim MsgText As String F
20、or intCount=0 To 4 判断是否输入内容 If Trim(txtItem(intCount)&”)=” Then Select Case intCount Case 0 sMeg=”标准编号” Case 1 sMeg=”标准名称” Case 2 sMeg=”房间面积” Case 3 sMeg=”床位数量” Case 4 sMeg=”床位单价” End Select sMeg=sMeg&”不能为空!” MsgBox sMeg,vbOkOnly+vbExclamation,”警告” txtItem(intCount).SetFocus Exit Sub End if Next int
21、Count 判断输入内容是否为数字 For intCount=2 To 4 If Not IsNumeric(Trim(txtItem(intCount) Then Select Case intCount Case 2 sMeg=”房间面积” Case 3 sMeg=”床位数量” Case 4 sMeg=”床位单价” End Select sMeg=sMeg&”请输入数字!”MsgBox sMeg,vbOKOnly+vbExclamation,”警告”txtItem(intCount).SeFocusExit Sub End If Next intCount If gintTmode=1 T
22、hen 判断是否有相同ID记录 txtSQL=”select*from roomtype where typeid_ =”&Trim(txtItem(0)&” Set mrc=ExecuteSQL(txtSQL,MsgText) If mrc.EOF=False Then MsgBox “已经存在此标准编号的记录!”,vbOKOnly+vbExclamation,”警告” txtItem(0).SetFocus Exit Sub End If Mrc.Close End If txtSQL=”select * from roomtype where typeid”&Trim(txtItem(0
23、)&”and typename=”&Trim(txtItem(1)&” Set mrc=ExecuteSQL(txtSQL,MsgText) If mrc.EOF=False Then MsgBox”已经存在相同客房标准的记录!”,vbOKOnly+vbExclamation,“警告” txtItem(1).Setfocus Exit Sub End If txtSQL=”delete from roomtype where typeid=”&Trim(txtItem(0)&”删除已有记录 Set mrc=ExecuteSQL(txtSQL,MsgText) txtSQL=”select *f
24、rom roottype”添加新记录 Set mrc=ExecuteSQL(txtSQL,MsgText) mrc.AddNew For intCount=0 To 3 mrc.Fields(intCount)=Trim(txtItem(intCount) Next intCount For intCount=0 To 3 mrc.Fields(intCount+4)=Trim(Combo1(intCount) Next intCount mrc.Fields(8)=Trim(txtItem(4) mrc.Update 更新数据库 mrc.Close if gintTmode=1 Then 判
25、断是否属于添加状态 MsgBox “添加纪录成功!”,vbOKOnly+vbExclamtion,“添加记录” For intCount=0 To 4 txtItem(intCount)=” 清除已经输入的内容 Next intCount For intCount=0 To 3 Combo1(intCount).ListIndex=0 Next intCount mblChange=False判断是否打开窗口 if flagTedit Then Unload frmRoomtype frmRoomtype.txtSQL=“select *from roomtype” frmRoomtype.S
26、how End If ElseIf gintTmode=2 Then 判断是否处于修改状态 Unload Me If flagTedit Then Unload frmRoomtype EndIf frmRoomtype.txtSQL=”select *from roomtype” frmRoomtype.Show End If End SubPrivate Sub txtItem_GotFocus(Index As Integer)文本框获得焦点时触发该事件,即自动选中输入的内容,便于修改txtItem(Index).SelStart=0txtItem(Index).SelLength=Le
27、n(txtItem(Index)End SubPrivate Sub cmdExit_Click()单击按钮cmdExit取消添加信息If mblChange And cmdSave.Enabled Then If MsgBox(“保存当前记录的变化吗?”,vbOKCancel+vbExclamation,”警告”)=vbOK Then 保存 Call cmdSave_Click End IfEnd IfUnload MeEnd SubPrivate Sub txtItem_KeyDown(Index As Integer,KeyCode As Integer,Shift_ As Intege
28、r)输入完内容,单击回车键将自动进入下一个文本框,触发文本框的Keydown事件 EnterToTab KeyCodeEnd Sub修改客房标准窗体的创建Private Sub From_Load()ShowTitleShowDataflagTedit=TrueEnd SubPrivate Sub ShowTitle()调用showTitle函数,显示表头Dim i As IntegerWith msgList .Cols=10 .TextMatrix(0,1)=”标准编号” .TextMatrix(0,2)=”标准名称” .TextMatrix(0,3)=”房间面积” .TextMatrix
29、(0,4)=”床位数量” .TextMatrix(0,5)=”是否有空调” .TextMatrix(0,6)=”是否有电话” .TextMatrix(0,7)=”是否有电视” .TextMatrix(0,8)=”是否有卫生间” .TextMatrix(0,9)=”房间单价” .FixedRows=1固定表头 For i=0 To 9 设置各列的对齐方式 .ColAlignment(i)=0 Next i .FillStyle=flexFillRepeat表头项居中 .Col=0 .Row=0 .RowSel=1 .ColSel=.Cols-1 .CellAlignment=4 .ColWidt
30、h(0)=300设置单元大小 .ColWidth(1)=1000 .ColWidth(2)=2000 .ColWidth(3)=2000 .ColWidth(4)=1000 .ColWidth(5)=1000 .ColWidth(6)=1000 .ColWidth(7)=1000 .ColWidth(8)=1000 .ColWidth(9)=1000 .Row=1End WithEnd SubPrivate Sub ShowData()调用showData函数,显示记录列表 Dim i As Integer Set mrc=ExecuteSQL(txtSQL,MsgText)根据需要设置SQL
31、语句,显示需要的记录 With msgList .Rows=1 Do While Not mrc.EOF .Rows=Rows+1 For i=1 To mrc.Fields.Count Select Case mrc.Fields(i-1).Type Case adDBDate .TextMatrix(.Rows-1,i)=Format(mrc.Fields(i-1)&”,”yyyy-mm-dd”) Case Else .TextMatrix(.Rows-1,i)=mrc.Fields(i-1)&” End Select Next i Mrc.MoveNext Loop End With m
32、rc.CloseEnd SubPrivate Sub msgList_MouseUp(Button As Integer,Shift As Integer,x As Single,y As Single)选择记录,然后单击鼠标右键,触发MouseUp事件 If Button=2 And Shift=0 Then PopupMenu fMainFrom.menuRoomtype End IfEnd SubPrivate Sub menuModifyroomtype_Click() Dim intCount As Integer If flagTedit Then 判断是否打开记录窗体 If fr
33、mRoomtype.msgList.Rows1 Then fintTmode=2设置为修改状态 intCount=frmRoomtype.msgList.Row记下选择记录 frmRoomtype1.txtSQL=”select*from roomtype where typeid”&Trim(frmRoomtype.msgList.TextMatrix(intCount,1)&” frmRoomtype1.Show Else Call menuAddroomtype_Click End If Else frmRoomtype.txtSQL=”select*from roomtype” frm
34、Roomtype.Show End IfEnd SubPrivate Sub From_Resize()窗体变化时,调整标签和表格位置,使标签处于窗体的最上方,而表格始终处于标签下方 If Me.WindowStatevbMinimized And fMainFrom.WindowStatevbMinimized Then边界处理 If Me.Scaleheight10*lblTitle.Height Then Exit Sub End If If Me.ScaleWidth1 Then If MsgBox(“真的要删除这条文件记录么?”,vbOKCancel+vbExclamation,”警
35、告”)=vbOK Then intCount=frmRoomtype.msgList.Row txtSQL=”delete from roomtype where typeid”&Trim(frmRoomtype.msgList.TextMatrix(intCount,1)&” Set mrc=ExecuteSQL(txtSQL,MsgText) Unload frmRoomtype关闭记录窗体 frmRoomtype.txtSQL=”select*from roomtype”重新选择所有记录 frmRoomtype.Show End If End If End IfEnd Sub客房信息管理
36、模块的创建 客房信息管理模块主要实现如下功能: 添加客房信息 修改客房信息 删除客房信息 查询客房信息 具体实现代码如下:Private Sub From_Load()载入窗体时,自动添加客房信息种类 Dim sSql As String Dim intCount As Integer Dim MsgText As String Dim mrcc As ADODB.Recordset If gintRmode=1 Then 判断是否处于添加状态 Me.Caption=me.Caption&“添加” txtSQL=”select DISTINCT typename from roomtype” Set mrc=ExecuteSQL(txtSQL,MsgText) If Not mrc.EOF Then Do While Not mrc.EOF
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100