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

Visual C++

  1. // Page3.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Attendance.h"
  5. #include "Page3.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. // CPage3 property page
  17. IMPLEMENT_DYNCREATE(CPage3, CPropertyPage)
  18. CPage3::CPage3() : CPropertyPage(CPage3::IDD)
  19. {
  20. // 得到当前时间并格式化
  21. CTime t=CTime::GetCurrentTime();
  22. CString str=t.Format("%Y-%m-%d %H:%M");
  23. //{{AFX_DATA_INIT(CPage3)
  24. m_strSTime = str;
  25. m_strETime = str;
  26. m_strReason = _T("");
  27. m_strPersonID = _T("");
  28. m_strPersonName = _T("");
  29. //}}AFX_DATA_INIT
  30. }
  31. CPage3::~CPage3()
  32. {
  33. }
  34. void CPage3::DoDataExchange(CDataExchange* pDX)
  35. {
  36. CPropertyPage::DoDataExchange(pDX);
  37. //{{AFX_DATA_MAP(CPage3)
  38. DDX_Control(pDX, IDC_LIST3, m_cList);
  39. DDX_Text(pDX, IDC_EDT_LEAVE_STARTTIME, m_strSTime);
  40. DDX_Text(pDX, IDC_EDT_LEAVE_ENDTIME, m_strETime);
  41. DDX_Text(pDX, IDC_EDT_LEAVE_REASON, m_strReason);
  42. DDX_Text(pDX, IDC_EDT_LEAVE_PERSONID, m_strPersonID);
  43. DDX_Text(pDX, IDC_EDT_LEAVE_PERSONNAME, m_strPersonName);
  44. //}}AFX_DATA_MAP
  45. }
  46. BEGIN_MESSAGE_MAP(CPage3, CPropertyPage)
  47. //{{AFX_MSG_MAP(CPage3)
  48. ON_EN_CHANGE(IDC_EDT_LEAVE_PERSONID, OnChangeEdtLeavePersonid)
  49. ON_BN_CLICKED(IDC_BTN_LEAVE_ADD, OnBtnLeaveAdd)
  50. ON_BN_CLICKED(IDC_BTN_LEAVE_DELETEATTEND, OnBtnLeaveDeleteattend)
  51. ON_BN_CLICKED(IDC_BTN_LEAVE_SEEKIO, OnBtnLeaveSeekio)
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CPage3 message handlers
  56. void CPage3::OnChangeEdtLeavePersonid() 
  57. {
  58. UpdateData(); // 更新数据
  59. CPersonRS rs(&db); // 构造PERSON记录表
  60. rs.m_strFilter = "ID='" + m_strPersonID + "'"; // 设置过滤条件
  61. rs.Open(); // 打开记录表
  62. if(rs.GetRecordCount()==1) // 判断员工号是否正确
  63. {
  64. m_strPersonName=rs.m_NAME; // 提取员工姓名
  65. }
  66. else m_strPersonName.Empty(); // 清除员工姓名显示
  67. rs.Close(); // 关闭记录表
  68. UpdateData(FALSE); // 更新界面数据
  69. }
  70. BOOL CPage3::OnInitDialog() 
  71. {
  72. CPropertyPage::OnInitDialog();
  73. // 为List添加网格
  74. m_cList.SetExtendedStyle(LVS_EX_GRIDLINES);
  75. // 设置List的列
  76. int nWidth=90;
  77. m_cList.InsertColumn(0, "记录编号", LVCFMT_LEFT, nWidth-20);
  78. m_cList.InsertColumn(1, "员工号", LVCFMT_LEFT, nWidth-20);
  79. m_cList.InsertColumn(2, "开始时间", LVCFMT_LEFT, nWidth+20);
  80. m_cList.InsertColumn(3, "结束时间", LVCFMT_LEFT, nWidth+20);
  81. m_cList.InsertColumn(4, "缘由", LVCFMT_LEFT, nWidth);
  82. CLeaveRS rs(&db); // 构造请假记录表
  83. UpdateList(rs); // 更新List
  84. return TRUE;  // return TRUE unless you set the focus to a control
  85.               // EXCEPTION: OCX Property Pages should return FALSE
  86. }
  87. void CPage3::UpdateList(CLeaveRS &rs)
  88. {
  89. int i=0;
  90. CString strID,strSTime,strETime;
  91. rs.Open(); // 打开加班记录表
  92. m_cList.DeleteAllItems(); // 清除列表框内容
  93. while(!rs.IsEOF()) // 对数据表中所有记录进行处理
  94. {
  95. m_cList.InsertItem(i, ""); // 添加新Item
  96. strID.Format("%d", rs.m_ID); // 转换为字符串
  97. m_cList.SetItemText(i, 0, strID);
  98. m_cList.SetItemText(i, 1, rs.m_PERSON);
  99. strSTime=rs.m_START_TIME.Format("%y-%m-%d %H:%M");
  100. m_cList.SetItemText(i, 2, strSTime);
  101. strETime=rs.m_END_TIME.Format("%y-%m-%d %H:%M");
  102. m_cList.SetItemText(i, 3, strETime);
  103. m_cList.SetItemText(i, 4, rs.m_REASON);
  104. rs.MoveNext(); // 跳到下一条记录
  105. i++;
  106. }
  107. rs.Close(); // 关闭记录表
  108. }
  109. void CPage3::OnBtnLeaveAdd() 
  110. {
  111. int counter; // 用于计数
  112. CCounterRS rs_counter(&db); // 构造计数器记录表
  113. UpdateData(); // 更新数据
  114. // 记录编号
  115. rs_counter.m_strFilter = "ID='L'"; // 设置过滤器,提取计数值
  116. rs_counter.Open(); // 打开计数器记录表
  117. counter=rs_counter.m_COUNTER_VALUE; // 提取计数值
  118. counter++; // 计数值加1
  119. rs_counter.Edit(); // 编辑计数器
  120. rs_counter.m_COUNTER_VALUE=counter; // 保存当前计数
  121. rs_counter.Update(); // 提交修改
  122. rs_counter.Close(); // 关闭计数器记录表
  123. // 添加记录
  124. int nYear,nMonth,nDay,nHour,nMinute; // 年,月,日,时,分
  125. // 转换起始时间类型
  126. sscanf(m_strSTime.Left(4), "%d", &nYear); // 得到年
  127. sscanf(m_strSTime.Mid(5,2), "%d", &nMonth); // 得到月
  128. sscanf(m_strSTime.Mid(8,2), "%d", &nDay); // 得到日
  129. sscanf(m_strSTime.Mid(11,2), "%d", &nHour); // 得到时
  130. sscanf(m_strSTime.Mid(14,2), "%d", &nMinute); // 得到分
  131. // 得到起始时间
  132. CTime S_time(nYear,nMonth,nDay,nHour,nMinute,0);
  133. // 转换结束时间类型
  134. sscanf(m_strETime.Left(4), "%d", &nYear); // 得到年
  135. sscanf(m_strETime.Mid(5,2), "%d", &nMonth); // 得到月
  136. sscanf(m_strETime.Mid(8,2), "%d", &nDay); // 得到日
  137. sscanf(m_strETime.Mid(11,2), "%d", &nHour); // 得到时
  138. sscanf(m_strETime.Mid(14,2), "%d", &nMinute); // 得到分
  139. // 得到结束时间
  140. CTime E_time(nYear,nMonth,nDay,nHour,nMinute,0);
  141. CLeaveRS rs_leave(&db); // 构造请假记录表
  142. rs_leave.Open(); // 打开请假记录表
  143. rs_leave.AddNew(); // 追加请假记录
  144. rs_leave.m_ID=counter;
  145. rs_leave.m_PERSON=m_strPersonID;
  146. rs_leave.m_START_TIME=S_time;
  147. rs_leave.m_END_TIME=E_time;
  148. rs_leave.m_REASON=m_strReason;
  149. rs_leave.Update();
  150. rs_leave.Close(); // 关闭请假记录表
  151. UpdateList(rs_leave); // 更新列表框
  152. }
  153. void CPage3::OnBtnLeaveDeleteattend() 
  154. {
  155. CString strSQL;
  156. int nItem;
  157. // 得到第一个被选择Item的位置
  158. POSITION pos = m_cList.GetFirstSelectedItemPosition();
  159. if(pos==NULL)
  160. {
  161. AfxMessageBox("没有选择记录!");
  162. return;
  163. }
  164. while(pos) // 遍历所有被选Item
  165. {
  166. nItem=m_cList.GetNextSelectedItem(pos); // 得到Item Index
  167. // 构造SQL语句
  168. strSQL="delete from LEAVE where ID=" + m_cList.GetItemText(nItem, 0);
  169. db.ExecuteSQL(strSQL); // 执行
  170. }
  171. CLeaveRS rs(&db); // 构造请假记录表
  172. UpdateList(rs); // 更新列表框
  173. }
  174. void CPage3::OnBtnLeaveSeekio() 
  175. {
  176. CLeaveRS rs(&db); // 构造请假记录表
  177. CAttDlg *pDlg; // 指向包含本对象的CAttDlg的指针
  178. CString strFilter; // 用于保存过滤字符串
  179. CString strSTime,strETime; // 起始,结束时间
  180. pDlg=(CAttDlg*)GetParent()->GetParent(); // 得到指针
  181. pDlg->UpdateData(); // 更新数据
  182. strSTime=pDlg->m_StartTime.Format("%Y-%m-%d");
  183. strETime=pDlg->m_EndTime.Format("%Y-%m-%d");
  184. if(pDlg->m_bSeekbyperson) // 判断是否根据员工号检索
  185. strFilter="PERSON='" + pDlg->m_strPersonID + "'"; // 添加过滤条件
  186. if(pDlg->m_bSeekbytime) // 判断是否有时间范围
  187. {
  188. if(strFilter.GetLength()>0) // 判断是否已有过滤条件
  189. strFilter += " and "; //如果是,需要添加and连接符
  190. strFilter += "END_TIME>#" + strSTime + "#"; // 添加开始时间过滤
  191. strFilter += " and START_TIME<#" + strETime + "#"; // 添加结束时间过滤
  192. }
  193. if(strFilter.GetLength()>0) // 判断是否有过滤条件
  194. rs.m_strFilter=strFilter; // 设置Filter
  195. UpdateList(rs); // 更新列表框
  196. }