- 43.87 KB
- 2022-05-17 13:47:19 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
考勤管理系统的设计与实现摘要随着现代科学技术的发展,越来越多的公司和企业对职工的考勤都实行了信息化管理,使用计算机系统代替复杂的手工方式来管理考勤事务。考勤管理系统可以有效地管理公司员工的出勤情况,规范人事制度管理,保证公司正常的工作,是人力资源管理的重要组成部分。系统的开发主要包括后台数据库的建立,维护以及前端应用程序的开发两个方面,主要模块包括基本信息管理模块,考勤信息管理模块,统计查询模块和系统用户管理模块。系统是使用VisualC++开发语言,使用MicrosoftVisualStudio6.0作为工具软件,数据库为SQLServer2000。系统采用目前比较流行的ADO数据访问技术,并将每个数据库表的字段和操作封装到类中,它使应用程序的各个窗口都能够共享对表的操作,不需要重复编码,使程序更加易于维护,从而将面向对象的程序设计思想应用到数据库应用程序中。关键词:考勤管理;人力资源;数据库;数据访问技术
DesignandRealizationofAttendanceManagementSystemAbstractAlongwiththedevelopmentofthemodernscienceandtechnology,moreandmorecompaniesandenterprisesimplementedtheinformationmanagementtothestaff"scheckingattendance,andusecomputersysteminsteadofthecomplexmanualwaytomanagethecheckingattendancebusiness.Thecheckingattendancemanagementsystemmayeffectivelymanagethestaff"sgoingoutondutysituation,Standardpersonnelsystemmanagement,Guaranteesthecompanynormalwork.ItistheimportantpartofhumanresourcesmanagementThedevelopmentofthissystemmainlyincludestwoaspects:theestablishmentofthebackstagedatabaseandthedevelopmentofthefront-sideapplication.Thissystemcontainsfollowingseveralmodules:thebasicinformationmanagementmodule,theattendanceinformationmanagementmodule,thestatisticalinquirymoduleandthesystemuseradministrationmodule.VisualC++andSQLServer2000areusedinthedevelopmentofthesystem.ThesystemusesthepopularADOtechnology,andencapsulatesthefieldsandtheoperationsofeachtableintosomeclasses.Itcausestheoperationwhichtheapplicationprocedureeachwindowallcansharesynchronizestables.Ithasnotrepeatcodes,andmakestheapplicationtobeeasiertomaintain.Bythisway,theideaofobject-orientedprogrammingwillbeappliedinthedatabaseapplication..Keywords:Attendancemanagement;Humanresources;Database;Dataaccesstechnology
目录论文总页数:26页1引言11.1课题背景11.2本课题研究意义11.3本课题研究方法12开发工具22.1VisualC++6.022.2SQLServer200023考勤管理系统的设计33.1需求分析33.2功能模块构成33.3数据库结构设计44考勤管理系统的实现64.1系统登陆功能的实现64.2基本信息管理模块7节假日信息管理7部门信息管理8员工信息管理94.3考勤管理模块11出勤信息管理11加班信息管理13请假信息管理14出差信息管理164.4统计查询模块17日考勤统计表17月考勤统计表18当日考勤人员列表204.5用户管理模块21结论23参考文献24致谢25声明26
1引言1.1课题背景无论公司还是企业,都会涉及到对职工的考勤管理。考勤管理在生产管理过程中充当着一个十分重要角色,考勤管理的效率对生产的效果起着举足轻重的作用。随着现代科学技术的发展,越来越多的公司和企业对职工的考勤管理都实行了信息化管理,使用计算机系统代替繁琐冗余的手工方式来管理考勤事务。传统的手工方式不仅效率低下,而且容易出错,采用计算机技术进行货物管理可以克服手工管理的缺点,将人们从烦杂的劳动中解放出来。先进的考勤管理思想在商业中实现就成为了一个时代的目标。公司集团非常急需一套既有先进考勤方法又适合国内大商业的考勤管理系统,作为实现目标和提高现有水平的一种重要手段。考勤管理系统是一个公司不可缺少的部分,它的执行对于公司的决策者和管理者来说是很有帮助的,随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。基于此,开发了一套考勤管理系统,其主要目的是为了统计员工的迟到、早退、旷工、事病假、加班以及出差情况,这些信息将直接作为公司对员工的奖惩、提升以及培训的依据。1.2本课题研究意义随着计算机技术和网络技术的发展,计算机网络给人们带来了很多便利,同样考勤管理系统也是如此,它主要是为了满足单位日常的考勤管理的需求,扩大工作空间,使单位管理过程更加快速、安全、高。论文系统规划设计过程是从单位的业务流程出发展开分析,从而完成系统各个功能模块的分析过程,以及完成部分功能模块的设计,实现了数据库信息的浏览、录入、查询、修改、删除等各种操作,通过统一界面使得系统操作更为灵活、方便便捷。随着计算机的普及和计算机科学技术的飞速发展,人们开始越来越多地利用计算机解决实际问题。考勤管理是商业信息管理的重要部分,面对大量的商品信息,采用人力处理将浪费大量的时间、人力和物力,而且统计数据麻烦。因此,开发一个界面友好,易于操作的考勤管理软件进行自动化处理变得十分重要,这正是本系统开发的目的和意义。通过此考勤管理系统的开发锻炼了学生的实际动手能力对以后的学习和工作能力的培养也具有重要意义。1.3本课题研究方法开发数据库管理信息系统需要选择两种工具,即前台开发语言和后台数据库。一般开发C/S结构的应用程序时,前台开发语言通常可以选择VisualBasic、VisualC++、Delphi和PowerBuilder等,如果开发网络应用程序,则需要选择一个网络数据库系统,如Access、Oracle和IBMDB2等。本设计是使用VisualC++
6.0的开发工具,使用MicrosoftSQLServer2000作为后台数据库开发,采用了最新的数据库访问技术ADO(ActiveXDataObjects),是提供对各种数据库的标准接口。本次毕业设计应首先分析考勤管理系统的相关功能,结合本次毕业设计的相关要求写出需求分析;其次,综合运用以前所学的相关知识,在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;同时,在开发设计与实现中,要保存好相关的设计文档。1开发工具1.1VisualC++6.0VisualC++6.0是微软公司1998年推出的产品,是基于Windows操作系统的编程工具,是MicrosoftVisualStudio6.0的组件之一,是一种面向对象程序设计语言。它采用一种巧妙的方法将Windows的编程复杂性封装起来,编程者可以比较轻松地进行Windows应用程序的设计。VisualC++6.0继承了以前版本的优点,为用户提供了更为友好的可视化开发环境。它提供了强大的编译能力以及良好的界面操作性,具有功能强大、通用性强和易于扩充等特点,越来越多的被用来当作客户/服务器应用程序的前台卡法工具,而且能够对Windows9x、WindowsNT以及Windows2000下的C++程序设计提供完善的编程环境。同时VisualC++6.0对网络、数据库等方面的编程也都提供相应的环境支持。几乎所有世界级的软件,从业界领先的Web浏览器到面向任务的企业应用,都是使用MicrosoftVisualC++开发系统来开发的。要用C++来开发Windows和Web上的高性能应用程序,VisualC++是效率最高的首选工具。VisualC++6.0在不牺牲灵活性、性能和控制力度的同时,给C++带来了更高水平的生产效率。除了IntelliSenseTechnology(智能感应技术)和EditandContinue(即编即调)等显著缩短开发时间的新特性外,VisualC++6.0还为Web开发和企业开发提供更良好的支持。有了MicrosoftVisualC++6.0企业版,可以创建出面向Windows和Web的多层次可调节的应用程序。有了它为Internet、SQL和COM开发所提供的优化了的支持,可以大大提高您的开发效率。1.2SQLServer2000MicrosoftSQLServer2000是一套完整的数据库和分析产品,可迅速提供下一代可扩展电子商务、各种业务和数据仓库解决方案。MicrosoftSQLServer2000是一个分布式的关系型数据库管理系统,具有客户机/服务器体系结构,采用了Transact-SQL的SQL语言在客户机与服务器间传递客户机的请求与服务器的处理结果。
它一种应用广泛的数据库管理系统,具有许多显著的优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。性能、可伸缩性及可靠性是基本要求,而进入市场时间也非常关键。除这些核心企业品质外,SQLServer2000还为您的数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。MicrosoftSQLServer2000是众多数据库开发软件的一种,它的版本包括企业版,标准版,个人版,WindowsCE版,开发版和评估版。不同版本的功能和用户群不同。SQL是访问数据库的标准语言,无论后台数据库是SQLServer,Oracle,还是IBMDB2,甚至是小型数据库ACCESS,都可以使用标准的SQL语句对它进行操作。在这里,是采用SQLServer2000是作为后台数据库。1考勤管理系统的设计1.1需求分析考勤管理系统的用户是各单位负责考勤管理的员工和领导,它可以有效的管理公司单位员工的出勤情况,规范人事制度的管理。管理员可以创建用户,修改用户信息以及删除用户,和对公司一些员工信息的编辑等。该系统包括基本信息管理,考勤信息管理,统计查询和用户管理等主要模块。每一个功能模块都需要针对不同的表来完成相同的数据库操作,即添加记录,修改记录,删除记录以及查询显示记录信息。具体功能有以下几个方面。1、基本信息的添加,修改,删除和查询。节本信息管理包括节假日日期设置,部门信息管理和员工信息管理。2、考勤信息管理包括出勤管理,加班管理,请假管理和出差管理等功能。3、统计查询功能包括日考勤统计表,月考勤统计表和当日缺勤人员列表。4、用户管理包括Admin用户管理和其他用户管理。1.2功能模块构成考勤管理系统由基本信息管理模块、考勤信息模块、统计查询模块和用户管理模块四个主要功能模块构成。基本信息管理模块,包括节假日日期设置,部门信息管理缓和员工信息管理。节假日日期信息只包括具体的日期数据,部门信息包括部门名称和部门功能的描述,员工信息包括员工姓名,性别,生日,身份证号等。考勤信息包括出勤,加班,请假,出差等信息。出勤信息包括全勤,休息,旷工,迟到和早退等信息;加班信息包括员工信息,加班时间,加班类型和加班描述;请假信息包括员工信息,请假类型和原因;出差信息包括员工信息和出差原因。
统计查询模块包括日考勤统计表,月考勤统计表和当日缺勤人员列表。日考勤统计表包括员工姓名,考勤日期,是否全勤,是否请假等信息,月考勤统计表包括员工姓名,考勤月份,全勤天数,出差天数等信息,当日缺勤人员列表包括系统当前日期缺勤员工的姓名,所在部门和联系等信息。用户管理模块用户包括Admin用户和普通用户。Admin用户可以修改自己的密码,创建修改和删除普通用户信息。普通用户只能修改自身的信息功能模块构成如图1:图1功能模块1.1数据库结构设计考勤管理系统数据库采用MicrosoftSQLSERVER2000,在使用数据库过程中,接触最多的就是数据库中的表,表是数据存储的地方,是数据库最重要的部分。这个系统数据库表由6个表构成,具体如下。CheckInfo表是记录考勤信息的,记录员工迟到,早退,全勤,旷工,病假,事假,休息,出差等信息。表1CheckInfo字段数据类型长度是否允许为空字段描述CheckDatechar10否考勤日期EmpIdint4否员工编号QuanQinchar2是全勤ChuChaichar2是出差BingJiachar2是病假ShiJiachar2是事假KuangGongchar2是旷工XiuXichar50是休息ChiDaochar50是迟到Zaotuichar50是早退Memovarchar200是备注DepInfo表是记录部门信息的。DepId为主键。表2DepInfo字段数据类型长度是否允许为空字段描述DepIdint4否部门编号DepNamevarchar50否部门名称Describesvarchar250是描述UIDint4否总的编号EmpInfo表是记录员工的基本信息。管理员可以查看员工信息,添加员工信息需要用的表。EmpId是主键。表3EmpInfo字段数据类型长度是否允许为空字段描述EmpIdint4否编号Namevarchar50否姓名Sexchar2是性别Birthdayvarchar20是生日IdCardvarchar20是身份证号OfficePhonevarchar30是办公Mobilevarchar30是
HireDateInt4是到岗日期DepIdvarchar40是部门编号Missionvarchar50是工作岗位Dutyvarchar20是职务Memovarchar200是备注信息HolidaySet表是设置节假日信息的。Id为主键。表4HolidaySet字段数据类型长度是否允许为空字段描述Idint4否编号HolidayDatechar10否节假日期HolidayNamevarchar50是节假名称OverTime表是记录加班信息的。表5OverTime字段数据类型长度是否允许为空字段描述otDateChar10否加班日期EmpIdint4否员工编号otHoursmallint2否加班时间otTypevarchar50否加班类型Describesvarchar200是描述UserInfo表是记录用户信息的,包括用户名和密码。表6UserInfo字段数据类型长度是否允许为空字段描述UserNamevarchar40否用户名Passwdvarchar40是密码UserTypeint4否用户类型1考勤管理系统的实现1.1系统登陆功能的实现用户要使用本系统,首先必须通过系统的身份认证。如果用户名错误或者不存在,密码错误3次后,对话框自动关闭。图2登陆对话框具体代码如下:voidCLoginDlg::OnOK(){UpdateData(TRUE);//将对话框中编辑框的数据读取到成员变量中if(m_User=="")//没有输入用户名{MessageBox("请输入用户名","信息提示");GetDlgItem(IDC_USER_EDIT)->SetFocus();return;}CUserInfoUser;//定义用户信息表变量if(!User.IsExistUser(m_User))//判断用户是否存在{count++;
if(count<3){MessageBox("用户名不存在,请重新输入!","用户名错误",MB_ICONINFORMATION);UpdateData(FALSE);GetDlgItem(IDC_USER_EDIT)->SetFocus();return;}else{MessageBox("重试次数已到,不能再输入用户名和密码,即将退出系统!","用户名错误",MB_ICONEXCLAMATION);exit(0);}}User.GetInfo(m_User);//判断密码是否正确if(User.Passwd!=m_Passwd){……//同用户判断}CDialog::OnOK();//关闭对话框}1.1基本信息管理模块基本信息管理模块包括节假日信息管理,部门信息管理和员工信息管理。4.2.1节假日信息管理节假日信息管理,首先对节假日信息的编辑,判断节假日记录是否存在,存入数据。在从HolidaySet中读取所有节假日记录,在对记录进行操作,即添加,修改和删除。普通用户是不能打开这一块信息的,节假日管理对他们是不可见的。图3节假日信息框部分代码如下:BOOLCHolidayManDlg::OnInitDialog()//初始化{CDialog::OnInitDialog();RefreshData();}voidCHolidayManDlg::RefreshData()//更新数据{UpdateData(TRUE);CStringcSource="SELECTId,HolidayDateAS节假日,HolidayNameAS名称""FROMHolidaySet";//设置Select语句m_Adodc.SetRecordSource(cSource);//刷新ADOData控件的记录源m_Adodc.RefreshData()}voidCHolidayManDlg::OnAddButton()//添加按钮{UpdateData(TRUE);CHolidayEditDlgdlg;//初始化HolidayEditDlg对话框中的变量
if(dlg.DoModal()==IDOK)RefreshData();}voidCHolidayManDlg::OnModiButton()//修改按钮{CHolidayEditDlgdlg;//设置HolidayEditDlg对话框中的变量if(dlg.DoModal()==IDOK)//打开HolidayEditDlg对话框RefreshData();}voidCHolidayManDlg::OnDelButton()//删除按钮{cur.SqlDelete(m_Datagrid.GetItem(0));RefreshData();}4.2.1部门信息管理部门信息管理模块包括部门信息编辑对话框,部门信息管理对话框和部门信息选择对话框。部门编辑主要是用来添加和修改部门信息。部门信息管理对话框,是系统管理员进行的操作,如果当前用户不是系统管理员,则添加,修改,和删除等按钮是不可以用,他们没有相关的权限。在删除部门的时候要对部门信息进行判断,如果部门是根节点,包含下一级部门和员工时不能删除。部门信息的选择,是为了方便用户选择部门,以后的其他模块程序可以通过此程序来获取选择的部门信息。图4部门图主要代码如下:BOOLCDepManDlg::OnInitDialog()//初始化{CDialog::OnInitDialog();}voidCDepManDlg::AddtoTree(HTREEITEMm_node,intUpperId){//使用递归方法将部门添加到TreeView控件中inti;HTREEITEMm_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)));}}voidCDepManDlg::OnAddButton()//添加按钮
{HTREEITEMnode;//用于保存当前选择的节点node=m_tree.GetSelectedItem();//取得当前选择的节点}//删除按钮voidCDepManDlg::OnDelButton(){HTREEITEMnode;//用于保存当前节点node=m_tree.GetSelectedItem();//取得当前节点//弹出对话框,要求用户确认是否删除。如果用户单击“是”按钮,则删除if(MessageBox("是否删除当前部门?","请确认",MB_YESNO)==IDYES){dep.SqlDelete(cDepId);//删除表Departments中的指定记录m_tree.DeleteItem(node);//删除Tree控件中的当前节点}}4.2.1员工信息管理编辑员工基本信息对话框用来添加和修改员工信息,主要包括员工的姓名,性别,出生日期,身份证号,到岗日期,办公,,工作岗位,职务和描述信息。员工管理则是通过选择部门信息,添加,修改和删除员工信息这里可以查看每个部门下的员工信息。同样普通用户只能查看员工信息,不能对其信息进行添加,修改和删除等操作。图5员工信息图主要代码如下:voidCEmpManDlg::RefreshData(){UpdateData(TRUE);intiDepId;//从Tree控件中读取部门编号信息HTREEITEMnode;node=m_tree.GetSelectedItem();iDepId=m_tree.GetItemData(node);CStringcDepId;//根据部门编号设置SELECT语句cDepId.Format("%d",iDepId);//设置SELECT语句CStringcSource="SELECTEmpId,NameAS姓名,SexAS性别,""BirthdayAS生日,IdCardAS身份证号,OfficePhoneAS办公,""MobileAS号码,HireDateAS到岗日期,MissionAS工作岗位,"
"DutyAS职务,MemoAS备注FROMEmpInfoe,DepInfod""WHEREe.DepId=d.DepId";…}voidCEmpManDlg::OnAddButton()//添加按钮{UpdateData(TRUE);CTimeCurrentTime=CTime::GetCurrentTime();//添加员工时,将日期控件设置为当天if(dlg.DoModal()==IDOK)RefreshData();}voidCEmpManDlg::OnModiButton()//修改按钮{UpdateData(TRUE);CEmpInfoemp;//读取选择员工的记录emp.GetInfo(m_Datagrid.GetItem(0));CEmpEditDlgdlg;//将员工数据读取到编辑对话框中if(dlg.DoModal()==IDOK)RefreshData();}voidCEmpManDlg::OnDelButton()//删除按钮{CEmpInfoemp;emp.SqlDelete(m_Datagrid.GetItem(0));RefreshData();}1.1考勤管理模块考勤管理模块主要实现了出勤信息管理,加班信息管理,请假信息管理和出差信息管理。4.3.1出勤信息管理出勤信息编辑对话框中,首先单击选择部门按钮,在左侧的表格中将显示选择部门中的所有员工信息。选择一个员工,会在右侧下方显示他的出勤状态。选择出勤状态,然后单击确定按钮,可以保存指定员工的出勤情况。出勤管理对话框中,根据左边的部门,列出各个部门中的员工及其员工的出勤信息,出勤时间,是否全勤,是否出差,是否迟到,是否早退,是否旷工等。用户可以根据实际的情况进行具体的操作,添加,修改和删除。图6出勤信息主要代码如下:voidCOnDutyManDlg::RefreshData(){UpdateData(TRUE);intiDepId;//从Tree控件中读取部门编号信息
HTREEITEMnode;node=m_tree.GetSelectedItem();iDepId=m_tree.GetItemData(node);CStringcDepId;//根据部门编号设置SELECT语句cDepId.Format("%d",iDepId);//设置SELECT语句CStringcSource="SELECTc.EmpIdAS员工编号,e.NameAS姓名,c.CheckDateAS出勤日期,""c.QuanQinAS是否全勤,c.XiuXiAS是否休息,c.KuangGongAS是否旷工,""c.ChiDaoAS是否迟到,c.ZaoTuiAS是否早退FROMCheckInfoc,EmpInfoe,DepInfod""WHEREc.EmpId=e.EmpIdANDe.DepId=d.DepId";m_Adodc.SetRecordSource(cSource);//刷新ADOData控件的记录源m_Adodc.Refresh();}voidCOnDutyManDlg::OnAddButton()//添加按钮{...}voidCOnDutyManDlg::OnModiButton()//修改按钮{…}voidCOnDutyManDlg::OnDelButton()//删除按钮{…}程序调用m_tree.GetSelectedItem()函数获取当前选择的部门接点数据,并使用GetItemData(node)函数获取部门编号。然后根据选择的部门编号设置SELECT语句,从表CheckInfo,表EmpInfo和表DepInfo中获取部门中所有员工的出勤记录。4.3.1加班信息管理加班信息编辑对话框主要是对员工的加班情况的添加和修改。首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的加班状态。选择加班状态,包括加班时数,加班原因和加班类型,然后单击确定按钮,可以保存指定员工的加班情况。加班信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的加班信息,加班时间,加班时数,加班原因和加班类型等。用户可以根据实际的情况进行具体的操作,添加,修改和删除。图7加班信息框部分代码如下:voidCOvertimeManDlg::OnAddButton()//添加按钮{COvertimeEditDlgdlg;CurrentTime=CTime::GetCurrentTime();dlg.otDate=CurrentTime.Format("%Y-%m-%d");
if(dlg.DoModal()==IDOK)RefreshData();}voidCOvertimeManDlg::OnModiButton()//修改按钮{if(m_Adodc.GetRecordset().GetEof()){MessageBox("请选择要修改的记录!");return;}CEmpInfoemp;//根据员工编号得到员工信息emp.GetInfo(m_Datagrid.GetItem(0));CStringcDepId;//根据部门编号得到部门信息cDepId.Format("%d",emp.DepId);dep.GetInfo(cDepId);COvertimeEditDlgdlg;if(m_Datagrid.GetItem(4)=="法定节假日加班")dlg.m_overtime=0;elseif(m_Datagrid.GetItem(4)=="周六日加班")dlg.m_overtime=1;elseif(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();}voidCOvertimeManDlg::OnDelButton()//删除按钮{cur.SqlDelete(m_Datagrid.GetItem(2),m_Datagrid.GetItem(0));}4.3.1请假信息管理请假信息编辑对话框中,首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的请假状态。选择出勤状态,请假分为病假和事假,并且需要输入请假原因,然后单击确定按钮,可以保存指定员工的请假情况。请假信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的信息,选中员工的姓名则可以进行员工的请假信息的编辑。用户可以根据实际的情况进行具体的操作,添加,修改和删除。图8请假信息图主要代码如下:
voidCLeaveEditDlg::OnOK(){UpdateData(TRUE);if(m_Adodc.GetRecordset().GetEof())//是否选择人员{MessageBox("请选择人员");return;}if(m_shijia==-1)//是否进行添加考勤状态{MessageBox("请选择出勤状态");return;}CCheckInfocur;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();//插入记录}else{cur.UpdateLeave(cur.CheckDate,EmpId);//修改CheckInfo表记录}CDialog::OnOK();}请假信息保存在表CheckInfo中,如果在出勤信息管理模块中输入了出勤信息,则不能再输入请假信息。如果修改记录,则程序调用UpdateLeave()函数,更新表CheckInfo中的Shijia,Bingjia和Memo等字段的值。4.3.1出差信息管理出差信息管理编辑对话框主要是对员工的出差情况的添加和修改。首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的出差状态。选择出差状态,写出出差原因,然后单击确定按钮,可以保存指定员工的出差情况。出差信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的出差信息。用户可以根据实际的情况进行具体的操作,添加,修改和删除。图9出差信息
主要代码如下:voidCErrandEditDlg::OnOK(){UpdateData(TRUE);if(m_Adodc.GetRecordset().GetEof())//是否选择人员{MessageBox("请选择人员");return;}CCheckInfocur;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();//插入记录}else{cur.UpdateErrand(cur.CheckDate,m_Datagrid.GetItem(0));//修改CheckInfo表记录}CDialog::OnOK();……}1.1统计查询模块统计查询模块主要是实现了日考勤统计表,月考勤统计表,当日缺勤人员列表3个功能。4.4.1日考勤统计表日考勤统计表按日查询所有员工的出勤,加班,请假和出差等信息。
首先选择要查询的日期,在点击查询按钮,即列出这日期的员工信息,包括员工编号,员工姓名,出勤日期,是否全勤,是否出差,是否请假,是否加班等等。图10日考勤统计图主要代码如下:voidCTimeSelDlg::RefreshData(){UpdateData(TRUE);CStringcTime;//根据部门编号设置SELECT语句cTime=m_time.Format("%Y-%m-%d");//设置SELECT语句CStringcSource="SELECTc.EmpIdAS员工编号,e.NameAS姓名,c.CheckDateAS出勤日期,""c.QuanQinAS是否全勤,c.ChuChaiAS是否出差,c.ShiJiaAS是否事假,""c.BingJiaAS是否病假,c.KuangGongAS是否旷工,c.XiuXiAS是否休息,""c.ChiDaoAS是否迟到,c.ZaoTuiAS是否早退,c.MemoAS备注""FROMCheckInfoc,EmpInfoeWHEREc.EmpId=e.EmpIdANDc.CheckDate=""+cTime+""";//刷新ADOData控件的记录源m_Adodc.SetRecordSource(cSource);m_Adodc.Refresh();}程序执行SELECT语句,从表CheckInfo和EmpInfo中读取选择日期中各员工的考勤信息。4.4.1月考勤统计表月考勤统计表是按月统计所有员工的出勤天数,请假天数,出差天数等信息。为了对各种考勤天数进行统计,需要创建一组视图,分别按月统计所有员工的全勤天数,休息天数,旷工天数,迟到次数,早退次数,病假天数,事假天数和出差天数。在表CheckInfo中,CheckDate字段保存考勤日期,LEFT(CheckDate)返回考勤日期的年份和月份信息,使用COUNT()函数和GROUPBY子句统计考勤月份和员工分组的各种考勤天数。图11月考勤统计图主要代码如下:voidCDepDlg::RefreshData(){UpdateData(TRUE);//根据部门编号设置SELECT语句CStringcStrCnd,cDepId;cDepId.Format("%d",iDepId);if(iDepId>0)
cStrCnd="Andd.DepId="+cDepId;elsecStrCnd="";CStringcTime;//查询日期//得到年份和月份m_year.GetLBText(m_year.GetCurSel(),cYear);m_month.GetLBText(m_month.GetCurSel(),cMonth);cTime=cYear+"-"+cMonth;//得到日期//设置SELECT语句CStringcSource="SELECTe.NameAS姓名,""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早退次数""FROMv_QuanQinv1,v_ChuChaiv2,v_ShiJiav3,v_BingJiav4,DepInfod,""v_KuangGongv5,v_XiuXiv6,v_ChiDaov7,v_ZaoTuiv8,EmpInfoe""WHEREe.EmpId*=v1.EmpIdANDe.EmpId*=v2.EmpIdAnde.DepId=d.DepId""ANDe.EmpId*=v3.EmpIdANDe.EmpId*=v4.EmpIdANDe.EmpId*=v5.EmpId""ANDe.EmpId*=v6.EmpIdANDe.EmpId*=v7.EmpIdANDe.EmpId*=v8.EmpId""ANDv1.CheckMonth=""+cTime+""ANDv2.CheckMonth=""+cTime+""ANDv3.CheckMonth=""+cTime+""ANDv4.CheckMonth=""+cTime+""ANDv5.CheckMonth=""+cTime+""ANDv6.CheckMonth=""+cTime+
""ANDv7.CheckMonth=""+cTime+""ANDv8.CheckMonth=""+cTime+"""+cStrCnd;//刷新ADOData控件的记录源m_Adodc.SetRecordSource(cSource);m_Adodc.Refresh();…}程序执行SELECT语句,从表EmpInfo和其他视图中读取选择月份中各员工的考勤信息,ISNULL()函数是SQLServer的内部函数,它的功能是当第一个参数为NULL时,将第二个参数作为结果返回。4.4.1当日考勤人员列表当日考勤人员列表查询当前系统日期中所有缺勤的员工信息,缺勤指病假,事假和旷工等情况。图12当日缺勤人员图主要代码如下:voidCAbsenceDlg::RefreshData(){UpdateData(TRUE);CStringcTime;//根据部门编号设置SELECT语句cTime=CurrentTime.Format("%Y-%m-%d");//设置SELECT语句CStringcSource="SELECTe.EmpIdAS员工编号,e.NameAS姓名,d.DepNameAS部门名称,""e.MobileAS联系FROMDepInfod,EmpInfoe""WHEREe.DepId=d.DepIdANDe.EmpIdIN""(SELECTEmpIdFROMCheckInfoWHERE(ShiJia="是"ORBingJia="是"ORKuangGong="是")""ANDCheckDate=""+cTime+"")";m_Adodc.SetRecordSource(cSource);//刷新ADOData控件的记录源m_Adodc.Refresh();…}程序中使用了嵌套查询语句,即在一个SELECT语句中嵌套使用了另外一个SELECT语句。主SELECT语句显示员工和部门信息,在其查询条件中使用IN子句嵌套另一个SELECT语句。从SELECT可以返回表CheckInfo中当日事假,病假和旷工的记录。1.1用户管理模块
根据用户类型的不同,用户管理模块的功能也不相同,主要包括Admin用户可以创建其他用户,修改用户的密码,删除其他用户,而其他用户只能修改自身的用户信息。这个模块包括了用户管理和密码修改两个功能。在用户管理中只有Admin用户才可以进行操作,可以添加删除其他用户信息。图13用户管理框图主要代码如下:voidCUserManDlg::RefreshData(){UpdateData(TRUE);//设置Select语句CStringcSource="SELECTUserNameAS用户名,Passwd,""(CASEWhenUserType=1Then"系统管理员"ELSE"普通用户"END)AS用户类型,""UserTypeFROMUserInfo";//刷新ADOData控件的记录源m_Adodc.SetRecordSource(cSource);m_Adodc.Refresh();……}voidCPasswdDlg::OnOK(){//将对话框中编辑框的数据读取到成员变量中UpdateData(TRUE);//检查数据有效性if(m_old==""){MessageBox("请输入旧密码");GetDlgItem(IDC_OLD_EDIT)->SetFocus();return;}if(m_new==""){MessageBox("请输入新密码");GetDlgItem(IDC_NEW_EDIT)->SetFocus();return;}if(m_confirm!=m_new){MessageBox("两次输入的新密码不同");UpdateData(FALSE);GetDlgItem(IDC_NEW_EDIT)->SetFocus();return;}//定义CUserInfo对象,用于从表UserInfo中读取数据CUserInfocur;
cur.GetInfo(m_user);//如果读取的数据与用户输入数据不同,则返回if(cur.Passwd!=m_old){MessageBox("用户密码不正确!");UpdateData(FALSE);GetDlgItem(IDC_OLD_EDIT)->SetFocus();return;}cur.Passwd=m_new;cur.SqlUpdate(m_user);MessageBox("密码修改成功,下次登录请使用新密码");CDialog::OnOK();}SELECT语句中使用了3个表,表UserInfo,表DepInfo和EmpInfo。为了防止因为表UserInfo中的EmpId字段找不到表EmpInfo中对应的EmpId字段值而造成用户记录无法显示问题,在表之间连接关系时使用了LEFTJION关键字,即只要是UserInfo中存在的记录都将出现在结果集中,无论它在其他两个表中是否存在对应的记录。程序将对用户输入的密码进行验证,包括旧密码是否为空,新密码是否为空,两次输入的新密码是否相同,旧密码是否通过密码验证,通过验证后,程序调用CUsers::sql_updatePassword()函数,更新用户密码。结论考勤管理系统使用的是VisualC++6.0和SQLServer2000开发的。系统主要分为以下几个模块:基本信息管理模块、考勤管理模块、统计查询模块、用户管理模块等。系统重点设计了企事业单位员工的出勤管理和用户操作的界面,从而保证企事业单位的正常运行,是人力资源的重要组成部分。系统的基本功能已经实现,可以正常使用,但在数据库的合理性、界面的美观性和搜索功能上存在不足,还需改进。通过设计,我认识到了考勤管理系统的重要性,加深了对公司考勤管理流程的了解。在设计过程中,通过对语言的学习,我对VisualC++6.0和SQLServer加深了的印象,能熟练的使用部分控件,并且对使用ADO数据访问技术也有了一定的心得体会,这是一个收获的过程。相信这次设计的完成对我今后的工作有很大的帮助。参考文献[1]启明工作室.VisualC+++SQLServer数据库应用实例[M].北京:人民邮电出版社,2006。
[2]方睿,吴四九.网络数据库原理及应用[M].成都:四川大学出版社,2005。[3]胡小军.VisualC++高级开发范例解析[M].北京:清华大学出版社,1998。[4]张越.VisualC++网络程序设计实例详解[M].北京:人民邮电出版社,2006。[5]StevenHolzner.VisualC++6.0轻松进阶[M].北京:电子工业出版社,2005。[6]JohnE.Swanke.VisualC++MFC编程实例[M].北京:机械工业出版社,2005。[7]张海棠.VisualC++6.0编程指南[M].北京:航空工业出版社,2002。
致谢本文是在XXX老师的热情关心和指导下完成的,他渊博的知识和严谨的治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。在此向他表示我最衷心的感谢!在论文完成过程中,本人还得到了王守兵同学的热心帮助,本人向他们表示深深的谢意!最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢!