1、酒店管理系统Oracle数据库的设计与实现概述 Oracle 数据库的设计与实现选题名称: 酒店管理系统 姓 名: 学 号: 专 业: 班 级: 指导老师: 设计地点: 目 录一、 系统需求分析1.1系统开发的目的和意义 -31.2系统要求 -3二、系统总体设计2.1系统功能需求 -42.2系统数据需求 -42.3系统功能结构图 -52.4系统部分流程图 -5三、数据库设计3.1数据库概念模型 -73.2数据库物理模型 -83.3酒店管理系统部分数据字典 -9四、系统实现过程4.1设计过程 -114.2系统各界面设计代码 -28五、实验总结5.1实验中遇到的问题 -355.2心得体会 -35一
2、、系统需求分析1.1系统开发的目的和意义 首先应该在此次实践中有所收获,能够学习到相关软件的功能,和进行实践设计需要的知识的。能够在实践中学习。 面对酒店行业的高速发展和酒店行业信息化发展的过程中出现的各种情况,酒店客房管理系统在实施后应达到以下目的: 实现多点操作的信息共享,相互之间的信息传递准确、快捷、顺畅; 服务管理信息化,可随时掌握客人住宿情况; 系统界面友好美观,操作简单易行,查询灵活方便,数据存储安全。 实现客房的登记入住和查询功能,查询酒店信息,客人信息,客房信息等功能。 实现Delphi和oracle的连接,进行数据的插入。1.2系统要求要求实现酒店员工信息管理、客户信息管理、
3、客房信息管理、订单管理等功能,包括客户信息的添加、修改、删除及查询;客房信息的添加、修改、删除及查询;订单查询及退房管理等。二、 系统总体设计2.1系统功能需求 经过对互联网上的各大酒店管理系统的认识和分析,我对酒店管理系统有了基本的了解,我觉得该系统至少应该具有以下的一些基本功能: (1) 系统管理模块:包括登录系统,用户管理,权限管理,角色管理,以及查询统计,客户管理折扣管理和开台管理等。 (2) 基本设置管理模块:包括厨师的管理,买单管理等。 (3) 客户管理模块:包括客户点菜,上菜,结账,统计等。 (4) 客户订房管理模块:包括订房,续房,查房,退房,结算等。 2.2 系统数据需求根据
4、数据需求分析可知该系统至少应该具有以下的一些数据需求:DESKTYPE餐桌类别表(餐桌类别编号,餐桌座位数,餐桌方位,备注)。DESK餐桌表(餐桌编号,餐桌类别编号,餐桌状态,备注)。FOODYPE菜系 (菜系编号,菜系名称,备注)。FOOD菜品(菜品编号,菜单编号,所属菜系,菜品名称,菜品价格,助记码,备注)。FOODTICKET餐饮订单(订单编号,餐桌编号,下单服务员编号,点菜时间,订单状态,备注)。ROOMCUSTINFO住房客户信息表(住户编号,客房类别编号,住户姓名,住户省份证号)。FOODLIST菜单(菜单编号,餐桌编号,菜品编号,厨师编号,状态,备注)。ROOMTYPE客房类别表
5、(客房类别编号,客房类型名称,客房类别价格,备注)。ROOMINFO客房信息表(房间编号,客房类别编号,客房状态,备注)。ROOMTICKET客房订单管理表 (订单编号,房间号,下单服务员ID,身份证号,入住时间,离开时间,押金金额,结算金额,下单时间,备注)。CUSTINFO客户信息表 (身份证号,客户姓名,客户性别,客户电话,是否会员,信息录入时间,备注)。USER 用户信息表(用户编号,角色编号,部门编号,用户名,用户密码,是否审核经过,年龄,性别,生日,联系电话,备注)。ROLE 用户角色表(角色编号,角色名,备注)。DEPARMENT 部门表(部门编号,名称,上级部门编号,备注)。P
6、ERMISSION 权限表(权限编号,权限组编号,权限名称,备注)。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酒店管
7、理系统部分数据字典本系统数据库采用Oracle数据库,系统数据库名称为HotelDB,共包含17张表。菜系表:用来存储菜系的信息,其中FOODTYPEID字段为主键。表3-3-1 菜系:FOODYPE字段名称类型允许空主键外键外键参考表 说明FOODTYPEIDNUMBE(5)NOTYES菜系IDFOODTYPENAMEVARCHAR2(20)NOT菜系名称FOODTYPEREMARKVARCHAR2(50)YES备注菜品表:用于菜品的所有信息,也是点菜的菜单的一个信息来源表,从中可获得菜品的全部信息。其中字段FOODTYPEID用来描述该菜品属于哪个菜系是外键参参考表FOODTYPE,根据此
8、字段的值,能够知道菜品属于相应的哪个菜系。表3-3-2 菜品:FOOD字段名称类型允许空主键外键外键参考表说明FOODIDNUMBER(5)NOTYES菜品IDFOODNAMEVARCHAR2(20)NOT菜品名称FOODTYPEIDNUMBER(5)NOTYESFOODYPE所属菜系IDFOODPRICENUMBER(5)NOT菜品价格FOODHELPCODEVARCHAR2(10)NOT助记码FOODREMARKVARCHAR2(50)YES备注客房类别表:用来存储客房类别的信息,表3-3-3客房类别表:ROOMTYPE字段名称类型允许空主键外键外键参考表说明ROOMTYPEIDNUMBE
9、R(5)NOTYES客房类别编号ROOMTYPENAMEVARCHAR2(20)NOT客房类别名称ROOMTYPEPAYNUMBER(5)NOT类别价格ROOMTYPEREMARKVARCHAR2(50)NOT备注客房信息表:用来存储客房信息。表3-3-4 客房信息表:ROOMINFO字段名称类型允许空主键外键外键参考表说明ROOMIDNUMBER(5)NOTYES房间编号ROOMTYPEIDNUMBER(5)NOTYESROOMTYPE客房类别编号续表 5-4字段名称类型允许空主键外键外键参考表说明ROOMCHECKNUMBER(5)NOT客房状态ROOMREMARKVARCHAR2(50)
10、YES备注客户信息表:用来存储酒店客户的相关信息。表3-3-5 客户信息表: CUSTINFO字段名称类型允许空主键外键外键参考表说明CARDIDVARCHAR2(20)NOTYES身份证号CUSTNAMEVARCHAR2(20)NOT姓名CUSTSEXVARCHAR2(10)NOT性别CUSTPHONEVARCHAR2(20)YES电话VIPCHECKNUMBER(5)YES是否会员CUSTDATEVARCHAR2(20)YES信息录入时间四、 系统实现过程4.1设计过程4.1.1窗体设计新建一个标准工程,会出现form1,能够遵循默认格式,也能够更改名称,这里默认。添加所需控件mainme
11、nu,双击控件在其中加入所要进行的功能如下: 添加控件Image插入图片,选中image控件,在其属性表中选中picture,选择需要的图片:再建立一个Form2,默认格式即可。在其中加入客房登记所需控件:再建立一个Form3,默认格式即可,而且在project-options中设置其为主窗体。在其中加入客房登记所需控件,8个label,8个Edit,两个bitbtn如图:能够在bitbtn按钮中添加图片,使其更加生动,选中按钮,在其属性选择Glyph,选择需要的图片即可,注意图片格式要符合要求,还能够为界面换颜色。再建立一个Form4,默认格式即可。在其中加入客人信息查询所需控件,1个lab
12、el,一个Edit,2个按钮,1个DBGrid:这里需要链接数据库,与krxx表中的信息进行链接。连接方式为:首先添加一个数据模板(datemodule),然后选择ADOQuery控件和datasource控件添加到数据模板,选中ADOQuery控件,在其属性中找到connectionstring,进行数据库的链接,选择再建立一个Form5,默认格式即可。在其中加入客房登记所需控件,和上面一样:这个窗体也要进行数据库链接,过程和上面一样,只是链接的表名不同,这里链接的是kfxx表。双击确定添加代码如下:with Data3.ADOQuery1 do begin Close; SQL.Clear
13、; 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)的方法进行数据库的
14、链接。再建立一个再建立一个Form8 ,默认格式即可。在其中加入退房所需控件:1个label,1个Edit,两个bitbtn,1个DBGrid,和一个DBNavigator如图:将其与数据库中表krxx链接后,输入证件号码单击DBNavigator控件上的能够突出显示选择的信息,然后点击退房能够实现退房功能。4.1.2 进行窗体之间的转换(1)在form3中进行密码设置,双击登录按钮进行代码输入如下:varresults: Variant;BEGINresults:=ADOTable1.Lookup(姓名,edit1.text,密码);if results=edit2.Text thenbeg
15、inform3.Hide;form1.Show;endelsebeginapplication.MessageBox(姓名或密码错误,提示信息,64); edit1.SetFocus; exit;end;end;退出代码为:close;(2)在form1中进行剩余各form间的连接,在form1中分别单击要实现的功能菜单按钮,并分别输入代码,得到的最后代码如下:procedure TForm1.N2Click(Sender: TObject);beginform1.Hide;form2.showmodal;end;procedure TForm1.N3Click(Sender: TObject
16、);beginform1.Hide;form4.showmodal;end;procedure TForm1.N4Click(Sender: TObject);beginform1.Hide;form5.ShowModal;end;procedure TForm1.N5Click(Sender: TObject);beginform1.Hide;form6.ShowModal;end;procedure TForm1.N6Click(Sender: TObject);beginform1.hide;form7.ShowModal;end;procedure TForm1.N8Click(Sen
17、der: TObject);beginform1.hide;form8.ShowModal;end;procedure TForm1.N7Click(Sender: TObject);beginclose;end;procedure TForm1.FormCreate(Sender: TObject);beginend;而且要在uint1的连接代码上添加:uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, DB, ADODB,unit2,unit4,uni
18、t5,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
19、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 SelectEnd SubPrivate Sub sztx_Click()Dim StrCommonDialog1.Filter = BMP图片(*.BMP)|*.BMP|JPG图片(*.JPG)|*.JPG|GIF图片(*.GIF)|*.GIF|所有文件(*.*)|*.*CommonDialog1.ShowOpenIf Commo
20、nDialog1.FileName ThenImage2.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 IfEnd SubPrivate Sub sjbf_Click()main_sjbf.Showmain.Enabled = FalseE
21、nd SubPrivate Sub sjhf_Click()main_sjhf.ShowEnd SubPrivate Sub zsdj_Click() main_kfdj.Show main.Enabled = FalseEnd SubPrivate Sub tf_Click() main_tf.Show main.Enabled = FalseEnd SubPrivate Sub kfcx_Click() main_kfcx.Show main.Enabled = FalseEnd SubPrivate Sub ftck_Click() main_ftcx.Show main.Enabled
22、 = FalseEnd SubPrivate Sub zscx_Click() Load main_zscx main_zscx.Show main.Enabled = FalseEnd SubPrivate Sub tfcx_Click() Load main_tfcx main_tfcx.Show main.Enabled = FalseEnd Sub4.1.3 系统登录模块设计窗体设计添加新窗体,命名为main_Login,Caption属性为”酒店客房管理系统”;添加Adodc控件以及两个TextBox控件,Text1放在用户名后,Text2放在密码后;添加两个Image控件,分别设置
23、Picture属性,添加”确定”和”退出”按钮。代码设计Private Sub Image1_Click() If Text1.Text = 7 And Text2.Text = 123456 Then main.Show Me.Hide Else MsgBox 密码错误!, vbCritical, 提示 End IfEnd SubPrivate Sub Image2_Click()EndEnd Sub4.1.4住宿登记模块窗体设计添加新窗体命名为main_kfdj,Caption属性为”住宿登记”;添加两个Adodc控件、TextBox控件数组以及2个DTPicker控件;添加3个Combo
24、Box控件。代码设计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=MSDA
25、SQL;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,
26、#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
27、 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 Ora
28、Db11g_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(房间号
29、).Value Adodc3.Recordset.MoveNext Next i End IfEnd SubPrivate 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.AddN
30、ew 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(详细
31、地址) = 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).Tex
32、t 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;
33、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(证
34、件号码) = 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
35、 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(
36、房态) = 入住 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
37、IfEnd SubPrivate 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 = TrueEnd SubPrivate Sub comend_Click() Unload Me main.Enabled =
38、 TrueEnd Sub4.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.ConnectionStri
39、ng = 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