版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 android实训-无线点餐系统1需求分析传统的餐饮行业,点餐过程都是由餐厅服务员人工完成的。通常的过程是这样的,客人进入餐厅后,选择好桌位开始点餐,服务员等待客人点餐完成,将客人的点餐内容送到厨房,由厨师下厨做菜。这一过程对于一个很小的餐馆来说没有问题,但是如果餐馆比较大,客人比较多。客人的等待时间比较长。为了解决这个问题,出现的无线点餐系统,该系统一般有无线终端(一般是一个pda)、无线路由器和后台服务器组成。这种技术架构很成熟,但是存在一个弊端就是pda的价格较高,并且pda只能作为点餐使用,这无形中增加的系统成本,也造成了资源的浪费。有了android系统,我们就可以在android
2、系统中开发一套客户端软件来完成点餐功能,android手机的其它功能(如:打电话、发短信)照常使用。这样首先系统的成本会降低,其次,android系统功能强大,界面组件丰富,软件的功能自然会强大很多,用户操行更流畅,界面展现更完美。本项目主要面向具有一定规模,需要提高餐厅点餐效率,体现出现代化的气氛,改进客人就餐环境,并借此提高经济效益的餐厅和酒店。要求项目不会占用太大的预算,并能够尽量沿用原有的成熟的技术,能够与原有系统进行良好的整合。2项目架构2.1 系统物理架构系统的物理架构是这样的,客户端android系统智能手机,通过无线网络访问后台服务器,如果需要数据访问,则访问后台数据库。系统物
3、理结构图如图1.1所示。图1.1 无线点餐系统物理结构2.2 技术选型android客户端应用使用java技术,网络通信使用apache http 协议客户端。中间web服务器采用servlet相应客户请求。后台数据库采用jdbc访问数据库,客户端的一部分数据存储我们采用sqlite数据库,这里要涉及到android客户端的数据和服务器中的数据的同步问题。 图1.2 技术选型 3功能模块的设计3.1客户端客户端主要有以下几个模块构成:登陆、点餐、更新、结账等功能。机构图见2.1无线点餐系统登陆点菜更新结账查台转台并台开桌点菜更新菜谱更新桌号图2.1模块图3.2数据库 数据表及对应关系见图2.2
4、4任务分工负责部分:无线点餐系统的转台、并台模块的客户端与服务器端的实现部分。5功能介绍5.1转台功能转台功能是指顾客下单后,要求更换座位,这是需要更改已经提交的数据。更改的过程是根据订单号找到该订单对应的桌号,将该桌号更改为更换后的桌号。程序运行界面如下图所示5.2并台功能并台功能是将已经下单的两组顾客合并到一张桌子的过程,该过程也需要更换已经提交到数据库中的数据。更新内容包括人数的合并、订单的更新、订单详细的更新和桌位状态的更新。程序运行界面如下图所示6模块实现及代码6.1转台模块客户端实现转台模块要实现的功能是:当顾客开桌或下单后要求更换桌位的过程。这一过程需要更新保存在服务器数据库库中
5、的数据,具体更新的是ordertbl表中该订单对应的桌号以及更换桌位的状态。具体实现步骤如下 (1).定义一个名为“change_table.xml”的布局文件,该布局文件外层使用linearlayout布局,内层嵌套tablelayout,tablelayout中有两行要求用户输入订单编号和更换桌号。该布局作为自定义视图添加到弹出对话框中提示用户输入信息。<?xml version="1.0" encoding="utf-8"?><linearlayout xmlns:android="android:orientation
6、="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:t
7、ext="订单编号:" 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" a
8、ndroid: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="" an
9、droid:id="+id/change_table_no_edittext"android:layout_width="fill_parent" android:layout_height="wrap_content"/></tablerow></tablelayout></linearlayout>(2).在工程的“mainmenuactivity”类中定义一个changetable()方法,该方法首先实例化定义的布局文件,将其添加到alertdialog中,在对话框的确定方法中获得该订单
10、编号和更换桌号,调用服务器servlet,更新数据,并显示更新结果。转台模块android客户端实现package com.xxu.amarker;import java.io.ioexception;import java.io.inputstream;import .malformedurlexception;import .url;import .urlconnection;import java.util.arraylist;import java.util.hashmap;import java.util.list;import java.util.map;import javax.
11、xml.parsers.documentbuilder;import javax.xml.parsers.documentbuilderfactory;import javax.xml.parsers.parserconfigurationexception;import org.w3c.dom.document;import org.w3c.dom.nodelist;import org.xml.sax.saxexception;import android.app.activity;import android.app.alertdialog;import android.content.
12、dialoginterface;import android.content.dialoginterface.onclicklistener;import android.os.bundle;import android.view.layoutinflater;import android.view.menu;import android.view.view;import android.widget.edittext;import android.widget.gridview;import android.widget.simpleadapter;import android.widget
13、.spinner;import android.widget.spinneradapter;import android.widget.textview;import android.widget.toast;import com.xxu.amarker.util.httputil;public class mainmenuactivity extends activity public void changetable() layoutinflater inflater = layoutinflater.from(this);view v = inflater.inflate(r.layou
14、t.chang_table, null);final edittext et1 = (edittext) v.findviewbyid(r.id.change_table_order_number_edittext);final edittext et2 = (edittext) v.findviewbyid(r.id.change_table_to_edittext);alertdialog.builder build = new alertdialog.builder(this);build.setmessage("真的要换桌位吗?").setcancelable(fa
15、lse).setview(v).setpositivebutton("确定", new dialoginterface.onclicklistener() overridepublic void onclick(dialoginterface dialog, int which) / todo auto-generated method stubstring orderid = et1.gettext().tostring();string tableno = et2.gettext().tostring();string querystring = "order
16、id=" + orderid + "&tableno="+ tableno;string url = httputil.base_url+ "servlet/changetableservlet?" + querystring;string result = httputil.querystringforpost(url);toast.maketext(mainmenuactivity.this, result,toast.length_long).show();).setnegativebutton("取消", n
17、ew onclicklistener() overridepublic void onclick(dialoginterface dialog, int which) / todo auto-generated method stubdialog.cancel(););alertdialog alert = build.create();alert.show();public void uniontable() layoutinflater inflater=layoutinflater.from(this);view v=inflater.inflate(r.layout.union_tab
18、le, null);final spinner spinner1=(spinner) v.findviewbyid(r.id.union_table_spinner1);final spinner spinner2=(spinner) v.findviewbyid(r.id.union_table_spinner2);string urlstr=httputil.base_url+"servlet/uniontableservletxml"try url url=new url(urlstr);urlconnection conn=url.openconnection();
19、inputstream in=conn.getinputstream();documentbuilderfactory factory=documentbuilderfactory.newinstance();documentbuilder builder=factory.newdocumentbuilder();document doc=builder.parse(in);nodelist nl=doc.getelementsbytagname("table");list items=new arraylist();for (int i = 0; i < nl.ge
20、tlength(); i+) string id=doc.getelementsbytagname("id").item(i).getfirstchild().getnodevalue();map data=new hashmap();data.put("id", id);items.add(data);spinneradapter as =new simpleadapter(this, items, android.r.layout.simple_spinner_item, new string"id", new intandroi
21、d.r.id.text1);spinner1.setadapter(as);spinner2.setadapter(as); catch (malformedurlexception e) / todo auto-generated catch blocke.printstacktrace(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace(); catch (parserconfigurationexception e) / todo auto-generated catch blocke.p
22、rintstacktrace(); catch (saxexception e) / todo auto-generated catch blocke.printstacktrace();alertdialog.builder builder =new alertdialog.builder(this);builder.setmessage("真的要并桌吗?").setcancelable(false).setview(v).setpositivebutton("确定", new onclicklistener() overridepublic void
23、 onclick(dialoginterface dialog, int which) / todo auto-generated method stubtextview tv1=(textview) spinner1.getselectedview();textview tv2=(textview) spinner2.getselectedview();string tablenum1=tv1.gettext().tostring();string tablenum2=tv2.gettext().tostring();string querystring = "tablenum1=
24、" + tablenum1 + "&tablenum2="+ tablenum2;string url = httputil.base_url+ "servlet/uniontableservlet?" + querystring;string result = httputil.querystringforpost(url);).setnegativebutton("取消", new dialoginterface.onclicklistener() overridepublic void onclick(dial
25、oginterface dialog, int which) / todo auto-generated method stubdialog.cancel(););alertdialog alert=builder.create();alert.show();overridepublic void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.activity_main_menu);gridview gridview = (gridview) find
26、viewbyid(r.id.gridview1);/ 使用adapter 给gridview组件填充数据gridview.setadapter(new imageadapter(this);overridepublic boolean oncreateoptionsmenu(menu menu) getmenuinflater().inflate(r.menu.activity_main_menu, menu);return true;6.2转台模式服务器端实现为了响应android客户端的请求需要定义servlet,为了更新数据库需要定义dao接口来操作数据库。(1).在工程中定义一个cha
27、ngetabledao接口,在该接口中定义一个转台方法changetable().package com.amaker.dao;/ 转台dao接口public interface changetabledao / 转台方法public void changetable(int orderid,int tableid);(2) 在工程的“com.amaker.dao”包中定义一个changetabledaoimpl类实现上述接口,该类需要更新订单表以及更换桌位的状态,为此本代码的实现使用了事务控制。 package com.amaker.dao.impl;import java.sql.conn
28、ection;import java.sql.preparedstatement;import java.sql.sqlexception;import com.amaker.dao.changetabledao;import com.amaker.util.dbutil;/* * author 郭宏志 * 完成转台功能 */public class changetabledaoimpl implements changetabledao public void changetable(int orderid, int tableid) / 更新sql语句string sql = "
29、 update tabletbl set flag = 0 where id = "+ " (select tableid from ordertbl as ot where ot.id = ?)"string sql2 = " update ordertbl set tableid = ? where id = ? "string sql3 = " update tabletbl set flag = 1 where id = ?"/ 数据库连接工具类dbutil util = new dbutil();/ 获得连接con
30、nection conn = util.openconnection();try conn.setautocommit(false);/ 获得预定义语句preparedstatement pstmt = conn.preparestatement(sql);pstmt.setint(1, orderid);/ 更新桌位状态pstmt.executeupdate();pstmt = conn.preparestatement(sql2);/ 设置参数pstmt.setint(1, tableid);pstmt.setint(2, orderid);/ 更新订单表pstmt.executeupda
31、te();pstmt = conn.preparestatement(sql3);pstmt.setint(1, tableid);/ 更新桌位状态pstmt.executeupdate();mit(); catch (sqlexception e) e.printstacktrace();try conn.rollback(); catch (sqlexception e1) e1.printstacktrace(); finally util.closeconn(conn);(3).在工程的“com.amaker.servlet”包中定义一个名为“changetableservlet”的s
32、ervlet类,该类响应客户端请求,调用dao更新数据库数据,返回信息给客户端package com.amaker.servlet;import java.io.ioexception;import java.io.printwriter;import javax.servlet.servletexception;import javax.servlet.http.httpservlet;import javax.servlet.http.httpservletrequest;import javax.servlet.http.httpservletresponse;import com.am
33、aker.dao.changetabledao;import com.amaker.dao.impl.changetabledaoimpl;/* * author 郭宏志 * 完成转台功能 */public class changetableservlet extends httpservlet / 构造方法public changetableservlet() super();/ 销毁方法public void destroy() super.destroy(); / 响应get请求public void doget(httpservletrequest request, httpservl
34、etresponse response)throws servletexception, ioexception response.setcontenttype("text/html");printwriter out = response.getwriter();/ 获得请求参数string orderid = request.getparameter("orderid");string tableid = request.getparameter("tableid");/ 实例化changetabledaochangetabled
35、ao dao = new changetabledaoimpl();/ 调用转台方法dao.changetable(integer.parseint(orderid), integer.parseint(tableid);/ 返回客户端信息out.println("更换成功!");out.flush();out.close();/ 响应post请求public void dopost(httpservletrequest request, httpservletresponse response)throws servletexception, ioexception do
36、get(request,response);/ 初始化方法public void init() throws servletexception 6.3并台模块客户端实现(1).并台通过弹出对话框的方式来提示用户的,为此在对话框中添加自定义视图,提示永华选择要更换的桌位。在工程的reslayout目录下创建一个名为union_table.xml的布局文件,该布局文件外层使用linearlayout布局,内层嵌套tablelayout,tablelayout中有两行,每行通过一个spinner提示用户选择桌号。<?xml version="1.0" encoding=&q
37、uot;utf-8"?><linearlayout xmlns: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" an
38、droid:stretchcolumns="1"><tablerow><textview android:text="被并桌位:" android:id="+id/textview"android:layout_width="wrap_content" android:layout_height="wrap_content"/><spinner android:id="+id/union_table_spinner1" android:la
39、yout_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"/><s
40、pinner android:id="+id/union_table_spinner2" android:layout_width="fill_parent" android:layout_height="wrap_content"/></tablerow></tablelayout></linearlayout>(2).在mainmenuactivity类中创建一个名为uniontable()的方法,该方法定义了一个对话框提示用户选择合并桌号,在对话框中添加了自定义视图,访问服务器获得桌位信
41、息并绑定到spinner,然后在确定方法中提交合并请求。接着创建一个并台监听器,调用uniontable方法private void uniontable()/ 实例化layoutinflaterlayoutinflater inflater = layoutinflater.from(this);/ 获得自定义视图view v =inflater.inflate(r.layout.union_table, null);/ 获得spinnerfinal spinner spinner1 = (spinner) v.findviewbyid(r.id.union_table_spinner1);
42、final spinner spinner2 = (spinner) v.findviewbyid(r.id.union_table_spinner2);/ 访问服务器的urlstring urlstr = httputil.base_url + "servlet/uniontableservlet"try / 实例化urlurl url = new url(urlstr);/ urlconnection 实例urlconnection conn = url.openconnection();/ 获得输入流inputstream in = conn.getinputstre
43、am();/ 获得documentbuilderfactory对象documentbuilderfactory factory = documentbuilderfactory.newinstance();/ 获得documentbuilder对象documentbuilder builder = factory.newdocumentbuilder();/ 获得document对象document doc = builder.parse(in);/ 获得节点列表nodelist nl = doc.getelementsbytagname("table");/ spinne
44、r数据list items = new arraylist();/ 获得xml数据for (int i = 0; i < nl.getlength(); i+) / 桌位编号string id = doc.getelementsbytagname("id").item(i).getfirstchild().getnodevalue();/ 桌号int num = integer.parseint(doc.getelementsbytagname("num").item(i).getfirstchild().getnodevalue();map da
45、ta = new hashmap();data.put("id", id);items.add(data);/ 获得spinneradapterspinneradapter as = new simpleadapter(this, items, android.r.layout.simple_spinner_item,new string "id" , new int android.r.id.text1 );/ 绑定数据spinner1.setadapter(as);spinner2.setadapter(as); catch (exception e
46、) e.printstacktrace();alertdialog.builder builder = new alertdialog.builder(this);builder.setmessage(" 真的要并桌吗?") .setcancelable(false) .setview(v) .setpositivebutton("确定", new dialoginterface.onclicklistener() public void onclick(dialoginterface dialog, int id) textview tv1 = (te
47、xtview) spinner1.getselectedview(); textview tv2 = (textview) spinner2.getselectedview(); string tableid1 = tv1.gettext().tostring(); string tableid2 = tv2.gettext().tostring(); / 查询参数 string querystring = "tableid1="+tableid1+"&tableid2="+tableid2; / url string url = httputi
48、l.base_url+"servlet/uniontableservlet2?"+querystring; / 查询返回结果 string result = httputil.querystringforpost(url); ) .setnegativebutton("取消", new dialoginterface.onclicklistener() public void onclick(dialoginterface dialog, int id) dialog.cancel(); );alertdialog alert = builder.create();alert.show();6.4并台模块服务器端实现1. 在工程“com.amaker.dao”包中创建一个uniontabledao接口。该接口中有两个方法,分别用来获得桌位列表和更新合并后的数据。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 5619-2025防锈材料百叶箱试验方法
- 2025年南京航空航天大学备考题库化处劳务派遣岗位招聘带答案详解
- 内科门诊工作责任制度
- 商务局岗位责任制度范本
- 俱乐部安全责任制度范本
- 机械安全生产责任制度
- 二级建造师法律责任制度
- 幼儿园建筑安全责任制度
- 小学防溺水追究责任制度
- 路口管理责任制度规定
- 2.1 说话要算数 第一课时 课件2024-2025学年四年级下册道德与法治 统编版
- 医美整形抗衰祛颈纹培训课件2
- 工业机器人系统运维员(中级)课件全套 宋永昌 项目1-3 机械系统检查与诊断-工业机器人运行维护与保养
- 2024届安徽省安庆市高三模拟考试(二模)数学试题(解析版)
- 3-4、HJ 75-2017 固定污染源烟气(SO2、NOX、颗粒物)排放连续监测技术规范【现行】
- 16J916-1住宅排气道一
- 森林资源与资产评估实务课件
- 开展课外读物负面清单管理的具体实施举措
- 员工登记表(入职登记表)
- 2023年山东化工职业学院单招面试模拟试题及答案解析
- EXCELVBA函数参考手册
评论
0/150
提交评论