7.5.5 公交换乘的实现(4)
第10~18行代码为查找开始站的信息。
第19~25行代码为查找终点站的情况。
第24~36行代码为确定最佳的线路。
上述代码中先通过遍历记录集找出包含开始站和终点站的线路,将信息保存在m_BusInfo数组中,然后比较m_BusInfo数组的信息。如果相同,表示两个站点在同一条线路中,则为最佳线路。函数BestMode()实现寻求最优的方案。该函数中代码如下:
代码位置:见光盘中本章源代码的CInfoMatio类。
- 1 CString CInfoMation::BestMode()
- 2 {
- 3 int n=m_BusRoad[0].Number,j=m_BusRoad[0].Precept; //定义整型变量
- 4 for(int i=0;i<Num_BusRoad;i++)
- 5 {
- 6 if(m_BusRoad[i].Number<n) //条件的判断
- 7 {
- 8 n=m_BusRoad[i].Number; //查找路线
- 9 j=m_BusRoad[i].Precept;
- 10 }
- 11 }
- 12 CString str; //定义字符串变量
- 13 str.Format("%d",j); //格式化操作
- 14 return str; //返回值
- 15 }
第4~11行代码为比较乘车方案。
第12~14行代码为返回最佳的乘车方案。
上述代码中由于m_BusRoad数组中保存着符合条件的线路信息,通过在这些线路中循环找到起始站点和终点站间站点最少的线路,这条线路为最佳线路,生成乘车方案。函数Num_Station()实现计算同一条路线两点间站点数。该函数其中代码如下所示:
代码位置:见光盘中本章源代码的CInfoMatio类。
- 1 int CInfoMation::Num_Station(CString s_start,CString roadway,CString s_end)
- 2 {
- 3 CStationSet m_StationSet; //定义记录集对象
- 4 bool flag=false; //定义布尔型变量
- 5 Init(); //初始化函数
- 6 if(!m_StationSet.IsOpen()) //打开记录集
- 7 m_StationSet.Open();
- 8 m_StationSet.MoveFirst(); //移动到首条记录
- 9 while(!m_StationSet.IsEOF()) //遍历记录集
- 10 {
- 11 if(m_StationSet.m_ID==roadway) //查找路线
- 12 {
- 13 if(m_StationSet.m_STATION==s_start||m_StationSet.m_STATION
- ==s_end)
- 14 flag=!flag;
- 15 if(flag)
- 16 busnum++;
- 17 }
- 18 m_StationSet.MoveNext(); //移动到下一条记录
- 19 }
- 20 m_StationSet.Close(); //关闭记录集
- 21 return busnum;
- 22 }
第3~8行代码进行初始化操作。
第9~20行代码为计算同一条线路两个站间的站点数。