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

Visual C++

  1. // Page4.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "Attendance.h"
  5. #include "Page4.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. // CPage4 property page
  17. IMPLEMENT_DYNCREATE(CPage4, CPropertyPage)
  18. CPage4::CPage4() : CPropertyPage(CPage4::IDD)
  19. {
  20. // 得到当前时间并格式化
  21. CTime t=CTime::GetCurrentTime();
  22. CString str=t.Format("%Y-%m-%d %H:%M");
  23. //{{AFX_DATA_INIT(CPage4)
  24. m_strSTime = str;
  25. m_strETime = str;
  26. m_strPersonID = _T("");
  27. m_strPersonName = _T("");
  28. m_strDescription = _T("");
  29. //}}AFX_DATA_INIT
  30. }
  31. CPage4::~CPage4()
  32. {
  33. }
  34. void CPage4::DoDataExchange(CDataExchange* pDX)
  35. {
  36. CPropertyPage::DoDataExchange(pDX);
  37. //{{AFX_DATA_MAP(CPage4)
  38. DDX_Control(pDX, IDC_LIST4, m_cList);
  39. DDX_Text(pDX, IDC_EDT_ERRAND_STARTTIME, m_strSTime);
  40. DDX_Text(pDX, IDC_EDT_ERRAND_ENDTIME, m_strETime);
  41. DDX_Text(pDX, IDC_EDT_ERRAND_PERSONID, m_strPersonID);
  42. DDX_Text(pDX, IDC_EDT_ERRAND_PERSONNAME, m_strPersonName);
  43. DDX_Text(pDX, IDC_EDT_ERRAND_DESCRIPTION, m_strDescription);
  44. //}}AFX_DATA_MAP
  45. }
  46. BEGIN_MESSAGE_MAP(CPage4, CPropertyPage)
  47. //{{AFX_MSG_MAP(CPage4)
  48. ON_EN_CHANGE(IDC_EDT_ERRAND_PERSONID, OnChangeEdtErrandPersonid)
  49. ON_BN_CLICKED(IDC_BTN_ERRAND_ADD, OnBtnErrandAdd)
  50. ON_BN_CLICKED(IDC_BTN_ERRAND_DELETEATTEND, OnBtnErrandDeleteattend)
  51. ON_BN_CLICKED(IDC_BTN_ERRAND_SEEKIO, OnBtnErrandSeekio)
  52. //}}AFX_MSG_MAP
  53. END_MESSAGE_MAP()
  54. /////////////////////////////////////////////////////////////////////////////
  55. // CPage4 message handlers
  56. BOOL CPage4::OnInitDialog() 
  57. {
  58. CPropertyPage::OnInitDialog();
  59. // 为List添加网格
  60. m_cList.SetExtendedStyle(LVS_EX_GRIDLINES);
  61. // 设置List的列
  62. int nWidth=90;
  63. m_cList.InsertColumn(0, "记录编号", LVCFMT_LEFT, nWidth-20);
  64. m_cList.InsertColumn(1, "员工号", LVCFMT_LEFT, nWidth-20);
  65. m_cList.InsertColumn(2, "开始时间", LVCFMT_LEFT, nWidth+20);
  66. m_cList.InsertColumn(3, "结束时间", LVCFMT_LEFT, nWidth+20);
  67. m_cList.InsertColumn(4, "具体描述", LVCFMT_LEFT, nWidth);
  68. CErrandRS rs(&db); // 构造出差记录表
  69. UpdateList(rs); // 更新List
  70. return TRUE;  // return TRUE unless you set the focus to a control
  71.               // EXCEPTION: OCX Property Pages should return FALSE
  72. }
  73. void CPage4::UpdateList(CErrandRS &rs)
  74. {
  75. int i=0;
  76. CString strID,strSTime,strETime;
  77. rs.Open(); // 打开出差记录表
  78. m_cList.DeleteAllItems(); // 清除列表框内容
  79. while(!rs.IsEOF()) // 对数据表中所有记录进行处理
  80. {
  81. m_cList.InsertItem(i, ""); // 添加新Item
  82. strID.Format("%d", rs.m_ID); // 转换为字符串
  83. m_cList.SetItemText(i, 0, strID);
  84. m_cList.SetItemText(i, 1, rs.m_PERSON);
  85. strSTime=rs.m_START_TIME.Format("%y-%m-%d %H:%M");
  86. m_cList.SetItemText(i, 2, strSTime);
  87. strETime=rs.m_END_TIME.Format("%y-%m-%d %H:%M");
  88. m_cList.SetItemText(i, 3, strETime);
  89. m_cList.SetItemText(i, 4, rs.m_DESCRIPTION);
  90. rs.MoveNext(); // 跳到下一条记录
  91. i++;
  92. }
  93. rs.Close(); // 关闭出差记录表
  94. }
  95. void CPage4::OnChangeEdtErrandPersonid() 
  96. {
  97. UpdateData(); // 更新数据
  98. CPersonRS rs(&db); // 构造PERSON记录表
  99. rs.m_strFilter = "ID='" + m_strPersonID + "'"; // 设置过滤条件
  100. rs.Open(); // 打开记录表
  101. if(rs.GetRecordCount()==1) // 判断员工号是否正确
  102. {
  103. m_strPersonName=rs.m_NAME; // 提取员工姓名
  104. }
  105. else m_strPersonName.Empty(); // 清除员工姓名显示
  106. rs.Close(); // 关闭记录表
  107. UpdateData(FALSE); // 更新界面数据
  108. }
  109. void CPage4::OnBtnErrandAdd() 
  110. {
  111. int counter; // 用于计数
  112. CCounterRS rs_counter(&db); // 构造计数器记录表
  113. UpdateData(); // 更新数据
  114. // 记录编号
  115. rs_counter.m_strFilter = "ID='E'"; // 设置过滤器,提取计数值
  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. CErrandRS rs_errand(&db); // 构造出差记录表
  142. rs_errand.Open(); // 打开出差记录表
  143. rs_errand.AddNew(); // 追加出差记录
  144. rs_errand.m_ID=counter;
  145. rs_errand.m_PERSON=m_strPersonID;
  146. rs_errand.m_START_TIME=S_time;
  147. rs_errand.m_END_TIME=E_time;
  148. rs_errand.m_DESCRIPTION=m_strDescription;
  149. rs_errand.Update();
  150. rs_errand.Close(); // 关闭出差记录表
  151. UpdateList(rs_errand); // 更新列表框
  152. }
  153. void CPage4::OnBtnErrandDeleteattend() 
  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 ERRAND where ID=" + m_cList.GetItemText(nItem, 0);
  169. db.ExecuteSQL(strSQL); // 执行
  170. }
  171. CErrandRS rs(&db); // 构造出差记录表
  172. UpdateList(rs); // 更新列表框
  173. }
  174. void CPage4::OnBtnErrandSeekio() 
  175. {
  176. CErrandRS 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. }