7.5.5 公交换乘的实现(2)
在对话框界面上空白区域双击,进入添加类对话框。为对话框创建一个新类CTransView。通过类向导更改控件的ID为控件添加相应的变量,添加WM_INITDIALOG消息响应函数OnInitDialog()代码如下:
代码位置:见光盘中本章源代码的CTransView类。
- 1 BOOL CTransView::OnInitDialog()
- 2 {
- 3 CPropertyPage::OnInitDialog();
- 4 CStationSet m_stationSet; //定义记录集对象
- 5 int i=0; //定义整型变量
- 6 m_stationSet.Open(); //打开记录集
- 7 m_stationSet.MoveFirst(); //移动到首条记录
- 8 while(!m_stationSet.IsEOF()) //遍历记录集
- 9 {
- 10 m_start.InsertString(i,m_stationSet.m_STATION); //插入数据到列表框中
- 11 m_end.InsertString(i,m_stationSet.m_STATION);
- 12 i++;
- 13 m_stationSet.MoveNext(); //移动到下一条记录
- 14 }
- 15 m_stationSet.Close(); //关闭记录集
- 16 m_start.SetCurSel(1);
- 17 m_end.SetCurSel(5); //设置当前选项
- 18 return TRUE;
- 19 }
第4~15行代码从数据库中查找数据插入到组合框中。
第16、17行代码设置组合框的默认选中项。
上述代码完成了初始化工作,将所有站点的名称插入到开始站点和终点站这两个组合框中。给【查询】按钮添加消息响应函数,其中的代码如下:
代码位置:见光盘中本章源代码的CTransView类。
- 1 void CTransView::OnButFind()
- 2 {
- 3 CWnd *pwnd;
- 4 CMapPublicApp *app=(CMapPublicApp *)AfxGetApp(); //获取应用类指针
- 5 app->m_show="";
- 6 pwnd=GetDlgItem(IDC_EDIT_SCHEME); //获取控件的指针
- 7 m_scheme="";
- 8 UpdateData(false); //更新数据
- 9 CString start,end;
- 10 m_start.GetLBText(m_start.GetCurSel(),start); //获取文本
- 11 m_end.GetLBText(m_end.GetCurSel(),end);
- 12 if(start!=end) //起始站和终点站不同
- 13 {
- 14 if(m_InfoMation.Query(pwnd,start,end)) //查询
- 15 {
- 16 m_scheme=app->m_show;
- 17 UpdateData(false); //显示结果
- 18 }
- 19 }
- 20 else
- 21 AfxMessageBox("起始站和终点站不能相同!");
- 22 }
第3~4行代码为获取应用类的指针。
第9~11行代码为获取下拉框中的文本。
上述代码执行公交线路的查询,通过函数GetLBText()获取开始站和终点站,最终调用函数Query()完成公交的换乘。
上面的代码很简单,读者也许会有疑问,公交换乘的算法是怎样实现的呢?请注意上述代码中的一个函数的调用m_InfoMation.Query(),这就是关键所在。