7.6.4 单个站点维护的实现(2)
第6~14行代码为删除相应的记录。
第16~29行代码将用户的操作添加到日志中。
删除站点的信息时注意要删除的是某个车次的站点的信息,而不是所有车次的站点,所以删除记录时首先获取车次名称,然后获取站点的名称,通过遍历记录集查找到相应的信息,调用函数Delete()删除记录。
要实现单个站点的修改,再添加一个对话框资源,将ID改为IDD_CHANGE_STATION,添加如图7-24所示的控件。
|
| 图7-24 修改站点信息界面 |
双击对话框界面为对话框资源创建一个新类ChangeStation,通过类向导为控件关联相关的变量,并给对话框添加WM_INITDIALOG初始化消息,该消息函数中代码如下:
代码位置:见光盘中本章源代码的ChangeStation类。
- 1 BOOL ChangeStation::OnInitDialog()
- 2 {
- 3 CDialog::OnInitDialog();
- 4 CBusSet m_busset; //定义记录集对象
- 5 int i=0; //定义整型变量
- 6 if(!m_busset.IsOpen()) //打开记录集
- 7 m_busset.Open();
- 8 m_busset.MoveFirst(); //移动到首条记录
- 9 while(!m_busset.IsEOF()) //遍历记录集
- 10 {
- 11 m_roadway.InsertString(i++,m_busset.m_ID_BUS); //插入数据到下拉列表框
- 12 m_busset.MoveNext();
- 13 }
- 14 m_roadway.SetCurSel(0); //设置选中项
- 15 m_busset.Close(); //关闭记录集
- 16 RECT rect;
- 17 m_list.GetWindowRect(&rect); //区域的获取
- 18 int wid=rect.right-rect.left;
- 19 m_list.InsertColumn(0,"车次",LVCFMT_CENTER,wid/3);
- 20 m_list.InsertColumn(1,"站点",LVCFMT_CENTER,2*wid/3);
- 21 CString str; //定义字符串变量
- 22 m_roadway.GetLBText(0,str); //获取文本
- 23 i=0;
- 24 CStationSet m_StationSet; //定义记录集对象
- 25 if(!m_StationSet.IsOpen()) //打开记录集
- 26 m_StationSet.Open();
- 27 m_StationSet.MoveFirst();
- 28 while(!m_StationSet.IsEOF()) //遍历记录集
- 29 {
- 30 if(m_StationSet.m_ID==str)
- 31 {
- 32 m_list.InsertItem(i,str); //插入数据到列表中
- 33 m_list.SetItemText(i++,1,m_StationSet.m_STATION);
- 34 }
- 35 m_StationSet.MoveNext();
- 36 }
- 37 m_StationSet.Close(); //关闭记录集
- 38 m_list.SetExtendedStyle(WS_CHILD|WS_CLIPSIBLINGS|WS_EX_TOOLWINDOW|
- 39 WS_BORDER|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); //修改其样式
- 40 return TRUE;
- 41 }
第6~14行代码为添加数据到组合框中。
第17~20行代码为设置列表控件的初始信息。
第25~37行代码将初始数据添加到列表控件中。
上述代码完成初始化工作,首先填充组合框,然后初始化列表控件,将组合框中车次经过的站点显示在列表控件中。
给【确定】按钮添加消息响应函数,实现修改选择的站点。同时要把操作写入日志中。其中的代码如下:
代码位置:见光盘中本章源代码的ChangeStation类。
- 1 void ChangeStation::OnChangeStation()
- 2 {
- 3 int i=0; //定义整型变量
- 4 CString str1,str; //定义字符串变量
- 5 m_roadway.GetLBText(m_roadway.GetCurSel(),str1); //获取文本
- 6 CDatabase *m_datebase;
- 7 m_datebase=new CDatabase; //初始化
- 8 CStationSet *m_Set;
- 9 m_Set=new CStationSet(m_datebase); //数据库与记录集关联
- 10 m_Set->Open(); //打开记录集
- 11 str.Format("delete from STATION where ID='%s'",str1); //设置SQL语句
- 12 m_datebase->ExecuteSQL(str); //执行SQL语句
- 13 m_Set->Requery(); //刷新
- 14 CStationSet m_StationSet;
- 15 if(!m_StationSet.IsOpen())
- 16 m_StationSet.Open();
- 17 m_StationSet.AddNew(); //添加新的记录
- 18 do
- 19 {
- 20 m_StationSet.m_ID=m_list.GetItemText(i,0);
- 21 m_StationSet.m_STATION=m_list.GetItemText(i++,1);
- 22 }while(i<m_list.GetItemCount());
- 23 m_StationSet.Update(); //更新数据
- 24 m_StationSet.Requery();
- 25 CMapPublicApp *app=(CMapPublicApp *)AfxGetApp(); //获取应用类的指针
- 26 CAction_Time_Set *m_ActionSet;
- 27 CDatabase *db;
- 28 db=new CDatabase;
- 29 m_ActionSet=new CAction_Time_Set(db);
- 30 CString strSql;
- 31 CTime time=CTime::GetCurrentTime(); //获取当前的系统时间
- 32 CString strtime=time.Format("%Y-%m-%d %H:%M:%S");
- 33 m_ActionSet->Open();
- 34 CString straction="修改一个站点";
- 35 strSql="insert into Action_Log(USER_ID,ACTION,COME_LEAVE_TIME)
- 36 values('" +app->m_User_ID+"','"+straction+"','"+strtime+"')";
- 37 db->ExecuteSQL(strSql); //执行SQL语句
- 38 m_ActionSet->Requery();
- 39 m_ActionSet->Close();
- 40 AfxMessageBox("修改记录成功!");
- 41 m_StationSet.Close();
- 42 }
第6~12行代码为删除以前站点的信息。
第14~24行代码为添加新的站点信息到数据表中。
第25~39行代码将用户的操作添加到日志中。
上述代码中通过构造SQL语句删除线路的信息,然后获取列表中的所有数据,将修改后的站点信息重新添加到数据库中,最后完成用户日志的添加。