餐饮管理系统设计(共40页).doc
精选优质文档-倾情为你奉上课程设计报告课程名称: PowerBuilder10.5程序设计基础 设计题目: 酒店餐饮管理系统 专业: 信息与计算科学 班级: 姓名: XXXX 学号: XXXXXXXX 指导教师: XXX XXX学院数理系XXXX 年XX 月 课程设计题目(问题)描述随着人们生活的富裕,人们出入酒店也越来越多,随之而来,酒店管理人员管理酒店的事情越来越多,为了帮助酒店管理人员更好的管理酒店,我们设计了这个酒店管理系统。它实现了对值班人员的调配与管理和对菜单的变更,以及对订餐,订餐的修改、取消、查询及在收费时的立账,打折设定的等方面的功能。本 组 成 员 情 况姓 名学号承 担 的 任 务成 绩杜雅笛登陆界面、系统维护、打印、帮助模块的代码编写及系统的调试郭晓丽登陆界面、订餐管理、收费管理模块的代码编写及系统的调试莫鹏飞资料查询、登陆界面、代码编写及系统的调试教 师 评 语签名: 注:本设计报告中各个部分如果页数不够,请大家自行扩页,原则是一定要把报告写详细,能说明本组设计的成果和特色,能够反应小组中每个人的工作。报告中应该叙述设计中的每个模块。设计报告将是评定每个人成绩的一个重要组成部分。一、本 组 设 计 的 功 能 描 述(含所有实现的模块的功能)登录界面的功能:在登陆界面正确输入用户名与口令就可以登陆主界面,如用户名与口令不匹配则有提醒,点开免费注册界面,可以录入新的管理人员的信息,退出注册界面输入刚注册的用户名和口令就可登陆主界面。系统主界面的功能: 系统维护: 值班员信息维护:实现对值班员的添加、删除功能菜谱信息维护:实现对已有菜单的查询、添加和删除修改口令:实现对用户口令的更改。 订单管理: 订餐:实现对订餐信息的添加订餐修改:实现对已经订餐的信息的修改订餐取消:实现对已经订餐的信息的取消订餐查询:实现对订餐订单按桌号、菜谱号、菜名的查询 收费管理: 折扣设定:实现了对用餐人员的折扣设定 客户信息:显示客户信息 打印: 打印客户消费账单二、本 组 设 计 的 主 要 特 色主要特色有如下: 1、登陆界面可以注册新用户 2、在登陆主界面是弹出交班管理制度的界面 3、可对值班人员、菜谱信息进行添加,删除 4、可对订餐情况进行添加、删除、查询等功能 5、对客户的费用进行打折,打印客户消费单三、系 统 分 析 与 设 计2.1数据库的设计与连接(1)在SQL SEVER 2005开发环境下打开对象资源管理器,依据创建数据库的步骤,创建物理数据库XSCJ,在PowerBuilder开发环境下打开数据库画板,依次定义ODBC数据源,定义DB Profile ,连接数据库。根据功能需求,在数据库中先创建5个表列名数据类型可否为空说明DC_DESKChar(20)Not null桌号(主键)CP_NOChar(10)Not null菜谱号CP_NAMEChar(20) null菜名DC_NUMBERChar(3) null数量DC_DATEdatetime Null 订餐日期 表1订餐信息表DC列名数据类型可否为空说明CP_NOCHAR(10)NOT NULL菜谱号(主键)CP_NAMECHAR(20)NULL菜名CP_KINDCHAR(20)NULL种类CP_PRICENUMBER(10)NULL价格CP_DETAILCHAR(50)NULL备注 表2菜谱信息表CP列名数据类型可否为空说明KH_NOCHAR(20)NOT NULL客户号(主键)DC_DESKCHAR(20)NULL桌号JS_DZCHAR(3)NULL打折情况TOTALCHAR(5)NULL总计JS_DATEDATETIMENULL日期 表3 结算信息表JS列名数据类型可否为空说明KH_NOCHAR(10)NOT NULL客户号(主键)KH_NAMECHAR(20)NULL姓名KH_SEXCHAR(2)NULL性别KH_AGECHAR(3)NULL年龄KH_JOBCHAR(20)NULL职务KH_TELCHAR(20)NULL联系电话KH_COMPANYCHAR(20)NULL工作电话 表4 荣誉客户信息表KH列名数据类型可否为空说明ZBY_NAMECHAR(20)NOT NULL值班员名(主键)ZBY_PAWDCHAR(10)NUT NULL 口令 表5 值班员表ZBY实体和实体之间的关系E-R图 系统详细设计(1)单击菜单“FileNew”,选择应用程序对象模板画板,单击“OK”按钮在出现的对话框中完成应用程序对象名、库文件名的设置.(2)单击“Finish”按钮,进入应用程序对象设计画面。1、 在应用程序对象的Open事件中输入如下的程序代码 / Profile jiudianSQLCA.DBMS = "ODBC"SQLCA.AutoCommit = FalseSQLCA.DBParm = "ConnectString='DSN=jiudian;UID=;PWD='"connect;open(w_open)sleep(1)close(w_open)open(w_login)该语句就是打开w_open窗口的语句。“欢迎登陆餐饮管理系统”如图:2、登录窗口的设计。登录窗口如图(1) 在W_login窗口的Open事件中输入如下的程序代码Environment l_envint l_ScrWidth,l_ScrHeightsetRedraw(false)GetEnvironment(l_env)/取得屏幕的高度和宽度l_ScrWidth=PixelsToUnits(l_env.ScreenWidth,XpixelsToUnits!)l_ScrHeight=PixelsToUnits(l_env.ScreenHeight,YpixelsToUnits!)Move(l_scrwidth - this.width)/2,(l_scrheight - this.height)/2)/移动窗口到屏幕中间setredraw(true)/打开窗口刷新(2) 按钮控件cb_1(确定)的Click事件中的程序代码如下:string l_id,l_passwardstring l_passward0int il_id=trim(sle_1.text)l_passward=trim(sle_2.text)if l_id="" then messagebox("提示","请输入用户名!")returnend ifsle_1.setfocus()if l_passward="" then messagebox("提示","请输入密码!")returnend ifsle_2.setfocus()select count(*)into :ifrom zbywhere rtrim(zby_name) = :l_idusing sqlca;if i<1 then messagebox("提示","该用户不存在!")sle_1.text="" sle_2.text="" sle_1.setfocus()returnend ifselect zby_pawd into:l_passward0from zbywhere rtrim(zby_name)=:l_idusing sqlca;if trim(l_passward0)=l_passward thenopen(w_main) close(parent) integer li_FileNum string ls_Emp_Input long ll_FLength ll_FLength = FileLength("D:Microsoft SQL Server1.txt") li_FileNum = FileOpen("D:Microsoft SQL Server1.txt",StreamMode!,read!, shared!) IF ll_FLength < 32767 THEN FileRead(li_FileNum, ls_Emp_Input) filewrite(li_FileNum,ls_Emp_Input) messagebox("",ls_Emp_Input,None!) return END IF/显示交班管理制度elsemessagebox("警告","密码错误,请重新输入法!")sle_2.text="" sle_2.setfocus()end if(3)按钮控件cb_2(取消)的Click事件中的程序代码如下:Halt用于终止应用程序的执行.(4) 按钮控件cb_3(免费注册)的Click事件中的程序代码如下:open(w_zhuche)用来打开注册窗口.交班管理制度显示的制作。(5)在该系统文件目录下新建一个”1.txt”在里面输入相应的内容。在登录窗口的cb_1(确定)下的代码 integer li_FileNum string ls_Emp_Input long ll_FLength ll_FLength = FileLength("D:Microsoft SQL Server1.txt") li_FileNum = FileOpen("D:Microsoft SQL Server1.txt",StreamMode!,read!, shared!) IF ll_FLength < 32767 THEN FileRead(li_FileNum, ls_Emp_Input) filewrite(li_FileNum,ls_Emp_Input) messagebox("",ls_Emp_Input,None!) return END IF这段代码就是在进入系统时显示该信息,如下图,3. 注册窗口的设计(1)在”检测用户名”按扭控件的click事件中输入如下代码:string l_userl_user=sle_1.textif l_user="" thenmessagebox("警告","请输入用户名!",Exclamation!)sle_1.setfocus()return 1end ifint iselect count(*)into :ifrom ZBYwhere ZBY_NAME = :l_user;if i>0 thenmessagebox("警告","用户名已存在,请重试!",Exclamation!)sle_1.text=""sle_1.setfocus()returnelsemessagebox("","恭喜你,该用户名可以使用!")return end if(2) 在”提交”按扭控件的click事件中输入如下代码:string l_userl_user=sle_1.textif sle_1.text="" thenmessagebox("提示","请输入用户名!")return 1end ifstring aa,bbaa=sle_2.textbb=sle_3.textif aa="" thenmessagebox("提示","密码不能为空!")return 1end ifif aa<>bb thenmessagebox("提示","输入的密码不一致nr请重新输入!")sle_2.text=""sle_3.text=""sle_2.setfocus()return end ifinsert INTO zby ( zby_name, zby_pawd ) VALUES ( :l_user, :aa ) using sqlca;if sqlca.sqlcode=0 then messagebox("提示","注册成功,请牢记rn用户名"+sle_1.text+"rn密码"+sle_2.text)close(parent)elsemessagebox("提示","注册失败!")return end if(3) 在”取消”按扭控件的click事件中输入如下代码: close(parent)4.主菜单的设计(1)“系统维护”菜单下“退出”子菜单的Click事件程序代码:halt其功能是关闭主窗口w_main,退出应用程序。(2)“系统维护”菜单下“值班员信息维护”子菜单的Click事件程序代码:open(w_zby)(3)“系统维护”菜单下“菜谱信息维护”子菜单的Click事件程序代码:open(w_choose_receive)(4) “系统维护”菜单下“修改口令”子菜单的Click事件程序代码:open(w_changekl)(5)“订餐管理”菜单下“订餐”子菜单的Click事件程序代码:open(w_dc)(6)“订餐管理”菜单下“订餐修改”子菜单的Click事件程序代码:open(w_ujttyyytt)(7) “订餐管理”菜单下“订餐取消”子菜单的Click事件程序代码:open(w_dc_qc)(8) “订餐管理”菜单下“订餐查询”子菜单的Click事件程序代码:open(w_dc_search)(9) “收款管理”菜单的“折扣设定”子菜单的Click事件程序代码:open(w_zksd)(10) “收款管理”菜单下的“客户信息”子菜单的CLICK事件程序代码: open(w_kh)(11) “打印”菜单的“打印帐单”子菜单的Click事件程序代码:open(w_print)(12) “帮助”菜单的”版本信息”子菜单的Click事件程序代码:open(w_help)(13)快捷键及工具栏如图所示。还要建个w_main窗口用来挂上菜单。该窗口类型为mdihelp!。Title为酒店餐饮管理系统1.0。另外在窗口上布置一个图片控件,用来做为系统的背景。在登录窗口的“确定”按扭的click事件中有句open(main)的代码,即为打开此窗口。5.值班员信息维护窗口w_zby的设计该窗口上的控件好上图所示,其显示部分是一个数据窗口。数据窗口对象zby在编辑状态下如下图,该数据窗口对象所链接的数据库表格为ZBY,其数据源表示如下: SELECT "zby"."zby_name", "zby"."zby_pawd" FROM "zby" (1)open事件代码:dw_1.settransobject(sqlca)dw_1.retrieve()(2) 窗口的closequery事件代码: int i_countlong bbi_count=dw_1.modifiedcount()+dw_1.deletedcount()if i_count>0 thenbb=messagebox("提示","是否保存未保存的数据",question!,yesnocancel!,1)choose case bbcase 1if dw_1.update()=1 then commit using sqlca;return 0else rollback using sqlca;messagebox("提示","数据保存失败!")end ifcase 2return 0case 3return 1end chooseend if(3) 增加 按钮代码: dw_1.scrolltorow(dw_1.insertrow(0)dw_1.setcolumn(0)dw_1.setfocus()(4) 删除按钮代码: long netnet=messagebox("","你确定要删除吗",question!,yesno!,1)/提示是否要删除choose case netcase 1dw_1.deleterow(dw_1.getrow()/删除当前行case 2return 1end choose(5) 保存按钮代码:int i_counti_count=dw_1.modifiedcount()+dw_1.deletedcount()/判断改变和删除的数目。if i_count>0 thenif dw_1.update()=1 thencommit using sqlca;messagebox("提示","已成功保存"+string(i_count)+"纪录")elserollback using sqlca;messagebox("提示","保存失败")end ifend if6. 菜谱信息维护窗口w_choose_receive设计ddlb_1、ddlb_2属性相同,其Items属性页如下图所示。ddlb_3、ddlb_4属性也相同,其Items属性页如下图所示。ddlb_5的Items属性页如下图所示其他的控件如窗口上所示。所链接的数据窗口对象在编辑状态下,如图下所示该数据窗口对象所链接的数据库表格为CP,其数据源表示如下: SELECT "cp"."cp_no", "cp"."cp_name", "cp"."cp_kind", "cp"."cp_price", "cp"."cp_detail" FROM "cp" (1)Open事件:dw_1.settransobject(sqlca)ddlb_1.text="菜谱号"ddlb_4.text="="ddlb_5.text="and"(2) 查询代码 int istring lookforcondition/定义参数:查询条件综合结果string lookforitem1,lookforitem2,lookforitem3/定义参数:要查询的列string lookforwhat1,lookforwhat2,lookforwhat3/定义参数:要查询的内容string lookforhow1,lookforhow2,lookforhow3/定义参数:查询的符号string lookforoperator1,lookforoperator2/定义参数:不同查询条件组合操作符号lookforhow1=ddlb_3.textlookforhow2=ddlb_4.textif ddlb_5.text="与" thenlookforoperator1="and"elseif ddlb_5.text="或" thenlookforoperator1="or"elseif ddlb_5.text="非" thenlookforoperator1="not"end ifif ddlb_1.text="菜谱号" thenlookforitem1="cp_no"lookforwhat1="'"+sle_1.text+"'"elseif ddlb_1.text="菜名" thenlookforitem1="cp_name"lookforwhat1="'"+sle_1.text+"'"elseif ddlb_1.text="种类" thenlookforitem1="cp_kind"lookforwhat1="'"+sle_1.text+"'"elseif ddlb_1.text="价格" thenlookforitem1="cp_price"lookforwhat1=sle_1.textelseif ddlb_1.text="备注" thenlookforitem1="cp_detail"lookforwhat1="'"+sle_1.text+"'"end ifif ddlb_2.text="菜谱号" thenlookforitem2="cp_no"lookforwhat2="'"+sle_2.text+"'"elseif ddlb_2.text="菜名" thenlookforitem2="cp_name"lookforwhat1="'"+sle_2.text+"'"elseif ddlb_2.text="种类" thenlookforitem2="cp_kind"lookforwhat2="'"+sle_2.text+"'"elseif ddlb_2.text="价格" thenlookforitem2="cp_price"lookforwhat2="'"+sle_2.text+"'"elseif ddlb_2.text="备注" thenlookforitem2="cp_detail"lookforwhat2="'"+sle_2.text+"'"end ifif ddlb_2.text="" or ddlb_4.text="" thenlookforcondition=lookforitem1+lookforhow1+lookforwhat1elselookforcondition=lookforitem1+lookforhow1+lookforwhat1+" "+lookforoperator1+" "+lookforitem2+lookforhow2+lookforwhat2end ifdw_1.setfilter(lookforcondition)filter(dw_1)i=dw_1.retrieve()if i<1 thenmessagebox("提示","没有相关记录!",Exclamation!)sle_1.text=""sle_2.text=""return end if(3) 增加代码:dw_1.scrolltorow(dw_1.insertrow(0)dw_1.setcolumn(0)dw_1.setfocus()(4)“删除”按钮控件的Click事件用于删除一个菜谱,程序代码与上述的“删除”按钮相同. (5) “保存”按钮控件的Click事件将用于保存用户所做的修改,程序代码与上述“保存”按钮相同. (6) “退出”按钮控件的Click事件将用于退出该程序窗口。7. 修改口令w_changek设计(1)修改按钮代码:string correct_pswd,ls_user,ls_pswdls_user=trim(sle_1.text)ls_pswd=trim(sle_2.text)if ls_user="" thenmessagebox("","用户名不能为空!")returnend ifif ls_pswd="" thenmessagebox("","请输入原口令!")returnend ifif sle_4.text<>sle_3.text thenmessagebox("警告","两次输入的口令不一致,请重新输入")sle_3.text=""sle_4.text=""sle_3.setfocus()elseselect rtrim(zby_pawd) into:correct_pswdfrom zbywhere rtrim(zby_name)=:ls_user;if correct_pswd<>ls_pswd thenmessagebox("警告","原口令不正确!")elseupdate zby set zby_pawd =:sle_3.text where rtrim(zby_name)=:ls_user;commit using sqlca;close(parent)messagebox("注意","你的口令已经修改,请牢记!")end ifend if(2)“取消”按扭用来退出该窗口。8、订餐w_dc窗口设计所链接的的数据窗口对象在编辑状态如图该数据窗口对象所链接的数据库表格为DC,其数据源表示如下: SELECT "dc"."dc_desk", "dc"."cp_no", "dc"."cp_name", "dc"."dc_num", "dc"."dc_data" FROM "dc" (1)open事件int g_rownumberg_rownumber=dw_1.insertrow(0)dw_1.settransobject(sqlca)dw_1.setfocus()date g_dc_dateg_dc_date=today()/在数据窗口的日期这列显示当前日期dw_1.scrolltorow(g_rownumber)dw_1.setcolumn(0)(2)下一道菜int g_rownumberg_rownumber=dw_1.insertrow(0)date g_dc_dateg_dc_date=today()dw_1.setfocus()dw_1.scrolltorow(g_rownumber)dw_1.setcolumn(1)(3) “删除”按钮控件的Click事件用于删除一个菜谱,程序代码与上述的“删除”按钮控件相同.(4) “保存”按钮控件的Click事件将用于保存用户所做的修改,程序代码与上述的“保存”按钮相同。(5) “退出”按钮控件的Click事件将关闭该窗口。9、订餐修改窗口w_ujttyyytt设计Ddlb_1和ddlb_2两个控件的属性一样,其item属性如下图,所链接的数据窗口对象dc(1)open事件/设置事务对象dw_1.settransobject(sqlca)ddlb_1.text="="ddlb_2.text="="(2)显示订单 int istring lookforconditionstring lookforitem1,lookforitem2string lookforwhat1,lookforwhat2string lookforhow1,lookforhow2lookforhow1=ddlb_1.textlookforhow2=ddlb_2.textlookforitem1="dc_desk"lookforwhat1="'"+sle_1.text+"'"lookforitem2="dc_date"lookforwhat2="datetime('"+sle_2.text+" 00:00:00')"if sle_2.text="" thenlookforcondition=lookforitem1+lookforhow1+lookforwhat1elselookforcondition=lookforitem2+lookforhow2+lookforwhat2/lookforitem1+lookforhow1+lookforwhat1+" "+"and"+" "+end ifdw_1.setfilter(lookforcondition)filter(dw_1)i=dw_1.retrieve()if i<1 thenmessagebox("提示","没有相关记录!",Exclamation!)return end if(3)增加 int g_rownumberg_rownumber=dw_1.insertrow(0)date g_dc_dateg_dc_date=today()/为数据窗口的日期列显示当前日期dw_1.setfocus()dw_1.scrolltorow(g_rownumber)dw_1.setcolumn(1)(4) “删除”按钮控件的Click事件用于删除一个值班员,程序代码与上面所述的“删除”按钮控件相同.(5) “保存”按钮控件的Click事件将用于保存用户所做的修改,程序代码与上面所述的“保存”按钮控件相同.(6) “退出”按钮控件的Click事件将用于退出该程序窗口。10、订餐取消w_dc_qc设计,控件如图所示,所连接的数据窗口为dc.ddlb_1与ddlb_2的属性相同.ddlb_1的item属性图a, ddlb_2的item属性图b 图a 图b(1)open:dw_1.settransobject(sqlca)(2)确定 int iif ddlb_1.text="" thenmessagebox("","请选择要退餐的桌号!")return end ifstring l_dc_deskl_dc_desk="dc_desk='"+ddlb_1.text+"'"dw_1.setfilter(l_dc_desk)filter(dw_1)i=dw_1.retrieve()if i<1 thenmessagebox("","此桌无消费记录!")ddlb_1.text=""elsemessagebox("","请选择要退定的菜!")returnend if(3)退订的菜 double l_dc_num1,l_dc_num2string l_cp_namel_dc_num1=double(ddlb_2.text)l_cp_name=dw_1.getitemstring(dw_1.getrow(),"cp_name")l_dc_num2=Long(dw_1.getitemstring(dw_1.getrow(),"dc_number")int retret=messagebox("","你确定要退定"+string(l_dc_num1)+"一份"+l_cp_name,question!,yesnocancel!,2)choose case retcase 1if ddlb_2.text="all" thendw_1.deleterow(0)if dw_1.update()=1 thenmessagebox("","退定成功!")close(parent)elsemessagebox("","退定失败,请重试!")returnend ifelseif l_dc_num1>l_dc_num2 thenmessagebox("警告","退定出错,请查看数量!")return 1end ifUPDATE dc SET dc_number = : l_dc_num2 - :l_dc_num1 ; if dw_1.update()=1 thenmessagebox("","退定成功!")close(parent)returnend ifreturnend ifcase 2return 0case 3return 1end choose11、订餐查询w_dc_search设计控件如上图所示.其中有一个选项卡,卡上有三页,三页的数据窗口控件所连接的数据窗口都是dc,界面如下图,该数据窗口对象所链接的数据库表格为CP和DC(1)open:tab_1.tabpage_1.dw_1.settransobject(sqlca)tab_1.tabpage_2.dw_2.settransobject(sqlca)tab_1.tabpage_3.dw_3.settransobject