资源描述
毕业设计(论文)考勤管理系统的设计与实现论文作者姓名:申请学位专业:计算机科学与技术申请学位类别:指导教师姓名(职称):论文提交日期:第 1 页 共 24 页考勤管理系统的设计与实现摘 要随着现代科学技术的发展,越来越多的公司和企业对职工的考勤都实行了信息化管理,使用计算机系统代替复杂的手工方式来管理考勤事务。考勤管理系统可以有效地管理公司员工的出勤情况,规范人事制度管理,保证公司正常的工作,是人力资源管理的重要组成部分。系统的开发主要包括后台数据库的建立,维护以及前端应用程序的开发两个方面,主要模块包括基本信息管理模块,考勤信息管理模块,统计查询模块和系统用户管理模块。系统是使用Visual C+开发语言,使用Microsoft Visual Studio 6.0作为工具软件,数据库为SQL Server 2000。系统采用目前比较流行的ADO数据访问技术,并将每个数据库表的字段和操作封装到类中,它使应用程序的各个窗口都能够共享对表的操作,不需要重复编码,使程序更加易于维护,从而将面向对象的程序设计思想应用到数据库应用程序中。关键词:考勤管理;人力资源;数据库;数据访问技术Design and Realization of Attendance Management SystemAbstractAlong with the development of the modern science and technology, more and more companies and enterprises implemented the information management to the staffs checking attendance, and use computer system instead of the complex manual way to manage the checking attendance business. The checking attendance management system may effectively manage the staffs going out on duty situation, Standard personnel system management, Guarantees the company normal work. It is the important part of human resources management The development of this system mainly includes two aspects: the establishment of the backstage database and the development of the front-side application. This system contains following several modules: the basic information management module, the attendance information management module, the statistical inquiry module and the system user administration module. Visual C+ and SQL Server2000 are used in the development of the system. The system uses the popular ADO technology, and encapsulates the fields and the operations of each table into some classes. It causes the operation which the application procedure each window all can share synchronizes tables. It has not repeat codes, and makes the application to be easier to maintain. By this way, the idea of object-oriented programming will be applied in the database application.Key words: Attendance management; Human resources; Database; Data access technology目 录论文总页数:26页1引言11.1课题背景11.2本课题研究意义11.3本课题研究方法12开发工具22.1Visual C+6.022.2SQL Server 200023考勤管理系统的设计33.1需求分析33.2功能模块构成33.3数据库结构设计44考勤管理系统的实现64.1系统登陆功能的实现64.2基本信息管理模块74.2.1节假日信息管理74.2.2部门信息管理84.2.3员工信息管理94.3考勤管理模块114.3.1出勤信息管理114.3.2加班信息管理134.3.3请假信息管理144.3.4出差信息管理164.4统计查询模块174.4.1日考勤统计表174.4.2月考勤统计表184.4.3当日考勤人员列表204.5用户管理模块21结 论23参考文献24致 谢25声 明261 引言1.1 课题背景无论公司还是企业,都会涉及到对职工的考勤管理。考勤管理在生产管理过程中充当着一个十分重要角色,考勤管理的效率对生产的效果起着举足轻重的作用。随着现代科学技术的发展,越来越多的公司和企业对职工的考勤管理都实行了信息化管理,使用计算机系统代替繁琐冗余的手工方式来管理考勤事务。传统的手工方式不仅效率低下,而且容易出错,采用计算机技术进行货物管理可以克服手工管理的缺点,将人们从烦杂的劳动中解放出来。先进的考勤管理思想在商业中实现就成为了一个时代的目标。公司集团非常急需一套既有先进考勤方法又适合国内大商业的考勤管理系统,作为实现目标和提高现有水平的一种重要手段。考勤管理系统是一个公司不可缺少的部分,它的执行对于公司的决策者和管理者来说是很有帮助的,随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。基于此,开发了一套考勤管理系统,其主要目的是为了统计员工的迟到、早退、旷工、事病假、加班以及出差情况,这些信息将直接作为公司对员工的奖惩、提升以及培训的依据。1.2 本课题研究意义随着计算机技术和网络技术的发展,计算机网络给人们带来了很多便利,同样考勤管理系统也是如此,它主要是为了满足单位日常的考勤管理的需求,扩大工作空间,使单位管理过程更加快速、安全、高。论文系统规划设计过程是从单位的业务流程出发展开分析,从而完成系统各个功能模块的分析过程,以及完成部分功能模块的设计,实现了数据库信息的浏览、录入、查询、修改、删除等各种操作,通过统一界面使得系统操作更为灵活、方便便捷。随着计算机的普及和计算机科学技术的飞速发展,人们开始越来越多地利用计算机解决实际问题。考勤管理是商业信息管理的重要部分,面对大量的商品信息,采用人力处理将浪费大量的时间、人力和物力,而且统计数据麻烦。因此,开发一个界面友好,易于操作的考勤管理软件进行自动化处理变得十分重要,这正是本系统开发的目的和意义。通过此考勤管理系统的开发锻炼了学生的实际动手能力对以后的学习和工作能力的培养也具有重要意义。1.3 本课题研究方法开发数据库管理信息系统需要选择两种工具,即前台开发语言和后台数据库。一般开发C/S结构的应用程序时,前台开发语言通常可以选择Visual Basic、Visual C+、Delphi和Power Builder等,如果开发网络应用程序,则需要选择一个网络数据库系统,如Access、Oracle和IBM DB2等。本设计是使用Visual C+ 6.0的开发工具,使用Microsoft SQL Server 2000作为后台数据库开发,采用了最新的数据库访问技术ADO(ActiveX Data Objects),是提供对各种数据库的标准接口。本次毕业设计应首先分析考勤管理系统的相关功能,结合本次毕业设计的相关要求写出需求分析;其次,综合运用以前所学的相关知识,在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;同时,在开发设计与实现中,要保存好相关的设计文档。2 开发工具2.1 Visual C+6.0Visual C+6.0 是微软公司1998年推出的产品,是基于Windows操作系统的编程工具,是Microsoft Visual Studio 6.0的组件之一,是一种面向对象程序设计语言。它采用一种巧妙的方法将Windows的编程复杂性封装起来,编程者可以比较轻松地进行Windows应用程序的设计。Visual C+ 6.0继承了以前版本的优点,为用户提供了更为友好的可视化开发环境。它提供了强大的编译能力以及良好的界面操作性,具有功能强大、通用性强和易于扩充等特点,越来越多的被用来当作客户/服务器应用程序的前台卡法工具,而且能够对Windows 9x、Windows NT 以及Windows 2000 下的C+程序设计提供完善的编程环境。同时Visual C+6.0 对网络、数据库等方面的编程也都提供相应的环境支持。几乎所有世界级的软件,从业界领先的Web浏览器到面向任务的企业应用,都是使用Microsoft Visual C+开发系统来开发的。要用C+来开发Windows和Web上的高性能应用程序,Visual C+是效率最高的首选工具。Visual C+ 6.0在不牺牲灵活性、性能和控制力度的同时,给C+带来了更高水平的生产效率。除了IntelliSense Technology(智能感应技术)和Edit and Continue(即编即调)等显著缩短开发时间的新特性外,Visual C+ 6.0还为Web开发和企业开发提供更良好的支持。有了Microsoft Visual C+ 6.0企业版,可以创建出面向Windows和Web的多层次可调节的应用程序。有了它为Internet、SQL和COM开发所提供的优化了的支持,可以大大提高您的开发效率。2.2 SQL Server 2000Microsoft SQL Server 2000是一套完整的数据库和分析产品,可迅速提供下一代可扩展电子商务、各种业务和数据仓库解决方案。Microsoft SQL Server 2000是一个分布式的关系型数据库管理系统,具有客户机/服务器体系结构,采用了Transact-SQL的SQL语言在客户机与服务器间传递客户机的请求与服务器的处理结果。它一种应用广泛的数据库管理系统,具有许多显著的优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。性能、可伸缩性及可靠性是基本要求,而进入市场时间也非常关键。除这些核心企业品质外,SQL Server 2000 还为您的数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用 Web带来的机会非常重要。Microsoft SQL Server 2000是众多数据库开发软件的一种,它的版本包括企业版,标准版,个人版,Windows CE版,开发版和评估版。不同版本的功能和用户群不同。SQL是访问数据库的标准语言,无论后台数据库是SQL Server,Oracle,还是IBM DB2,甚至是小型数据库ACCESS,都可以使用标准的SQL语句对它进行操作。在这里,是采用SQL Server 2000是作为后台数据库。3 考勤管理系统的设计3.1 需求分析考勤管理系统的用户是各单位负责考勤管理的员工和领导,它可以有效的管理公司单位员工的出勤情况,规范人事制度的管理。管理员可以创建用户,修改用户信息以及删除用户,和对公司一些员工信息的编辑等。该系统包括基本信息管理,考勤信息管理,统计查询和用户管理等主要模块。每一个功能模块都需要针对不同的表来完成相同的数据库操作,即添加记录,修改记录,删除记录以及查询显示记录信息。具体功能有以下几个方面。1、基本信息的添加,修改,删除和查询。节本信息管理包括节假日日期设置,部门信息管理和员工信息管理。2、考勤信息管理包括出勤管理,加班管理,请假管理和出差管理等功能。3、统计查询功能包括日考勤统计表,月考勤统计表和当日缺勤人员列表。4、用户管理包括Admin用户管理和其他用户管理。3.2 功能模块构成考勤管理系统由基本信息管理模块、考勤信息模块、统计查询模块和用户管理模块四个主要功能模块构成。基本信息管理模块,包括节假日日期设置,部门信息管理缓和员工信息管理。节假日日期信息只包括具体的日期数据,部门信息包括部门名称和部门功能的描述,员工信息包括员工姓名,性别,生日,身份证号等。考勤信息包括出勤,加班,请假,出差等信息。出勤信息包括全勤,休息,旷工,迟到和早退等信息;加班信息包括员工信息,加班时间,加班类型和加班描述;请假信息包括员工信息,请假类型和原因;出差信息包括员工信息和出差原因。统计查询模块包括日考勤统计表,月考勤统计表和当日缺勤人员列表。日考勤统计表包括员工姓名,考勤日期,是否全勤,是否请假等信息,月考勤统计表包括员工姓名,考勤月份,全勤天数,出差天数等信息,当日缺勤人员列表包括系统当前日期缺勤员工的姓名,所在部门和联系电话等信息。用户管理模块用户包括Admin用户和普通用户。Admin用户可以修改自己的密码,创建修改和删除普通用户信息。普通用户只能修改自身的信息功能模块构成如图1:图1 功能模块3.3 数据库结构设计考勤管理系统数据库采用Microsoft SQL SERVER 2000,在使用数据库过程中,接触最多的就是数据库中的表,表是数据存储的地方,是数据库最重要的部分。这个系统数据库表由6个表构成,具体如下。CheckInfo表是记录考勤信息的,记录员工迟到,早退,全勤,旷工,病假,事假,休息,出差等信息。表1 CheckInfo字 段数据类型长 度是否允许为空字段描述CheckDatechar10否考勤日期EmpIdint4否员工编号QuanQinchar2是全勤ChuChaichar2是出差BingJiachar2是病假ShiJiachar2是事假KuangGongchar2是旷工XiuXichar50是休息ChiDaochar50是迟到Zaotuichar50是早退Memovarchar200是备注DepInfo表是记录部门信息的。DepId为主键。表2 DepInfo字 段数据类型长 度是否允许为空字段描述DepIdint4否部门编号DepNamevarchar50否部门名称Describesvarchar250是描述UIDint4否总的编号EmpInfo表是记录员工的基本信息。管理员可以查看员工信息,添加员工信息需要用的表。EmpId是主键。表3 EmpInfo字 段数据类型长 度是否允许为空字段描述EmpIdint4否编号Namevarchar50否姓名Sexchar2是性别Birthdayvarchar20是生日IdCardvarchar20是身份证号OfficePhonevarchar30是办公电话Mobilevarchar30是手机电话HireDateInt 4是到岗日期DepIdvarchar40是部门编号Missionvarchar50是工作岗位Dutyvarchar20是职务 Memo varchar 200 是 备注信息HolidaySet表是设置节假日信息的。Id为主键。表4 HolidaySet字 段数据类型长 度是否允许为空字段描述Idint4否编号HolidayDatechar10否节假日期HolidayNamevarchar50是节假名称OverTime表是记录加班信息的。表5 OverTime字 段数据类型长 度是否允许为空字段描述otDateChar10否加班日期EmpIdint4否员工编号otHoursmallint2否加班时间otTypevarchar50否加班类型Describesvarchar200是描述UserInfo表是记录用户信息的,包括用户名和密码。表6 UserInfo字 段数据类型长 度是否允许为空字段描述UserNamevarchar40否用户名Passwdvarchar40是密码UserTypeint4否用户类型4 考勤管理系统的实现4.1 系统登陆功能的实现用户要使用本系统,首先必须通过系统的身份认证。如果用户名错误或者不存在,密码错误3次后,对话框自动关闭。图2 登陆对话框具体代码如下:void CLoginDlg:OnOK() UpdateData(TRUE); /将对话框中编辑框的数据读取到成员变量中if(m_User = )/ 没有输入用户名MessageBox(请输入用户名, 信息提示);GetDlgItem(IDC_USER_EDIT)-SetFocus();return;CUserInfo User; / 定义用户信息表变量if(!User.IsExistUser(m_User) / 判断用户是否存在count+;if(count SetFocus();return;elseMessageBox(重试次数已到,不能再输入用户名和密码,即将退出系统!, 用户名错误, MB_ICONEXCLAMATION);exit(0);User.GetInfo(m_User); / 判断密码是否正确if(User.Passwd != m_Passwd)/同用户判断CDialog:OnOK();/ 关闭对话框4.2 基本信息管理模块基本信息管理模块包括节假日信息管理,部门信息管理和员工信息管理。4.2.1 节假日信息管理节假日信息管理,首先对节假日信息的编辑,判断节假日记录是否存在,存入数据。在从HolidaySet中读取所有节假日记录,在对记录进行操作,即添加,修改和删除。普通用户是不能打开这一块信息的,节假日管理对他们是不可见的。图3 节假日信息框部分代码如下:BOOL CHolidayManDlg:OnInitDialog()/ 初始化CDialog:OnInitDialog();RefreshData();void CHolidayManDlg:RefreshData()/ 更新数据UpdateData(TRUE);CString cSource = SELECT Id, HolidayDate AS 节假日, HolidayName AS 名称 FROM HolidaySet;/ 设置Select语句m_Adodc.SetRecordSource(cSource); /刷新ADO Data控件的记录源m_Adodc.RefreshData()void CHolidayManDlg:OnAddButton() /添加按钮UpdateData(TRUE);CHolidayEditDlg dlg; / 初始化HolidayEditDlg对话框中的变量if (dlg.DoModal() = IDOK)RefreshData();void CHolidayManDlg:OnModiButton()/ 修改按钮CHolidayEditDlg dlg; / 设置HolidayEditDlg对话框中的变量if (dlg.DoModal() = IDOK) / 打开HolidayEditDlg对话框RefreshData();void CHolidayManDlg:OnDelButton()/ 删除按钮cur.SqlDelete(m_Datagrid.GetItem(0);RefreshData();4.2.2 部门信息管理部门信息管理模块包括部门信息编辑对话框,部门信息管理对话框和部门信息选择对话框。部门编辑主要是用来添加和修改部门信息。部门信息管理对话框,是系统管理员进行的操作,如果当前用户不是系统管理员,则添加,修改,和删除等按钮是不可以用,他们没有相关的权限。在删除部门的时候要对部门信息进行判断,如果部门是根节点,包含下一级部门和员工时不能删除。部门信息的选择,是为了方便用户选择部门,以后的其他模块程序可以通过此程序来获取选择的部门信息。图4 部门图主要代码如下:BOOL CDepManDlg:OnInitDialog() /初始化CDialog:OnInitDialog();void CDepManDlg:AddtoTree(HTREEITEM m_node, int UpperId)/使用递归方法将部门添加到TreeView控件中int i;HTREEITEM m_child;if(UpperId = atoi(dep.a_UID.GetAt(i)m_child = m_tree.InsertItem(dep.a_DepName.GetAt(i), m_node);m_tree.SetItemData(m_child, atol(dep.a_DepId.GetAt(i);AddtoTree(m_child, atoi(dep.a_DepId.GetAt(i);void CDepManDlg:OnAddButton() /添加按钮HTREEITEM node; /用于保存当前选择的节点node = m_tree.GetSelectedItem(); /取得当前选择的节点/ 删除按钮void CDepManDlg:OnDelButton() HTREEITEM node; /用于保存当前节点node = m_tree.GetSelectedItem(); /取得当前节点/弹出对话框,要求用户确认是否删除。如果用户单击“是”按钮,则删除if (MessageBox(是否删除当前部门?, 请确认, MB_YESNO) = IDYES)dep.SqlDelete(cDepId); /删除表Departments中的指定记录m_tree.DeleteItem(node); /删除Tree控件中的当前节点4.2.3 员工信息管理编辑员工基本信息对话框用来添加和修改员工信息,主要包括员工的姓名,性别,出生日期,身份证号,到岗日期,办公电话,手机电话,工作岗位,职务和描述信息。员工管理则是通过选择部门信息,添加,修改和删除员工信息 这里可以查看每个部门下的员工信息。同样普通用户只能查看员工信息,不能对其信息进行添加,修改和删除等操作。图5 员工信息图主要代码如下:void CEmpManDlg:RefreshData()UpdateData(TRUE);int iDepId; /从Tree控件中读取部门编号信息HTREEITEM node;node = m_tree.GetSelectedItem();iDepId = m_tree.GetItemData(node);CString cDepId; /根据部门编号设置SELECT语句cDepId.Format(%d, iDepId);/ 设置SELECT语句CString cSource = SELECT EmpId, Name AS 姓名, Sex AS 性别, Birthday AS 生日, IdCard AS 身份证号, OfficePhone AS 办公电话, Mobile AS 手机号码, HireDate AS 到岗日期, Mission AS 工作岗位, Duty AS 职务, Memo AS 备注 FROM EmpInfo e, DepInfo d WHERE e.DepId = d.DepId;void CEmpManDlg:OnAddButton()/ 添加按钮UpdateData(TRUE);CTime CurrentTime = CTime:GetCurrentTime();/ 添加员工时,将日期控件设置为当天if(dlg.DoModal()=IDOK)RefreshData();void CEmpManDlg:OnModiButton()/ 修改按钮UpdateData(TRUE);CEmpInfo emp; / 读取选择员工的记录emp.GetInfo(m_Datagrid.GetItem(0);CEmpEditDlg dlg; / 将员工数据读取到编辑对话框中if(dlg.DoModal()=IDOK)RefreshData();void CEmpManDlg:OnDelButton()/ 删除按钮CEmpInfo emp;emp.SqlDelete(m_Datagrid.GetItem(0);RefreshData();4.3 考勤管理模块考勤管理模块主要实现了出勤信息管理,加班信息管理,请假信息管理和出差信息管理。4.3.1 出勤信息管理出勤信息编辑对话框中,首先单击选择部门按钮,在左侧的表格中将显示选择部门中的所有员工信息。选择一个员工,会在右侧下方显示他的出勤状态。选择出勤状态,然后单击确定按钮,可以保存指定员工的出勤情况。出勤管理对话框中,根据左边的部门,列出各个部门中的员工及其员工的出勤信息,出勤时间,是否全勤,是否出差,是否迟到,是否早退,是否旷工等。用户可以根据实际的情况进行具体的操作,添加,修改和删除。图6 出勤信息主要代码如下:void COnDutyManDlg:RefreshData()UpdateData(TRUE);int iDepId; /从Tree控件中读取部门编号信息HTREEITEM node;node = m_tree.GetSelectedItem();iDepId = m_tree.GetItemData(node);CString cDepId; /根据部门编号设置SELECT语句cDepId.Format(%d, iDepId);/ 设置SELECT语句CString cSource = SELECT c.EmpId AS 员工编号, e.Name AS 姓名, c.CheckDate AS 出勤日期, c.QuanQin AS 是否全勤, c.XiuXi AS 是否休息, c.KuangGong AS 是否旷工, c.ChiDao AS 是否迟到, c.ZaoTui AS 是否早退 FROM CheckInfo c, EmpInfo e, DepInfo d WHERE c.EmpId = e.EmpId AND e.DepId = d.DepId;m_Adodc.SetRecordSource(cSource); /刷新ADO Data控件的记录源m_Adodc.Refresh();void COnDutyManDlg:OnAddButton()/ 添加按钮.void COnDutyManDlg:OnModiButton()/修改按钮void COnDutyManDlg:OnDelButton()/删除按钮程序调用m_tree.GetSelectedItem()函数获取当前选择的部门接点数据,并使用GetItemData(node)函数获取部门编号。然后根据选择的部门编号设置SELECT语句,从表CheckInfo,表EmpInfo和表DepInfo中获取部门中所有员工的出勤记录。4.3.2 加班信息管理加班信息编辑对话框主要是对员工的加班情况的添加和修改。首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的加班状态。选择加班状态,包括加班时数,加班原因和加班类型,然后单击确定按钮,可以保存指定员工的加班情况。加班信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的加班信息,加班时间,加班时数,加班原因和加班类型等。用户可以根据实际的情况进行具体的操作,添加,修改和删除。图7 加班信息框部分代码如下:void COvertimeManDlg:OnAddButton() /添加按钮COvertimeEditDlg dlg;CurrentTime = CTime:GetCurrentTime();dlg.otDate = CurrentTime.Format(%Y-%m-%d);if (dlg.DoModal() = IDOK)RefreshData();void COvertimeManDlg:OnModiButton()/ 修改按钮if (m_Adodc.GetRecordset().GetEof()MessageBox(请选择要修改的记录!);return;CEmpInfo emp; / 根据员工编号得到员工信息emp.GetInfo(m_Datagrid.GetItem(0);CString cDepId; / 根据部门编号得到部门信息cDepId.Format(%d, emp.DepId);dep.GetInfo(cDepId);COvertimeEditDlg dlg;if(m_Datagrid.GetItem(4) = 法定节假日加班)dlg.m_overtime = 0;else if(m_Datagrid.GetItem(4) = 周六日加班)dlg.m_overtime = 1;else if(m_Datagrid.GetItem(4) = 日常加班)dlg.m_overtime = 2;dlg.otDate = m_Datagrid.GetItem(2);/ 日期dlg.m_describe = m_Datagrid.GetItem(5);if (dlg.DoModal() = IDOK)RefreshData();void COvertimeManDlg:OnDelButton()/删除按钮cur.SqlDelete(m_Datagrid.GetItem(2), m_Datagrid.GetItem(0);4.3.3 请假信息管理请假信息编辑对话框中,首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的请假状态。选择出勤状态,请假分为病假和事假,并且需要输入请假原因,然后单击确定按钮,可以保存指定员工的请假情况。请假信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的信息,选中员工的姓名则可以进行员工的请假信息的编辑。用户可以根据实际的情况进行具体的操作,添加,修改和删除。图8 请假信息图主要代码如下:void CLeaveEditDlg:OnOK() UpdateData(TRUE);if(m_Adodc.GetRecordset().GetEof()/ 是否选择人员MessageBox(请选择人员);return;if(m_shijia = -1) / 是否进行添加考勤状态MessageBox(请选择出勤状态);return;CCheckInfo cur;cur.CheckDate = CheckDate; / 赋值到CCheckInfo对象中cur.EmpId = atol(m_Datagrid.GetItem(0);switch(m_shijia)cur.Memo = m_memo;if(EmpId = )/ 在添加时,若人员有出勤记录,则不允许添加if(cur.HaveEmp(CheckDate, m_Datagrid.GetItem(0)MessageBox(已经有此员工的出勤信息,不能添加);return;cur.SqlInsert();/ 插入记录elsecur.UpdateLeave(cur.CheckDate, EmpId); / 修改CheckInfo表记录CDialog:OnOK();请假信息保存在表CheckInfo中,如果在出勤信息管理模块中输入了出勤信息,则不能再输入请假信息。如果修改记录,则程序调用Update Leave()函数,更新表CheckInfo中的Shijia ,Bingjia和Memo等字段的值。4.3.4 出差信息管理出差信息管理编辑对话框主要是对员工的出差情况的添加和修改。首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的出差状态。选择出差状态,写出出差原因,然后单击确定按钮,可以保存指定员工的出差情况。出差信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的出差信息。用户可以根据实际的情况进行具体的操作,添加,修改和删除。图9 出差信息主要代码如下:void CErrandEditDlg:OnOK() UpdateData(TRUE);if(m_Adodc.GetRecordset().GetEof()/ 是否选择人员MessageBox(请选择人员);return; CCheckInfo cur;cur.CheckDate = CheckDate; / 赋值到CCheckInfo对象中cur.EmpId = atol(m_Datagrid.GetItem(0);cur.ChuChai = 是;cur.QuanQin = 否;cur.BingJia = 否;cur.ShiJia = 否;cur.KuangGong = 否;cur.XiuXi = 否;cur.ChiDao = 否;cur.ZaoTui = 否;cur.Memo = m_memo;if(EmpId = )/ 在添加时,若人员有出勤记录,则不允许添加if(cur.HaveEmp(CheckDate, m_Datagrid.GetItem(0)MessageBox(已经有此员工的出勤信息,不能添加);Return;cur.SqlInsert();/ 插入记录elsecur.UpdateErrand(cur.CheckDate, m_Datagrid.GetItem(0); / 修改CheckInfo表记录CDialog:OnOK();4.4 统计查询模块统计查询模块主要是实现了日考勤统计表,月考勤统计表,当日缺勤人员列表3个功能。4.4.1 日考勤统计表日考勤统计表按日查询所有员工的出勤,加班,请假和出差等信息。首先选择要查询的日期,在点击查询按钮,即列出这日期的员工信息,包括员工编号,员工姓名,出勤日期,是否全勤,是否出差,是否请假,是否加班等等。图10 日考勤统计图主要代码如下:void CTimeSelDlg:RefreshData()UpdateData(TRUE);CString cTime; /根据部门编号设置SELECT语句cTime = m_time.Format(%Y-%m-%d);/ 设置SELECT语句CString cSource = SELECT c.EmpId AS 员工编号, e.Name AS 姓名, c.CheckDate AS 出勤日期, c.QuanQin AS 是否全勤, c.ChuChai AS 是否出差, c.ShiJia AS 是否事假, c.BingJia AS 是否病假, c.KuangGong AS 是否旷工, c.XiuXi AS 是否休息, c.ChiDao AS 是否迟到, c.ZaoTui AS 是否早退, c.Memo AS 备注 FROM CheckInfo c, EmpInfo e WHERE c.EmpId = e.EmpId AND c.CheckDate = + cTime + ;/刷新ADO Data控件的记录源m_Adodc.SetRecordSource(cSource);m_Adodc.Refresh();程序执行SELECT语句,从表CheckInfo和EmpInfo中读取选择日期中各员工的考勤信息。4.4.2 月考勤统计表月考勤统计表是按月统计所有员工的出勤天数,请假天数,出差天数等信息。为了对各种考勤天数进行统计,需要创建一组视图,分别按月统计所有员工的全勤天数,休息天数,旷工天数,迟到次数,早退次数,病假天数,事假天数和出差天数。在表CheckInfo中,CheckDate字段保存考勤日期,LEFT(CheckDate)返回考勤日期的年份和月份信息,使用COUNT()函数和GROUP BY子句统计考勤月份和员工分组的各种考勤天数。图11 月考勤统计图主要代码如下:void CDepDlg:RefreshData()UpdateData(TRUE);/根据部门编号设置SELECT语句CString cStrCnd,cDepId;cDepId.Format(%d, iDepId);if ( iDepId 0 )cStrCnd = And d.DepId= + cDepId;elsecStrCnd = ;CString cTime; / 查询日期/ 得到年份和月份m_year.GetLBText(m_year.GetCurSel(), cYear);m_month.GetLBText(m_month.GetCurSel(), cMonth);cTime = cYear + - + cMonth; / 得到日期/ 设置SELECT语句CString cSource = SELECT e.Name AS 姓名, ISNULL(v1.CountQuanQin,0) AS 全勤天数, ISNULL(v2.CountChuChai,0) AS 出差天数, ISNULL(v3.CountShiJia,0) AS 事假天数, ISNULL(v4.CountBingJia,0) AS 事假天数, ISNULL(v5.CountKuangGong,0) AS 旷工天数, ISNULL(v6.CountXiuXi,0) AS 休息天数, ISNULL(v7.CountChiDao,0) AS 迟到次数, ISNULL(v8.CountZaoTui,0) AS 早退次数 FROM v_QuanQin v1, v_ChuChai v2, v_ShiJia v3, v_BingJia v4,DepInfo d, v_KuangGong v5, v_XiuXi v6, v_ChiDao v7, v_ZaoTui v8, EmpInfo e WHERE e.EmpId *= v1.EmpId AND e.EmpId *= v2.EmpId And e.DepId=d.DepId AND e.EmpId *= v3.EmpId AND e.EmpId *= v4.EmpId AND e.EmpId *= v5.EmpId AND e.EmpId *= v6.EmpId AND e.EmpId *= v7.EmpId AND e.EmpId *= v8.EmpId AND v1.CheckMonth = + cTime + AND v2.CheckMonth = + cTime + AND v3.CheckMonth = + cTime + AND v4.CheckMonth = + cTime + AND v5.CheckMonth = + cTime + AND v6.CheckMonth = + cTime + AND v7.CheckMonth = + cTime + AND v8.CheckMonth = + cTime + + cStrCnd;/刷新ADO Data控件的记录源m_Adodc.SetRecordSource(cSource);m_Adodc.Refresh();程序执行SELECT语句,从表EmpInfo和其他视图中读取选择月份中各员工的考勤信息,ISNULL()函数是SQL Server的内部函数,它的功能是当第一个参数为NULL时,将第二个参数作为结果返回。4.4.3 当日考勤人员列表当日考勤人员列表查询当前系统日期中所有缺勤的员工信息,缺勤指病假,事假和旷工等情况。图12 当日缺勤人员图主要代码如下:void CAbsenceDlg:RefreshData()UpdateData(TRUE);CString cTime; /根据部门编号设置SELECT语句cTime = CurrentTime.Format(%Y-%m-%d);/ 设置SELECT语句CString cSource = SELECT e.EmpId AS 员工编号, e.Name AS 姓名, d.DepName AS 部门名称, e.Mobile AS 联系电话 FROM DepInfo d, EmpInfo e WHERE e.DepId = d.DepId AND e.EmpId IN (SELECT EmpId FROM CheckInfo WHERE (ShiJia=是 OR BingJia=是 OR KuangGong=是) AND CheckDate = + cTime + );m_Adodc.SetRecordSource(cSource); /刷新ADO Data控件的记录源m_Adodc.Refresh();程序中使用了嵌套查询语句,即在一个SELECT语句中嵌套使用了另外一个SELECT语句。主SELECT语句显示员工和部门信息,在其查询条件中使用IN子句嵌套另一个SELECT语句。从SELECT可以返回表CheckInfo中当日事假,病假和旷工的记录。4.5 用户管理模块根据用户类型的不同,用户管理模块的功能也不相同,主要包括Admin用户可以创建其他用户,修改用户的密码,删除其他用户,而其他用户只能修改自身的用户信息。这个模块包括了用户管理和密码修改两个功能。在用户管理中只有Admin用户才可以进行操作,可以添加删除其他用户信息。图13 用户管理框图主要代码如下:void CUserManDlg:RefreshData()UpdateData(TRUE);/ 设置Select语句CString cSource = SELECT UserN
展开阅读全文