7.6.5 整条线路维护的实现(2)
第50~67行代码实现了当数据表中有数据时对应的操作。
已经添加了起始站和终点站两个站点,还需要添加其他的站点。在上述代码中当只有站点的编辑框为可用的状态时,通过不断在站点编辑框中添加数据完成线路中所有站点的添加。
下面介绍删除一条线路的实现过程。添加一个对话框资源,将ID号修改为IDD_DEL_ ROADWAY,添加如图7-26所示的控件。
|
| 图7-26 删除线路界面 |
在对话框界的空白区域双击,进入添加类界面。为对话框资源创建一个新类DelRoadway,通过类向导为控件关联相关的变量,并给对话框添加初始化消息WM_INITDIALOG,对应的函数OnInitDialog()中的代码如下:
代码位置:见光盘中本章源代码的DelRoadway类。
- 1 BOOL DelRoadway::OnInitDialog()
- 2 {
- 3 CDialog::OnInitDialog();
- 4 int i=0; //定义整型变量
- 5 m_list.SetTextColor(RGB(0,0,255)); //设置列表文本的颜色
- 6 RECT rect;
- 7 m_list.GetWindowRect(&rect);
- 8 int wid=rect.right-rect.left;
- 9 DWORD style=m_list.GetExtendedStyle(); //获取控件的类型
- 10 m_list.SetExtendedStyle(style|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
- 11 m_list.InsertColumn(0,"车次",LVCFMT_CENTER,wid);
- 12 CBusSet m_busset; //定义记录集对象
- 13 if(!m_busset.IsOpen()) //打开记录集
- 14 m_busset.Open();
- 15 m_busset.MoveFirst(); //移动到首条记录
- 16 while(!m_busset.IsEOF()) //遍历记录集
- 17 {
- 18 m_list.InsertItem(i++,m_busset.m_ID_BUS);
- 19 m_busset.MoveNext(); //移动到下一条记录
- 20 }
- 21 m_busset.Close(); //关闭记录集
- 22 return TRUE;
- 23 }
第5~11行代码为列表控件的初始化工作。
第12~21行代码将线路的信息添加到列表控件中。
上述代码完成了初始化工作,把所有车次的名称插入到列表控件中。给【删除】按钮添加消息响应函数,实现删除选择的线路。同时要把操作写入日志中。其中的代码如下:
代码位置:见光盘中本章源代码的DelRoadway类。
- 1 void DelRoadway::OnDel()
- 2 {
- 3 CString str;
- 4 int CurSel=m_list.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED); //获取下个子项的索引
- 5 str=m_list.GetItemText(CurSel,0); //获取列表控件的文本
- 6 CBusSet m_busset; //定义记录集对象
- 7 if(!m_busset.IsOpen()) //打开记录集
- 8 m_busset.Open();
- 9 m_busset.MoveFirst(); //移动到首条记录
- 10 while(!m_busset.IsEOF()) //变量记录集
- 11 {
- 12 if(m_busset.m_ID_BUS==str)
- 13 {
- 14 m_busset.Delete(); //删除数据
- 15 MessageBox("删除成功!");
- 16 … //省略添加日志代码
- 17 break;
- 18 }
- 19 else
- 20 m_busset.MoveNext(); //移动到下一条记录
- 21 }
- 22 m_busset.Close();
- 23 CStationSet m_StationSet; //定义记录集对象
- 24 if(!m_StationSet.IsOpen()) //打开记录集
- 25 m_StationSet.Open();
- 26 m_StationSet.MoveFirst(); //移动到首条记录
- 27 while(!m_StationSet.IsEOF()) //遍历记录集
- 28 {
- 29 if(m_StationSet.m_ID==str)
- 30 {
- 31 m_StationSet.Delete();
- 32 m_StationSet.MoveNext(); //记录后移
- 33 }
- 34 else
- 35 m_StationSet.MoveNext(); //记录后移
- 36 }
- 37 m_StationSet.Close(); //关闭记录集
- 38 m_list.DeleteAllItems(); //删除列表的所有项
- 39 int i=0;
- 40 if(!m_busset.IsOpen())
- 41 m_busset.Open();
- 42 m_busset.MoveFirst();
- 43 while(!m_busset.IsEOF()) //如果没到最后一条
- 44 {
- 45 m_list.InsertItem(i++,m_busset.m_ID_BUS);
- 46 m_busset.MoveNext(); //记录后移
- 47 }
- 48 m_busset.Close();
- 49 }
第3~5行代码实现了获取组合框中用户选项的线路。
第10~22行代码实现了线路的删除操作。
第23~36行代码实现了站点记录集中对应线路的删除操作。
第38~47行代码为列表控件数据的更新。
上述代码中首先获取用户选择的线路名称,通过遍历记录集查找到当前车次在记录集中的位置,删除该数据,在用户日志中记录用户的操作,由于车次的信息在其他的表中也存在,所以还应删除其他表中相关的信息。