平板点餐软件编程体会记我的Android编程之路

     前言

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

    实现

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

 (完)

原文地址:https://www.cnblogs.com/realhope/p/4312832.html