无线点餐系统设计文档综述.docx
《无线点餐系统设计文档综述.docx》由会员分享,可在线阅读,更多相关《无线点餐系统设计文档综述.docx(28页珍藏版)》请在冰豆网上搜索。
无线点餐系统设计文档综述
无线点餐系统详细设计
1、引言
1.1编写目的
软件可行性研究报告的编制是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解,使之成为整个开发工作的基础.
1.2编写背景
旨在改善就餐厅餐环境,缓解就餐高峰期点餐顾客等待时间过长的问题,运用高科技点餐,突破原有的餐厅服务模式,吸引更多的客户。
2、可行性研究
2.1要求
主要功能:
将餐厅点菜自动化、自由化、个性化
功能需求:
Ø面向经理:
后台管理(访问权限,修改菜单,增加菜项,删除菜项,查询订单,结账等等)
Ø面向顾客:
消费评分
Ø面向服务员:
显示菜单、预定餐桌、下单功能
性能要求:
管理员录入的信息必须无差错地存储至中心服务器,且对客户端的数据应该及时进行更新。
输出要求:
数据完整,详实。
输入要求:
方便,简捷,快速。
安全与保密要求:
餐厅服务员只有查询和下单功能
管理人员则拥有在其权限内的查询,修改,增加,删除菜单,制定价格等一些管理功能。
2.2目标
为各中小型餐厅酒店提供一个统一、方便、安全的信息管理平台.
2.3可行性研究方法
可行性研究的方法是通过对各大中小型餐厅、酒店管理者进行问卷调查及访问谈话而得到用户对此系统的信任度关注度及依赖度的,通过建模分析,得出了该系统的功能需求,成本分析,可行性分析。
2.4决定可行性的主要因素
成本/效益分析结果,效益>>成本。
技术可行,现有技术可完全承担开发任务。
操作可行,软件能被原有工作人员快速接受。
3、需求分析
3.1现状
✓顾客:
一些生意较好的餐厅人往往比较多,点个菜都要等好久,更别提什么时候能吃上了。
✓服务员:
有的顾客比较挑剔,点菜的时候会对各种菜问个究竟,有的顾客拿点菜迟迟不定主意,人多的时候根本忙不过来。
3.2发展前景
在计算机技术以及互联网飞速发展的今天,先进的经营理念,人性化的设计,以及高科技的支持,无疑使得餐厅、酒店更受消费者的欢迎。
通过先前的调查分析得知,点餐系统以其高效率、直观、便捷的优点将迅速占领整个餐饮市场。
4、流程设计
4.1服务员
4.2管理员
5、总体设计
5.1启动系统
客人点击菜单进入系统,开始选菜,启动界面如下图所示。
图1
5.2选菜品
客人选择了桌号的时候,就可以进入选菜阶段。
客户根据自己的口味爱好进行筛选,可以按菜系进行搜索。
(如图二),点击菜品图片就可以进入到该菜品的详细信息页面。
图二
5.3查看菜品
客人对某个菜品感兴趣的时候,可以查看菜品的的详细信息,可以对查看的菜品进行下单,下单之后重新进入选菜的页面,如果对该菜品不感兴趣可以返回选菜的页面。
(如图三)
图三
5.4查看已下的订单
客人可以随时查看点过的菜的清单,对数目经行核对,同时可以对本次用餐的情况进行评价(如图四)
图四
5.5查看购物车
客人可以随时查看购物车,还可以修改某个菜的数量。
(如图五)
图五
5.6菜系管理
首先在浏览器地址栏上输入“http:
//localhost:
8080/wl/pages/admin/index.jsp”,打开后台首页。
然后打开pages/admin/index.jsp页面,把所有jsp路径前面的pages/admin删除掉。
管理员可以对菜系进行查询、添加、删除、修改。
Ø查询菜系:
第一步:
修改pages/admin/common/left.jsp页面,指定菜系管理的访问地址。
第二步:
创建一个Servlet类,该类获取所有的菜系数据,并发送JSP进行显示;
packagecn.itcast.wl.admin.menu;
importjava.io.IOException;
importjava.sql.SQLException;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcn.itcast.model.MenuBean;
/**
*显示菜单的Servlet
*/
@WebServlet("/admin/listMenu.do")
publicclassListMenuServletextendsHttpServlet{
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
MenuBeanmenuBean=newMenuBean();
try{
//获取所有的菜单数据
ListmenuList=menuBean.list();
//把数据添加到Request
request.setAttribute("menus",menuList);
}catch(SQLExceptione){
e.printStackTrace();//把输出信息以及错误发生的位置输出到控制台
}
//跳转到JSP页面显示数据
request.getRequestDispatcher("/pages/admin/menu/list.jsp")
.forward(request,response);
}
}
第三步:
创建一个MenuBean类,该类实现从数据库中查询所有菜系的功能;
packagecn.itcast.model;
importjava.sql.SQLException;
importjava.util.List;
importmons.dbutils.QueryRunner;
importmons.dbutils.handlers.BeanListHandler;
importcn.itcast.util.DbUtil;
/*
菜单管理的JavaBean
*/
publicclassMenuBean{
privateintid;
privateStringname;
publicMenuBean(){}
publicMenuBean(intid,Stringname){
this.id=id;
this.name=name;
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
//查询所有的菜单
publicListlist()throwsSQLException{
//创建一个QueryRunner对象
QueryRunnerrunner=newQueryRunner(DbUtil.getDataSource());
Stringsql="select*frommenu";
//执行查询
return(List)runner.query(sql,newBeanListHandler(
MenuBean.class));
}
}
第四步:
修改pages/admin/menu/list.jsp页面,把菜系的数据遍历出来;
Ø添加菜系:
第一步:
修改pages/admin/menu/list.jsp页面,指定“新建”按钮的页面地址;
第二步:
修改pages/admin/menu/add.jsp页面,指定表单提交的地址;
第三步:
创建一个Servlet,实现添加数据的功能;
packagecn.itcast.wl.admin.menu;
importjava.io.IOException;
importjava.sql.SQLException;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importcn.itcast.model.MenuBean;
/**
*添加新的菜系
*/
@WebServlet("/admin/addMenu.do")
publicclassAddMenuServletextendsHttpServlet{
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//处理请求参数的中文乱码问题
request.setCharacterEncoding("utf-8");
//获取表单的数据
StringmenuName=request.getParameter("menuName");
//把数据保存到数据库中
MenuBeanmenuBean=newMenuBean(menuName);
try{
menuBean.save();
//保存数据的结果信息
request.setAttribute("message","保存成功!
");
}catch(Exceptione){
request.setAttribute("message","保存失败,请联系管理员!
");
e.printStackTrace();
}
//跳转回添加页面,并显示保存的结果
request.getRequestDispatcher("/pages/admin/menu/add.jsp")
.forward(request,response);
}
}
第四步:
修改MenuBean.java,添加save方法,实现保存数据的功能;
第五步:
修改pages/admin/menu/add.jsp页面,设置显示保存结果的信息;
5.7菜品管理
管理员可以对菜品进行添加、删除(图七)
Ø查询菜品:
查询菜品的实现步骤与查询菜系一样。
但是,需要注意:
因为需要查询菜系的名称,所以,需要同时查询food和menu表。
并且,为了区分food表的name字段和menu表的name字段,可以指定menu表name字段的别名:
menuName。
只有查询出来的字段名与JavaBean的字段名相匹配的时候,DbUtil才会自动地帮我们把查询出来的数据封装成对应的JavaBean。
Ø添加菜品:
第一步:
修改pages/admin/food/list.jsp页面,指定新建按钮的访问地址;
第二步:
修改pages/admin/food/add.jsp页面,指定表单的提交地址,以及指定enctype属性;
第三步:
创建一个Servlet,实现文件上传的功能;
为了简化文件上传的操作,需要使用commons-fileupload组件。
该组件的作用是简化文件上传的操作。
Ø使用commons-fileupload组件实现文件上传的步骤:
第一步:
创建一个ServletFileUpload对象;
第二步:
调用该对象的parseRequest方法把Request对象中的每一个表单项解析成一个个的FileItem对象,然后保存在一个集合中并返回。
也就是说,一个FileItem对象就代表一个表单项(普通字段、文件)。
该对象提供了一些方法获取表单项的数据:
isFormField():
判断该FormItem是否是普通表单项。
如果是则返回true,否则返回false;
getFieldName():
获取表单项的name属性的值;
getString():
获取普通表单项的值;
getInputStream():
获取上传文件的输入流对象;
getName():
获取上传文件的名称;
第三步:
遍历该集合获取每一个FileItem,然后调用FileItem的方法获取表单项的数据;
packagecn.itcast.wl.admin.food;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.InputStream;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importmons.beanutils.BeanUtils;
importmons.fileupload.FileItem;
importmons.fileupload.FileUploadException;
importmons.fileupload.disk.DiskFileItemFactory;
importmons.fileupload.servlet.ServletFileUpload;
importcn.itcast.model.FoodBean;
/**
*添加菜品
*/
@WebServlet("/admin/addFood.do")
publicclassAddFoodServletextendsHttpServlet{
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//获取请求参数
try{
//第一步:
创建ServletFileUpload对象
ServletFileUploadfileUpload=newServletFileUpload(
newDiskFileItemFactory());
//把request对象中的每一个表单项解析成一个个的FileItem对象,然后保存在集合中并返回
Listlist=fileUpload.parseRequest(request);
//创建FoodBean对象
FoodBeanfoodBean=newFoodBean();
//遍历集合的数据
for(inti=0;i//一个FileItem就代表一个表单项
//注意:
获取普通表单项与获取上传文件的方式不一样
FileItemfileItem=(FileItem)list.get(i);
//如果isFormField返回true,代表该fileItem对象是一个普通的表单项
//否则,该fileItem对象是一个文件
if(fileItem.isFormField()){
//获取普通字段的名称
StringfieldName=fileItem.getFieldName();
StringfieldValue=fileItem.getString("utf-8");
/*if("menuId".equals(fieldName)){
foodBean.setMenuId(fieldValue);
}elseif("name".equals(fieldName)){
foodBean.setName(fieldValue);
}elseif("price".equals(fieldName)){
foodBean.setPrice(Double.parseDouble(fieldValue));
}elseif("mprice".equals(fieldName)){
foodBean.setMprice(Double.parseDouble(fieldValue));
}elseif("introduce".equals(fieldName)){
foodBean.setIntroduce(fieldValue);
}*/
//根据字段名字把数据设置javabean中的对应属性
BeanUtils.setProperty(foodBean,fieldName,fieldValue);
}else{
//读取文件
/*
读写文件的步骤:
第一步:
把文件读取到输入流里面;
第二步:
在服务器指定目录下创建一个空文件;
第三步:
把读取到的字节数据通过输出流写入到该文件中;
第四步:
关闭输出和输入流;
*/
InputStreamin=fileItem.getInputStream();
StringfileName=fileItem.getName();
//获取upload目录在Tomcat服务器中的绝对路径
StringsavePath=request.getServletContext()
.getRealPath("/upload");
//在upload目录下创建一个新的文件
Filef=newFile(savePath+"/"+fileName);
if(!
f.exists()){
f.createNewFile();
}
//把读取到的数据写入到该文件中
FileOutputStreamfos=newFileOutputStream(f);
byte[]buf=newbyte[1024];//缓冲数组
//从输入流中读取数据并保存在buf数组中
intlen=in.read(buf);
while(len>0){
//把数组中从位置0开始的len个字节的数据输出到输出流中
fos.write(buf,0,len);
//继续从输入流中读取数据
len=in.read(buf);
}
//关闭输出和输入流
fos.close();
in.close();
foodBean.setImage(fileName);
}
}
//把数据保存在数据库中
foodBean.save();
request.setAttribute("message","保存成功!
");
}catch(Exceptione){
request.setAttribute("message","保存失败,请联系管理员!
");
e.printStackTrace();
}
//返回结果给JSP页面
request.getRequestDispatcher("/pages/admin/food/add.jsp")
.forward(request,response);
}
}
修改FoodBean.java文件,添加image属性,以及该属性的setter和getter方法。
除此以外,还要添加一个save方法。
第四步:
修改pages/admin/food/add.jsp页面,显示结果信息;
5.8餐桌管理
管理员可以对餐桌进行添加,删除,和预订(图八)。
图七
5.9订单管理
管理员可以查看所有的订单信息。
(图九)
查看订单详情:
图九