设为首页 加入收藏

TOP

7.5.5 公交换乘的实现(3)
2013-10-07 14:53:29 来源: 作者: 【 】 浏览:56
Tags:7.5.5 公交换乘 实现

7.5.5  公交换乘的实现(3)

m_InfoMation是CInfoMation类的一个对象,CInfoMation类实现了公交换乘的算法,下面对CInfoMation类进行介绍,由于本章篇幅的限制,在此只介绍相关的函数,其他函数参见光盘中的源代码。下面介绍CInfoMation类的主要的成员函数。查询函数Query()查询公交换乘的信息。代码如下所示:

代码位置:见光盘中本章源代码的CInfoMatio类。

  1. 1  BOOL CInfoMation::Query(CWnd *pwnd,CString start,CString end)  
  2. 2  {  
  3. 3   Num=0;  
  4. 4   CMapPublicApp *app=(CMapPublicApp *)AfxGetApp();        //获取应用类的指针  
  5. 5   app->m_show="";  
  6. 6   Num_BusRoad=0;                                      //线路的初始化  
  7. 7   s_road=e_road=0;  
  8. 8   if(Same_RoadWay(pwnd,start,end))                        //判断是否是同样车次  
  9. 9   {  
  10. 10          app->m_show+="\r\n推荐方案:方案"+BestMode();          //输出方案  
  11. 11          return 1;  
  12. 12      }  
  13. 13      else  if(!Dif_RoadWay(start,end))  
  14. 14      {  
  15. 15          AfxMessageBox("此方案不存在!");  
  16. 16          return 0;  
  17. 17      }  
  18. 18      app->m_show+="\r\n推荐方案:方案"+BestMode();              //显示最佳方案  
  19. 19      return 1;  
  20. 20  }  

第8~12行代码为显示不需要换车的最佳乘车方案。

第13~18行代码为显示需要转一次车的最佳乘车方案。

上述代码中函数Same_RoadWay()实现判断两个站是否在同一条线路中,如果是则返回TRUE,此时不需要换乘。如果两个站点在不同的线路中,函数Dif_RoadWay()返回FALSE,此时需要换乘公交才能到达目的站,最终调用函数BestMode()显示最佳的行车路线。函数Same_RoadWay()查询两站点是否在相同的车次中。其中的代码如下:

代码位置:见光盘中本章源代码的CInfoMatio类。

  1. 1  BOOL CInfoMation::Same_RoadWay(CWnd *pwnd,CString start,CString end)  
  2. 2  {  
  3. 3   CString str,m_sNum;                                 //定义字符串变量  
  4. 4   CStationSet m_StationSet;                               //定义记录集对象  
  5. 5   CMapPublicApp *app=(CMapPublicApp *)AfxGetApp();        //获取应用类指针  
  6. 6   Init();                                             //初始化函数  
  7. 7   if(!m_StationSet.IsOpen())  
  8. 8       m_StationSet.Open();                                //打开记录集  
  9. 9       m_StationSet.MoveFirst();                           //移动到首条记录  
  10. 10      while(!m_StationSet.IsEOF())                            //遍历记录集  
  11. 11      {  
  12. 12          if(m_StationSet.m_STATION==start)                   //查找开始站点  
  13. 13          {  
  14. 14              startflag=!startflag;                           //标记的设置  
  15. 15              m_BusInfo[0].RoadWay=m_StationSet.m_ID;         //赋值  
  16. 16              m_station=m_StationSet.m_ID;  
  17. 17              m_BusInfo[0].StationName=m_StationSet.m_STATION;  
  18. 18          }  
  19. 19          else if(m_StationSet.m_STATION==end)                //查找终点站  
  20. 20          {  
  21. 21              startflag=!startflag;  
  22. 22              m_BusInfo[1].RoadWay=m_StationSet.m_ID;  
  23. 23              m_station=m_StationSet.m_ID;  
  24. 24              m_BusInfo[1].StationName=m_StationSet.m_STATION;  
  25. 25          }  
  26. 26          if(m_BusInfo[1].RoadWay==m_BusInfo[0].RoadWay)      //同样的线路  
  27. 27          {  
  28. 28              str.Format("\r\n方案%d:从%s乘 %s路 车到%s下车",  
  29. 29                  Num,start,m_BusInfo[0].RoadWay,end);        //构造显示字符串  
  30. 30              app->m_show+=str;  
  31. 31              m_BusRoad[Num_BusRoad].Precept=Num++;  
  32. 32                      m_BusRoad[Num_BusRoad++].Number=busnum;  
  33. 33              Init();  
  34. 34          }  
  35. 35          if(startflag)  
  36. 36          {  
  37. 37              if(m_StationSet.m_ID!=m_station)  
  38. 38                  busnum=0;  
  39. 39              else  
  40. 40                  busnum++;  
  41. 41          }  
  42. 42          m_StationSet.MoveNext();                            //移动到下一条记录  
  43. 43      }  
  44. 44      if(app->m_show!="")                                 //如果查找到目标  
  45. 45          return 1;  
  46. 46      if(m_StationSet.IsEOF())                                //没有查找到站点  
  47. 47      {  
  48. 48          return 0;  
  49. 49      }  
  50. 50      else  
  51. 51          return 1;  
  52. 52  }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇7.5.5 公交换乘的实现(4) 下一篇7.5.5 公交换乘的实现(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: