餐馆点菜管理系统.doc
湖北民族学院信息工程学院软件编程实训设计报告书题目: 餐馆点菜系统的开发 专 业: 电气工程 班 级: 0312422 学 号: 031240717 学生姓名: 陈昊 指导教师: 钟 建 伟 2013年 9 月 18 日湖北民族学院信息工程学院软件编程实训任务书学生姓名陈昊学 号031240717成 绩设计题目餐馆点菜系统的开发设计内 容 开发餐馆点菜系统。系统具有点菜、结账、查询、统计、设置功能。设计要求开发餐馆点菜系统。系统具有点菜、结账、查询、统计、设置功能。点菜时可用菜名的拼音简码搜索菜。查询功能包括查询菜和点菜单。统计可统计一天的营业额。设置功能包括查询操作员和菜。系统采用B/S结构,用ASP开发,后台数据库采用SQL Server 2005.时间安排 系统分析与设计阶段(2天) 程序编制与调试阶段(5天) 总结报告和书写说明书阶段(2天) 答辩与考核阶段(1天) 参考资料1 赵慧勤网络数据库应用技术北京:机械工业出版社,2004 2 柳青,刘渝妍,何文华Visual Basic程序设计教程M北京:高等教育出版社,2000 3 王春才,高春艳,李俊民 Visual Basic数据库系统开发完全手册M 北京:人民邮电出版社,2004 4 杨富国,王健,王倩 Visual Basic程序开发案例解析M北京: 清华大学出版社,2005 5 齐治昌,谭庆平,宁洪.软件工程M.北京:高等教育出版社,2004目录1 任务的提出与方案论证41.1 研究背景及意义41.2国内外研究现状41.3本文研究内容42 设计思路52.1 需求分析52.2 软件体系结构设计52.3 数据库设计52.3.1 逻辑结构设计52.3.2 物理结构设计63 详细设计73.1 数据库连接文件73.2 客户端首页73.3 酒店餐饮点餐73.4 主要代码83.5 酒店餐饮结账104 总结11参考文献12附录13菜单主要代码:13实现搜索的主要代码:15点菜后台处理代码:16结账代码:16酒店管理代码:171 任务的提出与方案论证1.1 研究背景及意义 目前,我国酒店餐饮业在日常点菜管理中仍普遍采用手工操作方式,整体科技含量低,随着酒店餐饮业高速发展和餐饮店规模的不断扩大,许多酒店餐饮企业采用连锁经营和集团化运营,手工操作无论是在工作效率、人力成本和决策信息等方面都已经难以适应企业发展的要求,制约了整个酒店餐饮业的规模化发展和整体服务水平的提升。据预测,未来3至5年内,信息数字技术产品在中国饭店与餐饮业的应用将达到一个高峰,市场最大容量可达2300亿元人民币。就点菜系统而言,最普遍的是计算机收银台录入菜单设备、POS点菜系统,除了这种点菜系统,其它的计算机信息系统已经从预订、接待、点菜、菜品上传、厨房分单打印、条码划菜、收银、经理查询等方面在大型餐饮企业全方位地整合起来了。1.2国内外研究现状 餐饮业在二十世纪七十年代之前,一直采用传统的手工服务模式。在计算机信息技术发展的二十世纪下半叶,越来越多的企业意识到信息技术发展的重要性。一些食品服务系统和电子信息管理系统的开发出来,而且在一些企业已经开始使用,这也促进了餐饮业的迅速发展和进步。网络技术在八十年代末至九十年代中期发展迅速,人机交互不断发展,出现了液晶屏这个终端前两,在这期间,系统之间通常是以有线的方式进行连接。而入境,网络信息技术发展有了大突破,数据库技术和网络技术在很多方面都得到了多方面的运用和完善。网络技术也拓展了餐饮服务,如今消费者不但可以远程订餐,还可以网上支付,订餐、就餐、结账、足不出户就可完成。1.3本文研究内容 本论文对各大酒店的酒店点菜管理系统的工作需求进行了全面的分析。采用B/S三层软件体系结构,以Windows为操作平台,Java为开发语言,SQLServer2008为数据库,Eclipse为开发工具,使用JDBC连接。 本论文的重点工作包括在系统中实现了按角色的访问控制,对系统数据进行分析、排序。2 设计思路2.1 需求分析 本系统的总目标是为用户提供迅速、高效的服务,减免手工处理的繁琐与误差,及时、准确地反映酒店的工作情况、经营情况,从而提高酒店的服务质量,获得更好的经济效益。其具体目标包括: (1)快速完成顾客的点餐。 (2)准确无误地记录顾客的每笔消费记录。(3)实时、快速、准确地提供最新餐单。 (4)方便查询顾客消费情况。 (5)方便查询酒店的营业额情况。2.2 软件体系结构设计 餐馆点菜系统数据流程图,如图2.1所示。点菜D3顾客点菜信息结账D2菜品信息处理订桌服务员D1桌台使用情况前台顾客获取桌台桌台情况图2.1数据图2.3 数据库设计 2.3.1 逻辑结构设计 辑结构设计的任务就是把概念模型结构转换成某个具体的DBMS所支持的数据模型。设计逻辑结构时,首先是将概念结构转换为一般的关系、网状、层次模型,其次是将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换,最后是对数据模型进行优化。 关系模式如下:菜(菜编号,菜名,类型,价格,状态); 桌台(桌台编号,桌台名称,状态,服务员); 服务员(编号,姓名,性别,年龄,电话); 管理员(编号,名称,密码)。 2.3.2 物理结构设计 据库的物理结构设计是对于给定的逻辑数据模型,选取一个最合适应用环境的物理结构。数据库的物理结构指的是数据库在物理设备上的存储结构与存取方法,它依赖于给定的计算机系统,是在数据库逻辑结构的基础上设计出一组能够满足实际需求的关系、约束、和索引等信息。餐饮点菜系统的数据库表结构如下:(1) 服务员基本信息表,如表2.1所示。表2.1服务员基本信息表属性中文名称属性名类型长度说明服务员号IDInt酒店统一编号,具有唯一性服务员名称Watiername Nvarchar50服务员名称服务员性别SexChar10服务员性别服务员年龄AgeChar10电话TelNvarchar50表2.13 详细设计3.1 数据库连接文件 conn.asp文件负责建立与数据库的连接,并创建了关闭连接的过程。该文件为系统的公共文件,在其他要实现数据操作的文件中会调用此文件,该文件的代码如下: <% dim conn,connStr set conn=server.CreateObject("adodb.connection") connStr="PROVIDER=SQLOLEDB;DATA SOURCE=XDNGS-90EBAEBEESQLEXPRESS;UID=sa;PWD=123;DATABASE=keshe" conn.open(connStr) %> 3.2 客户端首页客户端首页由多个文件构建而成,其应用界面如图3-1所示图3.1 客户端首页3.3 酒店餐饮点餐顾客通过首页顾客点餐可以进入酒店餐饮点餐界面,该界面列出了当前酒的可用空桌号和酒店的菜谱列表,顾客可以通过自己的喜好进行点餐、加菜或返回首页。在该页上还设置了搜索功能,顾客可以通过拼音简码搜索自己喜欢的菜,界面如图3-2所示。图3.2 菜品信息3.4 主要代码主要代码如下: img src="images/3.jpg" /> <form id="form1" name="form1" class="form1" method="post" action="showResult.asp" > <span class="Keywords">搜索菜:</span><input type="text" name="cname" id="cid" value="请输入菜的拼音简码" onfocus="this.value=''"/> <input name="sousuo" type="submit" value="搜索" /> </form> <span class="words">以下是现在酒店的空桌和菜谱,我们热忱为您服务:</span> <form name="caipu" method="post" action="diancai.asp"> 桌台号: <%dim rs2,sql2 set rs2=server.CreateObject("adodb.recordset") sql2="select * from zhuotai where table空闲'" rs2.open sql2,conn,1,1 if not rs2.eof then do while not rs2.eof %> <input type="radio" name="zhuozi" value="<%=rs2("ID")%>" /><%=rs2("ID")%> <% rs2.movenext loop end if %><br/> <table border="0" cellpadding="0" cellspacing="1" width="800" bgcolor="#a8c7ce"> <tr><td height="20" bgcolor="#d3eaef" colspan="5">菜品信息列表</td></tr> <tr> <th width="20%"><%="选择"%></th> <th width="20%"><%="编号"%></th> <th width="20%"><%="菜名"%></th> <th width="20%"><%="类型"%></th> <th width="20%"><%="价格/元"%></th> </tr> <% dim rs1,sql1 'dim CID 'CID=request.Form("cname") set rs1=server.CreateObject("adodb.recordset") 'if request.Form("cname")="" then sql1="select * from caiList" rs1.open sql1,conn,1,1 if not rs1.eof then do while not rs1.eof if rs1("isselected")=1 then %> <tr align="center" bgcolor="#FFFFFF" onMouseMove="javascript:this.bgColor='#33CCFF'" onMouseOut="javascript:this.bgColor='#FFFFFF'"> <td><input type="checkbox" checked="checked" name="cai" value="<%=rs1("ID")%>"/></td> <td><%=rs1("ID")%></td> <td><%=rs1("cname")%></td> <td><%=rs1("ctype")%></td> <td><%=rs1("cprice")%></td> </tr> 9 <% else%> <tr align="center" bgcolor="#FFFFFF" onMouseMove="javascript:this.bgColor='#33CCFF'" onMouseOut="javascript:this.bgColor='#FFFFFF'"> <td><input type="checkbox" name="cai" value="<%=rs1("ID")%>"/></td> <td><%=rs1("ID")%></td> <td><%=rs1("cname")%></td> <td><%=rs1("ctype")%></td> <td><%=rs1("cprice")%></td> </tr> <% end if rs1.movenext loop end if %> <tr align="center"> <td><span class="words">点菜完成请提交:</span></td> <td><input name="tijiao" type="submit" value="提交" /></td> <td><input name="jiacai" type="button" value="加菜" onclick="window.location='jiacai.asp'" /></td> </tr> <tr align="center"> <td colspan="3"><input name="fanhui" type="button" value="返回首页" onclick="window.location='index.asp'" /> </td> <td colspan="2"><input name="denglu" type="button" value="管理员登录" onclick="window.location='admin.asp'" /> </td> </tr> </table> </form> 实现搜索处理的主要代码如下: <script type="text/javascript"> function doUp() var qstr="" $("inputname='cai'").each(function() if(this.checked) if(qstr!="") qstr=qstr+"&" 3.5 酒店餐饮结账 通过首页顾客结账通道可以进入酒店餐饮结账界面,如图3-3所示4 总结本文描述了酒店餐饮点菜系统的设计与实现,该系统是运用SQL2005数据库系统和ASP开发实现的。在系统设计过程中,对整体进行需求分析、总体设计、详细设计,实现了利用菜名的拼音简码对菜进行搜索的功能;实现了顾客点菜、账单入库、账单查询等功能。系统管理员还具有查看营业额,对菜谱、桌台、服务员进行管理等功能。对于酒店的营业额,可以通过直方图的形式形象的反映本年度各个月的营业情况。但是系统还存在很多不足,在很多细节的实现上还是不够好。比如系统在设计模块中的功能设计得较为单一,在操作过程中没有设置抛出异常,当存在不合法的操作时可能会导致系统出现问题;在查询营业额的时候,只是显示了营业额的总额,没有能够显示出详细的营业情况;还有系统的安全性不好,没有一个完善的安全等级管理机制,在许多页面之前没有判断,没有实现数据库中内容的加密。系统中的这些不足,还需要我在以后的时间里来完善,以使系统功能更加完善。此外,页面布局也不美观,缺少素材对界面的装饰,还有待改进。 在此,衷心的感谢任民宏老师的悉心指导,在任老师的严格要求下,我的课程设计有了较为完善的一面,使我学到了新的知识,在锻炼的过程中能力有了提高。参考文献1 赵慧勤网络数据库应用技术北京:机械工业出版社,2004 2 柳青,刘渝妍,何文华Visual Basic程序设计教程M北京:高等教育出版社,2000 3 王春才,高春艳,李俊民 Visual Basic数据库系统开发完全手册M 北京:人民邮电出版社,2004 4 杨富国,王健,王倩 Visual Basic程序开发案例解析M北京: 清华大学出版社,2005 5 齐治昌,谭庆平,宁洪.软件工程M.北京:高等教育出版社,2004附录菜单主要代码如下: <img src="images/3.jpg" /> <form id="form1" name="form1" class="form1" method="post" action="showResult.asp" > <span class="Keywords">搜索菜:</span><input type="text" name="cname" id="cid" value="请输入菜的拼音简码" onfocus="this.value=''"/> <input name="sousuo" type="submit" value="搜索" /> </form> <span class="words">以下是现在酒店的空桌和菜谱,我们热忱为您服务:</span> <form name="caipu" method="post" action="diancai.asp"> 桌台号: <% dim rs2,sql2 set rs2=server.CreateObject("adodb.recordset") sql2="select * from zhuotai where tablestatus='空闲'" rs2.open sql2,conn,1,1 if not rs2.eof then do while not rs2.eof 8 %> <input type="radio" name="zhuozi" value="<%=rs2("ID")%>" /><%=rs2("ID")%> <% rs2.movenext loop end if %><br/> <table border="0" cellpadding="0" cellspacing="1" width="800" bgcolor="#a8c7ce"> <tr><td height="20" bgcolor="#d3eaef" colspan="5">菜品信息列表</td></tr> <tr> <th width="20%"><%="选择"%></th> <th width="20%"><%="编号"%></th> <th width="20%"><%="菜名"%></th> <th width="20%"><%="类型"%></th> <th width="20%"><%="价格/元"%></th> </tr> <% dim rs1,sql1 'dim CID 'CID=request.Form("cname") set rs1=server.CreateObject("adodb.recordset") 'if request.Form("cname")="" then sql1="select * from caiList" rs1.open sql1,conn,1,1 if not rs1.eof then do while not rs1.eof if rs1("isselected")=1 then %> <tr align="center" bgcolor="#FFFFFF" onMouseMove="javascript:this.bgColor='#33CCFF'" onMouseOut="javascript:this.bgColor='#FFFFFF'"> <td><input type="checkbox" checked="checked" name="cai" value="<%=rs1("ID")%>"/></td> <td><%=rs1("ID")%></td> <td><%=rs1("cname")%></td> <td><%=rs1("ctype")%></td> <td><%=rs1("cprice")%></td> </tr> <% else%> <tr align="center" bgcolor="#FFFFFF" onMouseMove="javascript:this.bgColor='#33CCFF'" onMouseOut="javascript:this.bgColor='#FFFFFF'"> <td><input type="checkbox" name="cai" value="<%=rs1("ID")%>"/></td> <td><%=rs1("ID")%></td> <td><%=rs1("cname")%></td> <td><%=rs1("ctype")%></td> <td><%=rs1("cprice")%></td> </tr> <% end if rs1.movenext loop end if %> <tr align="center"> <td><span class="words">点菜完成请提交:</span></td> <td><input name="tijiao" type="submit" value="提交" /></td> <td><input name="jiacai" type="button" value="加菜" onclick="window.location='jiacai.asp'" /></td> </tr> <tr align="center"> <td colspan="3"><input name="fanhui" type="button" value="返回首页" onclick="window.location='index.asp'" /> </td> <td colspan="2"><input name="denglu" type="button" value="管理员登录" onclick="window.location='admin.asp'" /> </td> </tr> </table> </form>实现搜索的主要代码:<script type="text/javascript"> function doUp() var qstr="" $("inputname='cai'").each(function() if(this.checked) if(qstr!="") qstr=qstr+"&" 10 qstr=qstr+"cai="+$.trim(this.value);); window.location.href="slchuli.asp?"+qstr; </script> <table border="0" cellpadding="0" cellspacing="1" width="800" bgcolor="#a8c7ce"> <tr><td height="20" bgcolor="#d3eaef" colspan="5"><h2>你好!根据你的输入内容,搜索结果如下:</h2></td></tr> <tr> <th width="20%"><%="选择"%></th> <th width="20%"><%="编号"%></th> <th width="20%"><%="菜名"%></th> <th width="20%"><%="类型"%></th> <th width="20%"><%="价格/元"%></th> </tr> <% dim CID CID=request.Form("cname") dim rs3,sql3 set rs3=server.CreateObject("adodb.recordset") dim d:d=CID&"%" sql3="select * from caiList where ID like '"&d&"'" rs3.open sql3,conn,1,1 if not rs3.eof then do while not rs3.eof %> <tr align="center"> <td><input type="checkbox" name="cai" value="<%=rs3("ID")%>"/></td> <td><%=rs3("ID")%></td> <td><%=rs3("cname")%></td> <td><%=rs3("ctype")%></td> <td><%=rs3("cprice")%></td> </tr> <% rs3.movenext loop end if %> <tr><td colspan="5" align="center"><input type="button" value="提交" onclick="doUp()" /></td></tr> </table> 点菜后台处理代码:<% dim zhuozi session("time")=Now() zhuozi=request("zhuozi") dim ids:ids=split(request("cai"),",") 11 for i=0 to ubound(ids) sql="insert into diancai (CID,ZID,dtime,number) values('" &trim(ids(i)& "','" &zhuozi& "','" &session("time")& "',1)" conn.execute(sql) next response.write "<div class='js'><h1>点菜成功,3秒后返回首页</h1>" %> <% sql2="update zhuotai set tablestatus='使用' where ID='"&zhuozi&"'" conn.execute(sql2) for i=0 to ubound(ids) sql3="update caiList set isselected=0 where ID='"&trim(ids(i)&"'" conn.execute(sql3) next conn.close set conn=nothing %> <script language="javascript"> function reverse() window.location.href="index.asp" setTimeout("reverse()",3000) </script> 结账代码:<form name="jiezhang" method="post" action=""> span class="Keywords">请输入你的桌号:</span> <input name="zhuohao" type="text" id="zhuohao"/> <input name="tijiao" type="submit" value="确定"/> </form> <% dim zhuohao zhuohao=cint(request.Form("zhuohao") dim rs1,sql1 set rs1=server.CreateObject("adodb.recordset") sql1="select Max(dtime) as dctime from diancai where ZID="&zhuohao rs1.open sql1,conn,1,1 if not rs1.eof then do while not rs1.eof %> <% dctime=rs1("dctime") rs1.movenext loop end if %> <table border="0" cellpadding="0" cellspacing="1" width="800" bgcolor="#a8c7ce"> <tr> <td colspan="4"><span class="Keywords">你好!你选择的是<%=zhuohao%>号桌,你所点的菜如下:</span></td> </tr> <tr> <th width="20%"><%="编号"%></th> <th width="20%"><%="菜名"%></th> <th width="20%"><%="类型"%></th> <th width="20%"><%="价格/元"%></th> </tr> <% dim rs4,sql4 dim i:i=0 set rs4=server.CreateObject("adodb.recordset") sql4="select CID from diancai where ZID='"&zhuohao&"' and dtime='"&dctime&"'" rs4.open sql4,conn,1,1 if not rs4.eof then do while not rs4.eof %> <% dim rs5,sql5 set rs5=server.CreateObject("ad 13 sql5="select * from caiList where ID='"&rs4("CID")&"'" rs5.open sql5,conn,1,1 if not rs5.eof then do while not rs5.eof %> <tr align="center"> <td><%=rs5("ID")%></td> <td><%=rs5("cname")%></td> <td><%=rs5("ctype")%></td> <td><%=rs5("cprice")%></td> </tr> <% i=i+rs5("cprice") rs5.movenext loop end if %> <% rs4.movenext loop session("time")="" response.write "<tr><td colspan='4'>结账成功!谢谢惠顾!欢迎您的下次光临!<a href='index.asp'>请返回</a></td></tr>" end if %> <tr> <td colspan="2"><span class="Keywords">你消费总额为:<%=i%></span> </td> <td colspan="2"><a href="index.asp">返回首页</a></td> </tr> </table> <% dim sql6 sql6="update zhuotai set tablestatus='空闲' where ID='"&zhuohao&"'" conn.execute(sql6) conn.close set conn=nothing %>酒店管理代码:<% dim youName,youPwd set rs=server.CreateObject("adodb.recordset") youName=request.Form("username") youPwd=request.form("pwd") if youName="" then response.Write "<script>window.alert('用户名不能空');history.go(-1);</script>" else if youPwd="" then response.