资源描述
宾馆管理信息系统
系统平台:Windows 2000
数据库服务器:Microsoft SQL Server 2000
开发工具:Visual Basic 6.0
系统开发人员:
⒈编写目的
宾馆在正常的运营中需要对客房资源、顾客信息、结算信息进行管理,利用宾馆管理信息系统及时了解各个环节中信息的变更,有利于提高管理效率。
⒉系统功能分析
系统开发的总体任务是实现宾馆各种信息的系统化、规范化和自动化。
主要完成功能:
● 有关客房标准的制定、标准信息的输入,包括标准编号、标准名称、房间面积、床位数量、住房单价、是否有空调、电视机、电话以及单独卫生间等。
● 客房标准信息的修改、查询等。
● 客房基本信息的输入,包括客房编号、客房类型、客房位置、客房单价、备注等。
● 客房基本信息的查询、修改,包括客房编号、客房类型、客房位置、客房单价、备注等。
● 剩余客房信息的查询等。
● 订房信息的输入,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。
● 订房信息的修改和查询,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、备注信息等。
● 结算信息的输入,包括客房编号、客房种类、位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、结算日期、备注信息等。
● 结算信息的修改和查询,包括客房编号、客房种类、客房位置、客房单价、顾客姓名、顾客身份证号码、入住日期、折扣、结日期、备注信息等。
⒊系统功能模块设计
按结构化程序设计思想,分析得出如下系统功能模块图
宾馆管理信息系统
结算信息管理
订房信息管理
客房信息管理
系统管理
结算信息查询
结算信息修改
结算信息添加
订房信息查询
订房信息修改
订房信息添加
剩余客房信息查询
设置客房信息
设置客房标准
密码管理
用户管理
客房信息查询
客房信息修改
客房信息添加
客房标准修改
客房标准添加
图Ⅰ系统功能模块图
⒋数据库设计
数据库设计步骤:
● 数据库需求分析
● 数据库概念结构设计
● 数据库逻辑结构设计
①数据库需求分析
分析调查有关宾馆管理信息需求的基础上得本系统所处理的数据流程
客房标准设置
基本信息输入
客房登记
基本信息录入
客房信息管理
顾客登记
订房信息管理
订房信息管理
结算信息输入
结算信息管理
客房信息返回
图Ⅱ 宾馆管理信息系统数据流程图
针对一般宾馆管理信息系统的需求,通过对宾馆管理过程的内容和流程分析,设计如下面所示的数据项和数据结构:
● 客房标准信息,包括的数据项有:标准编号、标准名称、房间面积、床位数量、住房单价、是否有空调、电视、电话、单独卫生间等。
● 客房信息,包括的数据项有:客房编号、客房种类、客房位置、客房单价、备注等。
● 订房信息,包括的数据项有:订房编号、客房编号、客房种类、客房位置、客房备注信息、顾客姓名、顾客身份证号码、入住时间、折扣、备注等。
● 结算信息,包括的数据项有:订房编号、客房编号、客房种类、客房位置、客房备注信息、顾客姓名、顾客身份证号码、入住时间、折扣、结算时间、备注等。
②数据库概念结构设计
本系统根据以上的设计规划出的实体有:客房标准信息实体、客房信息实体、订房信息实体、结算信息实体。各个实体具体的描述E-R图如下:
客房标准信息实体
标准编号
标准名称
床位数量
客房单价
客房标准信息实体E-R图
客房信息实体
客房标准
客房编号
客房位置
客房单价
客房信息实体E-R图
订房信息实体
客房信息
顾客信息
折 扣
入住时间
订房信息实体E-R图
结算信息实体
客房信息
顾客信息
结算时间
结算金额
结算信息实体E-R图
客房标准信息
客房登记
客房信息管理
订 房
订房信息管理
结算信息管理
客房结算
实体之间关系E-R图
③数据库逻辑结构设计
首先将宾馆管理信息系统的数据库概念结构转化为SQL 2000数据库系统所支持的实际数据模型,即:数据库的逻辑结构。其各个表格的设计结果如下
列名
数据类型
可否为空
说明
Typeid
Varchar
NOT NULL
标准编号
Typename
Varchar
NOT NULL
标准名称
Area
Numeric
NULL
房间面积
Bednum
Numeric
NULL
床位数量
Haircondition
Varchar
NULL
是否有空调
Htelephone
Varchar
NULL
是否有电话
Htelevision
Varchar
NULL
是否有电视
Htoilet
Varchar
NULL
是否有单独卫生间
Price
Numeric
NULL
单价
Roomtype 客房标准信息表
列名
数据类型
可否为空
说明
roomNO
Varchar
NOT NULL
客房编号
Roomtype
Varchar
NOT NULL
客房种类
Roomposition
Varchar
NULL
客房位置
Roomprice
Numeric
NULL
单价
Putup
Varchar
NOT NULL
是否被预定
Roommemo
Text
NULL
备注
Rooms 客房信息表
列名
数据类型
可否为空
说 明
Bookno
Varchar
NOT NULL
订房编号
Customname
Varchar
NOT NULL
顾客姓名
CustomID
Varchar
NOT NULL
身份证号码
Roomno
Varchar
NOT NULL
客房编号
Indate
Datetime
NULL
入住日期
Discount
Numeric
NULL
折扣
Inmeno
Text
NULL
备注
Checkdate
Datetime
NULL
结算日期
Amount
Numeric
NULL
金额
Bookin 订房信息表
⒌数据库结构的实现
利用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(intCount,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.WindowState<>vbMinimized And fMainFrom.WindowState<>vbMinimized Then‘边界处理
If Me.Scaleheight<10*lblTitle.Height Then
Exit Sub
End If
If Me.ScaleWidth<lblTitle.Width+lblTitle.Width/2 Then
Exit Sub
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
展开阅读全文