1、饭店点餐管理系统的分析与设计大学论文软件工程详细设计说明书文档饭店点餐管理系统的分析与设计学院名称信电工程学院专业名称计算机科学与技术所属学期 2015-2016(一)小组名单班级学号姓名任课教师 2015年12月24日F.1 引言F.1.1 编写目的在前一阶段概要设计说明书中,已解决了实现该系统需求的程序模块设计问题。包括如何把该系统划分为若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、数据结构的设计等。在以下详细设计报告中将对本阶段中对系统所做的所有详细设计进行说明。在本阶段中,确定应该如何具体的实现所要求的系统,从而在编码阶段可以把这个描述直接翻译成用具体的程序语言
2、书写的程序。主要工作有:根据在需求分析说明书中所描述的功能、流程,并依照概要设计说明书所确定的处理流程、总体结构和运行模块设计,设计完成程序系统的结构,完成制菜统筹模块、点菜管理模块、评价管理模块的程序描述,其中包括各模块的设计说明、程序描述、功能、性能、输入、输出、算法、流程逻辑、接口等。本说明书的预期读者为系统设计人员、软件开发人员、软件测试人员和项目评审人员。F.1.2 背景为了更好的满足广大消费者的多元化消费需求和不同层次的消费水平,提高饭店的服务管理质量,提高饭店工作人员的工作效率,我开发小组在多方面考察、分析、研究现有饭店点菜管理系统的基础之上,以提高消费者的满意程度及商家的服务水
3、平和市场竞争力为目标,致力于开发出一套可视化程度高、功能全面、集分析管理于一体的饭店点餐系统。F.1.3 定义SQL Server:系统服务器所使用的数据库管理系统。SQL:一种用于访问查询数据库的语言事务流:数据进入模块后可能有多种路径进行处理主键:数据库表中的关键域,值互不相同外部主键:数据库表中与其他表主键关联的域Vs2013:Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。 C#:C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。F.1.4 参考资料XX文库F.2 程序系统的结构F.2.1 制菜统
4、筹1.菜品提示功能厨师:下一道菜品学徒:下一道菜所需的食材种类和分量顾客:菜品正在制作2.制菜的统筹功能算法:通过客人点菜的时间可以优先做菜,有和这道菜一样的菜就可以一块做,然后再通过算法显示下一道菜,前一个桌号总比下一个桌号多一道菜。该功能实现了制菜的统筹合理安排制菜顺序。同时将正在制作的菜状态设置为不可退。还能提示下一道菜的菜名和具体信息,给厨师的下手准备食材。3.无食材提示当一道菜的食材不够用了会提示客户退菜或者换一道菜以及服务员,并自动从菜单中删除这道菜顾客根据提示退换菜。F.2.2 推送新菜1.新菜录入厨师新研制的菜肴的食材种类和分量详细的录入系统,储存在新菜菜单中。2.评分机制根据
5、一周顾客的评分,若低于所有菜品的平均分则删除这道新菜,若高于平均分则加入菜单中。F.2.3 点菜服务1.顾客点菜(1)桌号的输入顾客进入饭店之后选择座位坐下,通过扫描二维码在系统中先录入自己的桌号以方便点菜。(2)口味的选择与菜色推荐顾客进入系统之后,可以根据自己的偏好选择酸甜辛辣,淡咸之类的口味,从而系统自动进行推荐菜色,如以前顾客品尝过后评分较高的菜色或者该口味本饭店的招牌菜之类的菜色,同时,系统还可以自动推荐其他口味的评分较高的菜色以供顾客选择。(3)点菜与写备注顾客确定了自己所点的菜色之后,可以在系统上进行确认点菜,在点菜的同时,可以对自己所点的菜写入相应备注,如需要多一点辣味或者少加
6、某样调料等等来满足自己的需求。(4)生成菜单与提交制菜统筹系统顾客点完菜之后,系统自动生成桌号+菜色+备注的菜单并将其提交至制菜统筹系统。2.顾客退菜和催菜(1)退菜顾客在提交了菜单之后,如果想退菜,在系统中找到自己所点菜,如果厨师正在做这道菜,那么便无法进行退菜,如果厨师还没有做到这道菜,便可以从自己的菜单中删除这道菜,那么相应的制菜统筹系统中也会删除这道菜。(2)催菜顾客点菜之后,在等待的过程中,可以在系统中点催菜按钮,以此来催促厨师加快制作速度。F.2.4 会员服务1.注册会员顾客可以通过系统中的注册会员按钮进入注册会员选项,然后填写注册会员需要写明的各项具体信息提交给系统,系统从自身数
7、据库中判断,某些不能重复的项目如手机号码等如和数据库重复冲突了则不能通过,并且提示顾客重新确认自己所填写的信息,而填写完成并且通过之后,则进入会员缴纳相应的会员费部分,缴纳会员费之后则正式成为饭店会员,同时系统为该客户分配唯一的会员号码,并以此作为识别会员身份的凭证。2.会员服务会员登录系统之后,便可以在其他任何地方都可以打电话预约座位和提前点菜,到饭店之后只需在预留的座位上等待直至菜品上桌,或者到饭店在进行点菜也可以。点完菜之后,可以为会员提供相应的打折措施,消费500元以内打9折,500到1000元打8.5折,1000元以上打8折,与此同时还可以进行积分措施,消费多少则积相应的分数,到了一
8、定程度后,每100分可以兑换5元现金券或者相应小礼品。F.2.5 评价1.判断顾客是否已经付款2.如果没付款等待付款,如果付款显示评论界面3.系统给出非常好,很好,一般,很差四个选项给顾客选择,顾客可以根据服务态度,菜色,就餐环境等进行评价,评价完成后在顾客评价界面显示4.顾客评价完成后,系统根据算法显示饭菜的好评率,并赠送相应的奖励给客户5.经理登录系统可以查看顾客的评论以便进行调整,然后辩论其真实性再把评论反馈给相关人员,相关人员根据评论作出相应的调整F.2.6 账单管理1.顾客提出付款信息2.收银员收到消费清单后和顾客进行付款等操作,操作成功后,确定金额并打出清单3.收银员向经理报告日收
9、益,经理核实并确定4.经理对厨房对外采购支出信息,饭店税收支出信息,员工信息支出统计,再根据月收益形成饭店支出表,最后算出饭店的日收益F.2.7 菜单管理菜单管理系统有四个终端,按身份登录不同的身份进入的界面不一样。(1)顾客、服务员终端主要满足如下功能: 1顾客可以在各个类别(特色菜、招牌菜、优惠菜、套餐)下选择自己中意的菜,并查看该菜的介绍,评价,所需时间,还可以选择口味(拉框),如没有,可以在备注里填写。2顾客可以在总价这项里查询,增添和删除菜,也可以看到自己的消费金额。3顾客在消费完毕后,可以留下自己的意见和建议。4服务员可以帮顾客点菜。5顾客或服务员点菜完毕后,系统会自动将菜单传送到
10、制菜统筹子系统。(2)配菜员终端主要满足如下功能:1接收制菜统筹子系统分配的需要的配菜的菜名、份数。2如果菜所需材料没有了,配菜员通过终端选中菜后面的红(菜单管理系统自动通知服务员终端,服务员再去向顾客解释并询问顾客是否换菜,同时从当天菜单中删除,以免后面顾客继续点)。(3)管理员终端主要满足如下功能:1根据统计系统反馈的数据,修改菜单、类别。2根据统计系统反馈的数据,及时跟员工协调。3将每天的打折信息更新。4反馈客户的意见及建议。5为员工分配相应的权限。F.3 制菜统筹设计说明F.3.1 程序描述现如今大部分饭店之中厨师制菜通常需要一个传菜员来提示他该做哪道菜,提示服务员应该将菜送到哪张桌。
11、不仅时间上和人力物力上都造成了极大的浪费,而且传菜员一旦出错,会造成顾客等待时间过长的不愉快体验,从而给饭店造成损失。所以我们的制菜统筹子系统之中将传菜员的职能转交由计算机来执行,通过算法智能的统筹。计算机不用担心出错,因而顾客的体验都会比较好。不仅如此,制菜统筹系统还充分利用了厨师的一个下手。F.3.2 功能制菜统筹子系统:a. 提示厨师正在制作的菜品和下一道菜品,同时提示学徒下一道菜所需的食材种类和分量。还有提示顾客菜品正在制作。b. 通过客人点菜的时间可以优先做菜,有和这道菜一样的菜就可以一块做,然后再通过算法显示下一道菜,前一个桌号总比下一个桌号多一道菜该功能实现了制菜的统筹合理安排制
12、菜顺序。c. 将正在制作的菜状态设置为不可退。d. 提示下一道菜的菜名和具体信息。e. 提示客户退菜或者换一道菜。F.3.3 性能计算时间20s;传送时间3s;F.3.4 输入项 菜单信息 菜名(Dish)-类型:String 份数(number)-类型:Int 桌号(TableNumber)-类型:Int 备注(Remarks)-类型:String 时间(Time)-类型:time; 是否完成(IsFinish)-类型:boolean ;默认:falseF.3.5 输出项配菜名(DishesName)-类型:String配菜份数(DishesNumber)-类型:int即将烧的菜(SoonD
13、ish)-类型:String 备注(Remarks)-类型:String*号桌(num)-类型:intF.3.6 算法每个点菜单用结构体存放,并添加时间、是否制作完成字段N个点菜单存放在结构体中使用for循环遍历计算出即将需要做的菜 Count()/统计需做菜的份数 int N=5; int j = 10; int i=1; string NO = 0; SqlDataReader dr;/用于读取数据流 while(i=N) string cmd = Select Count(making) From Table Where making=1 and Table_NO= + i + ;/统计
14、需做菜的份数SQL语句 dr = help.DataRead(cmd);/执行SQL语句 dr.Read();/读数据 NO = dr0.ToString(); dr.Close();/关闭读取流 string cmd2 = update Tabe_use Set UP = +NO+ where Table_NO= + i + ;/更新桌子使用情况 j = help.DataWrite(cmd2);/执行SQL语句 i+; string cmd3 = Select table_NO From Tabe_use where UP=(Select min(UP) From Tabe_use) an
15、d use_ing=1;/SQL语句 SqlDataReader dr = help.DataRead(cmd3); if (dr.Read()/判断数据流是否为空 string cmd = Select * from Table where making=0 and making_time!=0and table_NO= + dr0.ToString() + ;/查询未做的菜 dr.Close();/关闭读取流 dr = help.DataRead(cmd);/执行SQL语句 dr.Read(); dr.Close(); cmd = Select Count(dish_names) From
16、 Table where dish_names= + label2.Text + ;/SQL语句 SqlDataReader drNum2 = help.DataRead(cmd); drNum2.Read();/数据流 label2.Text = label2.Text + 数量: + drNum20.ToString();/将需做菜的份数传送到配菜员的显示屏上 drNum2.Close(); else dr.Close(); string cmd2 = select*from Table where making=0 and making_time!=0;/SQL语句 SqlDataRea
17、der dr2 = help.DataRead(cmd2); if (dr2.Read()/判断数据流中是否有数据 label2.Text = dr22.ToString(); dr2.Close(); cmd2 = Select Count(dish_names) From Table where dish_names= + label2.Text + ; SqlDataReader drNum2 = help.DataRead(cmd2); drNum2.Read(); label2.Text = label2.Text + 数量: + drNum20.ToString();/将数量传送到
18、厨师显示屏上 drNum2.Close(); else dr2.Close(); label2.Text = 没有下一道菜了; F.3.7 流程逻辑F.3.8 接口本模块与其它相关模块间平行方式连接。F.3.9 存储分配Check_list数据表,作用是描述订餐的信息Check_list表序号字段名数据类型是否主键意义1Table_NOVarchar(50)Yes桌号2Dish_namesVarchar(50)No菜名3PriceDecimal(18,0)No价格Garnish数据表,作用是描述配菜的信息Garnish表序号字段名数据类型是否主键意义1Garnish_NumberVarchar
19、(50)Yes配菜号2Dish_namesVarchar(50)No菜名3Food_NameVarchar(50)No食材名4Garnish_AmountfloatNo数量Menu数据表,作用是描述菜单的信息Menu表序号字段名数据类型是否主键意义1Dish_namesVarchar(50)Yes菜名2PrcieDecimal(18,0)No价格3Making_timeVarchar(50)No制作时间4PictureimageNo图片MenuList数据表,作用是描述菜单类别的信息MenuList表序号字段名数据类型是否主键意义1CidintYes菜号2Dish_namesChar(20)N
20、o菜名3pcidintNo类别Stock数据表,作用是描述库存的信息Stock表序号字段名数据类型是否主键意义1Food_NameVarchar(50)Yes食材名2Stock_amountfloatNo库存量3Stock_priceDeciamal(18,0)No价格F.3.10 注释设计a、加在模块首部的注释; b、加在各分枝点处的注释;c、对各变量的功能、范围、缺省条件等所加的注释;d、对使用的逻辑所加的注释等。F.3.11 限制条件制菜统筹设计计算机的性能必须足够的强悍,可以在高峰期快速的计算。F.3.12 测试计划测试模块测试功能测试指标制菜智能统筹菜品提示功能在数据库中存在待制作的
21、菜品时可以给出正确的提示:厨师当前制作菜品菜名和份数、学徒下一道待制作菜品的配菜信息制菜的统筹功能能够将数据库中存在的待制作的菜品进行智能的安排制作顺序,取代配菜员的工作无食材提示厨师能够通过这个功能向客人发出当前菜品无食材的提示,同时会从菜单中暂时删去这道菜新菜录入能够将新的菜色信息录入到菜单中,并显示出来评分机制对新菜的评分并能够计算平均分F.3.13 尚未解决的问题无F.4 点菜管理模块程序F.4.1 程序描述该模块程序主要实现为顾客展示、推荐以及介绍菜品和实现顾客对菜品的点菜、退菜和催菜操作。顾客只有在输入桌号之后才能点菜,点菜之后才能进行结账和评价 F.4.2 功能1.开桌:顾客输入
22、自己的桌号。该桌号唯一不可与其他人重复,若重复则给出相应提示。桌号的位数由饭店规模决定默认为两位数,如:01、02。确认桌号后不可修改,如有添桌请求需要用另一台设备另外开桌。2点菜:顾客可以根据需要选择自己喜欢的口味,系统筛选对应口味的菜色同时推送本店特色菜品。界面展示菜名、菜品图片和价格,顾客选择喜欢的菜色可以查看详细介绍,并提交份数。生成点菜信息,在顾客点菜结束后展示,进行最后确认,确认后提交制菜统筹系统。3.退菜:顾客可以退去自己已点的,未上并且未在制作的菜。若在制作或者已上,则提示相关错误。否则从后厨数据库中删去,提示操作成功。4.催菜:顾客可以对已点菜品进行催促,催促会提示后厨加快速
23、度,规定同一小时内后厨只会收到两次催促。但顾客可以尽情催促,单不会传到后厨。F.4.3 性能检索业务响应时间2s;运行响应时间1s;付款响应时间0;份数(Amount)类型:int;输入方式:选择;输入数量0;F.4.5 输出项给出对每个输出项的我,包括名称、标识、数据的类型昨格式,数据值的有效范围,输出的形式数量和频度,输出媒体,对输出图形及符号的说明,安全保密条件等。成功提示类型:弹窗输出;输出频率:触发输出1次;错误提示类型:弹窗输出;输出频率:触发输出1次菜品信息类型:界面输出;输出频率:一直输出,触发停止F.4.6 算法使用while()语句判断一小时内接受催促的次数。使用if()判
24、断失误操作。使用if()判断退菜。数据的输入输出与sql数据库链接等基本算法通过输入桌号来记录点餐桌号button1_Click Class.tableNO = textBox1.Text; FrmCustomer fc = new FrmCustomer(); fc.Show(); this.Hide(); 开始点菜,这里点的菜同步更新到服务员的菜单表,也实现了退菜的功能,如果菜正在制作就无法退,若还是要求退需要叫服务员来操作 FrmCustomer_Load this.Text = Class.tableNO.ToString()+号桌; /*显示菜单*/ string connStr =
25、 Data Source=yao-pc;Initial Catalog=item;Integrated Security=True;与数据建立连接 string str2 = Select*from MenuList;/读取菜单 SqlDataAdapter da = new SqlDataAdapter(str2, conn); DataSet ds = new DataSet();/将数据库读取到的数据放到Dataset da.Fill(ds);/利用dataset的fill方法填充到表格中 nodes(this.treeView1.Nodes, ds, 0); int i = 1; st
26、ring cmd = Select*from Table where Table_NO= + Class.tableNO.ToString() + ;/sql语句 SqlDataReader dr = help.DataRead(cmd); while (dr.Read()/循环遍历数据流 string ID = i.ToString();/保存Id号 string dish_names = drdish_names.ToString();/保存菜名 string price = drprice.ToString();/保存价格 string making_time = drmaking_ti
27、me.ToString();/保存制作时间 ListViewItem lvi = new ListViewItem(); /首先创建一个ListView项item lvi.Text = ID; /该项的文本 lvi.SubItems.AddRange(new string dish_names, price, making_time ); /添加该项的子项,也就是第2,3,4列的值 listView1.Items.Add(lvi); /最后把创建的项加到ListView控件的项中 i+; dr.Close(); /*创立TreeView结点*/ nodes(TreeNodeCollection
28、 tnode, DataSet ds, int d) DataView dview = new DataView(ds.Tables0); dview.RowFilter = pcid= + d + ;/循环遍历 foreach (DataRowView row in dview) TreeNode node = new TreeNode(); node.Text = rowdish_names.ToString(); tnode.Add(node); nodes(node.Nodes, ds, Int32.Parse(rowcid.ToString(); /退菜操作button4_Click(object sender, EventArgs e) /*退订一道菜与数据库同步*/ string cmd = ; if (listView1.SelectedItems.Count 0) cmd=Select*FromTable where Table_NO= + Class.tableNO.ToString() + and dish_names= + labName.Text + ;/S
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1