1、考勤系统开发方案及过程编写人:Paul编写时间:7月23日一、设计目标 伴随计算机发展及网络技术应用,当今社会正快速向信息自动化社会前进,信息自动化作用也越来越大,尤其是各行业管理领域,智能化信息处理已是提升效率、规范管理、客观审查最有效路径。考勤作为一个企业基项管理,是单位对职员工作管理基础依据。开发考勤管理系统,正是完善企业信息化管理关键步骤。对于职员考勤假如仍使用传统手工方法录入将是一项复杂工作。面对庞大信息量,该方法现关键存在以下弊端:1、 浪费人力、效率低下;2、考勤结果反应速度慢(一月才能汇总一次),主管部门不能立即全方面地监督职员出勤情况;3、难避免考勤中弄虚作假现象。部分单位上
2、报工资人数往往大于实际考勤和领工资人数,造成企业大量工资流失;4、因为考勤数据不正确,企业劳感人事工资管理系统很多基础数据也存在较大误差,给人事部门很多全局性统计工作也带来了不正确性;5、考勤统计工作复杂繁重,难以确保统计结果正确性、立即性。所以,人工考勤已极难满足企业规范化管理要求。建立现代化智能考勤管理系统势在必行。经过考勤管理系统能满足企业多个考勤及管理要求,能为企业带来巨大经济效益:1、考勤管理系统经过考勤机判定并统计职员上下班关信息,能够确保考勤数据正确、公正、安全,降低考勤人员工作负担,避免人为原因干扰和弄虚作假现象;2、全部职员考勤信息可一次读回,考勤系统对信息统一处理,快速、全
3、方面; 3、能为人事工资管理系统提供可靠数据资料,确保人事统计正确、可靠; 4、各管理用计算机及管理软件用Windows环境下全汉字界面平台,能灵活处理多种特殊情况,方便修改多种基础信息,提供丰富统计报表,查询方便,管理安全,操作简便易学;二、设计任务1 能够方便地对上班时间进行设定;2 能够提供职员出入单位情况统计。出入情况关键由考勤机来统计,不过需要设置人工添加功效,如出勤统计、月度考勤统计、人员信息、部门设置等,已备特殊情况处理;3 能够提供请假、加班和出差情况统计,并实现查询、添加、修改、删除、浏览等处理功效;4 能够在每个月底进行整个月出勤情况统计;5 能够含有一定安全性、协调性和完
4、整性。三 、设计内容和步骤在软、硬件方面对系统需求,软件要求易学,轻易掌握,能够很简单方便管理多种信息。硬件配置要求不能太高,这么能够很好适应该前企业情况。1 系统功效模块设计:系统功效模块图1-1所表示。考勤管理系统上下班时间设置工作情况统计考勤统计手工补计出勤加班统计请假统计出差统计图1-1系统功效模块图2 数据步骤图:系统数据步骤图1-2所表示,出勤原始统计关键起源于考勤机,而且以固定格式保留在数据库中。考勤管理系统任务是怎样处理这些数据。图1-2考勤管理系统数据步骤图职员上下班划卡统计出勤时间职员出勤统计请假、值班、出差统计月度职员考勤统计表多种统计信息经理审批请假、值班、出差经过考勤
5、员请假、值班、出差上下班时间安排上下班时间安排管理人员3.数据库概念结构设计(E-R图)以下所表示:职员职员号职员密码权限姓名所在部门出差统计统计编号起始时间结束时间具体描述出勤统计月度考勤统计请假统计加班统计统计编号出入状态出入时间统计编号 年月累计工作时间累计加班时间累计请假时间累计出差时间 迟到次数 早退次数 矿工时间统计编号起始时间结束时间 缘由统计编号加班时间日期统计统计统计统计统计图1-3 E-R 图3 数据库需求分析:依据数据步骤,能够列出以下管理系统所需数据项和数据结构。出勤统计:统计号、职员、出入情况和出入时间,图1-4所表示。图1-4 ATTENDANCE出勤统计表月度考勤
6、统计:统计号、职员、年月、累计正常工作时间、累计请假时间、累计加班时间、累计出差时间、迟到次数、早退次数和旷工次数,图1-5所表示。图1-5 ATTENDANCE_STAT月度考勤统计表请假统计:统计号、职员、假期起始时间/结束时间和请假缘由,图1-6所表示。图1-6 LEAVE 请假统计表加班统计:统计号、职员、加班时间长度和日期,图1-7所表示。图1-7 OVERTIME 加班统计表出差统计:统计号、职员、出差起始时间/结束时间和具体描述,图1-8所表示。图1-5 ERRAND 出差统计表人员信息:职员号、密码、权限、姓名、部门和目前状态等,图1-9所表示。图1-9 PERSON 人员信息
7、表部门设置:部门编号、名称等,图1-10所表示。图1-10 DEPARTMENT 部门设置表5.数据库操作准备:为了使用ODBC类,需要在stdafx.h中加入#include”afxdb.h”一行。因本程序只需要连接一个数据库,所以定义了一个Cdatabase型全局变量db,一次性打开和关闭数据库。数据库打开在登录认证对话框中。在主程序结束前需关闭数据库,所以在App类ExitInstance()函数中加入代码:if (db.IsOpen() db.Close();为了编程便捷,能够为数据库中每一个表映射一个统计集类(从CrecordSet类继承),其映射关系如表1-1所表示。这些类经过RF
8、X(Record Field Exchange)机制将组员变量和表格中字段值联络起来,经过方问组员变量能够访问目前统计中字段值。Crecordset派生类表格CAttendanceRS ATTENDANCE出勤统计表CCounterRS COUNTER计数器表CdepartRSDEPARTMENT部门信息表CerrandRSERRAND出差统计表CLeaveRSLEAVE请假统计表COvertimeRSOVERTIME加班统计表CPersonRSPERSON职员个人信息表CStatRSATTENDANCE_STAT月度考勤统计表表1-1 CRecordset派生类对应表格 6主对话框设计: 主
9、对话框界面图1-11所表示。用户能够经过菜单进行方便操作,如添加统计,统计统计等。每个菜单项关联了一个对话框,在对应菜单项初始化中使用:类名 dlg; dlg.DoModal();两条语句来进行实现。图1-11 主对话框6 考勤统计对话框创建 考勤统计对话框界面设计图1-12所表示。用户可进行月度统计,也能够经过查找满足条件统计如年月、职员、姓名等来进行相关统计。图1-12 考勤统计对话框四、测试和评价经过测试,该应用程序能够很好实现上班时间设定;能够提供职员出入单位情况统计;能够提供请假、加班和出差情况统计,并实现查询、添加、修改、删除、浏览等处理功效;能够在每个月底进行整个月出勤情况统计;
10、能够拥有一定安全性、协调性和完整性。但在安全性上存在一定漏洞;功效不够完善,不能进行统一查询;界面相对简单,所以总体评价为中等。期望能得到彭老师指导得以愈加完善此系统,添补漏洞。五、附录1主界面源代码清单:BOOL CAttendanceDlg:OnInitDialog()CDialog:OnInitDialog();/ Add About. menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSER
11、T(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);void CAttendanceDlg:OnBtnConfig() / 显示工作时间设置对话框CWorkplanDlg dlg;dlg.DoModal();2考勤修改对话框源代码清单:BOOL CAttDlg:OnInitDialog() /初始化对话框m_Sheet.Create(this, WS_CHILD | WS_VISIBLE, 0); /创建窗口m_Sheet.ModifyStyleEx
12、(0, WS_EX_CONTROLPARENT); /修改风格m_Sheet.ModifyStyle( 0, WS_TABSTOP ); /修改风格/ 设置窗口位置m_Sheet.SetWindowPos( NULL, 0, 100, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );return TRUE; 为了方便地更新列表框内容,编写了UpdateList()函数,调用些函数可使列表框显示给定数据表格。void CPage1:UpdateList(CAttendanceRS& rs) /更新列表框内容int i=0;CString st
13、rID,strTime;rs.Open(); / 打开出勤统计表m_cList.DeleteAllItems(); / 清除列表框内容while(!rs.IsEOF() / 对数据表中全部统计进行处理m_cList.InsertItem(i, ); / 添加新ItemstrID.Format(%d, rs.m_ID); / 转换为字符串m_cList.SetItemText(i, 0, strID);m_cList.SetItemText(i, 1, rs.m_PERSON);m_cList.SetItemText(i, 2, rs.m_IN_OUT);m_cList.SetItemText(
14、i, 3, rs.m_IO_TIME.Format(%Y-%m-%d %H:%M);rs.MoveNext(); / 跳到下一条统计i+;rs.Close(); / 关闭出勤统计表添加部门和全体职员出勤统计过程最终可分解为添加单个职员统计过程。为了避免程序反复,设置了下面子程序:/ 添加出勤统计函数void CPage1:IO_Add(CString strPersonID)int counter; / 用于计数CString strIO; / 保留出入情况CCounterRS rs_counter(&db); / 结构计数器统计表/ 统计编号rs_counter.m_strFilter =
15、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(); / 关闭计数器统计表/ 添加统计/ 判定确定出入情况if(CButton*)GetDlgItem(IDC_RADIO_OUT)-GetCheck()s
16、trIO=O;else strIO=I;/ 转换出入时间类型int nYear,nMonth,nDay,nHour,nMinute; / 年,月,日,时,分sscanf(m_strIOTime.Left(4), %d, &nYear); / 得到年sscanf(m_strIOTime.Mid(5,2), %d, &nMonth); / 得到月sscanf(m_strIOTime.Mid(8,2), %d, &nDay); / 得到日sscanf(m_strIOTime.Mid(11,2), %d, &nHour); / 得到时sscanf(m_strIOTime.Mid(14,2), %d,
17、&nMinute); / 得到分/ 得到出入时间CTime IO_time(nYear,nMonth,nDay,nHour,nMinute,0);CAttendanceRS rs_attendance(&db); / 结构考勤统计表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_tim
18、e;rs_attendance.Update();rs_attendance.Close(); / 关闭考勤统计表UpdateList(rs_attendance); / 更新列表框3考勤统计对话框源代码清单当输入职员号时,检索职员姓名,用于确定输入。void CStatDlg:OnChangeStatEdtSeekpersonid() UpdateData(); / 更新数据CPersonRS rs(&db); / 结构统计集rs.m_strFilter = ID= + m_strPersonID + ; / 设置过滤条件rs.Open(); / 打开统计集if(rs.GetRecordCo
19、unt()=1) / 判定职员统计是否存在m_strPersonName=rs.m_NAME; / 得到职员姓名else m_strPersonName.Empty(); / 清除职员姓名显示rs.Close(); / 关闭统计集UpdateData(FALSE); / 更新界面数据在以上代码中用到了StrToTime函数,这是一个全局函数,代码以下:Ctime StrToTime(Cstring str) /时间串格式“%Y-%m-%d %H:%M:%S”,如“1999-01-01 11:11:11”int nYear,nMonth,nDay,nHour,nMinute,nSecond;ss
20、canf(str.Left(4),”%d”,&nYear); /得到年sscanf(str.Mid(5,2),”%d”,&nMonth); /得到月sscanf(str.Mid(8,2),”%d”,&nDay); /得到日sscanf(str.Mid(11,2),”%d”,&nHour); /得到时sscanf(str.Mid(14,2),”%d”,&nMinute); /得到分sscanf(str.Mid(17,2),”%d”,&nSecond); /得到秒/结构Ctime变量Ctime result(nYear,nMonth,nDay,nHour,nMinute,nSecond);Return result;4.参考文件:1、陈建春.Visual C+开发GIS系统,开发实例剖析,.2、陈建春.Visual C+高级编程技术,开发实例剖析,1999年.3、李于剑.Visual C+实践和提升,图形图象编程篇, .4、同志工作室.Visual C+6.0开发技巧和实例教程, .5、赵仕健. Visual C+6.0编程和实例解析, .6、钱 能. C+程序设计教程, 1999年.