Android无线点餐系统_第1页
Android无线点餐系统_第2页
Android无线点餐系统_第3页
Android无线点餐系统_第4页
Android无线点餐系统_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android无线点餐系统院系:计算机与信息工程学院班级:10级软件技术一班姓名:学号:目录TOC\o"1-2"\h\u32207一、无线点餐系统需求分析 3189831.系统的背景分析和构建必要性 3231412.该系统在性能功能上应达到如下需求: 325035二、更新模块服务器端实现 370161.UpdateDao接口 3221642.UpdateDaoImpl类 499123.名称“UpdateServlet”的Servlet类 517476三、转台模块Android客户端实现 7186651.名称为“change_table.xml”的布局文件 7198582.changeTable()方法 8185573.调用changeTable方法 9150954.添加转台监听器 95四、转台模块服务器端实现 10186471.ChanggeTableDao接口 1077152.ChanggeTableDaoImpl类 10266013.名称为“ChangeTableServlet”的Servlet类 1125284五、并台模块Android客户端实现 1225871.名称为union_table.xml的布局文件 12110232.名称为unionTable()的方法 13100413.调用unionTable方法 1527095六、并台模块服务器端实现 15164151.名称为“UnionTableDao”的接口 15226742.UnionTableDaoImpl类 1672403.存储过程 17

无线点餐系统需求分析系统的背景分析和构建必要性数字化餐饮管理系统是处于导入市场的阶段。无线点餐系统管理软件供应商在餐饮行业市场满地找餐饮老板,希望出售自己产品。而餐饮老板在这个信息化满天飞的时代,总要受到影响,也希望通过这种数字化管理软件使得自己经营的餐饮能更有效的得到管理,能更多的盈利。基于Android平台开发无线订餐系统。Android平台给我们提供了巨大的自由空间,再运用JAVA面向对象语言,是系统功能更加强大。MySQL是一个杰出的数据库平台,具有功能强大,安全可靠等特点,可用于中小型联机事务处理、数据仓库及电子商务等。首先,我们得确定使用这个系统的用户应该有顾客、厨师、管理员(包括收银员,只是其权限有限制)。顾客和管理员应该是系统数据的起点,由他们做出相应的操作,然后系统进行处理;厨师则为系统数据的终点,因为最终的任务分配情况是反映到厨师身上的。整个系统的关键任务就是保证顾客所点菜品能够由厨师完成,系统保证能将做菜任务准确无误地传达给厨师。该系统在性能功能上应达到如下需求:(1)操作简单、界面友好:完全控件式的页面布局,使得菜品,资讯,座位等信息的录入工作更简便,许多选项包括餐厅信息,桌位,包房信息等只需要点击鼠标就可以完成;另外,跟踪出现的提示信息也让用户随时清楚自己的操作情况。对常见的类似网站的管理的各个方面:基本信息录入、浏览、删除、修改、搜索等方面都大体实现,顾客对菜品的预定及支付方式;(2)即时可见:对客户预定餐饮信息的处理(包括录入、删除)将立即在另一应用端及服务器的对应栏目显示出来,达到“即时点击、即时见效”的功能;(3)系统运行应该快速、稳定、高效和可靠;(4)在结构上应具有很好的可扩展性,便于将来的功能扩展和维护。更新模块服务器端实现 更新模块服务器的实现主要是:创建DAO查询数据列表;创建Servlet,拼成XML格式数据输出,响应客户端请求。具体步骤说明如下。UpdateDao接口在工程的“com.amaker.dao”包中定义一个UpdateDao接口,在该接口中声明两个方法,分别用来获得菜谱数据列表和桌位数据列表。packagecom.amaker.dao;importjava.util.List;publicinterfaceUpdateDao{ //获得菜单列表 publicListgetMenuList(); //获得餐桌列表 publicListgetTableList();}UpdateDaoImpl类在工程的“com.amaker.dao.impl”包中定义一个UpdateDaoImpl类实现UpdateDao接口中的方法。packagecom.amaker.dao.impl;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.List;importcom.amaker.dao.UpdateDao;importcom.amaker.entity.Menu;importcom.amaker.util.DBUtil;publicclassUpdateDaoImplimplementsUpdateDao{ //获得菜单列表 publicListgetMenuList(){ //查询SQL语句 Stringsql="selectid,typeId,price,name,pic,remarkfromMenuTbl"; //数据库连接工具类 DBUtilutil=newDBUtil(); //获得连接 Connectionconn=util.openConnection(); try{ //获得预定义语句 Statementpstmt=conn.createStatement(); //执行查询 ResultSetrs=pstmt.executeQuery(sql); //判断订单详细 Listlist=newArrayList(); while(rs.next()){ //获得菜单信息 intid=rs.getInt(1); inttypeId=rs.getInt(2); intprice=rs.getInt(3); Stringname=rs.getString(4); Stringpic=rs.getString(5); Stringremark=rs.getString(6); Menum=newMenu(); m.setId(id); m.setName(name); m.setPic(pic); m.setPrice(price); m.setRemark(remark); m.setTypeId(typeId); list.add(m); } returnlist; }catch(SQLExceptione){ e.printStackTrace(); }finally{ util.closeConn(conn); } returnnull; } //获得餐桌列表 publicListgetTableList(){ returnnull;}}名称“UpdateServlet”的Servlet类在工程的“com.amaker.servlet”包中定义一个名称“UpdateServlet”的Servlet类响应客户端请求,将数据列表拼成XML格式数据,发送到客户端。packagecom.amaker.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.amaker.dao.UpdateDao;importcom.amaker.dao.impl.UpdateDaoImpl;importcom.amaker.entity.Menu;publicclassUpdateServletextendsHttpServlet{ //构造方法 publicUpdateServlet(){ super();} //销毁方法 publicvoiddestroy(){ super.destroy();}//响应Get请求 publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setContentType("text/xml"); PrintWriterout=response.getWriter(); //实例化daoUpdateDaodao=newUpdateDaoImpl(); //获得菜谱列表 Listlist=dao.getMenuList(); //拼XML格式数据 out.println("<?xmlversion='1.0'encoding='UTF-8'?>"); //根节点 out.println("<menulist>"); for(inti=0;i<list.size();i++){ Menum=(Menu)list.get(i); out.println("<menu>"); //菜谱编号 out.print("<id>"); out.print(m.getId()); out.println("</id>"); //分类 out.print("<typeId>"); out.print(m.getTypeId()); out.println("</typeId>"); //名称 out.print("<name>"); out.print(m.getName()); out.println("</name>"); //图片路径 out.print("<pic>"); out.print(m.getPic()); out.println("</pic>"); //价格 out.print("<price>"); out.print(m.getPrice()); out.println("</price>"); //备注 out.print("<remark>"); out.print(m.getRemark()); out.println("</remark>"); out.println("</menu>");} out.println("</menulist>"); out.flush(); out.close();} //响应Post请求 publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doGet(request,response); } //初始化方法 publicvoidinit()throwsServletException{}}转台模块Android客户端实现转台模块要实现的功能是:当顾客开桌或下单后要求更换桌位的过程。这一过程需要更新保存在服务器数据库中的数据,具体更新的是OrderTbl表中该订单对应的桌号以及更换桌位的状态。具体实现步骤说明如下。名称为“change_table.xml”的布局文件在该工程的目录下定义一个名称为“change_table.xml”的布局文件,该布局文件外层使用LinearLayout布局,内层嵌套TableLayout,该布局作为自定义试图添加到弹出对话框中提示用户输入信息。<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1"> <TableRow> <TextView android:text="订单编号:" android:id="@+id/TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:text="" android:id="@+id/change_table_order_number_EditText" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </TableRow> <TableRow> <TextView android:text="更换桌号:" android:id="@+id/TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:text="" android:id="@+id/change_table_no_EditText" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </TableRow> </TableLayout></LinearLayout>changeTable()方法在工程的“MainMenuActivity”类中定义一个changeTable()方法该方法首先实现定义的布局文件,将其添加到AlertDialog中,在对话框的确定方法中获得订单编号和更换桌号,条调用服务器Servlet,更新数据,并显示更新结果。//换台系统 privatevoidchangeTable(){ //获得LayoutInflater实例 LayoutInflaterinflater=LayoutInflater.from(this); //获得LinearLayout视图实例 Viewv=inflater.inflate(R.layout.change_table,null); //从LinearLayout中获得EditText实例 finalEditTextet1=(EditText)v.findViewById(R.id.change_table_order_number_EditText); finalEditTextet2=(EditText)v.findViewById(R.id.change_table_no_EditText); AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setMessage("真的要换桌位吗?") .setCancelable(false) .setView(v) .setPositiveButton("确定",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ //获得订单号 StringorderId=et1.getText().toString(); //获得桌号 StringtableId=et2.getText().toString(); //查询参数 StringqueryString="orderId="+orderId+"&tableId="+tableId; //url Stringurl=HttpUtil.BASE_URL+"servlet/ChangeTableServlet?"+queryString; //查询返回结果 Stringresult=HttpUtil.queryStringForPost(url); //显示结果 Toast.makeText(MainMenuActivity.this,result,Toast.LENGTH_LONG).show(); } }) .setNegativeButton("取消",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ dialog.cancel(); } }); AlertDialogalert=builder.create(); alert.show(); } 调用changeTable方法定义转台监听器,调用changeTable方法。//转台监听器OnClickListenerchangeTableLinstener=newOnClickListener(){ @Override publicvoidonClick(Viewv){ changeTable(); } };添加转台监听器主菜单GridView添加监听器。case2: //添加转台监听器 imageView.setOnClickListener(changeTableLinstener); break;转台模块服务器端实现为了响应Android客户端的请求需要定义Servlet,为了更新数据库需要定义DAO接口来操作数据库。具体步骤说明如下。ChanggeTableDao接口在工程的“com.amaker.dao”包中定义一个ChanggeTableDao接口,在该接口中定义一个转台方法changeTable().packagecom.amaker.dao;//转台DAO接口publicinterfaceChangeTableDao{ //转台方法 publicvoidchangeTable(intorderId,inttableId);}ChanggeTableDaoImpl类在工程的“com.amaker.dao”包中定义一个ChanggeTableDaoImpl类实现上述接口。该类需要更新订单表以及更换桌位的状态,为此本代码的实现使用了事务控制。packagecom.amaker.dao.impl;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;importcom.amaker.dao.ChangeTableDao;importcom.amaker.util.DBUtil;/***@author郭宏志*完成转台功能*/publicclassChangeTableDaoImplimplementsChangeTableDao{ publicvoidchangeTable(intorderId,inttableId){ //更新SQL语句 Stringsql="updateTableTblsetflag=0whereid="+ "(selecttableIdfromOrderTblasotwhereot.id=?)"; Stringsql2="updateOrderTblsettableId=?whereid=?"; Stringsql3="updateTableTblsetflag=1whereid=?"; //数据库连接工具类 DBUtilutil=newDBUtil(); //获得连接 Connectionconn=util.openConnection(); try{ conn.setAutoCommit(false); //获得预定义语句 PreparedStatementpstmt=conn.prepareStatement(sql); pstmt.setInt(1,orderId); //更新桌位状态 pstmt.executeUpdate(); pstmt=conn.prepareStatement(sql2); //设置参数 pstmt.setInt(1,tableId); pstmt.setInt(2,orderId); //更新订单表 pstmt.executeUpdate(); pstmt=conn.prepareStatement(sql3); pstmt.setInt(1,tableId); //更新桌位状态 pstmt.executeUpdate(); mit(); }catch(SQLExceptione){ e.printStackTrace(); try{ conn.rollback(); }catch(SQLExceptione1){ e1.printStackTrace(); } }finally{ util.closeConn(conn); } }}名称为“ChangeTableServlet”的Servlet类在工程的“com.amaker.servlet”包中定义一个名称为“ChangeTableServlet”的Servlet类,该类响应客户端请求,调用DAO更新数据库数据,返回信息给客户端。packagecom.amaker.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.amaker.dao.ChangeTableDao;importcom.amaker.dao.impl.ChangeTableDaoImpl;/***@author郭宏志*完成转台功能*/publicclassChangeTableServletextendsHttpServlet{ //构造方法 publicChangeTableServlet(){ super(); } //销毁方法 publicvoiddestroy(){ super.destroy(); } //响应Get请求 publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setContentType("text/html"); PrintWriterout=response.getWriter(); //获得请求参数 StringorderId=request.getParameter("orderId"); StringtableId=request.getParameter("tableId"); //实例化ChangeTableDao ChangeTableDaodao=newChangeTableDaoImpl(); //调用转台方法 dao.changeTable(Integer.parseInt(orderId),Integer.parseInt(tableId)); //返回客户端信息 out.println("更换成功!"); out.flush(); out.close(); } //响应Post请求 publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ doGet(request,response); } //初始化方法 publicvoidinit()throwsServletException{ }}并台模块Android客户端实现名称为union_table.xml的布局文件该布局文件外层使用LinearLayout布局,内层嵌套TableLayout,TableLayout中有两行,每行通过一个Spinner提示用户选择桌号。<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TableLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:stretchColumns="1"><TableRow><TextViewandroid:text="被并桌位:"android:id="@+id/TextView"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Spinnerandroid:id="@+id/union_table_Spinner1"android:layout_width="fill_parent"android:layout_height="wrap_content"/></TableRow><TableRow><TextViewandroid:text="目标桌位:"android:id="@+id/TextView"android:layout_width="wrap_content"android:layout_height="wrap_content"/><Spinnerandroid:id="@+id/union_table_Spinner2"android:layout_width="fill_parent"android:layout_height="wrap_content"/></TableRow></TableLayout></LinearLayout>名称为unionTable()的方法在MainMenuActivity类中创建一个名称为unionTable()的方法,该方法定义了一个对话框提示用户选择合并桌号,在对话框中添加了自定义视图,访问服务器获得桌位信息并绑定到Spinner,然后在确定方法中提交合并请求。//并台系统 privatevoidunionTable(){ //实例化LayoutInflater LayoutInflaterinflater=LayoutInflater.from(this); //获得自定义视图 Viewv=inflater.inflate(R.layout.union_table,null); //获得Spinner finalSpinnerspinner1=(Spinner)v.findViewById(R.id.union_table_Spinner1); finalSpinnerspinner2=(Spinner)v.findViewById(R.id.union_table_Spinner2); //访问服务器的URL StringurlStr=HttpUtil.BASE_URL+"servlet/UnionTableServlet"; try{ //实例化URL URLurl=newURL(urlStr); //URLConnection实例 URLConnectionconn=url.openConnection(); //获得输入流 InputStreamin=conn.getInputStream(); //获得DocumentBuilderFactory对象 DocumentBuilderFactoryfactory=DocumentBuilderFactory .newInstance(); //获得DocumentBuilder对象 DocumentBuilderbuilder=factory.newDocumentBuilder(); //获得Document对象 Documentdoc=builder.parse(in); //获得节点列表 NodeListnl=doc.getElementsByTagName("table"); //Spinner数据 Listitems=newArrayList(); //获得XML数据 for(inti=0;i<nl.getLength();i++){ //桌位编号 Stringid=doc.getElementsByTagName("id") .item(i).getFirstChild().getNodeValue(); //桌号 intnum=Integer.parseInt(doc.getElementsByTagName("num") .item(i).getFirstChild().getNodeValue()); Mapdata=newHashMap(); data.put("id",id); items.add(data); } //获得SpinnerAdapter SpinnerAdapteras=new SimpleAdapter(this,items, android.R.layout.simple_spinner_item, newString[]{"id"},newint[]{android.R.id.text1}); //绑定数据 spinner1.setAdapter(as); spinner2.setAdapter(as); }catch(Exceptione){ e.printStackTrace(); } AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder.setMessage("真的要并桌吗?") .setCancelable(false) .setView(v) .setPositiveButton("确定",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ TextViewtv1=(TextView)spinner1.getSelectedView(); TextViewtv2=(TextView)spinner2.getSelectedView(); StringtableId1=tv1.getText().toString(); StringtableId2=tv2.getText().toString(); //查询参数 StringqueryString="tableId1="+tableId1+"&tableId2="+tableId2; //url Stringurl=HttpUtil.BASE_URL+"servlet/UnionTableServlet2?"+queryString; //查询返回结果 Stringresult=HttpUtil.queryStringForPost(url); } }) .setNegativeButton("取消",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intid){ dialog.cancel(); } }); AlertDialogalert=builder.create(); alert.show(); }调用unionTable方法创建一个并台监听器,调用unionTable方法。 //并台监听器OnClickListenerunionTableLinstener=newOnClickListener(){ @Override publicvoidonClick(Viewv){ unionTable(); } };并台模块服务器端实现名称为“UnionTableDao”的接口在工程的“com.amaker.dao”包中定义一个名称为“UnionTableDao”的接口。该接口中有两个方法,分别用来获得桌位列表和更新合并后的数据。packagecom.amaker.dao;importjava.util.List;//并台功能接口publicinterfaceUnionTableDao{ //获得桌位列表 publicListgetTableList(); //更新合并后的数据 publicvoidupdateStatus(inttableId1,inttableId2);}UnionTableDaoImpl类在工程的“com.amaker.dao.impl”包中定义一个UnionTableDaoImpl类实现UnionTableDao。packagecom.amaker.dao.impl;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.List;importcom.amaker.dao.UnionTableDao;importcom.amaker.entity.UnionTable;importcom.amaker.util.DBUtil;/***@author郭宏志*实现并台功能*/publicclassUnionTableDaoImplimplementsUnionTableDao{ publicListgetTableList(){ //查询SQL语句 Stringsql="selectid,numfromTableTblwhereflag=1"; //数据库连接工具类 DBUtilutil=newDBUtil(); //获得连接 Connectionconn=util.openConnection(); try{ //获得预定义语句 Statementpstmt=conn.createStatement(); //执行查询 ResultSetrs=pstmt.executeQuery(sql); //判断订单详细 Listlist=newArrayList(); while(rs.next()){ //获得菜单信息 intid=rs.getInt(1); intnum=rs.getInt(2); UnionTableut=newUnionTable(); ut.setId(id); ut.setNum(num); list.add(ut); } returnlist; }catch(SQLExceptione){ e.printStackTrace(); }finally{ util.closeConn(conn); } returnnull; } publicvoidupdateStatus(inttableId1,inttableId2){ //数据库连接工具类 DBUtilutil=newDBUtil(); //获得连接 Connectionconn=util.openConnection(); CallableStatementcstmt; try{ cstmt=conn.prepareCall("{callnew_proc(?,?)}"); cstmt.setInt(1,tableId1); cstmt.setInt(2,tableId2); cstmt.execute(); }catch(SQLExceptione){ e.printStackTrace(); } }}存储过程UnionTableDaoImpl类中的第二个方法是通过存储过程来实现的,存储过程代码如下:CREATEPROCEDURE`new_proc`(INtableId1INTEGER(11),INtableId2INTEGER(11))NOTDETERMINISTICSQLSECURITYDEFINERCOMMENT''BEGINdeclareperNum,oId1,oId2integer;selectpersonNumintoperNumfromOrderTblasotwhereot.tableId=tableId2andot.isPay=0;selectidintooId1fromOrderTblasotwhereot.tableId=tableId1andot.isPay=0;selectidintooId2fromOrderTblasotwhereot.tableId=tableId2andot.isPay=0;updateOrderTblsetpersonNum=personNum+perNumwhereid=oId2;updateOrderDetailTblsetorderId=oId2whereorderId=oId1;updateTableTblsetflag=0whereid=tableId1;deletefromOrderTblwhereid=oId1;END;

论大学生写作能力写作能力是对自己所积累的信息进行选择、提取、加工、改造并将之形成为书面文字的能力。积累是写作的基础,积累越厚实,写作就越有基础,文章就能根深叶茂开奇葩。没有积累,胸无点墨,怎么也不会写出作文来的。写作能力是每个大学生必须具备的能力。从目前高校整体情况上看,大学生的写作能力较为欠缺。一、大学生应用文写作能力的定义那么,大学生的写作能力究竟是指什么呢?叶圣陶先生曾经说过,“大学毕业生不一定能写小说诗歌,但是一定要写工作和生活中实用的文章,而且非写得既通顺又扎实不可。”对于大学生的写作能力应包含什么,可能有多种理解,但从叶圣陶先生的谈话中,我

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论