专业课程设计报告范文-Delphi餐饮管理系统.docx
南京审计学院信息科学学院课程设计报告书课程名称:信息系统开发工具课程设计课题名称: 餐饮管理系统专业:信息管理与信息系统班 级:08级信息管理1班学号:061415309姓 名:孙晓刚成 绩:4)自动生成结账编号,输入菜数量自动计算合计消费金额。5)可实现挂单、读单、放弃开台和点菜完毕返回的功能。第三章数据库设计3.1 系统E-R图的设计系统E-R图如图3.1所示3.2 数据库结构设计数据库结构设计是总体设计阶段非常重要的环节,好的数据库结构可以简化开发 过程,使系统功能更加清晰明确。因为数据库结构的变化会造成编码的改动,所以必 须认真设计数据库后再进行编码,从而避免了无谓的重复的工作。本系统采用了 SQL Server数据库,数据库名称为060412079。该数据库包含4个 表,分别是:开台表,点菜表,菜谱费用信息表,台号信息表。下面分别介绍数据表 的结构。1、开台表开台表用于保存开台的相关信息。开台表的结构见表3-2-1所示。表3-2-1开台表结构2、点菜表字段名称数据类型字段大小允许为空否编号int4设置为主键房台名称char30允许为空类型说明char20允许为空餐饮部门char20允许为空服务费money8允许为空简要说明char30允许为空状态char20允许为空点菜表用于保存点菜信息和相应的消费信息。点菜表的结构见表3-2-2所ZjS o表3-2-2点菜表结构字段名称数据类型字段大小是否允许为 空idchar16设置为主键房间台号int4允许为空类别Char10允许为空编号int4允许为空名称char50允许为空类型char20允许为空单位char10允许为空数量int4允许为空价格money8允许为空合计Money8允许为空点单日期datetime8允许为空结单日期datetime8允许为空服务员编号int8允许为空服务员姓名char12允许为空状态char10允许为空结账编号int4允许为空是否结单char10允许为空3、菜谱费用信息表用于查询餐饮店所有的菜的信息。菜谱费用信息表的结构如 图3-2-3所示。表3-2-3菜谱费用信息结构4、台号信息表用于台号信息的查询,方便了消费者选台,开台及其他的作用。 台号信息表的结构如图3-2-4示。字段名称数据类型字段大小是否允许为 空编号int4设为主键菜名char50允许为空单位char10允许为空价格money8允许为空菜系类别char20允许为空口味说明char30允许为空表3-2-4台号信息表结构字段名称数据类型字段大小是否允许为 空编号int4设为主键房台名称char30设为主键类型说明Char20允许为空餐饮部门Char20允许为空服务费money8允许为空简要说明char30允许为空状态char10允许为空容纳人数Int4允许为空第四章系统详细设计及实现系统登陆界面设计1 实现目标程序启动后,首先登陆此界面验证操作员的密码。主要实现的功能如下:1)以图标形式显示数据库中操作员,并凭口令登入到主界面。2)操作员输入错误密码提醒错误并返回,三次输入错误口令则退出系统。3)实现权限登录:系统管理员拥有一切权利,其他操作员则被限制一些操作权限。 系统登录界面如图所示。窗口*J图系统登录界面2 .实现过程(1)添加窗体设置窗体caption属性为“登录窗口”,保存窗体为u79in.pas。(2)向窗体中添力口 Datasource、Query、Edit> Listview、lmageList> Image、Time、Label等控件。主要控件对象的属性如表4-2-1所示。表4-2-1主要控件对象的属性列表.程序主要代码如下:控件名属性值功能QuerylDatabase nameSQL060412079Select * from 员工信表权限查询DatabaselDatasetQueryl设置数据源单击“登陆”按钮,将判断操作员、操作密码是否正确,如果正确进入主界 面并根据操作员权限设置菜单和工具是否可用。如果输入密码错误将提醒并返回,三 次错误输入则自动退出系统。procedure TUser.BitBtnlClick(Sender: TObject);beginMain Form.Tool Button 1. Enabled :=True;Main Form.ToolButton2. Enabled :=True;Main Form.Tool Buttons. Enabled :=True;Main Form.Tool Button6. Enabled :=True;Main Form. Nl.Enabled :=True;Main Form. N2. Enabled :=True;Main Form. N4. Enabled :=True;Main Form. N3. Enabled :=True;Main Form. N5. Enabled :=True;Main Form. N6. Enabled :=True;Main Form. N7. Enabled :=True;Main Form. N8. Enabled :=True;Main Form. N9. Enabled :=True;Main Form. N17. Enabled :=True;Main Form. N19. Enabled :=True;if Queryl.FieldByName('编号').AsString='controller' then如果是系统管理员begin('密码)AsString thenbeginShowMessage(T+Queryl.FieldByName(姓名').AsString+'的 口 令错误/ 口 令错误Editl.SetFocus;EndElsebeginMain Form.StatusBarl.Panelsl.Text:='用户'+aueryl.FieldByName( 姓名 ').AsString+1';Main Form.Userl:=Queryl. Field ByName。姓名AsString;User_Close:=3;Timerl. Enabled :=Fa Ise;Close;end;EndElsebeginMain Form.Tool Button 1. Ena bled :=False;Main Form.Tool Button2. Ena bled :=False;Main Form.Tool Buttons. Ena bled :=False;Main Form. Nl. Enabled :=False;Main Form. N2. Enabled :=False;Main Form. N4. Enabled :=False;Main Form. N3. Enabled :=False;Main Form. N5. Enabled :=False;Main Form. N6. Enabled :=False;Main Form. N7. Enabled :=False;Main Form. N8. Enabled :=False;Main Form. N9. Enabled :=False;Main Form. N17. Enabled :=False;Main Form. N19. Enabled :=False;if Editl.TextQueryl.FieldByName('密码').AsString thenbeginShowMessage(,+Clueryl.FieldByName(',).AsStnng+,fitlEditl.SetFocus;EndElsebeginName:=Queryl. Field ByNameCZyAsString;Main Form.Enabled Key(Name);设置操作员权限Main Form.StatusBarl.Panelsl.Text:='用户'+Queryl.Field ByNameC 姓名 .AsString+T;User_Close:=3;Timerl. Enabled :=False;Close;end;end;END;窗体启动,关闭钥匙,后将所有操作员添加到操作员列表。procedure TUser.FormShow(Sender: TObject);var List:Array0.1of TListltem;beginTimerl. Enabled :=True;User_Close:=0; 打开关闭钥匙Queryl.Close;Queryl.Open;ListViewl. Items.Clear;While not Queryl.Eof dobeginListO:=ListViewl. Items. Add;ListO .Caption :=Queryl.Field ByName('姓名)AsString;if Queryl.FieldByName。编号).AsString:'controller' thenbeginListO.lmagelndex:=O;EndElsebeginListO.lmagelndex:=l;end;Queryl.Next;end;end;选择操作员,点击其中一个则将员工的姓名和类型添加到了相应位置。procedure TUser.ListViewlClick(Sender: TObject);var List:Array0.1of TListltem;beginListO :=ListViewl.Selected;if List0oNil then beginQueryl.Loca te(,姓名 ',ListO.Capt ion/loCasel nsensitive); 查询姓名,但是如果有从名的按第一个算.end;end;主界面设计1、程序启动后。系统在“登陆界面”验证操作员密码后,将进入此界面。系统 主界面主要功能:根据操作员权限设置相应权限的菜单和工具栏功能。可通过菜单或快捷键进入相应子界面。显示了系统当前时间和相应操作员。主程序界面如图所示。图主程序界面2 .实现过程(1)启动Delphi,设置窗体名为mainfrom,设置窗体caption为“餐饮管理系统”, 保存为u791.paso向窗体中添力口 Imagelist、mainmenu> image、toolbutton、stausbar> panektime> label等控件主要属性为:控件名属性值功能Toolbar1imagesImagelistl设置工具栏图标stausbar1Panell用户登录【管理员】显小程序状态、参 数(3)主要程序代码如下:使应用项目的提示信息挂钩程序。procedure TMainForm.FormCreate(Sender: TObject); beginApplication.OnHint:=DisPlayHint; 与应用项目的提示信息挂钩 end;先调用系统登陆窗口,再设置窗体状态参数程序。procedure TMainForm.FormShow(Sender: TObject);var Year,Month,Day: Word;beginClose_l:=l;User.ShowModal; 调用系统登陆窗口If Close_l = 0 ThenCloseElsebeginApplication. Main Form.WindowState:=wsMaximized;Application. Main Form.WindowState:=wsNormal;DecodeDate(StrToDate(DateTOStr(Date),Year,Monthyday); 分解日期StatusBarl.Panels2.Text:='系统日期:'+lntToStr(Year)+'年'+lntToStr(Month)+,月 4lntToStr(day)+日'; end; end;调入开台界面程序。procedure TMainForm.N8Click(Sender: TObject);beginIf Assigned(KTGL) Then begin2010年 12月 26日2.1 系统功能需求分析5系统数据流图52.2 数据字典62)数据流名称:菜谱信息63)数据流名称:桌台状况64)数据流名称:开台人65)数据流名称:员工信息76)数据流名称:管理员情况7(2)主要的数据存储定义7)数据存储编号:D 1 71 )数据存储编号:D273)数据存储编号:D372)处理过程编号:P28系统总体框架设计81.1 各模块功能分析9DataModulel.THXX.Open;/打开台号信息表DataModulel.cybmb.Open;/ 打开餐饮部门表DataModulel.JZBH.Open; 打开结帐编号表KTGL:=TKTGL.Create(Self);KTGL.ShowModal;end;end;设置“B”类权限有系统管理和系统维护操作权,“A”类权限即系统管理员的 操作享有一切操作权限。如图422所示。图4.2.2 B类权限主程序界面代码如下:Function TMain Form.Ena bledKey(keyString)Boolean;声明操作权限函数 EnabiedKey beginif Pos('A*ey)>0 then 具有9,类权限beginMain Form.Tool Button 1. Enabled :=True;Main Form.ToolButton2. Enabled :=True;Main Form.Tool Buttons. Enabled :=True;Main Form.ToolButton6. Enabled :=True;Main Form. Nl.Enabled :=True;Main Form. N2.Enabled :=True;Main Form. N4. Enabled :=True;Main Form. N3.Enabled :=True;Main Form. N8. Enabled :=True;Main Form. N9.Enabled :=True;Main Form. N17. Enabled :=True;Main Form. N19. Enabled :=True;End Else if Pos('B',key)>0 then具有"B"类权限beginMain Form.Tool Button 1. Enabled :=True;Main Form.ToolButton2. Enabled :=True;Main Form.Tool Button6. Enabled :=True;Main Form. Nl.Enabled :=True;Main Form. N5.Enabled :=True;Main Form. N6.Enabled :=True;Main Form. N7.Enabled :=True;Main Form. N4.Enabled :=True;Main Form. N3.Enabled :=True;Main Form. N8.Enabled :=True;Main Form. N9.Enabled :=True;Main Form. N17.Enabled :=True;Main Form. N19. Enabled :=True;End;end;调入菜谱信息设置界面程序。procedure TMainForm.N6Click(Sender: TObject);beginIf Assigned(CPXXSZ) ThenbeginDataModulel.CPFYXX.Open; 打开菜谱费用信息表DataModule1.cxlbxx.open; 打开菜系类别信息表CPXXSZ:=TCPXXSZ.Create(Self);CPXXSZ.ShowModal;end;end;4.3菜谱信息设置界面设计4.3.1 菜谱设置模块1 .实现目标程序启动后,调用菜单“基础信息设置”下的“菜谱信息设置”项,将打开“菜 谱信息设置界面:系统菜谱信息设置界面主要功能:实现对菜谱信息的添加、修改、 删除、查询的功能。2 ,实现过程(1)添加新窗体,设置窗体名为cpxxsz,设置窗体caption为“菜谱信息设置”, 保存为 u79cpset.paso(2)向窗体中添加 query、panek groupbox> dbgrid> dbedit> edit、dbtext> bitbtn、dblookupcombobox> time datasetfrist> actionlist> label 等控件,主要控件属性如表4-3-1所示。表4-3-1主要控件属性对象属性值功能QuerylDatabasenam esql060412079Sleet MAX(编号)from 菜谱信息费用表设 置数据 范围DatasetFristlDatasourceCaptionHintDatabasel.cpxxfys 首记录 移动到第一条记录移 动至IJ首 记录DatasetLastlDatasourceCaptionHintDatabasel.cpxxfys尾记录移动到最后一条记录移 动至1尾 记录DatasetNextlDatasourceCaptionHintDatabasel.cpxxfys 下一条记录 移动到下一条记录移 动到下 一条记 录DatasetPriorlDatasourceCaptionHintDatabasel.cpxxfys 上一条记录 移动到上一条记录移 动到上 一条记 录DBLookupComB oxiListsourceKeyfieldListfieldDatasourceDtafirldDatabasel.cpfyxxs 菜系名称 菜系名称 Databasel.cxlbxxs 菜系类别选 择菜系 类别菜谱查询设计1.菜谱信息设置查询界面如图4.3,1所示。图菜谱信息查询设置界面2.代码如下:procedure TCPXXSZ.BitBtnlClick(Sender: TObject);var a,b,c:integer;d:String;beginIf Length(Editl.Text)二0 Then如果输入查询信息为空beginShowMessage(,请输入查询的编号或菜名信息,);Editl.SetFocus;EndElsebegina:=Length(Editl.Text);c:=0;for b:=l to a do /for语句用于判断查询是按菜谱编号还是按菜名查询 beginD:=COPY(editl.text/b/l);if (D=U) or (D<='9') thenbeginc:=c+l;end;end;If c = Length(Editl.Text) Then按菜谱编号查询beginif DataModulel.CPFYXX.Locate('编 号,/StrTOInt(Editl.Text),loCaselnsensitive)thenbeginDBGridl.Setfocus;DBG rid 1.Selected I ndex:=0;EndElsebeginShowMessage('对不起,没有找到。');Editl.setfocus;end;EndElse按菜谱编号查询begin。菜名:Editl.Text/oPartialKey) then beginDBGridl.Setfocus;DBGridl.Selectedlndex:=l;EndElsebeginShowMessage('对不起,没有找到。);Editl.setfocus;end;end;end; end;菜谱添加设计1 .菜谱信息设置添加界面如图4.3,2所示。图菜谱信息添加设置界面2 .代码如下:procedure TCPXXSZ.BitBtn2Click(Sender: TObject);vara:integer;beginQueryl.Close;Queryl.Open;if Queryl.RecordCountoO then a:=Queryl.FieldsO.Aslnteger else a:=l;if Bitbtn2.Caption='添力then添加菜谱信息beginData Modulel.CPFYXX. Refresh;If DataModulel.CPFYXX.RecordCount = 0 Then A:=79000 添加菜谱信息ElsebeginDataModulel.CPFYXX.Last;a :=Data Modulel.CPFYXX. Field ByNameC-').Asi nteger;end;BitBtn2.Caption:='保存';BitBtn3.Ca Ption 取消';Aenabled(l);Data Modulel.CPFYXX. Insert;Data Modulel.CPFYXX. Field ByName('#').Asi nteger:=a+l;DataModulel.CPFYXX.FieldByNameC 菜 系 类 别AsString:=DataModulel.CXLBXX.Field ByName('菜系名称AsString;DBEdit2.SetFocus;EndElse保存菜谱信息beginif (Length(DataModulel.CPFYXX.FieldByname('')-AsString)=O) or(Length(DataModulel.CPFYXX.FieldBynameCMTAsStringJ=O) or(Length(DataModulel.CPFYXX.Field Byname。价格,).AsString)=O) then beginShowMessage。请将菜名、单位、价格的数据添全。1);DBEditl.SetFocus;EndElsebeginAEnabled(2);BitBtn2.Caption:='添力T;BitBtn3,Caption:='修改DataModulel.CPFYXX.Post;保存菜谱信息end;end;end;菜谱修改设计L菜谱信息设置修改界面如图4.3,3所示。图菜谱信息设置修改界面2 .代码如下:procedure TCPXXSZ.BitBtn3Click(Sender: TObject);beginif BitBtn3.Caption='修改,thenbeginData Modulel.CPFYXX. Refresh;If DataModulel.CPFYXX.RecordCount = 0 Then如果数据为空beginShowMessage('对不起,没有数据可以修改。);EndElse如果数据不为空beginAEnabled(l);BitBtn2.CaptionBitBtn3.Caption:='取消';DataModulel.CPFYXX.Edit; 编辑DBEditl.SetFocus;end;EndElsebeginAENabled(2);Bitbtn2.Caption:='添力口BitBtn3.Caption:=修改Data Modulel.CPFYXX.Cancel;取消保存信息end;end;菜谱删除设计L菜谱信息设置删除界面如图4.3,3所示。图菜谱信息设置删除界面2 .代码如下:procedure TCPXXSZ.BitBtn4Click(Sender: TObject);beginData Modulel.CPFYXX. Refresh;If DataModulel.CPFYXX.RecordCount = 1 ThenbeginShowMessage('对不起,这是最后一个菜,不能删除。);EndElseif MessageDLGC确认删除指定的菜谱信息吗? :mtCustommbYes,mbNOLO)=mrYes thenbeginDataModulel.CPFYXX.Delete;删除数据end;end;5.状态编辑与浏览状态函数function AEnabled(key:integer):Boolean ; 定义状态编辑与浏览状态函数beginIf key=1 Then 编辑状态beginCPXXSZ.BitBtn4.Enabled:=False; / “册U除“按钮不可用CPXXSZ.BitBtn5.Enabled:=False; / “退出“按钮不可用CPXXSZ.BitBtnl.Enabled:二False; / “查询“按钮不可用CPXXSZ. Editl. Enabled :=False;查询输入框不可用CPXXSZ.DBGridl. Enabled:=False;CPXXSZ. GroupBoxlVisible:=True;EndElse 浏览状态/ ”删除“按钮可用 “退出“按钮可用 / ”查询“按钮可用/ ”删除“按钮可用 “退出“按钮可用 / ”查询“按钮可用beginCPXXSZ.BitBtn4.Enabled:=True;CPXXSZ.BitBtn5.Enabled:=True;CPXXSZ.BitBtnl.Enabled:=True;CPXXSZ. Editl. Enabled :=True;CPXXSZ.DBGridl.Enabled-True;CPXXSZ. GroupBoxl. Visible:= False;end;end;4.4系统开台管理设计1 .实现目标程序启动后,调用菜单“前台管理”下的“开台管理”项,将打开“开台管理” 界面。系统开台管理界面主要功能:以图标模式显示空台、营业台,点击台号图标则自动显示相应台号信息。通过输入台号检索符合条件的台号。点击空房自动弹出与昂查询窗口从而自动开台。2 .实现过程(1)添加新窗体,设置窗体名为ktgl,设置窗体caption为“开台管理”,保存 为 u79ktgl.paso(2)向窗体中添力口 datasource、query、groupbox> panek pagecontrok dbgrid> dbedit> edit> dbtext> bitbtn> dblookupcombobox> image> label 等控件,主要控件属 性如表4-3-1所示。表4-3-1主要控件属性控件名属性值功能打他搜如厕DatasetQuery设置数据 源DBLookupComB oxiListsourceKeyfieldListfieldDatabasel.cybm bs部门名称选择餐饮 部门部门名称DbgridldatasourceDatabasel.thxxs显示台号 信息441搜索台号设计1.开台管理搜索台号界面如图4.4-1所示。图4.4-1开台管理搜索台号界面3 .代码如下:procedure TKTGL.BitBtnlClick(Sender: TObject); 搜索房台 var List:TListltem;Lists:integer;ListText:String;ahc:integer;d:String;beginIf Length(Editl.Text) = 0 ThenbeginShowMessage。请输入查询的房台编号或房台名称信息); Editl.SetFocus;EndElsebegina:=Length(Editl.Text);c:=0;for b:=l to a dobeginD:=COPY(editl.text,b/l);if (D=O) or (D<='9') then begin(2)系统王界面王要功能9系统E-R图的设计103.1 数据库结构设计124.1系统登陆界面设计142.实现过程15END;174.2主界面设计18代码如下:20FUNCTION TMAINFORM.ENABLEDKEY(KEY:STRING):BOOLEAN;声明操作权限函数ENABLEDKEY20431菜谱设置模块212.实现过程214.3.3 菜谱添加设计24442开台设置设计31GB:=2;31IF LENGTH(EDITl.TEXT) = 0 THEN31GB:=1;32客户放弃开台设计354.5.2 客户点菜完毕返回设计36C:=c+1;end;end;If c = Length(Editl.Text) Thenbeginif DataModulel.THXX.Locate(,_',StrTOInt(Editl.Text),loCaselnsensitive) then begin('状态').AsString<空闲'thenbeginPageControll.ActivePagelndex:=l;显示第二页BitBtn6.SetFocus; 将焦点移到点菜服务按扭上EndElsebeginPageControll.ActivePagelndex:=0;显示第一页BitBtrB.SetFocus; 将焦点移到开台设置按扭上end;EndElsebeginShowMessage('对不起,没有找到。');end;EndElsebeginif DataModulel.THXX.Locate('Mn'',Editl.Text,loPartialKey) thenbegin。状态').AsString<>'空闲'thenbeginPageControll.ActivePagelndex:=l;显示第二页BitBtn6.SetFocus; 将焦点移到点菜服务按扭上EndElsebeginPageControll.ActivePagelndex:=0;显示第一页BitBtn3.SetFocus; 将焦点移到开台设置按扭上end;EndElsebeginShowMessage。对不起,没有找到。');end;end;end;end;442开台设置设计L开台管理开台设置界面如图4.4,2所示。置空闲房台:营业房台:I翌珠江翌灵江翌晋江翌闽江选择餐饮部门:当前房台信息栏: 编号:6房台名称:闽江类型说明:色桂江翌汉江戋兰江翌沅江翌解江得开台设置助点菜服务皿J翌丹江服务费:简要说明:状态:空闲容纳人数:12。搜索房间台号日空闲总数:11图开台管理开台设置界面2 .代码如下:procedure TYGCX.BitBtnlClick(Sender: TObject);beginGB:=2;If Length(Editl.Text) = 0 ThenbeginShowMessage('请输入员工编号');Editl.Setfocus;EndElse('员 工编号'/StrTolnt(Editl.Text),loCaselnsensitive) thenbeginIf not Assigned(DCFY_LR) ThenbeginDCFY_LR:=TDCFY_LR.Create(Self);DCFY_LR.Labell4.Caption:=YGCX.Editl.Text;DCFY_LR. Label 15.Caption:=Data Modulel .YGXXB.Field ByName。姓名').AsSTring;DCFY_LR.Labell6.Caption:=DateTimeToStr(Now);If Data Mod ulel.JZBH. RecordCount = 0 ThenbeginData Modulel.JZBH. Append;Data Modulel. JZBH. Field ByName('编号').Asi nteger:=l;Data Mod ulel.JZBH. Post; EndElseDCFY_LR. Label 17.Caption :=lntToStr(DataModulel.JZBH.FieldbyName(' ').Aslnteger+l);DCFY_LR.Show;end;GB:=1;YGCX.CIose;EndElse beginShowMessageC对不起没有找到此员工信息Editl.Setfocus;end;end;台号信息查询的设计1 .开台管理台号信息查询界面如图4.4,3所示。开台省理:空闲房台:|营业房台:虫珠江