3.8.2 考勤模块(1)
2006年10月20日,上午
今天开始设计考勤模块。考勤模块是为了辅助实现员工工资统计模块而设计的,只有正确地对员工的考勤进行统计才能精确地计算员工的工资。由此可见,此模块在系统中起着至关重要的作用,良好的考勤模块设计会为员工的工资统计带来方便。考勤管理模块功能主要是对员工进行迟到、缺勤、出差及休息等方面的考勤,其中缺勤具体又分为迟到、早退、病假和事假几种情况。另外,还有加班事项也作为考勤的一个环节。将考勤的信息添加到数据库中,用户可以对考勤的信息进行统计,也可以对考勤的信息进行查询。
1. 考勤管理
(1) 创建一个对话框资源ID为IDD_CHECK_MANAGE_DLG,在对话框上添加如图3-10所示的控件。
|
| 图3-10 考勤管理控件 |
(2) 双击对话框,创建一个新类CCheckManageDlg,通过类向导为控件关联相应的变量。添加WM_INITDIALOG消息响应函数OnInitDialog( ),代码如下:
- BOOL CCheckManageDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- m_pRecordset.CreateInstance("ADODB.Recordset");
- GetDlgItem(IDC_CHECK1)->EnableWindow(FALSE);
- //复选框没有选中
- GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE);
- GetDlgItem(IDC_CHECK3)->EnableWindow(FALSE);
- GetDlgItem(IDC_CHECK4)->EnableWindow(FALSE);
- m_Radio.SetCheck(1);
- //第一个单选按钮被选中
- return TRUE
- }
通过上述代码完成了初始化工作,EnableWindow( )函数控制空间的禁用与恢复, SetCheck( )函数设置单选按钮处于选中的状态。
(3) 给"确定"按钮添加消息响应函数,该函数的功能是完成员工考勤情况的添加,代码如下:
- void CCheckManageDlg::OnSure()
- {
- UpdateData();
- //数据的更新
- if(m_strID == "")
- //条件的判断
- {
- MessageBox("请输入员工号!");
- //信息的输出
- return ;
- }
- CString strSQL;
- //定义字符串变量
- _variant_t va;
- strSQL.Format("select count(*) from emp
where [id] = %s", m_strID); - try
- {
- m_pRecordset = theApp.m_pConnection->
- Execute((_bstr_t)strSQL, NULL, adCmdText);
- va = m_pRecordset->GetCollect(_variant_t
- ((long)0)); //获取记录集的结果
- if(va.iVal == 0)
- {
- MessageBox("没有此员工!");
- return ;
- }
- }
- CATCH_ERRO
上述代码借助了Format( )函数,通过"select count(*) from 表名 where 条件",构造从表中查询符合条件数据总数的SQL语句。这是常用的查询总数的SQL语句,希望读者可以熟练地掌握运用。
(4) 通过SQL语句实现向表中添加记录,实现代码参考如下:
- CTime time = CTime::GetCurrentTime();
- //获取当前的系统时间
- CString strTime = time.Format("%Y-%m-%d");
- CString strYM = time.Format("%Y-%m");
- if(m_nFlag == 1)
- //标记的判断
- {
- if(m_Check1 == 1)
- m_strState[2] = "是";
- else
- m_strState[2] = "否";
- if(m_Check2 == 1)
- m_strState[1] = "是";
- else
- m_strState[1] = "否";
- }
- if(m_nFlag == 2)
- {
- if(m_Check3 == 1)
- m_strState[4] = "是";
- else
- m_strState[4] = "否";
- if(m_Check4 == 1)
- m_strState[6] = "是";
- else
- m_strState[6] = "否";
- }
- strSQL.Format("insert into checkinfo values
- ('%s', '%s', '%s', '%s', '
- //构造插入的SQL语句
- %s', '%s', '%s', '%s', '%s', '%s', '%s', 0, 0, 0)",
- strTime, m_strID, m_strState[0],
- m_strState[1], m_strState[2],
- m_strState[3], m_strState[4],
- m_strState[5], m_strState[6], m_strMore, strYM);
- try
- { //执行SQL语句
- theApp.m_pConnection->Execute((_bstr_t)strSQL,
- NULL, adCmdText);
- m_strID = "";
- for(int i = 0; i < 7; i++)
- m_strState[i] = "否";
- MessageBox("添加成功!");
- }
- CATCH_ERROR;
- UpdateData(FALSE); //输出结果
- }
通过上述代码,将考勤的状态添加到数据库中,并通过m_nFlag判断单击了哪个单选按钮,再通过m_strstate数组判断选择了几个复选框,构造SQL将数据插入到数据库中。