3.8.2 考勤模块(2)
(5) 给"加班"按钮添加消息函数,实现加班对话框界面的显示,完成员工加班信息的统计,具体设计界面如图3-11所示。
|
| 图3-11 加班管理界面 |
(6) 双击图3-11所示的对话框,创建一个新类COverTimeDlg,通过类向导为控件关联相应的变量。添加WM_INITDIALOG消息响应函数OnInitDialog,代码如下:
- BOOL COverTimeDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- m_Type.SetCurSel(0);
- //获取组合框选项
- return TRUE;
- }
(7) 加班的具体实现在CCheckManageDlg中完成,加班按钮的消息响应函数如下:
- void CCheckManageDlg::OnOvertime()
- {
- COverTimeDlg dlg;
- //定义对话框对象
- UpdateData();
- //数据的获取
- if(dlg.DoModal() == IDOK)
- //如果单击确定按钮
- {
- CString strSQL;
- //定义字符串变量
- CTime time = CTime::GetCurrentTime();
- //获取当前系统的时间
- CString strTime = time.Format("%Y-%m-%d");
- //将时间放到字符串中
- switch(dlg.m_nType)
- {
- case 0:
- strSQL.Format("update checkinfo set
- ot1 = %d //构造修改操作语句
- where id = %s and date = '%s'",
- dlg.m_nHour, m_strID, strTime);
- break;
- case 1:
- strSQL.Format("update checkinfo set ot2 = %d
- where id = %s and date = '%s'",
- dlg.m_nHour, m_strID, strTime);
- break;
- case 2:
- strSQL.Format("update checkinfo set ot3 = %d
- where id = %s and date = '%s'",
- dlg.m_nHour, m_strID, strTime);
- break;
- }
- try
- {
- //执行SQL语句
- theApp.m_pConnection->Execute
- ((_bstr_t)strSQL, NULL, adCmdText);
- }
- CATCH_ERROR;
- }
通过上述代码实现了对员工加班时间的设定,通过GetCurrentTime( )获取当前的系统时间。m_nType为加班的类型,根据用户选择加班的类型,设置相应的加班时间,将数据添加到数据库中,在这里插入数据时需要员工的ID及时间进行匹配。
2. 考勤统计处理
(1) 创建一个对话框资源ID为IDD_CHECK_INFO_DLG,添加的控件如图3-12所示。
|
| 图3-12 考勤信息管理 |
(2) 双击对话框,创建一个新类CCheckInfoDlg,通过类向导为控件关联相应的变量。添加WM_INITDIALOG消息响应函数 OnInitDialog( ),代码如下:
- BOOL CCheckInfoDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- m_pRecordset.CreateInstance("ADODB.Recordset");
- //创建记录集实例
- m_ListCrtl.SetExtendedStyle(LVS_EX_GRIDLINES |
- LVS_EX_FULLROWSELECT );
- m_ListCrtl.InsertColumn(0, "日期", LVCFMT_CENTER, 80);
- //风格设定
- m_ListCrtl.InsertColumn(1, "员工ID", LVCFMT_CENTER, 60);
- m_ListCrtl.InsertColumn(2, "缺勤", LVCFMT_CENTER, 40);
- m_ListCrtl.InsertColumn(3, "早退", LVCFMT_CENTER, 40);
- m_ListCrtl.InsertColumn(4, "迟到", LVCFMT_CENTER, 40);
- m_ListCrtl.InsertColumn(5, "休息", LVCFMT_CENTER, 40);
- m_ListCrtl.InsertColumn(6, "病假", LVCFMT_CENTER, 40);
- m_ListCrtl.InsertColumn(7, "出差", LVCFMT_CENTER, 40);
- m_ListCrtl.InsertColumn(8, "事假", LVCFMT_CENTER, 40);
- m_ListCrtl.InsertColumn(9, "备注", LVCFMT_CENTER, 120);
- CString strSQL;
- //定义字符串变量
- strSQL.Format("select * from checkinfo ");
- try
- {
- m_pRecordset = theApp.m_pConnection->Execute
- ((_bstr_t)strSQL, 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;
- return TRUE;
- }