西科大数据库课程设计VC考勤管理系统方案

上传人:沈*** 文档编号:100175215 上传时间:2022-06-02 格式:DOC 页数:32 大小:326.50KB
返回 下载 相关 举报
西科大数据库课程设计VC考勤管理系统方案_第1页
第1页 / 共32页
西科大数据库课程设计VC考勤管理系统方案_第2页
第2页 / 共32页
西科大数据库课程设计VC考勤管理系统方案_第3页
第3页 / 共32页
点击查看更多>>
资源描述
数据库课程设计报告题目: 考勤管理系统 _ 计科 _:20XX12月摘 要这次课程设计只是达到训练、牢固知识的目的,熟悉数据库的前台和后台编程、VC+的控件、如何访问数据库等方面的知识。 本系统采用了可视化的集成开发环境Visual C+ 6.0编辑用户操作界面、以SQL Sever为后台数据库的考勤系统,考勤制度是每个企事业单位所必需的,计算机的出现使员工出勤情况的记录和统计工作变得十分简单。关键字:SQL数据库、SQL语言、VC+ 、考勤管理- 29 - / 321.系统设计1.1系统功能分析考勤管理系统的主要功能如下:l 上班时间的设定。上下班时间相对固定,可保存在客户端的设置文件中。l 员工出入单位的情况记录。出入情况主要由考勤机来记录,但是需要设置人工添加的功能,以备特殊情况的处理。l 请假、加班和出差情况的记录。1.2系统功能模块的设计考勤管理系统上下班时间设置工作情况记录考勤统计请假记录出差记录手工补计出勤加班记录图1-1 系统功能模块图1.3与其他系统的关系考勤管理系统记录了员工上下班的情况,为工资管理系统直接提供每个月工作时间的统计结果,用以计算工资。同时考勤系统也需要其他系统提供的员工、部门等信息。1.4数据流程图系统流程图如图1-2所示,出勤的原始记录主要来源于考勤机,并且以固定格式保存在数据库中。考勤管理系统的任务是如何处理这些数据。员工记录出勤时间员工出勤记录请假、值班、出差记录上下班时间安排各种统计信息管理人员考勤员经理审批月度员工考勤统计表图1-2 考勤管理系统数据流程图2.数据库设计2.1数据需求分析根据数据流程,可以列出以下管理系统所需的数据项和数据结构。l 出勤记录:记录号、员工、出入情况和出入时间,如图3-1所示。l 月度考勤统计:记录号、员工、年月、累计正常工作时间、累计请假时间、累计加班时间、累计出差时间、迟到次数、早退次数和旷工次数如图3-2所示。l 请假记录:记录号、员工、假期起始时间/结束时间和请假缘由,如图3-3所示。l 加班记录:记录号、员工、加班时间长度和日期,如图3-4所示。l 出差记录:记录号、员工、出差起始时间/结束时间和具体描述,如图3-5所示。所需的外部支持:l 人员信息:员工号、密码、权限、部门和当前状态等。l 部门设置:部门编号、名称等。图1-3 ATTENDANCE 出勤记录表图1-4 ATTENDANCE_STAT 月度考勤统计表图1-5 LEAVE 请假记录表图1-6 OVERTIME 加班记录表图1-7 ERRAND 出差记录表2.2 数据库概念结构设计 考勤管理系统的E-R图如下:员工月度考勤统计记录编号年月累计工作时间累计请假时间累计加班时间累计出差时间迟到次数早退次数旷工次数请假记录记录编号起始时间结束时间缘由加班记录记录编号加班时间日期出勤记录记录编号出入状态出入时间员工号员工密码职权XX所在部门.记录编号起始时间结束时间具体描述3.系统实现3.1 系统开发环境软件:SQL Sever 2000,VC+6.0操作系统:Window 73.2各个功能模块的创建3.2.1 生成程序框架用AppWizard生成程序框架,加入数据库支持。在MFC AppWizard-Step1中选择Dialog based选项,其余均采用缺省配置。3.2.2 登陆认证对话框登陆窗口的封装类为CLoginDlg控件类型ID成员变量说明Combo BoxIDC_CMB_DSNm_strDSNODBC数据源Edit BoxIDC_EDT_USERm_strUser用户名Edit BoxIDC_EDT_PASSWDm_strPasswd密码ButtonIDOK无登陆按钮ButtonIDCANCEL无取消按钮为了改变标题登陆人事管理系统的字体大小,需要改变其ID为IDC_STATIC_LOGINTEXT,为CAboutDlg类加入一个CFont类的成员函数m_font,然后在OnInitialDialog函数中加入以下代码:/ 改变登录人事管理系统字体大小LOGFONT LogFont;GetFont-GetLogFont;LogFont.lfHeight+=LogFont.lfHeight/2;LogFont.lfWidth+=LogFont.lfWidth/2;m_font.CreateFontIndirect;GetDlgItem-SetFont;/ 如数据库为打开状态,则关闭ifdb.IsOpen db.Close;用户认证过程在登陆按钮的处理程序中:void CLoginDlg:OnOK BOOL bLogin=FALSE;CString strPasswd,strCount;UpdateData; / 更新数据变量if!db.Open return; / 连接数据库strPasswd=CCrypt:Encrypt; / 加密密码CRecordset rs; / 构造记录集rs.OpenCRecordset:forwardOnly,select COUNT as COUNT from PERSON where ID= + m_strUser+ and PASSWD= + strPasswd + and AUTHORITY=4; / 执行查询rs.GetFieldValue;rs.Close; / 关闭数据集if / 判断认证是否通过EndDialog; / 结束对话框,返回IDOKelseMessageBox;db.Close; / 关闭数据库3.2.3 主对话框窗口的设计主对话框控件列表控件类型ID成员变量说明Static TextIDC_STATIC_HEAD无考勤管理系统静态文本ButtonIDC_BTN_CONFIG无设置按钮ButtonIDC_BTN_RECORD无出勤记录按钮ButtonIDC_BTN_STATISTICS无统计按钮ButtonIDC_BTN_RELOGIN无重新登录按钮ButtonIDC_BTN_EXIT无退出按钮在CAttendanceDlg中定义以下成员变量:public:CBrush m_brush;CStatDlg* m_pStatDlg;CAttDlg* m_pAttDlg;CFont m_font; 对话框初始化时需要改变标题字体大小,改变背景颜色等,因此在OnInitDialog中加入以下代码:/ 改变标题字体大小LOGFONT LogFont;GetFont-GetLogFont;LogFont.lfHeight+=LogFont.lfHeight/2;LogFont.lfWidth+=LogFont.lfWidth/2;m_font.CreateFontIndirect;GetDlgItem-SetFont;/ 初始化对话框指针为空m_pAttDlg=NULL;m_pStatDlg=NULL;/ 创建背景画刷m_brush.CreateSolidBrushRGB;对话框中5个按钮的功能主要就是显示相应的功能对话框。各按钮的BN_CLICKED事件的处理和退出代码如下:void CAttendanceDlg:OnBtnExit EndDialog; / 退出主对话框,关闭程序void CAttendanceDlg:OnBtnRelogin / 隐藏主对话框ShowWindow;/ 显示登录对话框CLoginDlg dlg;ifdlg.DoModal=IDOKShowWindow; / 显示对话框else EndDialog; / 退出程序void CAttendanceDlg:OnBtnConfig / 显示工作时间设置对话框CWorkplanDlg dlg;dlg.DoModal;void CAttendanceDlg:OnBtnRecord / 非模态显示出勤记录对话框if / 指针为空,创建对话框m_pAttDlg=new CAttDlg;m_pAttDlg-Create;m_pAttDlg-ShowWindow;else / 对话框已创建m_pAttDlg-ShowWindow; / 显示窗口void CAttendanceDlg:OnBtnStatistics / 非模态显示考勤统计对话框if / 指针为空,创建对话框m_pStatDlg=new CStatDlg;m_pStatDlg-Create;m_pStatDlg-ShowWindow;else / 对话框已创建m_pStatDlg-ShowWindow; / 显示窗口3.2.4 上班时间设置对话框的创建设置对话框控件列表控件类型ID成员变量说明Date Time PickerIDC_WORKSTAT_DAETIMEPICKER1m_Time1上午上班时间Date Time PickerIDC_WORKSTAT_DAETIMEPICKER2m_Time2中午下班时间Date Time PickerIDC_WORKSTAT_DAETIMEPICKER3m_Time3下午上班时间Date Time PickerIDC_WORKSTAT_DAETIMEPICKER4m_Time4下午下班时间ButtonIDC_WORKPLAN_MODIFY无修改按钮ButtonIDC_WORKPLAN_RESET无恢复默认设置按钮恢复默认设置按钮的BN_CLICKED事件处理程序用于恢复原来的设置。这个函数也同时被OnInitDialog函数引用,以实现初始化操作。void CWorkplanDlg:OnWorkplanReset CString cstr4;char str49;int i;int nHour,nMinute,nSecond; / 时,分,秒CString strFileName=.workplan.ini; / INI文件名/ 读取INI文件GetPrivateProfileString;GetPrivateProfileString;GetPrivateProfileString;GetPrivateProfileString;fori=0; i cstri=stri;/ 定义四个时间变量并初始化为INI文件中的值sscanfcstr0.Left, %d, &nHour;/ 得到时sscanfcstr0.Mid, %d, &nMinute;/ 得到分sscanfcstr0.Mid, %d, &nSecond;/ 得到秒CTime t1;/ 初始化t1sscanfcstr1.Left, %d, &nHour;/ 得到时sscanfcstr1.Mid, %d, &nMinute;/ 得到分sscanfcstr1.Mid, %d, &nSecond;/ 得到秒CTime t2;/ 初始化t2sscanfcstr2.Left, %d, &nHour;/ 得到时sscanfcstr2.Mid, %d, &nMinute;/ 得到分sscanfcstr2.Mid, %d, &nSecond;/ 得到秒CTime t3;/ 初始化t3sscanfcstr3.Left, %d, &nHour;/ 得到时sscanfcstr3.Mid, %d, &nMinute;/ 得到分sscanfcstr3.Mid, %d, &nSecond;/ 得到秒CTime t4;/ 初始化t4/ 设置成员变量m_Time1=t1;m_Time2=t2;m_Time3=t3;m_Time4=t4;UpdateData; / 更新界面数据3.2.5 考勤修改对话框的创建考勤修改对话框控件列表控件类型ID成员变量说明Check BoxIDC_CHK_SEEKBYTIMEm_bSeekbytime时间围选项Check BoxIDC_CHK_SEEKBYPERSONm_bSeekbyperson员工选项Date Time PickerIDC_DATETIMEPICKER1m_starTime起始时间Date Time PickerIDC_DATETIMEPICKER2m_EndTime结束时间Edit BoxIDC_EDT_SEEKPERSONIDm_strPersonID员工号Edit BoxIDC_EDT_SEEKPERSONNAMEm_nstrName当输入员工号时,需要及时检索员工,以确定设置的条件有效。通过Class Wizard加入处理IDC_EDT_SEEKPERSONID的EN_CHANGE消息的函数如下:void CAttDlg:OnChangeEdtSeekpersonid UpdateData; / 更新数据CPersonRS rs; / 构造记录集rs.m_strFilter = ID= + m_strPersonID + ; / 设置过滤条件rs.Open; / 打开记录集ifrs.GetRecordCount=1 / 判断员工记录是否存在m_strName=rs.m_NAME; / 得到员工else m_strName.Empty; / 清除员工的显示rs.Close; / 关闭记录集UpdateData; / 更新界面数据3.2.6 修改出勤记录属性页的创建修改出勤记录属性页控件列表控件类型ID成员变量说明Edit BoxIDC_EDT_IOTIMEm_strIOTime出入时间Edit BoxIDC_EDT_DEPATIDm_strDepartID部门编号Edit BoxIDC_EDT_DEPARTNAMEm_strDepartNAME部门名称Edit BoxIDC_EDT_PERSONIDm_strPersonID员工号Edit BoxIDC_EDT_PERSONNAMEm_strPersonNAME员工Radio ButtonIDC_RADIO_OUT无出入选项的出Radio ButtonIDC_RADIO_IN无出入选项的入ButtonIDC_BTN_ADDALL无全体员工按钮ButtonIDC_BTN_ADDDEPART无部门员工按钮ButtonIDC_BTN_ADDPERSON无单个员工按钮ButtonIDC_BTN_DELETEATTEND无删除所选记录按钮ButtonIDC_BTN_SEEKIO无按条件检索按钮List ControlIDC_LIST1m_cList出勤记录列表界面初始化操作如下:BOOL CPage1:OnInitDialog CPropertyPage:OnInitDialog;/ 出入情况缺省为出GetDlgItem-SetCheck;/ 为List添加网格m_cList.SetExtendedStyle;/ 设置List的列int nWidth=110;m_cList.InsertColumn;m_cList.InsertColumn;m_cList.InsertColumn;m_cList.InsertColumn;CAttendanceRS rs; / 构造出勤记录表UpdateList; / 更新Listreturn TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE为了方便的更新列表框容,调用函数可使列表框显示给定的数据表格。void CPage1:UpdateList / 更新列表框容int i=0;CString strID,strTime;rs.Open; / 打开出勤记录表m_cList.DeleteAllItems; / 清除列表框容while!rs.IsEOF / 对数据表中所有记录进行处理m_cList.InsertItem; / 添加新ItemstrID.Format; / 转换为字符串m_cList.SetItemText;m_cList.SetItemText;m_cList.SetItemText;m_cList.SetItemTexti, 3, rs.m_IO_TIME.Format;rs.MoveNext; / 跳到下一条记录i+;rs.Close; / 关闭出勤记录表当输入部门编号时,自动检索部门名称。void CPage1:OnChangeEdtDepartid UpdateData; / 更新数据CDepartRS rs; / 构造记录集rs.m_strFilter = ID= + m_strDepartID + ; / 设置过滤条件rs.Open; / 打开记录集ifrs.GetRecordCount=1 / 判断部门代码输入是否正确m_strDepartName=rs.m_NAME; / 提取部门名称else m_strDepartName.Empty; / 清除部门名称rs.Close; / 关闭记录集UpdateData; / 更新界面数据添加部门和全体员工出勤记录的过程最终可以分解为添加单个员工记录的过程。为了避免程序的重复,设置了下面的子程序:void CPage1:IO_Addint counter; / 用于计数CString strIO; / 保存出入情况CCounterRS rs_counter; / 构造计数器记录表/ 记录编号rs_counter.m_strFilter = ID=A; / 设置过滤器,提取计数值rs_counter.Open; / 打开计数器记录表counter=rs_counter.m_COUNTER_VALUE; / 提取计数值counter+; / 计数值加1rs_counter.Edit; / 编辑计数器rs_counter.m_COUNTER_VALUE=counter; / 保存当前计数rs_counter.Update; / 提交修改rs_counter.Close; / 关闭计数器记录表/ 添加记录/ 判断确定出入情况ifGetDlgItem-GetCheckstrIO=O;else strIO=I;/ 转换出入时间类型int nYear,nMonth,nDay,nHour,nMinute; / 年,月,日,时,分sscanfm_strIOTime.Left, %d, &nYear; / 得到年sscanfm_strIOTime.Mid, %d, &nMonth; / 得到月sscanfm_strIOTime.Mid, %d, &nDay; / 得到日sscanfm_strIOTime.Mid, %d, &nHour; / 得到时sscanfm_strIOTime.Mid, %d, &nMinute; / 得到分/ 得到出入时间CTime IO_time;CAttendanceRS rs_attendance; / 构造考勤记录表rs_attendance.Open; / 打开考勤记录表rs_attendance.AddNew; / 追加考勤记录rs_attendance.m_ID=counter;rs_attendance.m_PERSON=strPersonID;rs_attendance.m_IN_OUT=strIO;rs_attendance.m_IO_TIME=IO_time;rs_attendance.Update;rs_attendance.Close; / 关闭考勤记录表UpdateList; / 更新列表框添加记录的3个按钮处理程序分别调用以上的函数。void CPage1:OnBtnAddperson / 追加单个员工考勤记录if!m_strPersonName.IsEmpty / 判断员工是否存在IO_Add; / 追加单个员工记录void CPage1:OnBtnAdddepart / 追加部门员工考勤记录int i,n; / 用于保存记录条数CPersonRS rs_person; / 构造员工信息表ifm_strDepartName.IsEmpty return; / 判断部门代号是否正确/ 设置过滤条件rs_person.m_strFilter=DEPARTMENT=+m_strDepartID+ and STATE=T;rs_person.Open; / 打开员工信息表n=rs_person.GetRecordCount; / 获取员工人数i=0; / 初始化已添加记录条数/ 初始化进度条m_cProgress.SetRange;m_cProgress.SetPos;while!rs_person.IsEOF / 对数据表中所有记录进行处理IO_Add; / 添加当前员工出勤记录rs_person.MoveNext; / 跳到下一个员工记录m_cProgress.SetPos; / 显示进度rs_person.Close; / 关闭员工信息表void CPage1:OnBtnAddall / 添加所有员工出勤记录int i,n; / 用于保存记录条数CPersonRS rs_person; / 构造员工信息表/ 设置过滤条件,提取员工列表rs_person.m_strFilter = STATE=T;rs_person.Open; / 打开员工信息表n=rs_person.GetRecordCount; / 获取员工人数i=0; / 初始化已添加记录条数/ 初始化进度条m_cProgress.SetRange;m_cProgress.SetPos;while!rs_person.IsEOF / 对数据表中所有记录进行处理IO_Add; / 添加当前员工出勤记录rs_person.MoveNext; / 跳到下一个员工记录m_cProgress.SetPos; / 显示进度rs_person.Close; / 关闭员工信息表删除所选记录void CPage1:OnBtnDeleteattend / 删除出勤记录列表中所选记录CString strSQL;int nItem;/ 得到第一个被选择Item的位置POSITION pos = m_cList.GetFirstSelectedItemPosition;ifAfxMessageBox;return;while / 遍历所有被选ItemnItem=m_cList.GetNextSelectedItem; / 得到Item Index/ 构造SQL语句strSQL=delete from ATTENDANCE where ID=+ m_cList.GetItemText;db.ExecuteSQL; / 执行CAttendanceRS rs; / 构造出勤记录表UpdateList; / 更新列表框3.2.7 加班记录属性页的创建加班记录属性页控件列表控件类型ID成员变量说明Date Time PickerIDC_OVERTIME_DATETIMEPICKERm_Date日期Edit BoxIDC_EDT_OVERTIME_HOURm_nHour加班时间Edit BoxIDC_EDT_OVERTIME_PERSONIDm_strPersonID员工号Edit BoxIDC_EDT_OVERTIME_PERSONNAMEm_strPersonName员工ButtonIDC_BTN_OVERTIME_ADD无添加按钮ButtonIDC_BTN_OVERTIME_DELETEATTEND无删除所选记录按钮ButtonIDC_BTN_OVERTIME_SEEKIO无按条件检索按钮List ContrlIDC_LIST2m_cList加班记录列表初始代码如下:BOOL CPage2:OnInitDialog CPropertyPage:OnInitDialog;/ 为List添加网格m_cList.SetExtendedStyle;/ 设置List的列int nWidth=110;m_cList.InsertColumn;m_cList.InsertColumn;m_cList.InsertColumn;m_cList.InsertColumn;COvertimeRS rs; / 构造加班记录表UpdateList; / 更新Listreturn TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSE当输入员工号时,需要检索员工,以确认输入是否正确。void CPage2:OnChangeEdtOvertimePersonid UpdateData; / 更新数据CPersonRS rs; / 构造PERSON记录表rs.m_strFilter = ID= + m_strPersonID + ; / 设置过滤条件rs.Open; / 打开记录表ifrs.GetRecordCount=1 / 判断员工号是否正确m_strPersonName=rs.m_NAME; / 提取员工else m_strPersonName.Empty; / 清除员工显示rs.Close; / 关闭记录表UpdateData; / 更新界面数据添加按钮。void CPage2:OnBtnOvertimeAdd int counter; / 用于保存计数CCounterRS rs_counter; / 构造计数器记录表UpdateData; / 更新数据ifm_strPersonName.IsEmpty return; / 判断员工号是否正确/ 记录编号rs_counter.m_strFilter = ID=O; / 设置过滤器,提取计数值rs_counter.Open; / 打开计数器记录表counter=rs_counter.m_COUNTER_VALUE; / 提取计数值counter+; / 计数值加1rs_counter.Edit; / 编辑计数器rs_counter.m_COUNTER_VALUE=counter; / 保存当前计数rs_counter.Update; / 提交修改rs_counter.Close; / 关闭计数器记录表/ 添加记录COvertimeRS rs_overtime; / 构造加班记录表rs_overtime.Open; / 打开表rs_overtime.AddNew; / 新增一项记录/ 设置字段值rs_overtime.m_ID=counter;rs_overtime.m_PERSON=m_strPersonID;rs_overtime.m_WORK_HOURS=m_nHour;rs_overtime.m_WORK_DATE=m_Date;rs_overtime.Update; / 更新数据库rs_overtime.Close; / 关闭加班记录表UpdateList; / 更新列表框3.2.8 请假记录和出差记录属性页的创建控件类型ID成员变量说明Edit BoxIDC_EDT_LEAVE_STARTTIMEm_strSTime起始时间Edit BoxIDC_EDT_LEAVE_ENDTIMEm_strETime结束时间Edit BoxIDC_EDT_LEAVE_PERSONIDm_strPersonID员工号Edit BoxIDC_EDT_LEAVE_PERSONNAMEm_strPersonName员工Edit BoxIDC_EDT_LEAVE_PEASONm_strReason请假原因ButtonIDC_BTN_LEAVE_ADD无添加按钮ButtonIDC_BTN_LEAVE_DELETEATTEND无删除所选记录按钮ButtonIDC_BTN_LEAVE_SEEKIO无按条件检索按钮List ControlIDC_LIST3m_cList加班记录列表请假记录属性页控件列表添加记录代码如下:void CPage3:OnBtnLeaveAdd int counter; / 用于计数CCounterRS rs_counter; / 构造计数器记录表UpdateData; / 更新数据/ 记录编号rs_counter.m_strFilter = ID=L; / 设置过滤器,提取计数值rs_counter.Open; / 打开计数器记录表counter=rs_counter.m_COUNTER_VALUE; / 提取计数值counter+; / 计数值加1rs_counter.Edit; / 编辑计数器rs_counter.m_COUNTER_VALUE=counter; / 保存当前计数rs_counter.Update; / 提交修改rs_counter.Close; / 关闭计数器记录表/ 添加记录int nYear,nMonth,nDay,nHour,nMinute; / 年,月,日,时,分/ 转换起始时间类型sscanfm_strSTime.Left, %d, &nYear; / 得到年sscanfm_strSTime.Mid, %d, &nMonth; / 得到月sscanfm_strSTime.Mid, %d, &nDay; / 得到日sscanfm_strSTime.Mid, %d, &nHour; / 得到时sscanfm_strSTime.Mid, %d, &nMinute; / 得到分/ 得到起始时间CTime S_time;/ 转换结束时间类型sscanfm_strETime.Left, %d, &nYear; / 得到年sscanfm_strETime.Mid, %d, &nMonth; / 得到月sscanfm_strETime.Mid, %d, &nDay; / 得到日sscanfm_strETime.Mid, %d, &nHour; / 得到时sscanfm_strETime.Mid, %d, &nMinute; / 得到分/ 得到结束时间CTime E_time;CLeaveRS rs_leave; / 构造请假记录表rs_leave.Open; / 打开请假记录表rs_leave.AddNew; / 追加请假记录rs_leave.m_ID=counter;rs_leave.m_PERSON=m_strPersonID;rs_leave.m_START_TIME=S_time;rs_leave.m_END_TIME=E_time;rs_leave.m_REASON=m_strReason;rs_leave.Update;rs_leave.Close; / 关闭请假记录表UpdateList; / 更新列表框3.2.9 考勤统计对话框的创建初始化时设置缺省时间,修改构造函数如下:CStatDlg:CStatDlg: CDialogCTime End_t=CTime:GetCurrentTime; / 当前时间CTimeSpan tp; / 时间间隔为30天/AFX_DATA_INITm_strTime = End_t.Format;m_STime = End_t-tp;m_ETime = End_t;m_bSeekbytime = FALSE;m_bSeekbyperson = FALSE;m_strSeektime = _T;m_strPersonID = _T;m_strPersonName = _T;/AFX_DATA_INIT检索按钮:void CStatDlg:OnStatBtnSeek CString strFilter; / 保存过滤字符串CStatRS rs; / 构造统计数据表UpdateData; / 更新数据/ 判断根据员工号过滤if strFilter=PERSON= + m_strPersonID + ;/ 判断根据年月过滤ifif!strFilter.IsEmpty / 如果已有过滤条件strFilter += and ; / 需添加and连接符/ 设置时间过滤条件strFilter += YEAR_MONTH=# + m_strSeektime + #;if!strFilter.IsEmpty / 判断是否有过滤字符串rs.m_strFilter=strFilter; / 设置过滤条件UpdateList; / 更新列表框统计过程主要是记录判断过程,代码如下:void CStatDlg:OnStatBtnStat CRecordset rs_Q_attend; / 构造Q_attend记录集CRecordset rs_Q_leave; / 构造Q_leave记录集CRecordset rs_Q_errand; / 构造Q_errand记录集CTimeSpan tp_1; / 构造一个1天的CTimeSpanCTimeSpan tp_02; / 构造一个2小时的CTimeSpanCTimeSpan TimeSpan4; / 保存上下班时间int nHours2; / 保存上下午工作时间CString strSTime,strETime; / 保存始末时间CTime TimeStamp, LateTime, EarlyTime,WorkStart,WorkEnd; / 保存中间判断时间int nWorkHour,nOverHour,nLeaveHDay,nErrandHDay; / 保存时间间隔长度BOOL bLate,bEarly,bAbsent,bLeave,bErrand; / 保存判断结果int nLateTimes,nEarlyTimes,nAbsentTimes; / 保存次数CString cstr4; / 暂存起始时间char str49; / 暂存起始时间int i,j,n,counter; / 用于循环和计数CString strTmp,strTmp1,strTmp2; / 临时变量/ 临时变量,年,月,日,时,分,秒int nHour,nMinute,nSecond;CString strFileName=.workplan.ini; / INI文件名UpdateData; / 更新数据/ 读取INI文件GetPrivateProfileString;GetPrivateProfileString;GetPrivateProfileString;GetPrivateProfileString;fori=0; i cstri=stri;/ 定义四个时间间隔变量并初始化为INI文件中的值CTimeSpan *pTS;fori=0; isscanfcstri.Left, %d, &nHour;/ 得到时sscanfcstri.Mid, %d, &nMinute;/ 得到分sscanfcstri.Mid, %d,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!