3.8.2 考勤模块(3)
通过上述代码为初始化的设置,其中设定了列表控件的标题和风格,通过InsertItem( )函数设置列表控件第1列的数据、SetItemText()函数设置对其他列的数据。
(3) 通过类向导为列表控件添加LVN_ITEMCHANGED消息响应函数。OnItemchangedList1( )函数代码如下:
- void CCheckInfoDlg::OnItemchangedList1(NMHDR*
- pNMHDR, LRESULT* pResult)
- {
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- int nSelect = pNMListView->iItem;
- //获取列表控件行索引
- m_strID = m_ListCrtl.GetItemText(nSelect, 1);
- //获取列表控件文本
- CString strDate = m_ListCrtl.GetItemText(nSelect, 0);
- int nIndex = strDate.Find('-');
- //查找字符'-'的位置
- CString str = strDate.Left(nIndex);
- //取索引左边的字符串
- int Year = atoi(str);
- //字符型转换为整型
- strDatestrDate = strDate.Right(strDate.GetLength()
- - nIndex - 1);
- nIndex = strDate.Find('-');
- str = strDate.Left(nIndex);
- int Month = atoi(str);
- strDatestrDate = strDate.Right(strDate.GetLength()
- - nIndex - 1);
- int Day = atoi(strDate);
- m_Date.SetDate(Year, Month, Day);
- //设置时间
- UpdateData(FALSE);
- *pResult = 0;
- }
在上述代码中,通过鼠标单击列表控件的位置获取员工的ID与时间,将数据显示在编辑框中,其中涉及DateTimePicker控件时间的设置。通过字符串的截取,把年月日放在三个整型变量中,再通过函数SetDate( )设置DateTimePicker控件的时间。
(4) 自定义函数ShowListData( )用来显示列表控件中的数据,代码如下:
- void CCheckInfoDlg::ShowListData(const CString& sql)
- {
- m_ListCrtl.DeleteAllItems();
- //删除列表控件所有项
- try
- {
- m_pRecordset = theApp.m_pConnection->Execute
- ((_bstr_t)sql, NULL, adCmdText);
- int i = 0;
- while(!m_pRecordset->adoEOF)
- //如果记录没有到末尾
- {
- m_ListCrtl.InsertItem(i,(char*)_bstr_t
- (m_pRecordset->GetCollect (_variant_t((long)0))));
- for(int j = 1; j < 9; j++)
- m_ListCrtl.SetItemText(i,j,(char*)_bstr_t
- (m_pRecordset->GetCollect (_variant_t((long)j))));
- i++;
- m_pRecordset->MoveNext();
- //移动到下一条记录
- }
- }
- CATCH_ERROR;
- }
在上述代码中,函数ShowListData( )的参数为SQL语句,根据SQL语句查询相应的数据,将数据插入到列表控件中。将参数设定为SQL语句可以满足从不同的表中查询数据添加到一个列表控件中。给"查询"按钮添加消息响应函数,完成数据的查询,代码如下:
- void CCheckInfoDlg::OnIndex()
- {
- UpdateData();
- //数据的获取
- if(m_strID == "")
- //条件的判断
- {
- MessageBox("请出入查询条件!");
- return ;
- }
- CString strSQL, strDate;
- //定义字符串变量
- strDate.Format("%d-%d-%d", m_Date.GetYear(),
- m_Date.GetMonth(), m_Date. GetDay());
- strSQL.Format("select * from checkinfo where
- id = %s and date = '%s'", m_strID, strDate);
- ShowListData(strSQL);
- //显示列表控件中的数据
- }
在上述代码中,通过借助Format( )函数构造查询的SQL语句,将构造好的SQL语句通过参数的形式传递给ShowListData( ),将数据添加到列表控件中。
(5) 给"删除"按钮添加消息响应函数,该函数的功能是完成考勤记录的删除。具体实现代码如下所示:
- void CCheckInfoDlg::OnDel()
- {
- if(m_strID == "")
- //条件的判断
- {
- MessageBox("请选择一条记录!");
- //信息提示
- return ;
- }
- if(MessageBox("确定删除吗?", "注意", MB_YESNO) == IDYES)
- {
- CString strSQL, strDate;
- //定义字符串变量
- strDate.Format("%d-%d-%d", m_Date.GetYear(),
- m_Date.GetMonth(), m_Date. GetDay());
- strSQL.Format("delete from checkinfo where
- id = %s and date = '%s'", m_strID, strDate);
- try
- {
- //执行删除记录操作
- theApp.m_pConnection->Execute
- ((_bstr_t)strSQL, NULL, adCmdText);
- ShowListData("select * from checkinfo");
- //列表更新显示
- }
- CATCH_ERROR;
- }
- }
在上述代码中,Format( )函数构造了删除SQL语句,通过Execute( )函数执行SQL语句删除选择的数据,重新构造查询的SQL语句将所有数据显示在列表控件中。
2006年10月21日,深夜
今天考勤模块的工作全部完成。考勤管理模块并没有涉及复杂的技术,对考勤的管理是通过对相应的数据表的插入数据来实现的。考勤的统计与查询也是通过SQL语句来实现的,具体是执行"insert into 表名 values(值)"语句实现插入操作。该界面采用了一组单选按钮来实现考勤人员考勤的各个环节设定,而具体缺勤情况则是通过复选框实现的。总结完毕之后,我决定早点休息,为接下来的工资模块做准备。