7.5.5 公交换乘的实现(5)
上述代码中通过参数传递开始站、终点站和线路,通过遍历记录集找到相应的线路,找到开始站时就开始计数,如果站点为终点站时变量flag为false就停止计数,则变量busnum中保存的就是两个站点间的站点数。函数Match()实现对站点进行匹配。其中的代码如下所示:
代码位置:见光盘中本章源代码的CInfoMatio类。
- 1 BOOL CInfoMation::Match(CString percept,CString station)
- 2 {
- 3 CStationSet m_StationSet; //定义记录集对象
- 4 bool flag=false; //定义布尔变量
- 5 if(!m_StationSet.IsOpen()) //打开记录集
- 6 m_StationSet.Open();
- 7 for(int i=0;i<e_road;i++) //路线比较
- 8 {
- 9 m_StationSet.MoveFirst(); //移动到首条记录
- 10 while(!m_StationSet.IsEOF()) //遍历记录集
- 11 {
- 12 if(m_StationSet.m_ID==E_RoadWay[i]&&m_StationSet.m_ID=
- 13 percept&&m_StationSet.m_STATION==station)
- 14 {
- 15 m_percept=m_StationSet.m_ID;
- 16 flag=true; //设置标记
- 17 return 1;
- 18 }
- 19 else
- 20 m_StationSet.MoveNext(); //移动到下一条记录
- 21 }
- 22 }
- 23 if(!flag) //返回值
- 24 return 0;
- 25 else
- 26 return 1;
- 27 }
第7~22行代码为查找匹配站点的信息。
第23~26行代码为函数的返回值。
上述代码中变量e_road保存了所有经过终点站的车次的总数,数组E_RoadWay中保存了经过终点站的所有车次,通过遍历记录集查找符合条件的站点。函数Precept()实现了生成乘车方案。该函数中的代码如下:
代码位置:见光盘中本章源代码的CInfoMatio类。
- 1 BOOL CInfoMation::Precept(CString start,CString end)
- 2 {
- 3 CString str; //定义字符串变量
- 4 CStationSet m_StationSet; //定义记录集对象
- 5 CMapPublicApp *app=(CMapPublicApp *)AfxGetApp(); //获取应用类指针
- 6 if(!m_StationSet.IsOpen()) //打开记录集
- 7 m_StationSet.Open();
- 8 m_StationSet.MoveFirst(); //移动到首条记录
- 9 for(int i=0;i<s_road;i++)
- 10 {
- 11 while(!m_StationSet.IsEOF()) //遍历记录集
- 12 {
- 13 if(m_StationSet.m_ID==S_RoadWay[i]) //查找线路
- 14 {
- 15 if(Match(m_StationSet.m_ID,m_StationSet.m_STATION))
- 16 {
- 17 str.Format("\r\n方案%d: 从%s乘 %s路 到 %s转乘 %s路 到%s下车",
- 18 Num,start,m_StationSet.m_ID,m_StationSet.m_STATION,m_
- percept,end);
- 19 app->m_show+=str;
- 20 m_BusRoad[Num_BusRoad].Precept=Num++;
- 21 m_BusRoad[Num_BusRoad++].Number=
- 22 Dif_StationNum(start,m_StationSet.m_ID,
- 23 m_StationSet.m_STATION,m_percept,end);
- 24 m_percept="";
- 25 break;
- 26 }
- 27 }
- 28 m_StationSet.MoveNext(); //移动到下一条记录
- 29 }
- 30 }
- 31 m_StationSet.Close(); //关闭记录集
- 32 if(str!="")
- 33 return 1;
- 34 else
- 35 return 0;
- 36 }
第9~30行代码为查找信息生成最佳的乘车方案。
第32~35行代码为函数的返回值。
上述代码中变量s_road保存了所有经过开始站的车次的总数,数组S_RoadWay中保存了经过开始站的所有车次,通过遍历记录集查找符合条件的站点,调用函数Match()查看站点是否匹配,生成乘车方案。