zoukankan      html  css  js  c++  java
  • 平板点餐软件编程体会记我的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 测试

     (完)

  • 相关阅读:
    javascript打开本地应用
    SDUT OJ -2892 A
    恳请CSDN的活动可以落实
    中国银联mPOS通用技术安全分析和规范解读
    UNIX环境编程学习——反思认识
    STM32F407VG (五)定时器
    请求的链式处理——责任链模式
    Shredding Company (hdu 1539 dfs)
    十天精通CSS3(6)
    十天精通CSS3(5)
  • 原文地址:https://www.cnblogs.com/realhope/p/4312832.html
Copyright © 2011-2022 走看看