Page2.cpp
Upload User: bjvcxy
Upload Date: 2021-05-06
Package Size: 2054k
Code Size: 6k
Development Platform:

Visual C++

  1. // Page2.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Attendance.h"
  5. #include "Page2.h"
  6. #include "PersonRS.h"
  7. #include "CounterRS.h"
  8. #include "AttDlg.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. extern CDatabase db;
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CPage2 property page
  17. IMPLEMENT_DYNCREATE(CPage2, CPropertyPage)
  18. CPage2::CPage2() : CPropertyPage(CPage2::IDD)
  19. {
  20. //{{AFX_DATA_INIT(CPage2)
  21. m_nHour = 0;
  22. m_strPersonID = _T("");
  23. m_strPersonName = _T("");
  24. m_Date = CTime::GetCurrentTime();
  25. //}}AFX_DATA_INIT
  26. }
  27. CPage2::~CPage2()
  28. {
  29. }
  30. void CPage2::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CPropertyPage::DoDataExchange(pDX);
  33. //{{AFX_DATA_MAP(CPage2)
  34. DDX_Control(pDX, IDC_LIST2, m_cList);
  35. DDX_Text(pDX, IDC_EDT_OVERTIME_HOUR, m_nHour);
  36. DDX_Text(pDX, IDC_EDT_OVERTIME_PERSONID, m_strPersonID);
  37. DDX_Text(pDX, IDC_EDT_OVERTIME_PERSONNAME, m_strPersonName);
  38. DDX_DateTimeCtrl(pDX, IDC_OVERTIME_DATETIMEPICKER, m_Date);
  39. //}}AFX_DATA_MAP
  40. }
  41. BEGIN_MESSAGE_MAP(CPage2, CPropertyPage)
  42. //{{AFX_MSG_MAP(CPage2)
  43. ON_EN_CHANGE(IDC_EDT_OVERTIME_PERSONID, OnChangeEdtOvertimePersonid)
  44. ON_BN_CLICKED(IDC_BTN_OVERTIME_ADD, OnBtnOvertimeAdd)
  45. ON_BN_CLICKED(IDC_BTN_OVERTIME_DELETEATTEND, OnBtnOvertimeDeleteattend)
  46. ON_BN_CLICKED(IDC_BTN_OVERTIME_SEEKIO, OnBtnOvertimeSeekio)
  47. //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CPage2 message handlers
  51. void CPage2::OnChangeEdtOvertimePersonid() 
  52. {
  53. UpdateData(); // 更新数据
  54. CPersonRS rs(&db); // 构造PERSON记录表
  55. rs.m_strFilter = "ID='" + m_strPersonID + "'"; // 设置过滤条件
  56. rs.Open(); // 打开记录表
  57. if(rs.GetRecordCount()==1) // 判断员工号是否正确
  58. {
  59. m_strPersonName=rs.m_NAME; // 提取员工姓名
  60. }
  61. else m_strPersonName.Empty(); // 清除员工姓名显示
  62. rs.Close(); // 关闭记录表
  63. UpdateData(FALSE); // 更新界面数据
  64. }
  65. void CPage2::OnBtnOvertimeAdd() 
  66. {
  67. int counter; // 用于保存计数
  68. CCounterRS rs_counter(&db); // 构造计数器记录表
  69. UpdateData(); // 更新数据
  70. if(m_strPersonName.IsEmpty()) return; // 判断员工号是否正确
  71. // 记录编号
  72. rs_counter.m_strFilter = "ID='O'"; // 设置过滤器,提取计数值
  73. rs_counter.Open(); // 打开计数器记录表
  74. counter=rs_counter.m_COUNTER_VALUE; // 提取计数值
  75. counter++; // 计数值加1
  76. rs_counter.Edit(); // 编辑计数器
  77. rs_counter.m_COUNTER_VALUE=counter; // 保存当前计数
  78. rs_counter.Update(); // 提交修改
  79. rs_counter.Close(); // 关闭计数器记录表
  80. // 添加记录
  81. COvertimeRS rs_overtime(&db); // 构造加班记录表
  82. rs_overtime.Open(); // 打开表
  83. rs_overtime.AddNew(); // 新增一项记录
  84. // 设置字段值
  85. rs_overtime.m_ID=counter;
  86. rs_overtime.m_PERSON=m_strPersonID;
  87. rs_overtime.m_WORK_HOURS=m_nHour;
  88. rs_overtime.m_WORK_DATE=m_Date;
  89. rs_overtime.Update(); // 更新数据库
  90. rs_overtime.Close(); // 关闭加班记录表
  91. UpdateList(rs_overtime); // 更新列表框
  92. }
  93. BOOL CPage2::OnInitDialog() 
  94. {
  95. CPropertyPage::OnInitDialog();
  96. // 为List添加网格
  97. m_cList.SetExtendedStyle(LVS_EX_GRIDLINES);
  98. // 设置List的列
  99. int nWidth=110;
  100. m_cList.InsertColumn(0, "记录编号", LVCFMT_LEFT, nWidth);
  101. m_cList.InsertColumn(1, "员工号", LVCFMT_LEFT, nWidth);
  102. m_cList.InsertColumn(2, "加班时间", LVCFMT_LEFT, nWidth);
  103. m_cList.InsertColumn(3, "加班日期", LVCFMT_LEFT, nWidth);
  104. COvertimeRS rs(&db); // 构造加班记录表
  105. UpdateList(rs); // 更新List
  106. return TRUE;  // return TRUE unless you set the focus to a control
  107.               // EXCEPTION: OCX Property Pages should return FALSE
  108. }
  109. void CPage2::UpdateList(COvertimeRS &rs)
  110. {
  111. int i=0;
  112. CString strID,strWorkHours,strTime;
  113. rs.Open(); // 打开加班记录表
  114. m_cList.DeleteAllItems(); // 清除列表框内容
  115. while(!rs.IsEOF()) // 对数据表中所有记录进行处理
  116. {
  117. m_cList.InsertItem(i, ""); // 添加新Item
  118. strID.Format("%d", rs.m_ID); // 转换为字符串
  119. m_cList.SetItemText(i, 0, strID);
  120. m_cList.SetItemText(i, 1, rs.m_PERSON);
  121. strWorkHours.Format("%d",rs.m_WORK_HOURS);
  122. m_cList.SetItemText(i, 2, strWorkHours);
  123. m_cList.SetItemText(i, 3, rs.m_WORK_DATE.Format("%Y-%m-%d"));
  124. rs.MoveNext(); // 跳到下一条记录
  125. i++;
  126. }
  127. rs.Close(); // 关闭加班记录表
  128. }
  129. void CPage2::OnBtnOvertimeDeleteattend() 
  130. {
  131. CString strSQL;
  132. int nItem;
  133. // 得到第一个被选择Item的位置
  134. POSITION pos = m_cList.GetFirstSelectedItemPosition();
  135. if(pos==NULL)
  136. {
  137. AfxMessageBox("没有选择记录!");
  138. return;
  139. }
  140. while(pos) // 遍历所有被选Item
  141. {
  142. nItem=m_cList.GetNextSelectedItem(pos); // 得到Item Index
  143. // 构造SQL语句
  144. strSQL="delete from OVERTIME where ID=" + m_cList.GetItemText(nItem, 0);
  145. db.ExecuteSQL(strSQL); // 执行
  146. }
  147. COvertimeRS rs(&db); // 构造加班记录表
  148. UpdateList(rs); // 更新列表框
  149. }
  150. void CPage2::OnBtnOvertimeSeekio() 
  151. {
  152. COvertimeRS rs(&db); // 构造加班记录表
  153. CAttDlg *pDlg; // 指向包含本对象的CAttDlg的指针
  154. CString strFilter; // 用于保存过滤字符串
  155. CString strSTime,strETime; // 起始,结束时间
  156. pDlg=(CAttDlg*)GetParent()->GetParent(); // 得到指针
  157. pDlg->UpdateData(); // 更新数据
  158. strSTime=pDlg->m_StartTime.Format("%Y-%m-%d");
  159. strETime=pDlg->m_EndTime.Format("%Y-%m-%d");
  160. if(pDlg->m_bSeekbyperson) // 判断是否根据员工号检索
  161. strFilter="PERSON='" + pDlg->m_strPersonID + "'"; // 添加过滤条件
  162. if(pDlg->m_bSeekbytime) // 判断是否有时间范围
  163. {
  164. if(strFilter.GetLength()>0) // 判断是否已有过滤条件
  165. strFilter += " and "; //如果是,需要添加and连接符
  166. strFilter += "WORK_DATE>#" + strSTime + "#"; // 添加开始时间过滤
  167. strFilter += " and WORK_DATE<#" + strETime + "#"; // 添加结束时间过滤
  168. }
  169. if(strFilter.GetLength()>0) // 判断是否有过滤条件
  170. rs.m_strFilter=strFilter; // 设置Filter
  171. UpdateList(rs); // 更新列表框
  172. }