酒店管理信息系统论文

酒店管理信息系统

2017.9

系统平台:Windows 2000

数据库服务器:Microsoft SQL Server 2000 开发工具:Visual Basic 6.0 系统开发人员:

⒈编写目的

酒店在正常的运营中需要对客房资源、顾客信息、结算信息进行管理,利用宾馆管理信息系统及时了解各个环节中信息的变更,有利于提高管理效率。

⒉系统功能分析

系统开发的总体任务是实现宾馆各种信息的系统化、规范化和自动化。 主要完成功能:

● 有关客房标准的制定、标准信息的输入,包括标准编号、标准名称、房间面积、床位数量、住房单价、是否有空调、电视机、电话以及单独卫生间等。 ● 客房标准信息的修改、查询等。

● 客房基本信息的输入,包括客房编号、客房类型、客房位置、客房单价、备注等。

● 客房基本信息的查询、修改,包括客房编号、客房类型、客房位置、客房单价、备注等。

● 剩余客房信息的查询等。

● 订房信息的输入,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。 ● 订房信息的修改和查询,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。

● 结算信息的输入,包括客房编号、客房种类、位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、结算日期、备注信息等。 ● 结算信息的修改和查询,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、结日期、备注信息等。

⒊系统功能模块设计

按结构化程序设计思想,分析得出如下系统功能模块图

图Ⅰ系统功能模块图

⒋数据库设计

数据库设计步骤: ● 数据库需求分析

● 数据库概念结构设计 ● 数据库逻辑结构设计 ①数据库需求分析

分析调查有关宾馆管理信息需求的基础上得本系统所处理的数据流程

图Ⅱ 宾馆管理信息系统数据流程图

针对一般宾馆管理信息系统的需求,通过对宾馆管理过程的内容和流程分析,设计如下面所示的数据项和数据结构:

● 客房标准信息,包括的数据项有:标准编号、标准名称、房间面积、床位

数量、住房单价、是否有空调、电视、电话、单独卫生间等。

● 客房信息,包括的数据项有:客房编号、客房种类、客房位置、客房单价、

备注等。

● 订房信息,包括的数据项有:订房编号、客房编号、客房种类、客房位置、

客房备注信息、顾客姓名、顾客身份证号码、入住时间、折扣、备注等。 ● 结算信息,包括的数据项有:订房编号、客房编号、客房种类、客房位置、

客房备注信息、顾客姓名、顾客身份证号码、入住时间、折扣、结算时间、备注等。

②数据库概念结构设计

本系统根据以上的设计规划出的实体有:客房标准信息实体、客房信息实体、订房信息实体、结算信息实体。各个实体具体的描述E-R图如下:

客房标准信息实体E-R图

客房信息实体E-R图

订房信息实体E-R图

结算信息实体E-R图

实体之间关系E-R图

③数据库逻辑结构设计

首先将宾馆管理信息系统的数据库概念结构转化为SQL 2000数据库系统所支

⒌数据库结构的实现

利用SQL 2000数据库系统中的查询分析实现数据库的逻辑结构,其表格如下:

创建系统用户表格 user_Info

CREATE TABLE [dbo].[user_Info1](

[user_ID][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [user_PWD] [char] (10) COLLATE Chinese_PRC_CI_AS NULL, [user_Des] [char](10) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]

创建客房标准信息表格 roomtype CREATE TABLE [dbo].[roomtype](

[typeid][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [typename][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [area][numeric](5,0) NULL, [bednum][numeric](2,0) NULL,

[haircondition][char](2) COLLATE Chinese_PRC_CI_AS NULL, [htelephone][char](2) COLLATE Chinese_PRC_CI_AS NULL, [htelevision][char](2) COLLATE Chinese_PRC_CI_AS NULL, [htoilet][char](2) COLLATE Chinese_PRC_CI_AS NULL, [price][numeric](10,2)NULL ) ON [PRIMARY]

创建客房信息表格 rooms

CREATE TABLE [dbo].[rooms](

[roomNO][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL,

[roomtype][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [roomposition][char](20) COLLATE Chinese_PRC_CI_AS NULL, [roomprice][numeric](10,2) NULL,

[putup][char](2) COLLATE Chinese_PRC_CI_AS NOT NULL, [roommemo][text] COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 创建订房信息表bookin

CREATE TABLE [dbo].[bookin](

[bookno][char](14) COLLATE Chinese_PRC_CI_AS NOT NULL, [customname][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [customID][char](18) COLLATE Chinese_PRC_CI_AS NOT NULL, [roomno][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [indate][datetime] NULL,

[discount][numeric](2,0) NULL,

[inmemo][text] COLLATE Chinese_PRC_CI_AS NULL, [checkdate][datetime] NULL, [ammount][numeric](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.Connection Dim rst As ADODB.Recordset Dim sTokens() 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$(SQL),cnn,adOpenKeyset,adLockOptimistic rst.MoveLast get RecordCount

‘返回记录集对象

Set ExecuteSQL=rst

MsgString=”查询到”&rst.RecordCount&”条记录” End If

ExecuteSQL_Exit: Set rst=Nothing Set cnn=Nothing Exit Function ExecuteSQL_Error:

MsgString=”查询错误:”&Err.Description Resume ExecuteSQL_Exit End Function

Public Sub EnterToTab(Keyasc As Integer) ‘判断是否为回车键

If Keyasc=13 Then ‘ Keyasc用来保存当前按键 ‘转换成Tab 键 SendKeys”{TAB}” End If End sub

‘添加全局变量,用来记录各个窗口的读写状态,代码如下: Public flagTedit As Boolean ‘ 标示是否进入修改的窗体 Public flagRedit As Boolean Public flagBedit As Boolean Public flagCedit As Boolean Public gintCmode As Integer

Public gintTmode As Integer ’记录是添加还是修改状态,1为添加,2为修

Public gintRmode As Integer Public 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.Caption=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) For 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 If

mblChang=False End Sub Private Sub cmd_Click()’用户输入内容完毕后,单击cmdSave 按钮触发Click 事件

Dim intCount As Integer Dim sMeg As String Dim MsgText As String

For 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 intCount ‘判断输入内容是否为数字 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).SeFocus Exit Sub

End If Next intCount

If gintTmode=1 Then ‘判断是否有相同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))&”’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 *from 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 ‘判断是否属于添加状态

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.Show

End If

ElseIf gintTmode=2 Then ‘判断是否处于修改状态

Unload Me

If flagTedit Then

Unload frmRoomtype

EndIf

frmRoomtype.txtSQL=”select *from roomtype”

frmRoomtype.Show

End If

End Sub

Private Sub txtItem_GotFocus(Index As Integer)’文本框获得焦点时触发该事件,即自动选中输入的内容,便于修改

txtItem(Index).SelStart=0

txtItem(Index).SelLength=Len(txtItem(Index))

End Sub

Private Sub cmdExit_Click()’单击按钮cmdExit 取消添加信息

If mblChange And cmdSave.Enabled Then

If MsgBox(“保存当前记录的变化

吗?”,vbOKCancel+vbExclamation,”警告”)=vbOK Then ‘保存

Call cmdSave_Click

End If

End If

Unload Me

End Sub

Private Sub txtItem_KeyDown(Index As Integer,KeyCode As Integer,Shift_ As Integer) ‘输入完内容,单击回车键将自动进入下一个文本框,触发文本框的Keydown 事件

EnterToTab KeyCode

End Sub

⑶修改客房标准窗体的创建

Private Sub From_Load()

ShowTitle

ShowData

flagTedit=True

End Sub

Private Sub ShowTitle()‘调用showTitle 函数,显示表头

Dim i As Integer

With msgList

.Cols=10

.TextMatrix(0,1)=”标准编号”

.TextMatrix(0,2)=”标准名称”

.TextMatrix(0,3)=”房间面积”

.TextMatrix(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

.ColWidth(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=1

End With

End Sub

Private Sub ShowData()‘调用showData 函数,显示记录列表

Dim i As Integer

Set mrc=ExecuteSQL(txtSQL,MsgText)‘根据需要设置SQL 语句,显示需要的记录

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

mrc.Close

End Sub

Private 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 If

End Sub

Private Sub menuModifyroomtype_Click()

Dim intCount As Integer

If flagTedit Then ‘判断是否打开记录窗体

If frmRoomtype.msgList.Rows>1 Then

fintTmode=2‘设置为修改状态

intCount=frmRoomtype.msgList.Row‘记下选择记录

frmRoomtype1.txtSQL=”select*from roomtype where

typeid’”&Trim(frmRoomtype.msgList.TextMatrix(intCo

unt,1))&”’”

frmRoomtype1.Show

Else

Call menuAddroomtype_Click

End If

Else

frmRoomtype.txtSQL=”select*from roomtype”

frmRoomtype.Show

End If

End Sub

Private Sub From_Resize()‘窗体变化时,调整标签和表格位置,使标签处于

窗体的最上方,而表格始终处于标签下方

If Me.WindowStatevbMinimized And

fMainFrom.WindowStatevbMinimized Then‘边界处理

If Me.Scaleheight

Exit Sub

End If

If Me.ScaleWidth

End If

lblTitle.Top=lblTitle.Height‘控制控件的位置

lblTitle.Left=(Me.Width-lblTitle.Width)/2

msgList.Top=lblTitle.Top+lblTitle.Height+lblTitle.Height/2 msgList.Width=Me.ScaleWidth-200

msgList.Left=Me.ScaleLeft+100

msgList.Height=Me.ScaleHeight-msgList.Top-200

End If

End Sub

⑷删除客房标准

Private Sub menuDeleteroomtype_Click()

Dim txtSQL As String

Dim intCount As Integer

Dim mrc As ADODB.Recordset

Dim MsgText As String

If flagTedit Then ‘判断是否打开记录窗体

If frmRoomtype.msgList.Rows>1 Then

If MsgBox(“真的要删除这条文件记录么?”,

vbOKCancel+vbExclamation,”警告”)=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 If

End Sub

⑸客房信息管理模块的创建

客房信息管理模块主要实现如下功能:

·添加客房信息

·修改客房信息

·删除客房信息

·查询客房信息

具体实现代码如下:

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

cboItem(0).AddItem Trim(mrc.Fields(0))

mrc.MoveNext

Loop

cboItem(0).ListIndex=0‘显示记录内容

Else

MsgBox “请先进行客房标准设置!”,vbOKOnly+vbExclamation,

“警告”

cmdSave.Enabled=False

Exit Sub

End If

mrc.Close

ElseIf gintRmode=2 Then ‘判断是否处于修改状态

Set mrcc=ExecuteSQL(txtSQL,MsgText)‘设置SQL 语句显示当前

选择记录

If mrcc.EOF=False Then

With mrcc

txtItem(0)=.Fields(0)

For intCount=1 To 2

If Not IsNull(.Fields(intCount+1))Then‘判断

内容是否为空

txtItem(intCount)=.Fields(intCount+1) End If

Next intCount

txtItem(3)=.Fields(5)

txtSQL=”select DISTINCT typename from roomtype” Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

cboItem(0).AddItem Trim(mrc.Fields(0)) mrc.MoveNext

Loop

cboItem(0).ListIndex=0

Else

MsgBox“请先进行客房标准设

置!”,vbOKOnly+vbExclamation,“警

告”

cmdSave.Enabled=False

Exit Sub

End If

mrc.Close

End With

End If

mrcc.Close

Me.Caption=Me.Caption&“修改”

End If

mblChange=False

End Sub

Private Sub cmdSave_Click()‘单击保存按钮触发事件

Dim intCount As Integer

Dim sMeg As String

Dim mrcc As ADODB.Recordset

Dim Msgtext As String

For intCount=0 To 3

If Trim(TxtItem(intCount)&””)=”” Then

Select Case intCount

Case 0

sMeg=“客房编号”

Case 1

sMeg=“客房位置”

End Select

sMeg=sMeg&“不能为空!”

MsgBox sMeg,vbOKOnly+vbExclamation,“警告”

txtItem(intCount).SetFocus

Exit Sub

End If

Next intCount

If gintRmode=1 Then‘判断是否有重复记录

txtSQL=”select * from rooms where roomNO=

‘”&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

If gintRmode=2 Then ‘判断是否处于修改状态

txtSQL=”delete from rooms where roomNO=

‘”&Trim(txtItem(0))&”’”

Set mrc=ExecuteSQL(txtSQL,MsgText)

End If

txtSQL=”select*from rooms”‘再加入新记录

Set mrc=ExecuteSQL(txtSQL,MsgText)

mrc.AddNew‘为数据库对象添加记录

mrc.Fields(0)=Trim(txtItem(0))

mrc.Fields(1)=Trim(txtItem(0))

For intCount=1 To 2

If Trim(txtItem(intCount)&””)=”” Then

mrc.Fields(intCount+1)=Null

Else

mrc.Fields(intCount+1)=Trim(txtItem(intCount))

End If

Next intCount

mrc.Fields(4)=””

mrc.Fields(5)=Trim(txtItem(3))

mrc.Update

mrc.Close

If gintRmode=1 Then

For intCount=0 To 3

txtItem(intCount)=””

Next intCount

mblChange=False

If flagRedit Then

Unload frmRoom

frmRoom.txtSQL=”select*from rooms”‘重新显示数据 frmRoom.Show

End If

ElseIf gintRmode=2 Then

Unload Me

If flagRedit Then

Unload frmRoom

End If

frmRoom.txtSQL=”select*from rooms”

frmRoom.Show

End If

End Sub

·修改客房信息

Private Sub menuModifyroom_Click()‘选择修改房间信息,触menuModifyroom

的Click 事件, 程序判断为修改状态后,首先

删除原有记录,然后把新内容加入到数据库

Dim intCount As Integer

If flagRedit Then ‘判断记录窗体是否打开

If frmRoom.msgList.Rows>1 Then‘判断客房信息列表内容是否为空 gintRmode=2‘设置为修改状态

intCount=frmRoom.msgList.Row‘纪录当前记录位置

frmRoom1.txtSQL=”select*from rooms where roomNO=’”&Trim(frmRoom.msgList.TextMatrix(intCount,1))&”’”

frmRoom1.Show

Else

Call menuAddroom_Click‘添加记录

End If

Else

frmRoom.txtSQL=”select*from rooms”

frmRoom.Show

End If

End Sub

·删除客房信息

Private Sub menuDeleteroom_Click()

Dim txtSQL As String

Dim intCount As Integer

Dim mrc As ADODB.Recordset

Dim MsgText As String

If flagTedit Then

If frmRoom.msgList.Rows>1 Then‘判断客房信息列表内容是否为空 If MsgBox(“真的要删除这条文件记录

么?”,vbOKCancel+vbExclamation,“警告”)=vbOK Then

intCount=frmRoom.msgList.Row‘记载当前记录位置

txtSQL=”delete from rooms where roomNO=

‘”&Trim(frmRoom.msgList.TextMatrix(intCount,1)&”’”

Set mrc=ExecuteSQL(txtSQL,MsgText)‘执行删除操作 Unload frmRoom

frmRoom.txtSQL=”select*from rooms”

frmRoom.Show

End If

End If

End If

End Sub

·查询客房信息

Private Sub From_Load()‘载入窗体时,将自动加入所有记录的入库时间 Dim i As Integer

Dim j As Integer

Dim sSql As String

Dim txtSQL As String

Dim MsgText As String

Dim mrc As ADODB.Recordset

txtSQL=”select DISTINCT typename from roomtype”‘初始化客房种类 Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

Combo1.AddItem Trim(mrc.Fields(0))

Mrc.MoveNext

Loop

Combo1.ListIndex=0

Else

MsgBox “请先进行客房标准设置!”,vbOKOnly+vbExclamation,”警告” Exit Sub

End If

mrc.Close

End Sub

Private Sub cmdOK_Click()‘设置完查询内容和方式后,单击cmdOk 按钮查询 Dim sQSql As String

If chkItem(0).Value=vbChecked Then

sQSql=”roomNO=’”&Trim(txtItem(0)&””)&”’”

End If

If chkItem(1).Value=vbChecked Then

If Trim(sQSql&””)=”” Then

sQSql=”roomtype=’”&Trim(Combo1&””)&”’”

Else

sQSql=sQSql&”and roomtype=’”&Trim(Combo1&””)&”’” End If

End If

If Trim(sQSql)=”” Then

MsgBox “请设置查询条件!”,vbOKOnly+vbExclamation,“警告” Exit Sub

Else

If flagRedit Then

Unload frmRoom

End If

frmRoom.txtSQL=”select*from rooms where”&sQSql

frmRoom.Show

End If

Me.Hide

End Sub

⑹订房信息管理模块的创建

订房信息管理模块主要实现如下功能:

·查询剩余客房信息

·添加订房信息

·修改订房信息

·删除订房信息

·查询订房库信息

具体实现代码如下:

Private Sub From_Load()‘载入窗体时,程序将自动加入客房种类和客房单价 Dim txtSQL As String

Dim MsgText As String

Dim mrc As ADODB.Recordset

txtSQL=”select distinct typename from roomtype”‘选择所有客房种类 Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

Combo1(0).AddItem mrc.Fields(0)

mrc.MoveNext

Loop

End If

mrc.Close

txtSQL=”select distinct price from roomtype”

Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

Combo1(1).AddItem mrc.Fields(0)

Combo1(2).AddItem mrc.Fields(0)

mrc.MoveNext

Loop

End If

mrc.Close

End Sub

Private Sub cmdOK_Click()

Dim sQSql As String

If chkItem(0).Value=vbChecked Then

sQSql=”roomtype=’”&Trim(Combo1(0)&””)&”’”

End if

If chkItem(1).Value=vbChecked Then

If Trim(sQSql&””)=”” Then

If Trim(Combo1(1)&””)””And Trim(Combo1(2)&””)””

Then

sQSql=”roomprice

roomprice >=’”&Trim(Combo1(2)&””)”’”

ElseIf Trim(Combo1(1)&””)=””And

Trim(Combo1(2)&””)””Then

sQSql=”roomprice >=’”&Trim(Combo1(2)&””)&”’” ElseIf Trim(Combo1(1)&””)””And

Trim(Combo1(2)&””=””Then

sQSql=”roomprice

Else

If Trim(Combo1(1)&””)””And

Trim(Combo1(2)&””)””Then

sQS ql=sQSql&”androomprice>=’”&Trim(Combo

1(1)&””)&”’and

roomprice >=’”&Trim(Combo1(2)&””)&”’

ElseIf Trim(Combo1(1)&””)=””And

Trim(Combo1(2)&””)””Then

sQSql=sQSql&”and

roomprice >=’”&Trim(Combo1(2)&””)&”’

ElseIf Trim(Combo1(1)&””)””And

Trim(Combo1(2)&””)=””Then

sQSql=sQSql&”and

roomprice

End If

End If

If Trim(sQSql)=”” Then

MsgBox “请设置查询条件! ”,vbOKOnly+vbExclamation,“警告” Exit Sub

Else

If flagRedit Then

Unload frmRoom

End If

frmRoom.txtSQL=”select*from rooms where”&sQSql&”and

putup”’y’”

frmRoom.Show

flagSedit=True

End If

Me.Hide

End Sub

Private Sub From_Load()‘添加订房信息,载入窗体时把所有未预定的客房信

息加入其中

Dim sSql As String

Dim intCount As Integer

Dim MsgText As String

If flagSedit Then ‘判断打开方式

Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

For intCount=0 To 3

cboItem(intCount).AddItem mrc.Fields(intCount)

cboItem(intCount).ListIndex=0

Next intCount

txtItem(5)=mrc.Fields(5)

End If

mrc.Close

txtNo=GetRkno()

gintBmode=1

Else

If gintBmode=1 Then

Me.Caption=Me.Caption&“添加”

txtSQL=”select DISTINCT roomNO from rooms where putup’y’” Set mrc=ExecuteSQL(txtSQL.MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

cboItem(0).AddItem Trim(mrc.Fields(0))

mrc.MoveNext

Loop

Else

MsgBox “请先进行客房登记! ”,vbOKOnly+vbExclamation,“警告” cmdSave.Enabled=False

Exit Sub

End If

mrc.Close

txtNo=GetRkno

ElseIf gintBmode=2 Then

Set mrc.ExecuteSQL(txtSQL,MsgText)

If mrc.EOF Then

With mrc

txtNO=!bookno

For intCount=0 To 1

If Not IsNull(.Fields(intCount+1)) Then txtItem(intCount)=.Fields(intCount+1) End If

Next intCount

cboItem(0).AddItem !roomno

cboItem(0).ListIndex=0

For intCount=2 To 4

If Not IsNull(.Fields(intCount+2)) Then txtItem(intCount)=.Fields(intCount+2) End If

Next intCount

End With

End If

mrc.Close

Me.Caption=Me.Caption&“修改”

txtSQL=”select*from rooms

r oomNO=’”&Trim(cboItem(0))&”’”

Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

For intCount=1 To 3

cboItem(intCount).AddItem mrc.Fields(intCount) cboItem(intCount).ListIndex=0

Next intCount

txtItem(5)=mrc.Fields(5)

End If

mrc.Close

End If

End If

mblChange=False

End Sub

Private Sub cmdSave_Click()‘添加记录到数据库中

Dim intCount As Integer

Dim sMeg As String

Dim mrcc As ADODB.Recordset

Dim MsgText As String

For intCount=0 To 3‘判断输入内容是否为空

If Trim(txtItem(intCount)&””)=”” Then

Select Case intCount

Case 0

sMeg=“顾客姓名” where

Case 1

sMeg=“身份证号码”

Case 2

sMeg=“折扣”

Case 3

sMeg=“入住时间”

End Select

sMeg=sMeg&“不能为空!”

MsgBox sMeg,vbOKOnly+vbExclamation,“警告”

txtItem(intCount).SetFocus

Exit Sub

End If

Next intCount

For intCount=0 To 3

If Trim(vboItem(intCount)&””)=””Then

Select Case intCount

Case 0

sMeg=“客房编号”

Case 1

sMeg=“客房种类”

Case 2

sMeg=“客房位置”

Case 3

sMeg=“客房单价”

End Select

sMeg=sMeg&“不能为空!”

MsgBox sMeg,vbOKOnly+vbExclamation,“警告”

cboItem(intCount).SetFocus

Exit Sub

End If

Next intCount

If IsDate(txtItem(2)) Then

txtItem(2)=Format(txtItem(2),”yyyy-mm-dd”)

Else

MsgBox “入库时间应输入日期

(yyyy-mm-dd)!”,vbOKOnly+vbExclamation,”警

告”

txtItem(2).SetFocus

Exit Sub

End If

For intCount=1 To 3 Step 2

If Not IsNumeric(txtItem(intCount)) Then

MsgBox “请输入数字”,vbOKOnly+vbExclamation,“警告” txtItem(intCount).SetFocus

Exit Sub

End If

Next intCount

If gintBmode =2 Then

txtSQL=”delete from booking where bookno=’”&Trim(txtNo)&”’” Set mrcc=ExecuteSQL(txtSQL,MsgText)

End If

txtSQL=”select*from booking”

Set mrcc=ExecuteSQL(txtSQL,MsgText)

mrcc.AddNew

mrcc.Fields(0)=txtNO

For intCount=0 To 1

mrcc.Fields(intCount+1)=txtItem(intText)

Next intCount

mrcc.Fields(3)=cboItem(0)

For intCount=2 To 4

mrcc.Fields(intCount+2)=txtItem(intCount)

Next intCount

mrcc.Fields(8)=0

mrcc.Update

mrcc.Close

txtSQL=”select*from rooms where

roomNO =’”&Trim(vboItem(0))&”’”

Set mrcc=ExecuteSQL(txtSQL,MsgText)

If Not mrcc.EOf Then

mrcc!putup=”y”

End If

mrcc.Update

mrcc.Close

If gintBmode=1 Then

MsgBox “添加订房信息成功!”,vbOKOnly+vbExclamation,“添加订房消

息”

Unload Me

If flagBedit Then

Unload frmBookin

End If

frmBookin.txtSQL=”select

bookno,customname,customID,roomno,indate,di

scount,inmemo from booking where

amount=’0’”

frmBookin.Show

Else

MsgBox“修改订房信息成功!”,vbOKOnly+vbExclamation,“修改订房信

息”

Unload Me

If flagBedit Then

Unload frmBookin

End If

frmBookin.txtSQL=”select

bookno,customname,customID,roomno,indate,di

scount,inmemo from booking where amount

=’0’”

frmBookin.Show

End If

End Sub

⑺结算信息管理模块的创建

结算信息管理模块主要实现如下功能:

·添加结算信息

·修改结算信息

·查询结算信息

具体实现代码如下:

Private Sub From_Load()‘窗体载入时,自动加入所有未结算客房信息 Dim sSql As String

Dim intCount As Integer

Dim MsgText As String

If gintCmode=1 Then ‘判断是否处于添加状态

Me.Caption=Me.Caption&“添加”

txtSQL=”select DISTINCT roomno from booking where amount=’0’”‘初始化客房编号,选择所有未结算客房编号

Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

cboItem(0).AddItem Trim(mrc!roomno)

mrc.MoveNext

Loop

Else

MsgBox “没有顾客入住!”,vbOKOnly+vbExclamation,“警告” cmdSave.Enabled=False

Exit Sub

End If

mrc.Close

ElseIf gintCmode=2 Then‘判断是否处于修改状态

Set mrc=ExecuteSQL(txtSQL,MsgText)

If mrc.EOF=False Then

With mrc

txtNo =mrc.Fields(0)

For intCount=0 To 1

txtItem(intCount)=.Fields(intCount+1)

Next intCount

cboItem(0).AddItem.fields(3)

cboItem(0).ListIndex=0

For intCount=2 To 3

If Not IsNull(.Fields(intCount+2)) Then

txtItem(intCount)=.Fields(intCount+2)

End If

Next intCount

txtItem(5)=.Fields(6)

txtItem(4)=.Fields(7)

End With

End If

mrc.Close

txtSQL=”select*from rooms where roomNO=’”&cboItem(0)&”’” Set mrc=ExecuteSQL(txtSQL,MsgText)

If mrc.EOF=False Then

With mrc

For intCount=1 To 3

cboItem(intCount).AddItem.Fields(intCount) cboItem(intCount).ListIndex=0

Next intCount

End With

End If

mrc.Close

For intCount =0 To 3

txtItem(intCount).Enabled=False

Next intCount

Me.Caption=Me.Caption&“修改”

End If

mblChange=False

End Sub

Private Sub cboItem_Click(Index As Integer) ‘选择不同客房,触发cboItem 下拉式文本框的click 事件,显示相应的顾客信息

Dim sSql As String

Dim MsgText String

Dim mrcc As ADODB.Recordset

Dim intCount As Integer

If gintCmode =1 Then ‘判断是否处于添加状态,否则将退出

If Index=0 Then

cboItem(1).Enabled=True

cboItem(2).Enabled=True

cboItem(3).Enabled=True

cboItem(1).Clear‘清除原有内容

cboItem(2).Clear

cboItem(3).Clear

txtSQL=”select roomNO,roomtype,roomposition,roomprice from where roomNo =’”&Trim(cboItem(0))&”’” ‘显示有关客房的具体信息 Set mrcc=ExecuteSQL(txtSQL,MsgText)

If Not mrcc.EOF Then

cboItem(1).AddItem mrcc!roomtype

cboItem(2).AddItem mrcc!roomposition

cboItem(3).AddItem mrcc!roomprice

cboItem(1).Enabled=False

cboItem(2).Enabled=False

cboItem(3).Enabled=False

cboItem(1).ListIndex=0

cboItem(2).ListIndex=0

cboItem(3).ListIndex=0

cmdSave.Enabled=True

Else

MsgBox “没有订房信息! ”,vbOKOnly+vbExclamation, “警告” cmdSave.Enabled=False

Exit Sub

End If

mrcc.Close

txtSQl=”select*from booking where amount=’0’and roomno=’”&Trim(cboItem(0))&”’”‘显示相关顾客信息

Set mrcc=ExecuteSQL(txtSQL,MsgText)

If Not mrcc.EOF Then

txtNO=mrcc!bookno

txtItem(0)=mrcc!customname

txtItem(1)=mrcc!customID

txtItem(2)=mrcc!indate

txtItem(3)=mrcc!discount

txtItem(5)=mrcc!inmemo

For intCount =0 To 3

txtItem(intCount).Enabled=False

Next intCount

End If

mrcc.Close

End If

End If

Exit Sub

End Sub

Privte Sub cmdSave_Click()

Dim intCount As Integer

Dim sMeg As String

Dim mrcc As ADODB.Recordset

Dim MsgText As String

Dim bYear As Integer

Dim eYear As Integer

Dim bDays As Integer

Dim eDays As Integer

Dim aDays As Integer

Dim amMount As Double

If Trim(txtItem(4)&””)=””Then

MsgBox sMeg,vbOKOnly+vbExclamation,“警告”

txtItem(4).SetFocus

Exit Sub

End If

If IsDate(txtItem(4)) Then

txtItem(4)=Format(txtItem(4),”yyyy-mm-dd”)

Else

MsgBox “入库时间应输入日期(yyyy-mm-yy )!”,vbOKOnly+vbExclamation,“警告”

txtItem(4).SetFocus

Exit Sub

End If

txtSQl=”select *from booking where bookno=’”&Trim(txtNo)&”’”‘加入新记录

Set mrcc=ExecuteSQL(txtSQL,MsgText)

mrcc.Fields(6)=txtItem(5)

mrcc.Fields(7)=txtItem(4)

bYear=DatePart(“yyyy”,txtItem(2))‘获得入住日期和结算日期年代 eYear=DatePart(“yyyy”,txtItem(4))

bDays=DatePart(“y”,txtItem(2))‘获得入住日期和结算日期天数 eDays=DatePart(“y”,txtItem(4))

If bYear=eYear Then

aDays=eDays-bDays

Else

aDays=(eYear-bYear-1)*365+(365-bDays)+eDays

End If

mrcc.Fields=aDays*Trim(cboItem(3))*Trim(txtItem(3))/100‘计算应交房费

amMount=aDays*Trim(cboItem(3))*Trim(txtItem(3))/100

mrcc.Update‘更新数据

mrcc.Close

txtSQL=”select*from rooms where roomNO=’”&cboItem(0)&”’” Set mrcc=ExecuteSQL(txtSQL,MsgText)

If Not mrcc.EOF Then

mrcc!putup=””

End If

mrcc.Update

mrcc.Close

If gintCmode =1 Then

Unload Me

mblChange=False

MsgBox “金额为”amMount&“元,结算完毕!”,vbOKOnly+vbExclamation,“添加结算信息”

If flagCedit Then

Unload frmCheckout

End If

frmCheckout.txtSQL=”select*from booking where ammount’0’” frmCheckout.Show

ElseIf gintCmode=2 Then

MsgBox “金额为”&amMount&“ 元,结算信息修改完毕!”,vbOKOnly+vbExclamation,“修改结算信息 ”

Unload Me

If falgCedit Then

Unload frmCheckout

End If

frmCheckout.txtSQL=”select*from booking where ammount’0’”

frmCheckout.Show

End If

End Sub

附:各模块视图

·用户登陆窗口

·添加客房信息

·查询客房信息

·查询剩余客房信息

·添加订房信息

酒店管理信息系统

2017.9

系统平台:Windows 2000

数据库服务器:Microsoft SQL Server 2000 开发工具:Visual Basic 6.0 系统开发人员:

⒈编写目的

酒店在正常的运营中需要对客房资源、顾客信息、结算信息进行管理,利用宾馆管理信息系统及时了解各个环节中信息的变更,有利于提高管理效率。

⒉系统功能分析

系统开发的总体任务是实现宾馆各种信息的系统化、规范化和自动化。 主要完成功能:

● 有关客房标准的制定、标准信息的输入,包括标准编号、标准名称、房间面积、床位数量、住房单价、是否有空调、电视机、电话以及单独卫生间等。 ● 客房标准信息的修改、查询等。

● 客房基本信息的输入,包括客房编号、客房类型、客房位置、客房单价、备注等。

● 客房基本信息的查询、修改,包括客房编号、客房类型、客房位置、客房单价、备注等。

● 剩余客房信息的查询等。

● 订房信息的输入,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。 ● 订房信息的修改和查询,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。

● 结算信息的输入,包括客房编号、客房种类、位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、结算日期、备注信息等。 ● 结算信息的修改和查询,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、结日期、备注信息等。

⒊系统功能模块设计

按结构化程序设计思想,分析得出如下系统功能模块图

图Ⅰ系统功能模块图

⒋数据库设计

数据库设计步骤: ● 数据库需求分析

● 数据库概念结构设计 ● 数据库逻辑结构设计 ①数据库需求分析

分析调查有关宾馆管理信息需求的基础上得本系统所处理的数据流程

图Ⅱ 宾馆管理信息系统数据流程图

针对一般宾馆管理信息系统的需求,通过对宾馆管理过程的内容和流程分析,设计如下面所示的数据项和数据结构:

● 客房标准信息,包括的数据项有:标准编号、标准名称、房间面积、床位

数量、住房单价、是否有空调、电视、电话、单独卫生间等。

● 客房信息,包括的数据项有:客房编号、客房种类、客房位置、客房单价、

备注等。

● 订房信息,包括的数据项有:订房编号、客房编号、客房种类、客房位置、

客房备注信息、顾客姓名、顾客身份证号码、入住时间、折扣、备注等。 ● 结算信息,包括的数据项有:订房编号、客房编号、客房种类、客房位置、

客房备注信息、顾客姓名、顾客身份证号码、入住时间、折扣、结算时间、备注等。

②数据库概念结构设计

本系统根据以上的设计规划出的实体有:客房标准信息实体、客房信息实体、订房信息实体、结算信息实体。各个实体具体的描述E-R图如下:

客房标准信息实体E-R图

客房信息实体E-R图

订房信息实体E-R图

结算信息实体E-R图

实体之间关系E-R图

③数据库逻辑结构设计

首先将宾馆管理信息系统的数据库概念结构转化为SQL 2000数据库系统所支

⒌数据库结构的实现

利用SQL 2000数据库系统中的查询分析实现数据库的逻辑结构,其表格如下:

创建系统用户表格 user_Info

CREATE TABLE [dbo].[user_Info1](

[user_ID][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [user_PWD] [char] (10) COLLATE Chinese_PRC_CI_AS NULL, [user_Des] [char](10) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]

创建客房标准信息表格 roomtype CREATE TABLE [dbo].[roomtype](

[typeid][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [typename][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [area][numeric](5,0) NULL, [bednum][numeric](2,0) NULL,

[haircondition][char](2) COLLATE Chinese_PRC_CI_AS NULL, [htelephone][char](2) COLLATE Chinese_PRC_CI_AS NULL, [htelevision][char](2) COLLATE Chinese_PRC_CI_AS NULL, [htoilet][char](2) COLLATE Chinese_PRC_CI_AS NULL, [price][numeric](10,2)NULL ) ON [PRIMARY]

创建客房信息表格 rooms

CREATE TABLE [dbo].[rooms](

[roomNO][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL,

[roomtype][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [roomposition][char](20) COLLATE Chinese_PRC_CI_AS NULL, [roomprice][numeric](10,2) NULL,

[putup][char](2) COLLATE Chinese_PRC_CI_AS NOT NULL, [roommemo][text] COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 创建订房信息表bookin

CREATE TABLE [dbo].[bookin](

[bookno][char](14) COLLATE Chinese_PRC_CI_AS NOT NULL, [customname][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [customID][char](18) COLLATE Chinese_PRC_CI_AS NOT NULL, [roomno][char](10) COLLATE Chinese_PRC_CI_AS NOT NULL, [indate][datetime] NULL,

[discount][numeric](2,0) NULL,

[inmemo][text] COLLATE Chinese_PRC_CI_AS NULL, [checkdate][datetime] NULL, [ammount][numeric](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.Connection Dim rst As ADODB.Recordset Dim sTokens() 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$(SQL),cnn,adOpenKeyset,adLockOptimistic rst.MoveLast get RecordCount

‘返回记录集对象

Set ExecuteSQL=rst

MsgString=”查询到”&rst.RecordCount&”条记录” End If

ExecuteSQL_Exit: Set rst=Nothing Set cnn=Nothing Exit Function ExecuteSQL_Error:

MsgString=”查询错误:”&Err.Description Resume ExecuteSQL_Exit End Function

Public Sub EnterToTab(Keyasc As Integer) ‘判断是否为回车键

If Keyasc=13 Then ‘ Keyasc用来保存当前按键 ‘转换成Tab 键 SendKeys”{TAB}” End If End sub

‘添加全局变量,用来记录各个窗口的读写状态,代码如下: Public flagTedit As Boolean ‘ 标示是否进入修改的窗体 Public flagRedit As Boolean Public flagBedit As Boolean Public flagCedit As Boolean Public gintCmode As Integer

Public gintTmode As Integer ’记录是添加还是修改状态,1为添加,2为修

Public gintRmode As Integer Public 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.Caption=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) For 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 If

mblChang=False End Sub Private Sub cmd_Click()’用户输入内容完毕后,单击cmdSave 按钮触发Click 事件

Dim intCount As Integer Dim sMeg As String Dim MsgText As String

For 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 intCount ‘判断输入内容是否为数字 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).SeFocus Exit Sub

End If Next intCount

If gintTmode=1 Then ‘判断是否有相同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))&”’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 *from 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 ‘判断是否属于添加状态

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.Show

End If

ElseIf gintTmode=2 Then ‘判断是否处于修改状态

Unload Me

If flagTedit Then

Unload frmRoomtype

EndIf

frmRoomtype.txtSQL=”select *from roomtype”

frmRoomtype.Show

End If

End Sub

Private Sub txtItem_GotFocus(Index As Integer)’文本框获得焦点时触发该事件,即自动选中输入的内容,便于修改

txtItem(Index).SelStart=0

txtItem(Index).SelLength=Len(txtItem(Index))

End Sub

Private Sub cmdExit_Click()’单击按钮cmdExit 取消添加信息

If mblChange And cmdSave.Enabled Then

If MsgBox(“保存当前记录的变化

吗?”,vbOKCancel+vbExclamation,”警告”)=vbOK Then ‘保存

Call cmdSave_Click

End If

End If

Unload Me

End Sub

Private Sub txtItem_KeyDown(Index As Integer,KeyCode As Integer,Shift_ As Integer) ‘输入完内容,单击回车键将自动进入下一个文本框,触发文本框的Keydown 事件

EnterToTab KeyCode

End Sub

⑶修改客房标准窗体的创建

Private Sub From_Load()

ShowTitle

ShowData

flagTedit=True

End Sub

Private Sub ShowTitle()‘调用showTitle 函数,显示表头

Dim i As Integer

With msgList

.Cols=10

.TextMatrix(0,1)=”标准编号”

.TextMatrix(0,2)=”标准名称”

.TextMatrix(0,3)=”房间面积”

.TextMatrix(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

.ColWidth(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=1

End With

End Sub

Private Sub ShowData()‘调用showData 函数,显示记录列表

Dim i As Integer

Set mrc=ExecuteSQL(txtSQL,MsgText)‘根据需要设置SQL 语句,显示需要的记录

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

mrc.Close

End Sub

Private 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 If

End Sub

Private Sub menuModifyroomtype_Click()

Dim intCount As Integer

If flagTedit Then ‘判断是否打开记录窗体

If frmRoomtype.msgList.Rows>1 Then

fintTmode=2‘设置为修改状态

intCount=frmRoomtype.msgList.Row‘记下选择记录

frmRoomtype1.txtSQL=”select*from roomtype where

typeid’”&Trim(frmRoomtype.msgList.TextMatrix(intCo

unt,1))&”’”

frmRoomtype1.Show

Else

Call menuAddroomtype_Click

End If

Else

frmRoomtype.txtSQL=”select*from roomtype”

frmRoomtype.Show

End If

End Sub

Private Sub From_Resize()‘窗体变化时,调整标签和表格位置,使标签处于

窗体的最上方,而表格始终处于标签下方

If Me.WindowStatevbMinimized And

fMainFrom.WindowStatevbMinimized Then‘边界处理

If Me.Scaleheight

Exit Sub

End If

If Me.ScaleWidth

End If

lblTitle.Top=lblTitle.Height‘控制控件的位置

lblTitle.Left=(Me.Width-lblTitle.Width)/2

msgList.Top=lblTitle.Top+lblTitle.Height+lblTitle.Height/2 msgList.Width=Me.ScaleWidth-200

msgList.Left=Me.ScaleLeft+100

msgList.Height=Me.ScaleHeight-msgList.Top-200

End If

End Sub

⑷删除客房标准

Private Sub menuDeleteroomtype_Click()

Dim txtSQL As String

Dim intCount As Integer

Dim mrc As ADODB.Recordset

Dim MsgText As String

If flagTedit Then ‘判断是否打开记录窗体

If frmRoomtype.msgList.Rows>1 Then

If MsgBox(“真的要删除这条文件记录么?”,

vbOKCancel+vbExclamation,”警告”)=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 If

End Sub

⑸客房信息管理模块的创建

客房信息管理模块主要实现如下功能:

·添加客房信息

·修改客房信息

·删除客房信息

·查询客房信息

具体实现代码如下:

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

cboItem(0).AddItem Trim(mrc.Fields(0))

mrc.MoveNext

Loop

cboItem(0).ListIndex=0‘显示记录内容

Else

MsgBox “请先进行客房标准设置!”,vbOKOnly+vbExclamation,

“警告”

cmdSave.Enabled=False

Exit Sub

End If

mrc.Close

ElseIf gintRmode=2 Then ‘判断是否处于修改状态

Set mrcc=ExecuteSQL(txtSQL,MsgText)‘设置SQL 语句显示当前

选择记录

If mrcc.EOF=False Then

With mrcc

txtItem(0)=.Fields(0)

For intCount=1 To 2

If Not IsNull(.Fields(intCount+1))Then‘判断

内容是否为空

txtItem(intCount)=.Fields(intCount+1) End If

Next intCount

txtItem(3)=.Fields(5)

txtSQL=”select DISTINCT typename from roomtype” Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

cboItem(0).AddItem Trim(mrc.Fields(0)) mrc.MoveNext

Loop

cboItem(0).ListIndex=0

Else

MsgBox“请先进行客房标准设

置!”,vbOKOnly+vbExclamation,“警

告”

cmdSave.Enabled=False

Exit Sub

End If

mrc.Close

End With

End If

mrcc.Close

Me.Caption=Me.Caption&“修改”

End If

mblChange=False

End Sub

Private Sub cmdSave_Click()‘单击保存按钮触发事件

Dim intCount As Integer

Dim sMeg As String

Dim mrcc As ADODB.Recordset

Dim Msgtext As String

For intCount=0 To 3

If Trim(TxtItem(intCount)&””)=”” Then

Select Case intCount

Case 0

sMeg=“客房编号”

Case 1

sMeg=“客房位置”

End Select

sMeg=sMeg&“不能为空!”

MsgBox sMeg,vbOKOnly+vbExclamation,“警告”

txtItem(intCount).SetFocus

Exit Sub

End If

Next intCount

If gintRmode=1 Then‘判断是否有重复记录

txtSQL=”select * from rooms where roomNO=

‘”&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

If gintRmode=2 Then ‘判断是否处于修改状态

txtSQL=”delete from rooms where roomNO=

‘”&Trim(txtItem(0))&”’”

Set mrc=ExecuteSQL(txtSQL,MsgText)

End If

txtSQL=”select*from rooms”‘再加入新记录

Set mrc=ExecuteSQL(txtSQL,MsgText)

mrc.AddNew‘为数据库对象添加记录

mrc.Fields(0)=Trim(txtItem(0))

mrc.Fields(1)=Trim(txtItem(0))

For intCount=1 To 2

If Trim(txtItem(intCount)&””)=”” Then

mrc.Fields(intCount+1)=Null

Else

mrc.Fields(intCount+1)=Trim(txtItem(intCount))

End If

Next intCount

mrc.Fields(4)=””

mrc.Fields(5)=Trim(txtItem(3))

mrc.Update

mrc.Close

If gintRmode=1 Then

For intCount=0 To 3

txtItem(intCount)=””

Next intCount

mblChange=False

If flagRedit Then

Unload frmRoom

frmRoom.txtSQL=”select*from rooms”‘重新显示数据 frmRoom.Show

End If

ElseIf gintRmode=2 Then

Unload Me

If flagRedit Then

Unload frmRoom

End If

frmRoom.txtSQL=”select*from rooms”

frmRoom.Show

End If

End Sub

·修改客房信息

Private Sub menuModifyroom_Click()‘选择修改房间信息,触menuModifyroom

的Click 事件, 程序判断为修改状态后,首先

删除原有记录,然后把新内容加入到数据库

Dim intCount As Integer

If flagRedit Then ‘判断记录窗体是否打开

If frmRoom.msgList.Rows>1 Then‘判断客房信息列表内容是否为空 gintRmode=2‘设置为修改状态

intCount=frmRoom.msgList.Row‘纪录当前记录位置

frmRoom1.txtSQL=”select*from rooms where roomNO=’”&Trim(frmRoom.msgList.TextMatrix(intCount,1))&”’”

frmRoom1.Show

Else

Call menuAddroom_Click‘添加记录

End If

Else

frmRoom.txtSQL=”select*from rooms”

frmRoom.Show

End If

End Sub

·删除客房信息

Private Sub menuDeleteroom_Click()

Dim txtSQL As String

Dim intCount As Integer

Dim mrc As ADODB.Recordset

Dim MsgText As String

If flagTedit Then

If frmRoom.msgList.Rows>1 Then‘判断客房信息列表内容是否为空 If MsgBox(“真的要删除这条文件记录

么?”,vbOKCancel+vbExclamation,“警告”)=vbOK Then

intCount=frmRoom.msgList.Row‘记载当前记录位置

txtSQL=”delete from rooms where roomNO=

‘”&Trim(frmRoom.msgList.TextMatrix(intCount,1)&”’”

Set mrc=ExecuteSQL(txtSQL,MsgText)‘执行删除操作 Unload frmRoom

frmRoom.txtSQL=”select*from rooms”

frmRoom.Show

End If

End If

End If

End Sub

·查询客房信息

Private Sub From_Load()‘载入窗体时,将自动加入所有记录的入库时间 Dim i As Integer

Dim j As Integer

Dim sSql As String

Dim txtSQL As String

Dim MsgText As String

Dim mrc As ADODB.Recordset

txtSQL=”select DISTINCT typename from roomtype”‘初始化客房种类 Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

Combo1.AddItem Trim(mrc.Fields(0))

Mrc.MoveNext

Loop

Combo1.ListIndex=0

Else

MsgBox “请先进行客房标准设置!”,vbOKOnly+vbExclamation,”警告” Exit Sub

End If

mrc.Close

End Sub

Private Sub cmdOK_Click()‘设置完查询内容和方式后,单击cmdOk 按钮查询 Dim sQSql As String

If chkItem(0).Value=vbChecked Then

sQSql=”roomNO=’”&Trim(txtItem(0)&””)&”’”

End If

If chkItem(1).Value=vbChecked Then

If Trim(sQSql&””)=”” Then

sQSql=”roomtype=’”&Trim(Combo1&””)&”’”

Else

sQSql=sQSql&”and roomtype=’”&Trim(Combo1&””)&”’” End If

End If

If Trim(sQSql)=”” Then

MsgBox “请设置查询条件!”,vbOKOnly+vbExclamation,“警告” Exit Sub

Else

If flagRedit Then

Unload frmRoom

End If

frmRoom.txtSQL=”select*from rooms where”&sQSql

frmRoom.Show

End If

Me.Hide

End Sub

⑹订房信息管理模块的创建

订房信息管理模块主要实现如下功能:

·查询剩余客房信息

·添加订房信息

·修改订房信息

·删除订房信息

·查询订房库信息

具体实现代码如下:

Private Sub From_Load()‘载入窗体时,程序将自动加入客房种类和客房单价 Dim txtSQL As String

Dim MsgText As String

Dim mrc As ADODB.Recordset

txtSQL=”select distinct typename from roomtype”‘选择所有客房种类 Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

Combo1(0).AddItem mrc.Fields(0)

mrc.MoveNext

Loop

End If

mrc.Close

txtSQL=”select distinct price from roomtype”

Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

Combo1(1).AddItem mrc.Fields(0)

Combo1(2).AddItem mrc.Fields(0)

mrc.MoveNext

Loop

End If

mrc.Close

End Sub

Private Sub cmdOK_Click()

Dim sQSql As String

If chkItem(0).Value=vbChecked Then

sQSql=”roomtype=’”&Trim(Combo1(0)&””)&”’”

End if

If chkItem(1).Value=vbChecked Then

If Trim(sQSql&””)=”” Then

If Trim(Combo1(1)&””)””And Trim(Combo1(2)&””)””

Then

sQSql=”roomprice

roomprice >=’”&Trim(Combo1(2)&””)”’”

ElseIf Trim(Combo1(1)&””)=””And

Trim(Combo1(2)&””)””Then

sQSql=”roomprice >=’”&Trim(Combo1(2)&””)&”’” ElseIf Trim(Combo1(1)&””)””And

Trim(Combo1(2)&””=””Then

sQSql=”roomprice

Else

If Trim(Combo1(1)&””)””And

Trim(Combo1(2)&””)””Then

sQS ql=sQSql&”androomprice>=’”&Trim(Combo

1(1)&””)&”’and

roomprice >=’”&Trim(Combo1(2)&””)&”’

ElseIf Trim(Combo1(1)&””)=””And

Trim(Combo1(2)&””)””Then

sQSql=sQSql&”and

roomprice >=’”&Trim(Combo1(2)&””)&”’

ElseIf Trim(Combo1(1)&””)””And

Trim(Combo1(2)&””)=””Then

sQSql=sQSql&”and

roomprice

End If

End If

If Trim(sQSql)=”” Then

MsgBox “请设置查询条件! ”,vbOKOnly+vbExclamation,“警告” Exit Sub

Else

If flagRedit Then

Unload frmRoom

End If

frmRoom.txtSQL=”select*from rooms where”&sQSql&”and

putup”’y’”

frmRoom.Show

flagSedit=True

End If

Me.Hide

End Sub

Private Sub From_Load()‘添加订房信息,载入窗体时把所有未预定的客房信

息加入其中

Dim sSql As String

Dim intCount As Integer

Dim MsgText As String

If flagSedit Then ‘判断打开方式

Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

For intCount=0 To 3

cboItem(intCount).AddItem mrc.Fields(intCount)

cboItem(intCount).ListIndex=0

Next intCount

txtItem(5)=mrc.Fields(5)

End If

mrc.Close

txtNo=GetRkno()

gintBmode=1

Else

If gintBmode=1 Then

Me.Caption=Me.Caption&“添加”

txtSQL=”select DISTINCT roomNO from rooms where putup’y’” Set mrc=ExecuteSQL(txtSQL.MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

cboItem(0).AddItem Trim(mrc.Fields(0))

mrc.MoveNext

Loop

Else

MsgBox “请先进行客房登记! ”,vbOKOnly+vbExclamation,“警告” cmdSave.Enabled=False

Exit Sub

End If

mrc.Close

txtNo=GetRkno

ElseIf gintBmode=2 Then

Set mrc.ExecuteSQL(txtSQL,MsgText)

If mrc.EOF Then

With mrc

txtNO=!bookno

For intCount=0 To 1

If Not IsNull(.Fields(intCount+1)) Then txtItem(intCount)=.Fields(intCount+1) End If

Next intCount

cboItem(0).AddItem !roomno

cboItem(0).ListIndex=0

For intCount=2 To 4

If Not IsNull(.Fields(intCount+2)) Then txtItem(intCount)=.Fields(intCount+2) End If

Next intCount

End With

End If

mrc.Close

Me.Caption=Me.Caption&“修改”

txtSQL=”select*from rooms

r oomNO=’”&Trim(cboItem(0))&”’”

Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

For intCount=1 To 3

cboItem(intCount).AddItem mrc.Fields(intCount) cboItem(intCount).ListIndex=0

Next intCount

txtItem(5)=mrc.Fields(5)

End If

mrc.Close

End If

End If

mblChange=False

End Sub

Private Sub cmdSave_Click()‘添加记录到数据库中

Dim intCount As Integer

Dim sMeg As String

Dim mrcc As ADODB.Recordset

Dim MsgText As String

For intCount=0 To 3‘判断输入内容是否为空

If Trim(txtItem(intCount)&””)=”” Then

Select Case intCount

Case 0

sMeg=“顾客姓名” where

Case 1

sMeg=“身份证号码”

Case 2

sMeg=“折扣”

Case 3

sMeg=“入住时间”

End Select

sMeg=sMeg&“不能为空!”

MsgBox sMeg,vbOKOnly+vbExclamation,“警告”

txtItem(intCount).SetFocus

Exit Sub

End If

Next intCount

For intCount=0 To 3

If Trim(vboItem(intCount)&””)=””Then

Select Case intCount

Case 0

sMeg=“客房编号”

Case 1

sMeg=“客房种类”

Case 2

sMeg=“客房位置”

Case 3

sMeg=“客房单价”

End Select

sMeg=sMeg&“不能为空!”

MsgBox sMeg,vbOKOnly+vbExclamation,“警告”

cboItem(intCount).SetFocus

Exit Sub

End If

Next intCount

If IsDate(txtItem(2)) Then

txtItem(2)=Format(txtItem(2),”yyyy-mm-dd”)

Else

MsgBox “入库时间应输入日期

(yyyy-mm-dd)!”,vbOKOnly+vbExclamation,”警

告”

txtItem(2).SetFocus

Exit Sub

End If

For intCount=1 To 3 Step 2

If Not IsNumeric(txtItem(intCount)) Then

MsgBox “请输入数字”,vbOKOnly+vbExclamation,“警告” txtItem(intCount).SetFocus

Exit Sub

End If

Next intCount

If gintBmode =2 Then

txtSQL=”delete from booking where bookno=’”&Trim(txtNo)&”’” Set mrcc=ExecuteSQL(txtSQL,MsgText)

End If

txtSQL=”select*from booking”

Set mrcc=ExecuteSQL(txtSQL,MsgText)

mrcc.AddNew

mrcc.Fields(0)=txtNO

For intCount=0 To 1

mrcc.Fields(intCount+1)=txtItem(intText)

Next intCount

mrcc.Fields(3)=cboItem(0)

For intCount=2 To 4

mrcc.Fields(intCount+2)=txtItem(intCount)

Next intCount

mrcc.Fields(8)=0

mrcc.Update

mrcc.Close

txtSQL=”select*from rooms where

roomNO =’”&Trim(vboItem(0))&”’”

Set mrcc=ExecuteSQL(txtSQL,MsgText)

If Not mrcc.EOf Then

mrcc!putup=”y”

End If

mrcc.Update

mrcc.Close

If gintBmode=1 Then

MsgBox “添加订房信息成功!”,vbOKOnly+vbExclamation,“添加订房消

息”

Unload Me

If flagBedit Then

Unload frmBookin

End If

frmBookin.txtSQL=”select

bookno,customname,customID,roomno,indate,di

scount,inmemo from booking where

amount=’0’”

frmBookin.Show

Else

MsgBox“修改订房信息成功!”,vbOKOnly+vbExclamation,“修改订房信

息”

Unload Me

If flagBedit Then

Unload frmBookin

End If

frmBookin.txtSQL=”select

bookno,customname,customID,roomno,indate,di

scount,inmemo from booking where amount

=’0’”

frmBookin.Show

End If

End Sub

⑺结算信息管理模块的创建

结算信息管理模块主要实现如下功能:

·添加结算信息

·修改结算信息

·查询结算信息

具体实现代码如下:

Private Sub From_Load()‘窗体载入时,自动加入所有未结算客房信息 Dim sSql As String

Dim intCount As Integer

Dim MsgText As String

If gintCmode=1 Then ‘判断是否处于添加状态

Me.Caption=Me.Caption&“添加”

txtSQL=”select DISTINCT roomno from booking where amount=’0’”‘初始化客房编号,选择所有未结算客房编号

Set mrc=ExecuteSQL(txtSQL,MsgText)

If Not mrc.EOF Then

Do While Not mrc.EOF

cboItem(0).AddItem Trim(mrc!roomno)

mrc.MoveNext

Loop

Else

MsgBox “没有顾客入住!”,vbOKOnly+vbExclamation,“警告” cmdSave.Enabled=False

Exit Sub

End If

mrc.Close

ElseIf gintCmode=2 Then‘判断是否处于修改状态

Set mrc=ExecuteSQL(txtSQL,MsgText)

If mrc.EOF=False Then

With mrc

txtNo =mrc.Fields(0)

For intCount=0 To 1

txtItem(intCount)=.Fields(intCount+1)

Next intCount

cboItem(0).AddItem.fields(3)

cboItem(0).ListIndex=0

For intCount=2 To 3

If Not IsNull(.Fields(intCount+2)) Then

txtItem(intCount)=.Fields(intCount+2)

End If

Next intCount

txtItem(5)=.Fields(6)

txtItem(4)=.Fields(7)

End With

End If

mrc.Close

txtSQL=”select*from rooms where roomNO=’”&cboItem(0)&”’” Set mrc=ExecuteSQL(txtSQL,MsgText)

If mrc.EOF=False Then

With mrc

For intCount=1 To 3

cboItem(intCount).AddItem.Fields(intCount) cboItem(intCount).ListIndex=0

Next intCount

End With

End If

mrc.Close

For intCount =0 To 3

txtItem(intCount).Enabled=False

Next intCount

Me.Caption=Me.Caption&“修改”

End If

mblChange=False

End Sub

Private Sub cboItem_Click(Index As Integer) ‘选择不同客房,触发cboItem 下拉式文本框的click 事件,显示相应的顾客信息

Dim sSql As String

Dim MsgText String

Dim mrcc As ADODB.Recordset

Dim intCount As Integer

If gintCmode =1 Then ‘判断是否处于添加状态,否则将退出

If Index=0 Then

cboItem(1).Enabled=True

cboItem(2).Enabled=True

cboItem(3).Enabled=True

cboItem(1).Clear‘清除原有内容

cboItem(2).Clear

cboItem(3).Clear

txtSQL=”select roomNO,roomtype,roomposition,roomprice from where roomNo =’”&Trim(cboItem(0))&”’” ‘显示有关客房的具体信息 Set mrcc=ExecuteSQL(txtSQL,MsgText)

If Not mrcc.EOF Then

cboItem(1).AddItem mrcc!roomtype

cboItem(2).AddItem mrcc!roomposition

cboItem(3).AddItem mrcc!roomprice

cboItem(1).Enabled=False

cboItem(2).Enabled=False

cboItem(3).Enabled=False

cboItem(1).ListIndex=0

cboItem(2).ListIndex=0

cboItem(3).ListIndex=0

cmdSave.Enabled=True

Else

MsgBox “没有订房信息! ”,vbOKOnly+vbExclamation, “警告” cmdSave.Enabled=False

Exit Sub

End If

mrcc.Close

txtSQl=”select*from booking where amount=’0’and roomno=’”&Trim(cboItem(0))&”’”‘显示相关顾客信息

Set mrcc=ExecuteSQL(txtSQL,MsgText)

If Not mrcc.EOF Then

txtNO=mrcc!bookno

txtItem(0)=mrcc!customname

txtItem(1)=mrcc!customID

txtItem(2)=mrcc!indate

txtItem(3)=mrcc!discount

txtItem(5)=mrcc!inmemo

For intCount =0 To 3

txtItem(intCount).Enabled=False

Next intCount

End If

mrcc.Close

End If

End If

Exit Sub

End Sub

Privte Sub cmdSave_Click()

Dim intCount As Integer

Dim sMeg As String

Dim mrcc As ADODB.Recordset

Dim MsgText As String

Dim bYear As Integer

Dim eYear As Integer

Dim bDays As Integer

Dim eDays As Integer

Dim aDays As Integer

Dim amMount As Double

If Trim(txtItem(4)&””)=””Then

MsgBox sMeg,vbOKOnly+vbExclamation,“警告”

txtItem(4).SetFocus

Exit Sub

End If

If IsDate(txtItem(4)) Then

txtItem(4)=Format(txtItem(4),”yyyy-mm-dd”)

Else

MsgBox “入库时间应输入日期(yyyy-mm-yy )!”,vbOKOnly+vbExclamation,“警告”

txtItem(4).SetFocus

Exit Sub

End If

txtSQl=”select *from booking where bookno=’”&Trim(txtNo)&”’”‘加入新记录

Set mrcc=ExecuteSQL(txtSQL,MsgText)

mrcc.Fields(6)=txtItem(5)

mrcc.Fields(7)=txtItem(4)

bYear=DatePart(“yyyy”,txtItem(2))‘获得入住日期和结算日期年代 eYear=DatePart(“yyyy”,txtItem(4))

bDays=DatePart(“y”,txtItem(2))‘获得入住日期和结算日期天数 eDays=DatePart(“y”,txtItem(4))

If bYear=eYear Then

aDays=eDays-bDays

Else

aDays=(eYear-bYear-1)*365+(365-bDays)+eDays

End If

mrcc.Fields=aDays*Trim(cboItem(3))*Trim(txtItem(3))/100‘计算应交房费

amMount=aDays*Trim(cboItem(3))*Trim(txtItem(3))/100

mrcc.Update‘更新数据

mrcc.Close

txtSQL=”select*from rooms where roomNO=’”&cboItem(0)&”’” Set mrcc=ExecuteSQL(txtSQL,MsgText)

If Not mrcc.EOF Then

mrcc!putup=””

End If

mrcc.Update

mrcc.Close

If gintCmode =1 Then

Unload Me

mblChange=False

MsgBox “金额为”amMount&“元,结算完毕!”,vbOKOnly+vbExclamation,“添加结算信息”

If flagCedit Then

Unload frmCheckout

End If

frmCheckout.txtSQL=”select*from booking where ammount’0’” frmCheckout.Show

ElseIf gintCmode=2 Then

MsgBox “金额为”&amMount&“ 元,结算信息修改完毕!”,vbOKOnly+vbExclamation,“修改结算信息 ”

Unload Me

If falgCedit Then

Unload frmCheckout

End If

frmCheckout.txtSQL=”select*from booking where ammount’0’”

frmCheckout.Show

End If

End Sub

附:各模块视图

·用户登陆窗口

·添加客房信息

·查询客房信息

·查询剩余客房信息

·添加订房信息


相关文章

  • 毕业论文管理信息系统分析与设计
  • 毕业论文(设计)管理信息系统 A1 毕业论文(设计)信息系统的系统调研及规划 A1.1 项目背景分析 有利条件:信息化的来临和计算机在日常管理中的广泛应用: 目的:实现毕业论文管理的信息化和便捷化: 系统开发组织单位:信息管理专业教师及学生 ...查看


  • 本科计算机论文题目
  • 基于asp 语言的测试项目 学生信息管理系统的设计与实现 基于ASP.NET 的社区人口管理系统 基于ASP.NET 的课程教学网站设计 公司会议网站 C#高校工资管理系统 C#在线点歌系统 <数据库原理>精品课程网站设计 教师 ...查看


  • 武汉理工大学毕业设计(论文)系统操作指南
  • 武汉理工大学毕业设计(论文)管理系统操作指南 ⏹ 系统整体操作流程简述..................................................................................... ...查看


  • 近年来我国档案学专业硕士论文题目选录
  • 文章来源: 中国国家图书馆 1 迪莉娅 著 国外电子政府公共服务的透视 [硕士论文] / 迪莉娅著 2004 2 徐拥军 著 "知识人"假设和知识型员工的激励 [硕士论文] / 徐拥军著 2004 3 陆文军 著 我国档 ...查看


  • 论文相似性检测报告
  • 论文相似性检测报告 报告编号:301baab5-bd1b-401a-80e4-a3c001726053题 名:301baab5-bd1b-401a-80e4-a3c001726053报告编号: 作 者:46,441原文字数: 论文相似性检测 ...查看


  • 古塔区职称论文发表-信息化银行会计核算论文选题题目
  • 云发表,专业论文发表网站!http://www.yunfabiao.com/ 面向作者直接收稿,省去中间环节,价格更低,发表更快,收录更快! 古塔区职称论文发表-信息化|银行|会计核算论文选题题目 古塔区职称论文发表-以下是信息化|银行|会 ...查看


  • 中国海洋大学毕业(设计)论文智能管理系统快速使用指南
  • 中国海洋大学 毕业论文(设计)系统快速使用指南 第一部分 主要角色操作功能说明 一.专业负责人功能概述 1.流程管理(专业负责人的主要操作功能部分) 专业负责人设置论文起止时间:指导教师申报课题后,专业负责人审核课题:专业负责人审核专业课题 ...查看


  • 毕业论文管理系统的数据库设计
  • 3.4 数据库设计与实施 3.4.1数据库需求分析 用户的需求具体体现在各种信息的提供.保存.更新和查询方面,这就要求数据库结构能充分满足各种信息的输入和输出.收集基本数据,数据结构以及数据处理的流程,组成一份详尽的数据库.针对本学院的毕业 ...查看


  • 金融学_20112861013091508
  • 金融学 Finance (专业代码:020204) 一.学科概况 本学科拥有硕士学位授予权,为"经济学"一级学科下的二级学科,是经济学的重要组成部分.本学科是以经济学和现代金融理论为指导,在充分吸收和利用国外有关金融理论 ...查看


  • 毕业论文管理系统的数据库设计 1
  • 3.4数据库设计与实施3.4.1数据库需求分析 用户的需求具体体现在各种信息的提供.保存.更新和查询方面,这就要求数据库结构能充分满足各种信息的输入和输出.收集基本数据,数据结构以及数据处理的流程,组成一份详尽的数据库.针对本学院的毕业论文 ...查看


热门内容