资源描述
酒店管理系统Oracle数据库的设计与实现概述
Oracle 数据库的设计与实现
选题名称: 酒店管理系统
姓 名:
学 号:
专 业:
班 级:
指导老师:
设计地点:
目 录
一、 系统需求分析
1.1系统开发的目的和意义 ----------3
1.2系统要求 -----------------------------3
二、系统总体设计
2.1系统功能需求 ----------------------4
2.2系统数据需求 ----------------------4
2.3系统功能结构图 -------------------5
2.4系统部分流程图 -------------------5
三、数据库设计
3.1数据库概念模型 -------------------7
3.2数据库物理模型 -------------------8
3.3酒店管理系统部分数据字典 ---9
四、系统实现过程
4.1设计过程 -----------------------------11
4.2系统各界面设计代码 -------------28
五、实验总结
5.1实验中遇到的问题 ---------------35
5.2心得体会 --------------------------35
一、系统需求分析
1.1系统开发的目的和意义
首先应该在此次实践中有所收获,能够学习到相关软件的功能,和进行实践设计需要的知识的。能够在实践中学习。
面对酒店行业的高速发展和酒店行业信息化发展的过程中出现的各种情况,酒店客房管理系统在实施后应达到以下目的:
实现多点操作的信息共享,相互之间的信息传递准确、快捷、顺畅;
服务管理信息化,可随时掌握客人住宿情况;
系统界面友好美观,操作简单易行,查询灵活方便,数据存储安全。
实现客房的登记入住和查询功能,查询酒店信息,客人信息,客房信息等功能。
实现Delphi和oracle的连接,进行数据的插入。
1.2系统要求
要求实现酒店员工信息管理、客户信息管理、客房信息管理、订单管理等功能,包括客户信息的添加、修改、删除及查询;客房信息的添加、修改、删除及查询;订单查询及退房管理等。
二、 系统总体设计
2.1系统功能需求
经过对互联网上的各大酒店管理系统的认识和分析,我对酒店管理系统有了基本的了解,我觉得该系统至少应该具有以下的一些基本功能:
(1) 系统管理模块:包括登录系统,用户管理,权限管理,角色管理,以及查询统计,客户管理折扣管理和开台管理等。
(2) 基本设置管理模块:包括厨师的管理,买单管理等。
(3) 客户管理模块:包括客户点菜,上菜,结账,统计等。
(4) 客户订房管理模块:包括订房,续房,查房,退房,结算等。
2.2 系统数据需求
根据数据需求分析可知该系统至少应该具有以下的一些数据需求:
DESKTYPE餐桌类别表(餐桌类别编号,餐桌座位数,餐桌方位,备注)。
DESK餐桌表(餐桌编号,餐桌类别编号,餐桌状态,备注)。
FOODYPE菜系 (菜系编号,菜系名称,备注)。
FOOD菜品(菜品编号,菜单编号,所属菜系,菜品名称,菜品价格,助记码,备注)。
FOODTICKET餐饮订单(订单编号,餐桌编号,下单服务员编号,点菜时间,订单状态,备注)。
ROOMCUSTINFO住房客户信息表(住户编号,客房类别编号,住户姓名,住户省份证号)。
FOODLIST菜单(菜单编号,餐桌编号,菜品编号,厨师编号,状态,备注)。
ROOMTYPE客房类别表(客房类别编号,客房类型名称,客房类别价格,备注)。
ROOMINFO客房信息表(房间编号,客房类别编号,客房状态,备注)。
ROOMTICKET客房订单管理表 (订单编号,房间号,下单服务员ID,身份证号,入住时间,离开时间,押金金额,结算金额,下单时间,备注)。
CUSTINFO客户信息表 (身份证号,客户姓名,客户性别,客户电话,是否会员,信息录入时间,备注)。
USER 用户信息表(用户编号,角色编号,部门编号,用户名,用户密码,是否审核经过,年龄,性别,生日,联系电话,备注)。
ROLE 用户角色表(角色编号,角色名,备注)。
DEPARMENT 部门表(部门编号,名称,上级部门编号,备注)。
PERMISSION 权限表(权限编号,权限组编号,权限名称,备注)。
ROLEPER 角色-权限关联表(角色权限编号,角色编号,权限编号)。
PERMISSIONGROUP 权限组表(权限组编号,权限组名称)。
2.3系统功能模块图
酒店管理系统功能结构如图2-3所示
图2-3 系统功能结构图
2.4系统部分流程图
客房订单流程图如图2-4所示
图2-4 客房订单管理流程图
餐饮部分开台流程图如图2-5所示
图2-5 餐饮部分开台流程图
三、数据库设计
3.1数据库概念模型
数据库概念模型图如图3-1所示:
图3-1数据库概念模型图
3.2数据库物理模型
数据库物理模型图如图3-2所示:
图3-2 数据库物理模型图
3.3酒店管理系统部分数据字典
本系统数据库采用Oracle数据库,系统数据库名称为HotelDB,共包含17张表。
菜系表:用来存储菜系的信息,其中FOODTYPEID字段为主键。
表3-3-1 菜系:FOODYPE
字段名称
类型
允许空
主键
外键
外键参考表
说明
FOODTYPEID
NUMBE(5)
NOT
YES
菜系ID
FOODTYPENAME
VARCHAR2(20)
NOT
菜系名称
FOODTYPEREMARK
VARCHAR2(50)
YES
备注
菜品表:用于菜品的所有信息,也是点菜的菜单的一个信息来源表,从中可获得菜品的全部信息。其中字段FOODTYPEID用来描述该菜品属于哪个菜系是外键参参考表FOODTYPE,根据此字段的值,能够知道菜品属于相应的哪个菜系。
表3-3-2 菜品:FOOD
字段名称
类型
允许空
主键
外键
外键参考表
说明
FOOD
ID
NUMBER(5)
NOT
YES
菜品ID
FOOD
NAME
VARCHAR2(20)
NOT
菜品名称
FOODTYPE
ID
NUMBER(5)
NOT
YES
FOODYPE
所属菜系ID
FOOD
PRICE
NUMBER(5)
NOT
菜品价格
FOODHELPCODE
VARCHAR2(10)
NOT
助记码
FOODREMARK
VARCHAR2(50)
YES
备注
客房类别表:用来存储客房类别的信息,
表3-3-3客房类别表:ROOMTYPE
字段名称
类型
允许空
主键
外键
外键参考表
说明
ROOMTYPEID
NUMBER(5)
NOT
YES
客房类别编号
ROOMTYPE
NAME
VARCHAR2(20)
NOT
客房类别名称
ROOMTYPEPAY
NUMBER(5)
NOT
类别价格
ROOMTYPEREMARK
VARCHAR2(50)
NOT
备注
客房信息表:用来存储客房信息。
表3-3-4 客房信息表:ROOMINFO
字段名称
类型
允许空
主键
外键
外键参考表
说明
ROOM
ID
NUMBER(5)
NOT
YES
房间编号
ROOMTYPE
ID
NUMBER(5)
NOT
YES
ROOMTYPE
客房类别编号
续表 5-4
字段名称
类型
允许空
主键
外键
外键参考表
说明
ROOMCHECK
NUMBER(5)
NOT
客房状态
ROOMREMARK
VARCHAR2(50)
YES
备注
客户信息表:用来存储酒店客户的相关信息。
表3-3-5 客户信息表: CUSTINFO
字段名称
类型
允许空
主键
外键
外键参考表
说明
CARDID
VARCHAR2(20)
NOT
YES
身份证号
CUSTNAME
VARCHAR2(20)
NOT
姓名
CUSTSEX
VARCHAR2(10)
NOT
性别
CUSTPHONE
VARCHAR2(20)
YES
电话
VIPCHECK
NUMBER(5)
YES
是否会员
CUSTDATE
VARCHAR2(20)
YES
信息录入时间
四、 系统实现过程
4.1设计过程
4.1.1窗体设计
⑴新建一个标准工程,会出现form1,能够遵循默认格式,也能够更改名称,这里默认。
⑵添加所需控件mainmenu,双击控件在其中加入所要进行的功能如下:
添加控件Image插入图片,选中image控件,在其属性表中选中picture,选择需要的图片:
⑶再建立一个Form2,默认格式即可。在其中加入客房登记所需控件:
⑷再建立一个Form3,默认格式即可,而且在project-options中设置其为主窗体。在其中加入客房登记所需控件,8个label,8个Edit,两个bitbtn如图:
能够在bitbtn按钮中添加图片,使其更加生动,,选中按钮,在其属性选择Glyph,选择需要的图片即可,注意图片格式要符合要求,还能够为界面换颜色。
⑸再建立一个Form4,默认格式即可。在其中加入客人信息查询所需控件,1个label,一个Edit,2个按钮,1个DBGrid:
这里需要链接数据库,与krxx表中的信息进行链接。连接方式为:
首先添加一个数据模板(datemodule),然后选择ADOQuery控件和datasource控件添加到数据模板,选中ADOQuery控件,在其属性中找到connectionstring,进行数据库的链接,选择
⑹再建立一个Form5,默认格式即可。在其中加入客房登记所需控件,和上面一样:
这个窗体也要进行数据库链接,过程和上面一样,只是链接的表名不同,这里链接的是kfxx表。
双击确定添加代码如下:
with Data3.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from fjxx where 房间号码=:a');
Parameters.ParamByName('a').value:=Trim(edit1.Text);
Open;
end;
关闭键的代码如下:
form5.close;
form1.show;
这样就完成了房间信息查询的操作。
(7) 再建立一个Form6,默认格式即可。在其中加入查看酒店信息所需控件:
1个label,1个按钮,1个DBGrid:
这里主要就是数据库的链接,改用另外一种方式为:
首先再建立一个Form7,默认格式即可。在其中加入查看客房信息所需控件,和(7)一样,不过这里能够采用(5)的方法进行数据库的链接。
再建立一个再建立一个Form8 ,默认格式即可。在其中加入退房所需控件:1个label,1个Edit,两个bitbtn,1个DBGrid,和一个DBNavigator如图:
将其与数据库中表krxx链接后,输入证件号码单击DBNavigator控件上的√能够突出显示选择的信息,然后点击退房能够实现退房功能。
4.1.2 进行窗体之间的转换
(1)在form3中进行密码设置,双击登录按钮进行代码输入如下:
var
results: Variant;
BEGIN
results:=ADOTable1.Lookup('姓名',edit1.text,'密码');
if results=edit2.Text then
begin
form3.Hide;
form1.Show;
end
else
begin
application.MessageBox('姓名或密码错误','提示信息',64);
edit1.SetFocus;
exit;
end;
end;
退出代码为:
close;
(2)在form1中进行剩余各form间的连接,在form1中分别单击要实现的功能菜单按钮,并分别输入代码,得到的最后代码如下:
procedure TForm1.N2Click(Sender: TObject);
begin
form1.Hide;
form2.showmodal;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
form1.Hide;
form4.showmodal;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
form1.Hide;
form5.ShowModal;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
form1.Hide;
form6.ShowModal;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
form1.hide;
form7.ShowModal;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
form1.hide;
form8.ShowModal;
end;
procedure TForm1.N7Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
而且要在uint1的连接代码上添加:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, DB, ADODB,unit2,unit4,unit5,unit6,unit7,unit8,;
在form2中进行和form1间的转换,代码如下:
双击关闭按钮添加代码:
form2.close;
form1.show;
(4)在form4,form5,form6,form7中进行form1间的转换,代码类似(3)。
3、form1中退出菜单的实现
双击退出菜单进行代码输入:close;即可。
至此完成了菜单管理的实现,能够运行后进行各功能的实现。
②代码设计
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "DJ"
zsdj_Click
Case "TF"
tf_Click
Case "FT"
ftck_Click
Case "CX"
zscx_Click
Case "exit"
If MsgBox("确定退出该系统?", 4, "系统提示") = vbYes Then
End
End If
End Select
End Sub
Private Sub sztx_Click()
Dim Str
CommonDialog1.Filter = "BMP图片(*.BMP)|*.BMP|JPG图片(*.JPG)|*.JPG|GIF图片(*.GIF)|*.GIF|所有文件(*.*)|*.*"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> "" Then
Image2.Picture = LoadPicture(CommonDialog1.FileName)
Str = CommonDialog1.FileName
Open (App.Path & "\picture.txt") For Output As #1
Print #1, Str
Close #1
CommonDialog1.FileName = ""
Else
CommonDialog1.FileName = ""
End If
End Sub
Private Sub sjbf_Click()
main_sjbf.Show
main.Enabled = False
End Sub
Private Sub sjhf_Click()
main_sjhf.Show
End Sub
Private Sub zsdj_Click()
main_kfdj.Show
main.Enabled = False
End Sub
Private Sub tf_Click()
main_tf.Show
main.Enabled = False
End Sub
Private Sub kfcx_Click()
main_kfcx.Show
main.Enabled = False
End Sub
Private Sub ftck_Click()
main_ftcx.Show
main.Enabled = False
End Sub
Private Sub zscx_Click()
Load main_zscx
main_zscx.Show
main.Enabled = False
End Sub
Private Sub tfcx_Click()
Load main_tfcx
main_tfcx.Show
main.Enabled = False
End Sub
4.1.3 系统登录模块设计
①窗体设计
⑴添加新窗体,命名为main_Login,Caption属性为”酒店客房管理系统”;
⑵添加Adodc控件以及两个TextBox控件,Text1放在用户名后,Text2放在密码后;
⑶添加两个Image控件,分别设置Picture属性,添加”确定”和”退出”按钮。
②代码设计
Private Sub Image1_Click()
If Text1.Text = 7 And Text2.Text = 123456 Then
main.Show
Me.Hide
Else
MsgBox "密码错误!", vbCritical, "提示"
End If
End Sub
Private Sub Image2_Click()
End
End Sub
4.1.4住宿登记模块
①窗体设计
⑴添加新窗体命名为main_kfdj,Caption属性为”住宿登记”;
⑵添加两个Adodc控件、TextBox控件数组以及2个DTPicker控件;
⑶添加3个ComboBox控件。
②代码设计
Private Sub comdj_Click()
Adodc1.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Oracle in OraDb11g_home1 };" & "server=webserver;DSN=;databasename=aa;databasefile=d:\\aa\\;UID=scott;PWD=123456"
Adodc1.RecordSource = "select * from tb_kf where 房态='空房'"
Adodc1.Refresh
Adodc2.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Oracle in OraDb11g_home1 };" & "server=webserver;DSN=;databasename=aa;databasefile=d:\\aa\\;UID=scott;PWD=123456"
Adodc2.RecordSource = "select * from tb_djb order by 凭证号码"
Adodc2.Refresh
If Not Adodc2.Recordset.EOF Then Adodc2.Recordset.MoveLast
If lsph.Text = "" Then bh.Text = Fdate & "d" & Format(1, "###000")
If lsph.Text <> "" Then
y1.Text = Month(Fdate)
y2.Text = Month(Left(lsph.Text, 10))
If y1.Text = y2.Text Then
'bh.Text = Fdate & "d" & Format(Val(Right(lsph.Text, 3)) + 1, "###000")
Text1.Text = Val(Right(lsph.Text, 3)) + 1
End If
If y1.Text <> y2.Text Then
bh.Text = Fdate & "d" & Format(1, "###000")
End If
End If
For i = 0 To 2
ZSDJ(i).Text = ""
ZSDJ(i).Enabled = True
Next i
For i = 4 To 6
ZSDJ(i).Text = ""
ZSDJ(i).Enabled = True
Next i
Combo3.Text = ""
Comok.Enabled = True: Comdj.Enabled = False
Combo3.Enabled = True: Combo1.Enabled = True
ZSDJ(0).SetFocus
Adodc3.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Oracle in OraDb11g_home1 };" & "server=webserver;DSN=;databasename=aa;databasefile=d:\\aa\\;UID=scott;PWD=123456"
Adodc3.RecordSource = "select * from tb_kf where 房态 = '空房'"
Adodc3.Refresh
Combo3.Clear
If Adodc3.Recordset.RecordCount > 0 Then
For i = 1 To Adodc3.Recordset.RecordCount
Combo3.AddItem Adodc3.Recordset.Fields("房间号").Value
Adodc3.Recordset.MoveNext
Next i
End If
End Sub
Private Sub comok_Click()
If ZSDJ(0) = "" Or Combo3 = "" Then
MsgBox "请输入完整信息", , "系统提示"
Else
Adodc2.RecordSource = "select * from tb_djb where 房间号 = '" & Combo3.Text & "' and 标志 like '1'"
Adodc2.Refresh
If Adodc2.Recordset.RecordCount = 0 Then
Adodc2.Recordset.AddNew
If bh.Text <> "" Then Adodc2.Recordset.Fields("凭证号码") = bh.Text
If ZSDJ(0).Text <> "" Then Adodc2.Recordset.Fields("姓名") = ZSDJ(0).Text
If Combo1.Text <> "" Then Adodc2.Recordset.Fields("证件名称") = Combo1.Text
If ZSDJ(1).Text <> "" Then Adodc2.Recordset.Fields("证件号码") = ZSDJ(1).Text
If ZSDJ(2).Text <> "" Then Adodc2.Recordset.Fields("详细地址") = ZSDJ(2).Text
If Combo3.Text <> "" Then Adodc2.Recordset.Fields("房间号") = Val(Combo3.Text)
If ZSDJ(4).Text <> "" Then Adodc2.Recordset.Fields("客房类型") = ZSDJ(4).Text
If DTP1.Value <> "" Then Adodc2.Recordset.Fields("住宿日期") = DTP1.Value
If ZSDJ(5).Text <> "" Then Adodc2.Recordset.Fields("客房价格") = Val(ZSDJ(5).Text)
If ZSDJ(6).Text <> "" Then Adodc2.Recordset.Fields("住宿天数") = ZSDJ(6).Text
If ZSDJ(7).Text <> "" Then Adodc2.Recordset.Fields("宿费") = ZSDJ(7).Text
If DTP3.Value <> "" Then Adodc2.Recordset.Fields("退宿日期") = DTP3.Value
Adodc2.Recordset.Update
Adodc2.Refresh
adocon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DB_KFGL.mdb;Persist Security Info=False"
adoRs.Open "select * from tb_djys", adocon, adOpenKeyset, adLockOptimistic
adoRs.AddNew
If bh.Text <> "" Then adoRs.Fields("凭证号码") = bh.Text
If ZSDJ(0).Text <> "" Then adoRs.Fields("姓名") = ZSDJ(0).Text
If Combo1.Text <> "" Then adoRs.Fields("证件名称") = Combo1.Text
If ZSDJ(1).Text <> "" Then adoRs.Fields("证件号码") = ZSDJ(1).Text
If ZSDJ(2).Text <> "" Then adoRs.Fields("详细地址") = ZSDJ(2).Text
If ZSDJ(4).Text <> "" Then adoRs.Fields("客房类型") = ZSDJ(4).Text
If Combo3.Text <> "" Then adoRs.Fields("房间号") = Val(Combo3.Text)
If ZSDJ(5).Text <> "" Then adoRs.Fields("客房价格") = Val(ZSDJ(5).Text)
If DTP1.Value <> "" Then adoRs.Fields("住宿日期") = DTP1.Value
If ZSDJ(6).Text <> "" Then adoRs.Fields("住宿天数") = ZSDJ(6).Text
If ZSDJ(7).Text <> "" Then adoRs.Fields("宿费") = ZSDJ(7).Text
If DTP3.Value <> "" Then adoRs.Fields("退宿日期") = DTP3.Value
adoRs.Update
adocon.Close
Adodc1.RecordSource = "select * from tb_kf where 房间号 like '" + Combo3.Text + "'"
If Combo3.Text <> "" Then Adodc1.Recordset.Fields("房态") = "入住"
Adodc1.Recordset.Update
For i = 0 To 6
ZSDJ(i).Enabled = False
Next i
ZSDJ(8).Enabled = False: ZSDJ(10).Enabled = False: ZSDJ(11).Enabled = False
Combo3.Enabled = False: Combo1.Enabled = False
End If
Comok.Enabled = False: Comprint.Enabled = True: Comdj.Enabled = True
Comprint.SetFocus
End If
End Sub
Private Sub comcancel_Click()
For i = 0 To 2
ZSDJ(i).Enabled = False
Next i
For i = 4 To 6
ZSDJ(i).Enabled = False
Next i
Comok.Enabled = False: Combo3.Enabled = False
Combo1.Enabled = False: DTP3.Enabled = False
Comdj.Enabled = True
End Sub
Private Sub comend_Click()
Unload Me
main.Enabled = True
End Sub
4.1.5退宿登记模块
按照如上方法设计窗体如下:
代码设计:
Private Sub Form_Load()
Adodc1.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Oracle in OraDb11g_home1 };" & "server=webserver;DSN=;databasename=aa;databasefile=d:\\aa\\;UID=scott;PWD=123456"
Adodc1.RecordSource = "select * from tb_djb"
'Adodc1.Refresh
Adodc2.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Oracle in OraDb11g_home1 };" & "server=webserver;DSN=;databasename=aa;databasefile=d:\\aa\\;UID=scott;PWD=123456"
Adodc2.RecordSource = "select * from tb_kf"
'Adodc2.Refresh
Adodc3.ConnectionString = "PROVIDER=MSDASQL;DRIVER={Oracle in OraDb11g_home1 };" & "server=webserver;DSN=;databasename=aa;databasefile=d:\\aa\\;UID=scott;PWD=123456"
Adodc3.RecordSource = "select * from tb_gzmx"
'Adodc3.Refresh
Adodc4.Con
展开阅读全文