• 一个linux下c++程序


      1#include "/ty_code/common/libyfun/libyfun.h"
      2//#include "libyfun.h"
      3#include "tjpro.h"
      4#include <time.h>
      5#include <stdio.h>
      6#include <memory.h>
      7#include <pthread.h>
      8
      9GBLPARAM gb;//公有变量
     10
     11void Init()
     12{
     13    //得到调试信息
     14 
     15 gb.is_debug = 1;
     16 gb.debug_level = 3;
     17 strcpy (gb.log_file, "/ty/log/tjpro.log");
     18 
     19}

     20
     21int gethour()
     22{
     23    time_t timep;
     24    struct tm *p;
     25    time(&timep);
     26    p= localtime(&timep);
     27    return  p->tm_hour;
     28
     29}

     30
     31int datapro()
     32{
     33  yCMysql da;
     34  if(0 == da.Login("127.0.0.1","","",""))  //连接数据库
     35  {
     36  DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro login db fail!!\n");
     37  return 0;
     38
     39  }

     40  char sql[500];
     41  memset(sql,0,500);
     42
     43
     44  time_t m_ltime;
     45  time(&m_ltime); 
     46  time_t m_btime;
     47  time_t m_mtime;
     48  m_btime = m_ltime - 86400;
     49  m_mtime=m_ltime-300;  //显示0点前一天的日期
     50  time_t m_tmtime;
     51  m_tmtime = m_ltime - 5184000//60天以前
     52
     53  //删除60天以前的记录
     54  sprintf(sql,"delete from tab_sxxrz where sjsj < %ld",m_tmtime);  
     55  if(da.QueryWrite(sql) == 0)
     56  {
     57 da.Logout();
     58 DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_sxxrz QueryWrite %s fail!!\n",sql);
     59 return 0;
     60  }

     61
     62  memset(sql,0,500);
     63  sprintf(sql,"delete from tab_dxbj where dxsj < %ld",m_tmtime);  
     64  if(da.QueryWrite(sql) == 0)
     65  {
     66 da.Logout();
     67 DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_dxbj QueryWrite %s fail!!\n",sql);
     68 return 0;
     69  }

     70
     71
     72  memset(sql,0,500);
     73  sprintf(sql,"delete from tab_gkrz where tjsj < %ld",m_tmtime);  
     74  if(da.QueryWrite(sql) == 0)
     75  {
     76 da.Logout();
     77 DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_gkrz QueryWrite %s fail!!\n",sql);
     78 return 0;
     79  }

     80
     81  memset(sql,0,500);
     82  sprintf(sql,"delete from tab_kkbj where tjsj < %ld",m_tmtime);  
     83  if(da.QueryWrite(sql) == 0)
     84  {
     85 da.Logout();
     86 DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tab_kkbj QueryWrite %s fail!!\n",sql);
     87 return 0;
     88  }

     89
     90
     91   ////统计开卡
     92  memset(sql,0,500);
     93  sprintf(sql,"select dwbh,count(dwbh) as kks from tab_kk where sfyx = 1 and kksj>=%ld and kksj<%ld group by dwbh",m_btime,m_ltime);  //统计0点以前24小时
     94  if(da.QueryRead(sql) == 0)
     95 {
     96  da.Logout();    //关闭连接
     97        DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead1 %s fail!!\n",sql);
     98  return 0;
     99 }

    100   int k = da.GetRowNum();
    101   if(k > 0)
    102 {  
    103    char temp[1000][30];    //最高1000家网吧开卡
    104    memset(temp,0,1000*30*sizeof(char));
    105    for(int i=0;i<k;i++)
    106    {
    107   da.GetRow();
    108   sprintf(temp[i],"%s,%s",da.row[0],da.row[1]);
    109    }

    110    da.FreeResult();
    111  for (int j=0;j<k;j++)
    112  {
    113   // da.GetRow();
    114   char m_dwbh[15={0};
    115   char m_kks[15={0};
    116   char *= temp[j];
    117   char *pt = temp[j];
    118      while(1)
    119   {
    120     if(*==',')
    121     {
    122       *= '\0';
    123       sprintf(m_dwbh,"%s",pt);
    124       p++;
    125       pt = p;
    126     }

    127     else if(*== '\0')
    128     {
    129       sprintf(m_kks,"%s",pt);
    130       break;
    131     }

    132     else
    133      p++;
    134    
    135             }

    136
    137    
    138    if(atoi(m_kks) > 5)   //网吧开卡数大于5张不进行统计,并删除原来当天的报警项
    139    {
    140                   memset(sql,0,500);
    141       sprintf(sql,"delete from tab_kkbj where tjsj >= %ld and dwbh = %s",m_btime,m_dwbh);  
    142       if(da.QueryWrite(sql) == 0)
    143       {
    144         da.Logout();    //关闭连接
    145         DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite %s fail!!\n",sql);
    146         return 0;
    147       }

    148          continue;
    149    }

    150
    151    memset(sql,0,500); 
    152    sprintf(sql,"select dwbh from tab_kkbj where tjsj >= %ld and dwbh = %s",m_btime,m_dwbh);  //查询开卡报警表中是否有今天网吧记录
    153    if(da.QueryRead(sql) == 0)
    154    {
    155     da.Logout();    //关闭连接
    156     DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead2 %s fail!!\n",sql);
    157     return 0;
    158    }

    159    if(da.GetRowNum() >0)
    160    {     
    161       memset(sql,0,500);
    162       sprintf(sql,"update tab_kkbj set kks = %s,tjsj = %ld where tjsj >= %ld and dwbh = %s",m_kks,m_mtime,m_btime,m_dwbh);
    163       if(da.QueryWrite(sql) == 0)
    164       {
    165     da.Logout();
    166     DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite1 %s fail!!\n",sql);
    167     return 0;
    168       }

    169    }

    170    else
    171    {
    172       memset(sql,0,500);
    173       sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) values(%s,%s,%ld)",m_dwbh,m_kks,m_mtime);
    174       if(da.QueryWrite(sql) == 0)
    175       {
    176        da.Logout();
    177        DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite2 %s fail!!\n",sql);
    178        return 0;
    179       }

    180    }

    181    da.FreeResult();
    182  }

    183 }

    184
    185
    186 /*
    187  sprintf(sql,"select dwbh from tab_kk where kksj>%ld",m_btime);
    188  if(da.QueryRead(sql) == 0)
    189 {
    190  da.Logout();    //关闭连接
    191        DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);
    192  return 0;
    193 }
    194
    195  if(da.GetRowNum() > 0)
    196 {  
    197    da.FreeResult();
    198       memset(sql,0,500); 
    199    sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) select dwbh,count(dwbh) as kks,%ld as tjsj from tab_kk where kksj>%ld group by dwbh",m_ltime,m_btime);
    200       if(da.QueryWrite(sql) == 0)
    201    {
    202      da.Logout();
    203   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite %s fail!!\n",sql);
    204   return 0;
    205    }
    206 }
    207*/

    208
    209
    210//   统计公卡日志
    211     memset(sql,0,500);
    212  sprintf(sql,"select sl from tab_tjpz where mc='gkcs'");
    213     if(da.QueryRead(sql) == 0)
    214  {
    215  da.Logout();    //关闭连接
    216        DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);
    217  return 0;
    218  }

    219     char gkcs[4= {0};
    220  da.GetRow();
    221  sprintf(gkcs,"%s",da.row[0]);
    222  da.FreeResult();
    223
    224
    225
    226 memset(sql,0,500);
    227    sprintf(sql,"select kh,dwbh,count(kh) as sjcs from tab_sxxrz where sjsj>=%ld group by kh,dwbh",m_btime);
    228    if(da.QueryRead(sql) == 0)
    229 {
    230  da.Logout();    //关闭连接
    231        DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryRead %s fail!!\n",sql);
    232  return 0;
    233 }

    234   int gk = da.GetRowNum();
    235   if(gk > 0)
    236 {  
    237    char tempgk[200000][35];    //最高20万人次
    238    memset(tempgk,0,200000*35*sizeof(char));
    239    for(int i=0;i<gk;i++)
    240    {
    241   da.GetRow();
    242   sprintf(tempgk[i],"%s,%s:%s",da.row[0],da.row[1],da.row[2]);
    243    }

    244    da.FreeResult();
    245  for (int j=0;j<gk;j++)
    246  {
    247   // da.GetRow();
    248   char m_kh[15={0};
    249   char m_dwbh[15={0};
    250   char m_sjcs[15={0};
    251   char *= tempgk[j];
    252   char *pt = tempgk[j];
    253      while(1)
    254    {
    255     if(*==',')
    256     {
    257       *= '\0';
    258       sprintf(m_kh,"%s",pt);
    259       p++;
    260       pt = p;
    261     }

    262     else if(*== ':')
    263     {
    264       *= '\0';
    265       sprintf(m_dwbh,"%s",pt);
    266       p++;
    267       pt = p;
    268     
    269     }

    270     else if(*== '\0')
    271     {
    272      
    273       sprintf(m_sjcs,"%s",pt);
    274       break;
    275     }

    276     else
    277      p++;
    278    
    279             }

    280 
    281   if(atoi(m_sjcs) < atoi(gkcs))
    282   {
    283    continue;
    284   }

    285         sprintf(sql,"insert into tab_gkrz(kh,dwbh,sjcs,tjsj) values('%s',%s,%s,%ld)",m_kh,m_dwbh,m_sjcs,m_mtime);
    286   if(da.QueryWrite(sql) == 0)
    287   {
    288      da.Logout();
    289      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite3 %s fail!!\n",sql);
    290      return 0;
    291   }

    292        
    293           
    294  }

    295   }

    296  /*
    297         sprintf(sql,"insert into tab_gkrz(kh,dwbh,sjcs,tjsj) select kh,dwbh,count(kh) as sjcs,%ld as tjsj from tab_sxxrz where sjsj>%ld group by kh,dwbh",m_mtime,m_btime);
    298   if(da.QueryWrite(sql) == 0)
    299   {
    300      da.Logout();
    301      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"tjpro QueryWrite3 %s fail!!\n",sql);
    302      return 0;
    303   }
    304
    305
    306        */

    307  
    308  da.Logout();
    309  return 1;
    310
    311}

    312
    313void * dxtjpro(void *arg)
    314{
    315
    316
    317 while(1)
    318 {
    319      sleep(298);  //等待5分钟
    320  ////////////
    321      yCMysql da;
    322   if(0 == da.Login("127.0.0.1","","",""))  //连接数据库
    323   {
    324   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro login db fail!!\n");
    325   return 0;
    326   }

    327   char sql[5100];
    328   memset(sql,0,5100);
    329   time_t m_ltime;   //现在的时间
    330   time_t m_btime;
    331   time(&m_ltime); 
    332   m_btime = m_ltime - 300//
    333  
    334  
    335      memset(sql,0,5100);
    336
    337   sprintf(sql,"select dwbh from tab_dxbj where ljsj = 0");
    338   if(da.QueryRead(sql) == 0)
    339  {
    340   da.Logout();    //关闭连接
    341   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead %s fail!!\n",sql);
    342   return 0;
    343  }

    344      int m = da.GetRowNum();
    345   if(m>0)                 
    346   {
    347     char tempdwbh[5000= {0};   //最高500家9位编号 
    348     int k = 0;
    349     for(int n=0;n<m;n++)
    350     {
    351      da.GetRow();
    352      k+=sprintf(tempdwbh+k,"%s,", da.row[0]);
    353     }

    354     tempdwbh[k-1='\0';
    355     da.FreeResult();
    356     memset(sql,0,5100); 
    357     sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj<%ld and dwbh not in(%s))",m_btime,tempdwbh);
    358              if(da.QueryWrite(sql) == 0)
    359     {
    360      da.Logout();
    361      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite %s fail!!\n",sql);
    362      return 0;
    363     }

    364   }

    365   else
    366   {
    367           memset(sql,0,5100); 
    368     sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj<%ld)",m_btime);
    369              if(da.QueryWrite(sql) == 0)
    370     {
    371      da.Logout();
    372      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite %s fail!!\n",sql);
    373      return 0;
    374     }

    375   }

    376
    377
    378
    379     ///在5分钟内有握手的断线编号全部置为连接
    380  memset(sql,0,5100);
    381  sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld",m_btime);
    382  if(da.QueryRead(sql) == 0)
    383  {
    384    da.Logout();    //关闭连接
    385                DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead2 %s fail!!\n",sql);
    386    return 0;
    387  }

    388  int j = da.GetRowNum();
    389  if(j>0)                 
    390  {
    391     char tempCard[5000= {0};
    392     int k = 0;
    393     for(int i=0;i<j;i++)
    394     {
    395      da.GetRow();
    396      k+=sprintf(tempCard+k,"%s,", da.row[0]);
    397     }

    398     tempCard[k-1='\0';
    399     da.FreeResult();
    400     memset(sql,0,500); 
    401     sprintf(sql,"update tab_dxbj set ljsj = %ld where  ljsj = 0 and dwbh in(%s)",m_ltime,tempCard);  
    402     if(da.QueryWrite(sql) == 0)
    403     {
    404      da.Logout();
    405      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite2 %s fail!!\n",sql);
    406      return 0;
    407     }

    408  }

    409     da.Logout();
    410 }

    411
    412  /*
    413
    414/////////////
    415
    416  while(1)
    417  {
    418   sleep(88);  //等待 
    419//   yCMysql da;
    420   if(0 == da.Login("127.0.0.1","operator","operator","dbs_whbzx"))  //连接数据库
    421   {
    422   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro login db fail!!\n");
    423   return 0;
    424
    425   }
    426//   char sql[500];
    427//   memset(sql,0,5100);
    428//   time_t m_ltime;   //现在的时间
    429//   time_t m_btime;
    430   time(&m_ltime); 
    431    time_t m_bbtime;
    432    m_btime = m_ltime - 90; //
    433    m_bbtime = m_ltime - 180; //
    434    
    435    memset(sql,0,5100); 
    436    sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld and wssj<%ld",m_bbtime,m_btime); //90至180新断线
    437    if(da.QueryRead(sql) == 0)
    438  {
    439   da.Logout();    //关闭连接
    440   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead1 %s fail!!\n",sql);
    441   return 0;
    442  }
    443     if(da.GetRowNum() > 0)
    444  {  
    445     memset(sql,0,5100); 
    446     sprintf(sql,"insert into tab_dxbj(dwbh,dxsj,ljsj) (select dwbh,wssj,0 as ljsj from tab_dwzl where wssj>=%ld and wssj<%ld)",m_bbtime,m_btime);  //握手时间前90至180的插入报警表
    447     if(da.QueryWrite(sql) == 0)
    448     {
    449    da.Logout();
    450    DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite1 %s fail!!\n",sql);
    451    return 0;
    452     }
    453  }
    454  da.FreeResult();
    455
    456   ///在90秒内有握手的断线编号全部置为连接
    457  memset(sql,0,5100);
    458  sprintf(sql,"select dwbh from tab_dwzl where wssj>=%ld",m_btime);
    459  if(da.QueryRead(sql) == 0)
    460  {
    461    da.Logout();    //关闭连接
    462                DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryRead2 %s fail!!\n",sql);
    463    return 0;
    464  }
    465  int j = da.GetRowNum();
    466  if(j>0)                 
    467  {
    468     char tempCard[5000] = {0};
    469     int k = 0;
    470     for(int i=0;i<j;i++)
    471     {
    472      da.GetRow();
    473      k+=sprintf(tempCard+k,"%s,", da.row[0]);
    474     }
    475     tempCard[k-1] ='\0';
    476     da.FreeResult();
    477     memset(sql,0,500); 
    478     sprintf(sql,"update tab_dxbj set ljsj = %ld where  ljsj = 0 and dwbh in(%s)",m_ltime,tempCard);  
    479     if(da.QueryWrite(sql) == 0)
    480     {
    481      da.Logout();
    482      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro QueryWrite2 %s fail!!\n",sql);
    483      return 0;
    484     }
    485  } 
    486        da.Logout();
    487   }
    488   */

    489}

    490
    491void * kktjpro(void *arg)
    492{
    493      
    494   char sql[500];
    495   memset(sql,0,500);
    496   time_t m_ltime;   //现在的时间
    497   long m_ttime;    //当日0点的时间
    498   struct tm *p;
    499   time(&m_ltime); 
    500   p = localtime(&m_ltime);
    501   m_ttime =m_ltime - ((p->tm_hour *60*60)+(p->tm_min *60)+(p->tm_sec));
    502//   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"0点时间:%ld!!\n",m_ttime);
    503      
    504    while(1)
    505 {
    506
    507  yCMysql da;
    508     if(0 == da.Login("127.0.0.1","","",""))  //连接数据库
    509  {
    510   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro login db fail!!\n");
    511   return 0;
    512
    513  }

    514  sprintf(sql,"select dwbh,count(dwbh) as kks from tab_kk where sfyx = 1 and kksj>=%ld group by dwbh",m_ttime);  //统计0点以后开卡网吧及开卡数
    515  if(da.QueryRead(sql) == 0)
    516  {
    517   da.Logout();    //关闭连接
    518   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryRead %s fail!!\n",sql);
    519   return 0;
    520  }

    521  int k = da.GetRowNum();
    522  if(k > 0)
    523  {  
    524   char temp[1000][30];   //最高1000家
    525   memset(temp,0,1000*30*sizeof(char));
    526   for(int i=0;i<k;i++)
    527     {
    528    da.GetRow();
    529    sprintf(temp[i],"%s,%s",da.row[0],da.row[1]);
    530     }

    531   da.FreeResult();
    532   for (int j=0;j<k;j++)
    533   {
    534    // da.GetRow();
    535    char m_dwbh[15={0};
    536    char m_kks[15={0};
    537    char *= temp[j];
    538    char *pt = temp[j];
    539    while(1)
    540    {
    541
    542      if(*==',')
    543      {
    544        *= '\0';
    545        sprintf(m_dwbh,"%s",pt);
    546        p++;
    547        pt = p;
    548      }

    549      else if(*== '\0')
    550      {
    551        sprintf(m_kks,"%s",pt);
    552        break;
    553      }

    554      else
    555       p++;
    556     }

    557
    558        if(atoi(m_kks) > 5)   //网吧开卡数大于5张不进行统计,并删除原来当天的报警项
    559     {
    560                   memset(sql,0,500);
    561       sprintf(sql,"delete from tab_kkbj where tjsj >= %ld and dwbh = %s",m_ttime,m_dwbh);  
    562       if(da.QueryWrite(sql) == 0)
    563       {
    564         da.Logout();    //关闭连接
    565         DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);
    566         return 0;
    567       }

    568          continue;
    569     }

    570     memset(sql,0,500); 
    571     sprintf(sql,"select dwbh from tab_kkbj where tjsj >= %ld and dwbh = %s",m_ttime,m_dwbh);  //查询开卡报警表中是否有今天网吧记录
    572     if(da.QueryRead(sql) == 0)
    573     {
    574      da.Logout();    //关闭连接
    575      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryRead %s fail!!\n",sql);
    576      return 0;
    577     }

    578     if(da.GetRowNum() >0)
    579     {     
    580        da.FreeResult();
    581        memset(sql,0,500);
    582        sprintf(sql,"update tab_kkbj set kks = %s,tjsj = %ld where tjsj >= %ld and dwbh = %s",m_kks,m_ltime,m_ttime,m_dwbh);
    583        if(da.QueryWrite(sql) == 0)
    584        {
    585      da.Logout();
    586      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);
    587      return 0;
    588        }

    589     }

    590     else
    591     {
    592        memset(sql,0,500);
    593        sprintf(sql,"insert into tab_kkbj(dwbh,kks,tjsj) values(%s,%s,%ld)",m_dwbh,m_kks,m_ltime);
    594        if(da.QueryWrite(sql) == 0)
    595        {
    596      da.Logout();
    597      DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro QueryWrite %s fail!!\n",sql);
    598      return 0;
    599        }

    600     }

    601   
    602   }

    603  }

    604      da.Logout();
    605   sleep(7200);
    606 }

    607
    608
    609}

    610
    611void main()
    612{
    613 sleep(5); ///暂停五秒等待数据库
    614 Init();
    615    pthread_t id;
    616 int ret = pthread_create(&id,NULL,dxtjpro,NULL);  //创建统计断线线程
    617 if(ret != 0)
    618 {
    619   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"dxtjpro create fail! errcode %d\n",ret);
    620   exit(0) ;
    621 }

    622
    623    pthread_t td;
    624 int m_ret = pthread_create(&td,NULL,kktjpro,NULL);  //创建统计开卡线程
    625 if(m_ret != 0)
    626 {
    627   DEBUG(gb.is_debug,gb.debug_level,gb.log_file,"kktjpro create fail! errcode %d\n",ret);
    628   exit(0) ;
    629 }
      
    630
    631 if(gethour() == 0)  //防止程序在0点至1点重启时进行重复统计
    632 {
    633  sleep(7200); //暂停2个小时
    634 }

    635
    636 while(1)
    637 {
    638      if(gethour() == 0)   //0点统计
    639   {
    640      datapro();   
    641   sleep(7200); //暂停2个小时
    642   }

    643   else 
    644   {
    645     sleep(60);    //暂停1分钟
    646   }

    647 }

    648
    649}

    650
    651
  • 相关阅读:
    Spring1()
    常用的比较器:实现方式Compareable和Comparator
    数据结构 2(数据结构 逻辑关系 存储关系 数据类型 抽象数据类型)
    面试题目
    数据结构(1术语)
    第一次作业-四则运算题目生成程序
    第二次 作业——APP案例分析
    面试题
    字符串转换时间的方法
    安卓获取手机内存,SD卡内存使用状态的方法
  • 原文地址:https://www.cnblogs.com/zjz/p/426590.html
Copyright © 2020-2023  润新知