4.6.3 考勤管理的实现(1)
创建一个对话框资源ID为IDD_CHECK_MANAGE_DLG,在对话框上添加如图4-26所示的控件。
|
| (点击查看大图)图4-26 考勤管理界面设计 |
双击对话框为对话框创建一个新类CCheckManageDlg,通过类向导为控件关联相应的变量。添加WM_INITDIALOG消息响应函数OnInitDialog(),代码如下:
代码位置:见光盘中本章源代码的CCheckManageDlg类。
- 1 BOOL CCheckManageDlg::OnInitDialog()
- 2 {
- 3 CDialog::OnInitDialog();
- 4 m_pRecordset.CreateInstance("ADODB.Recordset");
- 5 GetDlgItem(IDC_CHECK1)->EnableWindow(FALSE);
//复选框没有选中 - 6 GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE);
- 7 GetDlgItem(IDC_CHECK3)->EnableWindow(FALSE);
- 8 GetDlgItem(IDC_CHECK4)->EnableWindow(FALSE);
- 9 m_Radio.SetCheck(1);
//第一个单选按钮被选中 - 10 return TRUE
- 11 }
第5~8行代码设置复选框的状态。
第9行代码设置单选按钮的第一个为选中状态。
上述代码主要完成初始化工作,EnableWindow()函数控制空间的禁用与恢复, SetCheck()函数设置单选按钮处于选中的状态。给【确定】按钮添加消息响应函数,该函数的功能是完成职工考勤情况的添加,代码如下:
代码位置:见光盘中本章源代码的CCheckManageDlg类。
- 1 void CCheckManageDlg::OnSure()
- 2 {
- 3 UpdateData();
//数据的更新 - 4 if(m_strID == "")
//条件的判断 - 5 {
- 6 MessageBox("请输入员工号!");
//信息的输出 - 7 return ;
- 8 }
- 9 CString strSQL;
//定义字符串变量 - 10 _variant_t va;
- 11 strSQL.Format("select count(*) from emp where [id] = %s", m_strID);
- 12 try
- 13 {
- 14 m_pRecordset = theApp.m_pConnection->
Execute((_bstr_t)strSQL, NULL, adCmdText); - 15 va = m_pRecordset->GetCollect(_variant_t
((long)0)); //获取记录集的结果 - 16 if(va.iVal == 0)
- 17 {
- 18 MessageBox("没有此员工!");
- 19 return ;
- 20 }
- 21 }
- 22 CATCH_ERROR;
第4~8行代码实现是否输入员工号的判断。
第9~22行代码为从数据表中查询是否有当前输入的职工。
上述代码借助Format()函数,通过"select count(*) from 表名 where 条件",构造从表中查询符合条件数据总数的SQL语句。这是常用的查询总数的SQL语句,希望读者可以熟练地掌握运用。下面通过SQL语句实现向表中添加记录。实现代码参考如下:
- 23 CTime time = CTime::GetCurrentTime();
//获取当前的系统时间 - 24 CString strTime = time.Format("%Y-%m-%d");
- 25 CString strYM = time.Format("%Y-%m");
- 26 if(m_nFlag == 1)
//标记的判断 - 27 {
- 28 if(m_Check1 == 1)
- 29 m_strState[2] = "是";
- 30 else
- 31 m_strState[2] = "否";
- 32 if(m_Check2 == 1)
- 33 m_strState[1] = "是";
- 34 else
- 35 m_strState[1] = "否";
- 36 }
- 37 if(m_nFlag == 2)
- 38 {
- 39 if(m_Check3 == 1)
- 40 m_strState[4] = "是";
- 41 else
- 42 m_strState[4] = "否";
- 43 if(m_Check4 == 1)
- 44 m_strState[6] = "是";
- 45 else
- 46 m_strState[6] = "否";
- 47 }
- 48 strSQL.Format("insert into checkinfo values
('%s', '%s', '%s', '%s', '
//构造插入的SQL语句 - 49 %s', '%s', '%s', '%s', '%s', '%s', '%s', 0, 0, 0)",
- 50 strTime, m_strID, m_strState[0],
m_strState[1], m_strState[2], - 51 m_strState[3], m_strState[4],
m_strState[5], m_strState[6], m_strMore, strYM); - 52 try
- 53 { //执行SQL语句
- 54 theApp.m_pConnection->Execute((_bstr_t)strSQL,
NULL, adCmdText); - 55 m_strID = "";
- 56 for(int i = 0; i < 7; i++)
- 57 m_strState[i] = "否";
- 58 MessageBox("添加成功!");
- 59 }
- 60 CATCH_ERROR;
- 61 UpdateData(FALSE); //输出结果
- 62 }
第23~25行代码获取当前系统的时间,并格式化到字符串中。
第48~61行代码实现了职工考勤情况的添加。
【责任编辑:
云霞 TEL:(010)68476606】