- 2.04 MB
- 2022-05-17 12:56:40 发布
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
本科学生毕业论文(设计)题目(中文):人事考勤管理系统(英文):Personnelattendancemanagementsystem姓名学号院(系)电子工程系专业、年级电子信息工程级指导教师II
湖南科技学院本科毕业论文(设计)诚信声明本人郑重声明:所呈交的本科毕业论文(设计),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。本科毕业论文(设计)作者签名:二O一三年月日II
毕业论文(设计)任务书课题名称:人事考勤管理系统学生姓名:系别:电子工程系专业:电子信息工程指导教师:II
1、主题词、关键词:考勤管理,MicrosoftVisual2008,MySQL,ADO2、毕业论文(设计)内容要求:(1)论文应包括目录、中英文摘要、绪论、具体章节、总结。(2)对基于VisualStudio2008(MFC)的仓储管理系统进行研究与开发设计。(3)毕业论文字数在10000字左右。M
3、文献查阅指引:[1]张潇.推进我国企业人力资源管理信息化的对策研究[M].管理观察,2010(1):148-149[2]马聪.人力资源信息系统的功能及其构建方法与步骤[M].石油知识,2009(3):46-48[3]谢春兴.如何选择人力资源软件系统[M].厦门科技,2009(4):25-27[4]杨小薇.人力资源管理跨出后院[M].IT经理世界,2002(9):23-30[5]王挺.企业人力资源管理决策支持系统结构设计[J].中国管理信息化(综合版),2007(07):23-30[6]王锦秀,黄红发.现代企业人力资源管理及管理偶是探讨[M].江西社会科学,2003,34(12):153-156[7]程红梅.传统人事管理与现代人力资源管理的比较研究[M].万方数据库,2010(7)[8]李清黎,徐慧娟.人力资源管理系统的现状与不足[M].当代经济,2009(6):66-67[9]侯俊杰.深入浅出MFC[M].松岗,1997.05[10]孙鑫.VC++深入详解[M].电子工业出版社,2012.07.01[11]辛长安,王颜国.Visual.C.权威剖析--MFC的原理、机制与开发实例[M].清华大学出版社,2008[12]IvorHorton著李颂华康会光译.VisualC++2005入门经典[M].清华大学,2012.12.01[13]博罗塞斯.MFC.Windows程序设计(第2版)[M].清华大学,2007.54、毕业论文(设计)进度安排:(1)2012.10月-2012.12月搜集资料,完成开题报告,并制定初步方案;(2)2012.12月-2013.2月分块进行设计,编写程序并进行代码调试;(3)2013.3月-2013.4月撰写毕业论文;(4)2013年5月修改论文并定稿,准备答辩。教研室意见:负责人签名:注:本任务书一式三份,由指导教师填写,经教研室审批后一份下达给学生,一份交指导教师,一份留系里存档。M
湖南科技学院本科毕业论文(设计)开题报告书论文(设计)题目USB摄像头视频监控系统设计与实现作者姓名冯贵龙所属系、专业、年级电子工程系电子信息工程专业2009年级指导教师姓名、职称张丹硕士预计字数10000开题日期2012-12-25选题的根据:1)说明本选题的理论、实际意义对一个企业来说,人才是其核心竞争力,人力资源是一个企业中最宝贵的资源。而对人事的管理往往关系到一个企业的发展与兴衰。特别是在经济技术迅猛发展的今天,如何对人事进行有效运用,满足组织当前及未来发展的需要,保证组织目标实现与成员发展的最大化,已经成为每一个有眼光的企业管理者关注的问题。人事考勤管理系统正是在这种背景下应用而生。2)综述国内外有关本选题的研究动态和自己的见解人事管理系统的发展大致经过了3个阶段。第一阶段开始于20世纪60年代末期。当时由于用手工的方式计算和发放薪资已逐渐不能适应当时背景下的企业发展需求,第一代人事管理系统正是在这种背景下被开发出来的。第二阶段的发展开始于20世纪70年代末期。第二代人事管理系统基本解决了第一代系统的缺陷。第二代系统为计算机专业人员开发,其主要缺陷是对人事的需求和理念考虑不全面。但总体来说,第二代的人事管理系统虽仍然以薪资处理为主,但也兼容了部分人事信息管理功能,因此第二代人事管理系统也叫做薪资/人事管理系统。第三阶段出现在20世纪90年代末,此时数据库技术的应用使得人事管理系统迎来了革命性地发展。第三代人事管理系统将与人力资源相关的数据信息进行统一的管理,形成了集成的数据库,结合报表生成、分析和信息共享等工具,促进了工作流程的自动化,大大缩短了管理周期,并为专家提供了技术分析工具,为管理层提供了决策支持。综上所述开发一套适合我国国情、结合企业实际、功能完整、流程规范的人事考勤管理系统是非常有必要的。主要内容:人事考勤管理系统包括登录、部门管理、人员信息管理、考勤信息录入、考勤管理和考勤汇总查询等等。根据上述工作流程,人事考勤管理系统将包含以下内容:1)登录信息的输入。2)用户名的修改、增加、删除。3)部门管理。4)人员信息管理。5)考勤管理。M
研究方法:方法为:析综合法、理论联系实际法、比较法和归纳法。严格按照数据库管理系统开发的流程,从需求分析开始,弄清系统的工作流程、存在问题,提出解决方法;对系统进行逻辑设计,包括数据流程、数据字典的描述等等;进行系统总体设计,包括功能模块设计、数据库设计等;最后进行详细的代码设计、用户界面设计,并进行一定的测试。完成期限和采取的主要措施:完成期限:2012年10月到2013年5月主要措施:1)确定课题,收集相关资料并采集和选择方案;2)对收集资料进行整理,对各方案可行性评估;3)确定方案,开始完成论文初稿;4)进行理论与实际结合实验,完善设计,论文定稿;5)对论文进行装订整理,准备论文答辩并完成论文答辩。主要参考资料:[1]张潇.推进我国企业人力资源管理信息化的对策研究[M].管理观察,2010(1):148-149[1]马聪.人力资源信息系统的功能及其构建方法与步骤[M].石油知识,2009(3):46-48[2]谢春兴.如何选择人力资源软件系统[M].厦门科技,2009(4):25-27[3]杨小薇.人力资源管理跨出后院[M].IT经理世界,2002(9):23-30[4]王挺.企业人力资源管理决策支持系统结构设计[J].中国管理信息化(综合版),2007(07):23-30[5]王锦秀,黄红发.现代企业人力资源管理及管理偶是探讨[M].江西社会科学,2003,34(12):153-156[6]程红梅.传统人事管理与现代人力资源管理的比较研究[M].万方数据库,2010(7)[7]李清黎,徐慧娟.人力资源管理系统的现状与不足[M].当代经济,2009(6):66-67[8]侯俊杰.深入浅出MFC[M].松岗,1997.05[9]孙鑫.VC++深入详解[M].电子工业出版社,2012.07.01[10]辛长安,王颜国.Visual.C.权威剖析--MFC的原理、机制与开发实例[M].清华大学出版社,2008[11]IvorHorton著李颂华康会光译.VisualC++2005入门经典[M].清华大学,2012.12.01[1]博罗塞斯.MFC.Windows程序设计(第2版)[M].清华大学,2007.5指导教师意见:指导教师签名:教研室意见:签名:年月日M
开题报告会纪要时间2012年12月25日地点三教103与会人员姓名职务(职称)姓名职务(职称)姓名职务(职称)张新安教授张丹硕士唐云讲师张晓琳讲师潘海军高级实验师李荣讲师会议记录摘要:问:1.选题的意义是什么?2.连接数据库与客户端的方法有哪几种,各自的特点是什么?3.论文(设计)拟做的工作在哪方面?答:1.随着经济体制的改革,企业经营管理发生了很大的变化。企业竞争的焦点也从资金、物质资源的竞争转为人才资源的竞争。人事管理已成为企业管理的重要内容。2.有使用ADO访问数据库和使用ODBCAPI访问数据库两种方法。前者ADO通过其内部的属性和方法能提供统一的数据库访问接口方法,ADO集中了DAO和RDO的优点,科可以通过简单的编程。后者为访问不同的或者相异的数据库管理系统提供了统一的方法,大部分数据库均可以用ODBCAPI,只要用Windows控制面板的ODBC管理器注册一个数据源,管理器根据数据源提供的ODBC驱动程序、数据库位置和数据库类型等信息建立起ODBC与具体数据库的联系。3.论文拟做的工作首先分析出系统所需的数据库表,各个窗口;再对每个设计好的窗口进行代码设计和调试,最后对整个系统进行调试,打包发布。会议主持人:记录人: 年 月日指导小组意见负责人签名:年月日系部意见负责人签名:年月日注:此表由学生本人填写,一式三份,一份留系里存档,指导老师和本人各保存一份。M
湖南科技学院毕业论文(设计)中期检查表毕业论文(设计)题目人事考勤管理系统学生姓名冯贵龙学号5系别电子工程系专业电子信息工程指导教师张丹检查日期2013.3.25-5.31指导教师检查情况记载及修改意见:现已完成的工作:1、完成了基本窗口例如:登录、入出库的界面及代码设计;2、完成了打印、查询管理员设置等模块的界面设计;3、大部分界面的代码设计完毕并编译调试成功;4、论文大部分内容已经完成。接下来的工作:1、将系统其他模块进行调试;2、继续论文的写作工作;3、修改摘要,力求精简,并对论文章节进行调整;4、按照毕业论文撰写规范进行格式调整。签名:注:此表用于指导教师在学生毕业论文(设计)初稿完成后对学生执行任务书情况进行中期检查时用,由指导教师填写。M
湖南科技学院毕业设计(论文)指导过程记录表毕业论文(设计)题目人事考勤管理系统学生姓名冯贵龙学号5专业班级电信0904指导教师张丹职称硕士系(教研室)电子工程系(电子科学与技术教研室)指导过程记录指导内容记录(一)确定毕业设计题目,给出毕业论文设计要求。学生签名:2013年1月5日指导教师签名:2013年1月5日指导内容记录(二)指导开题报告及如何利用互联网查阅文献,并推荐一些参考文献、书籍和网站。学生签名:2013年2月3日指导教师签名:2013年2月3日指导内容记录(三)SQL和MySQL数据库的常用设计方法,及其适用区别。学生签名:2013年2月18日指导教师签名:2013年2月18日指导内容记录(四)基于VisualStudio2008软件环境的设计及代码的调试过程。学生签名:2013年3月6日指导教师签名:2013年3月6日M
指导过程记录指导内容记录(五)数据库与VisualStudio2008的链接方法。学生签名:2013年3月25日指导教师签名:2013年3月25日指导内容记录(六)设计成工程后的详细打包发布过程。学生签名:2013年4月12日指导教师签名:2013年4月12日指导内容记录(七)初稿的审阅,章节的调整及中英文摘要的修改。学生签名:2013年4月22日指导教师签名:2013年4月22日指导内容记录(八)参考文献的标注及图表格式的规范性,论文定稿。学生签名:2013年5月4日指导教师签名:2013年5月4日答辩小组组长意见(对情况是否属实做出意见)组长(签名):年月日注:本表与毕业论文一起装订存档。M
湖南科技学院本科毕业论文(设计)评审表论文题目人事考勤管理系统作者姓名冯贵龙所属系、专业、年级电子工程系电子信息工程专业2009年级指导教师姓名、职称张丹硕士字数10000定稿日期2013.5.8中文摘要随着经济体制的改革,企业经营管理发生了很大的变化。企业竞争的焦点也从资金、物质资源的竞争转为人才资源的竞争。人事管理已成为企业管理的重要内容。在传统的人事管理系统中,人事工作人员往往花费大量的时间、精力在日常的行政事务性操作上,被这些繁琐的日常事务所束缚,无暇顾及人事管理中最为重要的策略性工作。今天,技术的进步逐渐解放了人事的“双手和大脑”,使人事管理发生了很大的变化。在电子人事管理系统中可以通过集中式的数据库、自动信息处理等信息化手段,使人事管理达到降低成本、提高效率、改进员工服务模式的效果。本文从软件工程的角度对人事考勤管理系统进行了需求分析,清楚了开发重点并对系统功能模块及数据库的的结构设计进行了详细分析。采用VisualVisual2008作为开发环境,将系统分模块进行设计,包含了录入、编辑、查询、统计等功能。后台数据库使用MySQL数据库为开发工具,用ADO技术与之链接。使系统的界面友好,操作简单,数据库安全可靠,且具有一定的扩展性。关键词考勤管理VisualVisual2008MySQLADO英文摘要 With reformoftheeconomicsystem,businessmanagementhasmadegreatchanges.Andthefocusofcompetitionofenterpriseisshiftingfromfundsandmaterialresourcestohumanresourcesandpersonnelmanagementhasbecomeanindispensableelement.Intraditionalpersonnelmanagement,personnelstaffsareusuallyboundedbytediousday-to-dayaffairsspendingmosttheirtimeandenergyindailyadministrativeaffairsoperationsothatdonottakethemostimportantstrategicworkintoaccount.Butnowadays,theadvancementoftechnologyliberatesthehandsandmindofpersonnelstaff,whichbringshugechangestopersonnelmanagement.Theapplicationofelectronicpersonnelmanagementsystemhelpspersonnelmanagementtoreachthegoaloflowcost,highefficiencyandimprovedstaffservicemodelthroughthecentralizeddatabase,theautomaticinformationprocessingandotherinformationalmeans.Thispaperanalysesthedemandoftheattendanceofpersonnelmanagementsystemandclarifiedtheexploitivepoint.Italsoanalysesthestructuraldesignofsystem-functionmoduleexplicitly,whichusesVisualVisual2008asitsexploitativesettinganddividessystemintomodulestodesignwhichincludesentering,compiling,inquiringandcounting.AndbackgrounddatabaseuseMySQLdatabaseasitsexploitativetoolanduseADOtechnologytolink,whichmakeswindowofsystemfriendlyandeasytooperateandalsomakesdatabasesecureandreliableandatthesametimehasagoodscalability.关键词AttendancemanagementVisualVisual2008MySQLADOM
指导教师评定成绩评审基元评审要素评审内涵满分指导教师实评分选题质量25%目的明确符合要求选题符合专业培养目标,体现学科、专业特点和教学计划的基本要求,达到毕业论文(设计)综合训练的目的。10理论意义或实际价值符合本学科的理论发展,有一定的学术意义;对经济建设和社会发展的应用性研究中的某个理论或方法问题进行研究,具有一定的实际价值。10选题恰当题目规模适当,难易度适中;有一定的科学性。5能力水平40%查阅文献资料能力能独立查阅相关文献资料,归纳总结本论文所涉及的有关研究状况及成果。10综合运用知识能力能运用所学专业知识阐述问题;能对查阅的资料进行整理和运用;能对其科学论点进行论证。10研究方案的设计能力整体思路清晰;研究方案合理可行。5研究方法和手段的运用能力能运用本学科常规研究方法及相关研究手段(如计算机、实验仪器设备等)进行实验、实践并加工处理、总结信息。10外文应用能力能阅读、翻译一定量的本专业外文资料、外文摘要和外文参考书目(特殊专业除外)体现一定的外语水平。5论文质量35%文题相符较好地完成论文选题的目的要求。5写作水平论点鲜明;论据充分;条理清晰;语言流畅。15写作规范符合学术论文的基本要求。用语、格式、图表、数据、量和单位、各种资料引用规范化、符合标准。10论文篇幅10000字左右。5实评总分成绩等级指导教师评审意见:指导教师签名:说明:评定成绩分为优秀、良好、中等、及格、不及格五个等级,实评总分90—100分记为优秀,80—89分记为良好,70—79分记为中等,60—69分记为及格,60分以下记为不及格。评阅教师评定成绩M
评审基元评审要素评审内涵满分评阅教师实评分选题质量25%目的明确符合要求选题符合专业培养目标,体现学科、专业特点和教学计划的基本要求,达到毕业论文(设计)综合训练的目的。10理论意义或实际价值符合本学科的理论发展,有一定的学术意义;对经济建设和社会发展的应用性研究中的某个理论或方法问题进行研究,具有一定的实际价值。10选题恰当题目规模适当,难易度适中;有一定的科学性。5能力水平40%查阅文献资料能力能独立查阅相关文献资料,归纳总结本论文所涉及的有关研究状况及成果。10综合运用知识能力能运用所学专业知识阐述问题;能对查阅的资料进行整理和运用;能对其科学论点进行论证。10研究方案的设计能力整体思路清晰;研究方案合理可行。5研究方法和手段的运用能力能运用本学科常规研究方法及相关研究手段(如计算机、实验仪器设备等)进行实验、实践并加工处理、总结信息。10外文应用能力能阅读、翻译一定量的本专业外文资料、外文摘要和外文参考书目(特殊专业除外)体现一定的外语水平。5论文质量35%文题相符较好地完成论文选题的目的要求。5写作水平论点鲜明;论据充分;条理清晰;语言流畅。15写作规范符合学术论文的基本要求。用语、格式、图表、数据、量和单位、各种资料引用规范化、符合标准。10论文篇幅10000字左右。5实评总分成绩等级评阅教师评审意见:评阅教师签名:说明:评定成绩分为优秀、良好、中等、及格、不及格五个等级,实评总分90—100分记为优秀,80—89分记为良好,70—79分记为中等,60—69分记为及格,60分以下记为不及格。M
湖南科技学院本科毕业论文(设计)答辩记录表论文题目人事考勤管理系统作者姓名冯贵龙所属系、专业、年级电子工程系电子信息工程专业2009年级指导教师姓名、职称张丹硕士答辩会纪要时间2013年5月18日地点三教103答辩小组成员姓名职务(职称)姓名职务(职称)姓名职务(职称)张新安教授唐云讲师潘海军高级实验师张晓琳讲师李荣讲师张丹硕士答辩中提出的主要问题及回答的简要情况记录:会议主持人:记录人:年月日M
答辩小组意见评语:评定等级:负责人(签名):年月日系学位委员会意见评语:论文(设计)最终评定等级:负责人(签名):系部(公章)年月日校学位委员会意见评语:评定等级:负责人(签名):年月日M
目录1绪论11.1研究背景及意义11.1.1国内外研究现状分析11.2论文主要工作21.3论文组织结构22系统基础理论与关键技术32.1人事考勤管理系统概述32.1.1人事考勤管理管理系统特点32.1.2人事考勤管理系统作用32.1.3人事考勤管理系统组成42.2系统关键技术42.2.1MFC编程技术简介52.3数据库技术(MySQL)63系统需求分析103.1系统需求概述103.2系统功能性需求103.2.1组织管理103.2.2人事信息管理103.2.3考勤管理103.2.4系统管理113.3本章小结114系统设计124.1系统概要设计124.1.1系统功能设计124.1.2系统架构设计134.1.3开发线路设计134.1.4运行环境设计144.2系统主要功能模块设计144.2.1系统登录模块设计144.2.2部门信息录入模块设计154.2.3人员信息管理模块设计1562
4.2.4考勤信息录入模块设计154.3系统数据库设计164.3.1数据库设计原则164.3.2数据库设计目标174.3.3数据库中所涉及到的表浏览174.4本章小结195系统实现205.1ADO公共类实现205.2系统功能结构实现265.2.1用户登录与注销265.2.2用户管理模块295.2.3部门管理模块315.2.4人员信息管理模块355.3考勤管理模块445.4本章小结536系统测试546.1系统安装部署546.2系统功能测试546.2.1用户登录与注销546.2.2用户信息管理566.2.3部门信息管理576.2.4员工信息管理576.2.5考勤数据录入586.3系统测试运行情况596.4本章小结597总结与展望607.1工作总结607.2展望60参考文献61致谢6262
人事考勤管理系统摘要随着经济体制的改革,企业经营管理发生了很大的变化。企业竞争的焦点也从资金、物质资源的竞争转为人才资源的竞争。人事管理已成为企业管理的重要内容。在传统的人事管理系统中,人事工作人员往往花费大量的时间、精力在日常的行政事务性操作上,被这些繁琐的日常事务所束缚,无暇顾及人事管理中最为重要的策略性工作。今天,技术的进步逐渐解放了人事的“双手和大脑”,使人事管理发生了很大的变化。在电子人事管理系统中可以通过集中式的数据库、自动信息处理等信息化手段,使人事管理达到降低成本、提高效率、改进员工服务模式的效果。本文从软件工程的角度对人事考勤管理系统进行了需求分析,清楚了开发重点并对系统功能模块及数据库的的结构设计进行了详细分析。采用VisualVisual2008作为开发环境,将系统分模块进行设计,包含了录入、编辑、查询、统计等功能。后台数据库使用MySQL数据库为开发工具,用ADO技术与之链接。使系统的界面友好,操作简单,数据库安全可靠,且具有一定的扩展性。【关键词】考勤管理VisualVisual2008MySQLADO62
PersonnelattendancemanagementsystemAbstractWith reformoftheeconomicsystem,businessmanagementhasmadegreatchanges.Andthefocusofcompetitionofenterpriseisshiftingfromfundsandmaterialresourcestohumanresourcesandpersonnelmanagementhasbecomeanindispensableelement.Intraditionalpersonnelmanagement,personnelstaffsareusuallyboundedbytediousday-to-dayaffairsspendingmosttheirtimeandenergyindailyadministrativeaffairsoperationsothatdonottakethemostimportantstrategicworkintoaccount.Butnowadays,theadvancementoftechnologyliberatesthehandsandmindofpersonnelstaff,whichbringshugechangestopersonnelmanagement.Theapplicationofelectronicpersonnelmanagementsystemhelpspersonnelmanagementtoreachthegoaloflowcost,highefficiencyandimprovedstaffservicemodelthroughthecentralizeddatabase,theautomaticinformationprocessingandotherinformationalmeans.Thispaperanalysesthedemandoftheattendanceofpersonnelmanagementsystemandclarifiedtheexploitivepoint.Italsoanalysesthestructuraldesignofsystem-functionmoduleexplicitly,whichusesVisualVisual2008asitsexploitativesettinganddividessystemintomodulestodesignwhichincludesentering,compiling,inquiringandcounting.AndbackgrounddatabaseuseMySQLdatabaseasitsexploitativetoolanduseADOtechnologytolink,whichmakeswindowofsystemfriendlyandeasytooperateandalsomakesdatabasesecureandreliableandatthesametimehasagoodscalability.【Keywords】AttendancemanagementVisualVisual2008MySQLADO62
1绪论人事考勤管理系统是在以领先的人事管理理论知识和软件编程思想为指导的前提下,结合企业和市场实况,做好需求分析和架构设计,借助研发平台编程实现的一套应用于企业实际人事管理的软件系统。实施人事考勤管理系统的目的是为更加好地控制以及管理企业人力资源信息,整合企业资源,凸显企业核心竞争力。本章主要概述系统研发的背景意义和依据,概述人事管理系统的研究现状,总结现状中研究的不足和需要解决的问题,最后给出论文的研究内容及组织结构。1.1研究背景及意义对一个企业来说,人才是其核心竞争力,人力资源是一个企业中最宝贵的资源。而对人事的管理往往关系到一个企业的发展好坏。尤其是在经济技术迅猛发展的今天,如何对人事进行有效运用,满足组织当前及未来发展的需要,保证组织目标实现与成员发展的最大化,已经成为有眼光的企业管理者所关注的问题。人事考勤管理系统正是在这种背景下应用而生。人事考勤管理系统是将现代的计算机信息技术和企业的实际情况相结合,用来处理和管理企业人事的系统。其本质是一个用于人事管理的计算机工具,可实现管理人事需要的相关功能,如统计企业和员工信息资源等。人事考勤管理系统有助于管理人员对企业拥有的人力资源信息进行统筹和规划,有效降低企业的运作成本,为企业带来良好的收益,同时巩固和提升企业在当今这个信息时代的竞争力。1.1.1国内外研究现状分析人事管理系统的发展大致经过了3个阶段。第一阶段开始于20世纪60年代末期。当时大型企业蓬勃发展和计算机技术的实用化,用手工的方式计算已逐渐不能适应当时背景下的企业发展需求,第一代人事管理系统正是在这种背景下被开发出来的。第二阶段的发展开始于20世纪70年代末期。第二代人事管理系统考虑了非财务的人事信息,基本解决了第一代系统的缺陷。这主要得益于计算机系统工具和数据库技术的发展。第二代系统为计算机专业人员开发,其主要缺陷是对人事的需求和理念考虑不全面。但总得来说,第二代人事管理系统也叫做薪资/人事管理系统。第三阶段出现在20世纪90年代末,此时数据库技术的应用使得人事管理系统迎来了革命性地发展。第三代人事管理系统将与人力资源相关的数据信息进行统一的管理,形成了集成的数据库,促进了工作流程的自动化,大大缩短了管理周期。62
通过对国内外的软件进行对比可以发现,国内的软件大部分是由管理信息系统改进得到的,设计的出发点较为单一,多是为了满足具体业务的自动化操作需要,因此系统的完整性、集成性与国外的软件相比还有很大差距。而国外软件的起步较早,设计思路结合了先进的管理概念与开发技术,产品系列完整性好、针对性强,并且操作简单、界面友好、流程清晰,设计较为人性化。但由于国外公司与国内公司的管理体制不同,许多国外软件在进入中国市场时忽略了中国人事管理的特点,不适应我国的具体国情。因此,开发一套适合我国国情、结合企业实际、功能完整、流程规范的人事考勤管理系统是非常有必要的。1.1论文主要工作本文主要调研人事管理系统的需求,采用当前Windows界面编程工具MicrosoftVisualStudio2008(MFC)。主要研究内容如下:(1)阐述了人事考勤管理系统的定义及特点,并根据人事管理系统的特点和应用背景,对开发过程中可能用到的关键技术做了介绍;(2)对系统进行了总体设计、主要功能模块设计和数据库设计;对设计实现的难点和关键技术进行了深入地分析与探讨;并给出代码,对整个系统进行了编程实现;(3)根据软件工程的思想,对系统进行试运行,给出了测试结果的分析,保障了系统安全稳定地运行。1.2论文组织结构本论文的组织结构安排如下:第一章绪论:分析阐述了人事管理系统的相关背景,还包括发展历程和研究意义,分析了国内外的研究现状,确定了本论文的主要工作。第二章相关技术概述:介绍了本系统开发用到的关键技术,MicrosoftVisualStudio2008、数据库(MySQL)技术等,并对各技术的特点与优势进行了分析。第三章需求分析:根据用户情况和系统用途,详细阐述了系统的具体需求,明确了设计目标与系统的功能性需求、非功能性需求。第四章系统设计与实现:根据需求分析的结果,对系统进行了总体设计、主要功能模块设计和数据库设计;对设计实现的难点和关键技术进行了深入地分析与探讨;并给出代码,对整个系统进行了编程实现。第五章系统测试:测试系统运行的安全性与稳定性,给出测试结果与分析。62
1系统基础理论与关键技术1.1人事考勤管理系统概述人事考勤管理系统指汇集成功企业先进的人力资源管理理念、人力资源管理实践的经验,以信息技术实现对企业人力资源信息的高度集成化管理,为中国企业使用的人力资源管理解决方案。基于人力资源管理的理念,人事考勤管理系统是以人事理论和软件工程思想为指导,结合市场的实际情况和企业的具体需求的管理系统。该系统包含了几乎所有与企业以及员工相关的数据,并可对其进行统一的管理和规划。1.1.1人事考勤管理管理系统特点(1)按企业需求定制的灵活性人事考勤管理系统的灵活性,是针对现代企业的发展趋势产生的。随着现代商业竞争的日趋激烈,市场行情的瞬息万变使得公司的战略调整与政策改变成为家常便饭。这就需要我们设计开发的软件,其功能模块可根据公司的需求而灵活改变,既满足公司的实际需要,又能减少二次开发的成本,减少不必要的开支。(2)无纸化办公模式无纸化办公,即改变企业传统的“白纸黑字”办公流程,文件的审批、传达与反馈在一个系统中集成并实现实时更新,省去了打印纸质文件下发传阅的麻烦,提高了工作效率。充分体现了“管理在前,执行在后”的先进管理理念。1.1.2人事考勤管理系统作用人事考勤管理系统通过现代技术,最终实现对人的管理。作为生产力中最重要最特殊的资源,人才一直都是无法估量的资本。对人的管理,也一直是现代企业管理的核心。基于此,一个好的人事考勤管理系统,其最大的作用就是为管理层选人、用人提供决策支撑,充分调动企业中每个个体的积极性与创造性,进而形成一个精诚团结、积极向上的优秀团队。具体来说主要分为以下几点:(1)优化业务流程人事考勤管理系统的设计实现了以信息流为基础的模块化流转机制,改变了传统的业务流转过程中靠每个参与者的主观判断决定流转过程的弊端,规范了工作流程,促进了工作的合理有序进行。(2)提高工作效率62
人事考勤管理系统的使用可批量处理员工的考勤、工作天数等问题,避免了手工计算的繁琐,降低了错误率,并大大降低了由于人数众多带来的重复工作所占用的时间,提高了部门的工作效率。同时,也可以促进人力部门把更多的经历放在关于人才的战略规划上,从管理制度的角度提升公司的人才质量。1.1.1人事考勤管理系统组成人事考勤管理系统是建立在标准的业务流程基础之上的,是公司高管决策的信息支持平台,是中层经理进行管理活动的工作平台,也是员工信息更新、与企业互动的沟通平台。为了实现这些功能,主要包含以下几项功能模块:(1)部门管理主要实现对公司各个部门进行统一管理,并对各部门极性维护。(2)人员信息管理主要实现对公司各部门人员基本信息的输入和管理。(3)考勤信息录入对各部门人员基本信息的等级和管理。(4)考勤管理记录公司所有员工每天出勤的详细情况。1.2系统关键技术人事考勤管理系统是基于Windows操作系统,利用MicrosoftVisualStudio2008(MFC)和数据库开发的一个系统集成软件,用户需要输入用户名和密码进入人事考勤管理系统,对各部门、员工的基本信息进行维护和管理。在考勤管理模块中录入员工当天的考勤信息,同时可对年、月、员工进行查询。VS2008软件简介以及使用MicrosoftVisualStudio2008是面向WindowsVista、Office2007、Web2.0的下一代开发工具,代号“Orcas”,是对VisualStudio2005一次及时、全面的升级。(1)概述VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用VisualStudio2008可以高效开发Windows应用程序。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时VisualStudio2008支持项目模板、调试器和部署程序。VisualStudio2008可以高效开发Web应用,集成了AJAX1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。(2)特色一个好的开发环境可以让开发工作事半功倍,微软公布了最新版VisualStudioShell的预览,一起来看一下:我们可以发现新版VS的开发界面分为两个版本:整合模式和孤立模式,分别对基于语言的开发和基于特别工具的开发作了优化。并将IronPython引入了VisualStudio,该界面将在VisualStudio2008的Beta2版本中出现。62
微软开发者部门的副总裁索玛塞加在其博客中表示,尽管VisualStudio2008软件开发平台是2008年2月份一次产品开发活动的一部分,微软计划于2007年年底开始销售这款产品。据网站报道称,本周早些时候,微软宣布将在于2008年2月27日举办的一次产品发布会上发布VisualStudio2008、WindowsServer2008、SQLServer2008。1.1.1MFC编程技术简介MFC(MicrosoftFoundationClasses),是一个微软公司提供的类库(classlibraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。(1)MFC简介MFC:微软基础类(MicrosoftFoundationClasses),同VCL类似,是一种应用程序框架,随微软VisualC++开发工具发布。目前最新版本为10.0(截止2011年3月),并且发布了中文版。该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject直接或间接派生,只有少部分类例外。MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC提供了MFCAppWizard自动生成框架。Windows应用程序中,MFC的主包含文件为"Afxwin.h"。此外MFC的部分类为MFC/ATL通用,可以在Win32应用程序中单独包含并使用这些类。由于它的易用性,初学者常误认为VC++开发必须使用MFC,这种想法是错误的。作为ApplicationFramework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32程序设计。(2)MFC特点MFC实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。VC++是Windows下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包。MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范;而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE(IDE的英文全称为“IntegratedDevelopmentEnvironment”,即“集成开发环。),MFC同VC++集成的VCL一样是一个非外挂式的软件包类库,只不过MFC类是微软为VC++专配的。(3)MFC关键技术62
1.MFC程序的初始化过程建立一个MFC窗口很容易,只用两步:一是从CWinApp派生一个应用程序类(这里是MyApp),,然后建立应用程序对象(theApp),就可以产生一个自己需要的窗口(即需要什么样就在InitInstance()里创建就行了)。2.动态创建动态创建就是运行时创建指定类的对象,在MFC中大量使用。如框架窗口对象、视对象,还有文档对象都需要由文档模板类对象来动态的创建。我觉得这是每个MFC的学习者很希望理解的问题。3.永久保存MFC的连续存储(serialize)机制俗称串行化。“在你的程序中尽管有着各种各样的数据,serialize机制会象流水一样按顺序存储到单一的文件中,而又能按顺序地取出,变成各种不同的对象数据。”不知我在说上面这一句话的时候,大家有什么反应,可能很多朋友直觉是一件很简单的事情,只是说了一个“爽”字就没有下文了。4.消息映射消息映射与命令传递体现了MFC与SDK的不同。在SDK编程中,没有消息映射的概念,它有明确的回调函数中,通过一个switch语句去判断收到了何种消息,然后对这个消息进行处理。所以,在SDK编程中,会发送消息和在回调函数中处理消息就差不多可以写SDK程序了。5.消息传递有了消息映射表之后,我们得讨论到问题的关键,那就是消息发生以后,其对应的响应函数如何被调用。大家知道,所有的MFC窗口,都有一个同样的窗口过程——AfxWndProc(…)。在这里顺便要提一下的是,看过MFC源代码的朋友都得,从AfxWndProc函数进去,会遇到一大堆曲折与迷团,因为对于这个庞大的消息映射机制,MFC要做的事情很多,如优化消息,增强兼容性等,这一大量的工作,有些甚至用汇编语言来完成,对此,我们很难深究它。所以我们要省略大量代码,理性地分析它。1.1数据库技术(MySQL)数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。62
目前主流的关系数据库系统有甲骨文公司的Oracle和MySQL,Sybase公司的Sybase,IBM公司DB2,微软公司的SQLServer,等等。考虑到Mysql体积小、速度快、开放源码这些特定,本系统采用MySQL数据库来存储数据。MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好。(1)简介MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQLAB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。(2)背景MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。这导致了一个使用几乎和mSQL一样的API接口的用于他们的数据库的新的SQL接口的产生,这样,这个[1]API被设计成允许为用于mSQL而写的第三方代码更容易移植到MySQL。(3)应用环境与其他的大型数据库例如Oracle、DB2、SQLServer等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQLCluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP/Perl/Python)和LNMP(Linux+Nginx+MySQL+php/perl/Python),即使用Linux作为操作系统,Apache和Nginx作为Web服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统。(4)应用架构62
图1应用框架图(5)基本命令[]中的内容为可选项--创建数据库mysql>createdatabase数据库名称--创建表mysql>createtable表名(列的名字(id)类型(int(4))primarykey(定义主键)auto_increment(描述自增));--查看所有数据库mysql>showdatabases;--使用某个数据库mysql>use数据库名称;--查看所使用数据库下所有的表mysql>showtables;--显示表的属性结构mysql>desc表名;--选择表中数据的显示--*代表选择所有列,mysql>select*from表名whereid=?[andname=?][orname=?];mysql>selectid,namefrom表名orderby某一列的名称desc(降序,asc为升序)--删除表中的数据62
mysql>deletefromtablewhereid=?[orname=?(andname=?)];--删除表mysql>droptable;--删除数据库mysql>dropdatabase;本章小结本章介绍了该人事考勤管理系统开发所涉及到的理论和关键技术,特别在技术方面介绍了关键技术的理念、主要作用以及特点,为后期的系统设计与实现提供了理论基础。经过分析比较,本系统在实现过程中采用VS2008建立MFC对话框工程实现系统整个架构以及所有功能。此外系统中的数据通过MFCADO连接MySQL编程存储在MySQL数据库中。62
1系统需求分析1.1系统需求概述通过对人事考勤管理过程的研究和分析,要求本系统应该具有以下功能。1.用户登录。2.部门信息录入。3.人员信息管理。4.考勤信息录入。1.2系统功能性需求根据企业对人事考勤管理系统的需求概述,本节阐述了系统各模块功能的详细需求。1.2.1组织管理机构管理功能是为人事部门处编制业务时提供计算辅助手段,以满足机构改革的需要。机构编码:支持当前用户的设置,可通过分配编码建立单位和部门的结构,并可对单位和部门的编码信息进行下发、接收、输出。机构设置:支持机构结构信息的单个录入,也支持一次性导入。有权限的用户还可根据实际情况对机构结构信息进行录入、编辑、撤销、恢复、删除。1.2.2人事信息管理人员管理是对人员的基本信息和扩展信息的管理。本系统为人员管理开发的功能包括:信息、浏览统计分析为人员管理开发的功能包括:信息、浏览统计分析查询/花名册、人员登记表。通过管理,可以实现对信息的全面而准确的管理。信息录入:功能模块支持当前用户对人员的信息进行录入。可录信息包括人员的基本信息(如姓名、性别、年龄、民族、身份证号、所属机构名等)和扩展信息(如学历和学位、个人简历、行政职务、岗位变化等)。查询/花名册:功能模块可实现对人员信息进行快速方便的查询、浏览,以及人员信息花名册的管理。1.2.3考勤管理考勤模块包含:原始数据管理、考勤数据统计分析。原始数据管理:通过在基础定义中对员工上下班时间的设定,使系统对考勤数据进行自动处理。使实现考勤数据的采集与采集原始数据作业时间的分析,62
分别统计旷工、迟到、早退、忘刷卡及员工出勤动态信息。系统支持复合查询,可根据部门、岗位、员工、来动态分析及反应某一时期公司员工出勤情况,如旷工、迟到、加点、加班、出厂、忘刷卡、早退、请假等信息,并形成每日报表,如旷工、迟到、加点、加班、出厂、早退、请假,及考勤数据月汇总报表。1.1.1系统管理系统管理是软件系统的必备模块,是本系统非常重要的功能模块。计算控制中心:当用户要在两个或者两个表以上做数据处理以及应用的时候就要用到计算控制中心,当然系统管理员如果觉得处理起来比较方便,也可以用计算控制中心设置一些方案来做日常的处理。版本控制:当系统升级的时候,不用每个客户端来升级,系统可以自动的把每个客户端升级。版本控制实现的就是这个功能。系统通过这个模块实现对菜单的控制;1.2本章小结本章着重阐述了本课题的前期的需求分析,获得了系统的功能需求、非功能性需求等。这些需求可以指导后期的系统设计与系统实现,为后面的概要设计和系统实现打下夯实基础。下一章将结合系统的需求分析,对该系统软件进行概要设计和详细设计。62
1系统设计按照软件工程的思想,在对系统进行了需求分析之后,我们要根据需求分析的结果对系统进行设计。根据设计阶段及重点的不同,系统设计可分为概要设计和详细设计。概要设计是系统设计的起点,主要工作是设计系统总体结构和框架,具体包括系统功能设计、系统架构设计、数据流程设计、开发路线设计、开发环境设计、运行环境设计等。详细设计是在完成概要设计后,根据其结果进行分析设计,将设计方案具体化、功能细节化,具体说明系统中可能有的模块的流程功能,为后续编程实现系统做充分的准备。在进行系统设计时,不仅要考虑现阶段对系统的需求,还要考虑后续可能存在的变化,系统设计应遵循以下设计原则:1.安全性原则系统设计需要充分考虑可能存在的安全威胁,采取严格的安全与保密措施,保证系统的可靠性、保密性和数据一致性等。2.实用性原则系统设计开发的最终目的是为了满足用户需求,为用户提供更好的服务。实用性是系统设计最基本的原则,系统设计必须以能解决用户的实际问题为出发点。3.先进性原则由于软件开发的各种理念和技术更新较快,因此系统在设计时应选择先进的设计理念、延续性好的技术方法,使系统在整体上实现较高的技术水平,能够长期保证自身的先进性。4.可维护性、可管理性原则系统在设计时应实现系统的自定义性,如允许自定义系统参数等,同时要充分考虑管理人员的管理维护成本,尽可能地使系统便于管理维护。1.1系统概要设计1.1.1系统功能设计根据系统需求分析,同时结合系统设计的原则,本文按照功能将系统划分为多个模块。系统功能模块可以从不同角度划分,主要有以下两种划分原则:功能划分和结构划分。一般是两种原则结合对系统划分,首先将系统每个业务抽取为一个功能点,然后将同一类型的业务集成到一个结构体中,也就是功能模块。人事考勤管理系统的功能结构如图所示。62
图1人事考勤管理系统功能结构图根据上述分析,在实际开发中将系统划分为以下五个模块:用户管理模块、部门信息管理模块、员工信息管理模块、考勤数据录入模块、考勤信息汇总模块。图1大致说明了系统功能模块的划分,并给出了相关子模块的设计。1.1.2系统架构设计人事考勤管理系统的系统架构流程图如图2所示。图2人事考勤管理系统架构1.1.3开发线路设计62
本系统在设计开发时,采用的是快速迭代开发模式。在分析系统需求阶段,我们设计实现了原型系统,并在此基础上与客户进行沟通,确认客户对系统的实际需求,避免出现需求不明确而导致的项目延期甚至项目失败。在实际开发过程中,按照快速迭代开发模式的原则,首先实现系统的基本功能,在最短的时间内让客户看到系统的雏形,并让客户对系统雏形进行实际运用并提出意见。在后续的开发中,按照用户提出的意见对系统进行修改完善,从而最终实现满足用户需求的系统。1.1.1运行环境设计本系统在完成以后,将会部署在人事部的服务器里面,装上数据库,配置好以后人事部就可以用这个系统了。1.2系统主要功能模块设计1.2.1系统登录模块设计1.功能描述作为公司内部系统,应当只有认证后的用户才能访问系统功能。本模块的目的就是实现用户认证,防止非法用户访问系统。本模块的主要功能是验证用户权限,其中需要注意的是,用户的注册必须是由系统管理员在后台添加而不能由用户直接注册。2.流程设计未登录的用户访问系统时,系统将会提示登录系统后才可以继续操作或联系系统管理员进行注册。经人事部门审核通过的注册用户,可以使用其注册时的用户名和人事部门设置的初始密码进行登录,用户输入登录信息后,系统将会进行验证,验证通过后,系统将会自动跳转到首页。系统会提示验证失败的用户找回密码或联系管理员。图1系统登录流程系统登录模块的用户登录流程图如图4显示。62
1.1.1部门信息录入模块设计1.功能描述现代公司由于分工明确,往往有着很多的职能机构。随着公司的发展,这些组织机构会经常发送合并、拆分等,若没有有效的的管理措施,人事管理将会非常混乱。系统的部门管理模块正是解决这个问题而设计的,它的主要功能是:部门增加、部门修改、部门减除等。2.流程设计进入部门管理后就可以对部门就行管理和修改了。部门管理如图4所示。图1部门管理1.1.2人员信息管理模块设计1.功能描述现代的大公司部门多了,员工相应的就会很多,如果人事部要对每个部门的每个员工进行纸质等级基本信息,那工作量可是很大的,而且对后期员工的查询和修改都不太方便,现在不用那么麻烦,现在有一台电脑,有这个软件就搞定了。2.流程设计进入人员信息管理后就可以针对每个部门增加、删除、修改员工的基本信息了。人员信息管理模块流程设计如图6所示。1.1.3考勤信息录入模块设计1.功能描述人员考勤管理统计了员工每天的出勤记录以及一些请假记录等。人员考勤管理软件对员工的出勤状况可以直观的查询和做相应的修改。2.流程设计在考勤管理中可以添加、修改、删除员工的出勤记录。考勤管理如图7所示。62
图1人员信息管理图2考勤管理1.2系统数据库设计1.2.1数据库设计原则本系统采用的数据存储方式是MySQL数据库。MySQL是一个开源、免费的关系型数据库,支持多用户、多线程和SQL。通过使用MySQL62
作为系统数据库,可以大大提高系统数据的处理效率并保证系统数据的安全性。而且MySQL相关学习资源丰富,安装部署较为简单,利于开发人员学习维护。数据库设计是系统开发中的非常重要的工作,优秀的数据库设计会易于维护,并可以保障系统高效运行、而不好的数据库设计将会难以维护,而且会成为系统运行性能的瓶颈。优秀数据库的设计应遵循以下几个原则:(1)遵守数据库设计规范,严格按照数据库范式标准进行设计。(2)充分考虑数据库的整体性及结构层次,并尽可能实现标准化。(3)设计数据表时,要充分考虑数据彼此之间的独立性和可维护性。(4)提取系统必须的字段,以尽可能少的字段满足需求,避免冗余字段。1.1.1数据库设计目标本系统的目的是为企业提供高效准确的管理企业人力物力的工具,针对本企业而言,主要是进行人力资源的管理。系统人力资源的管理主要包括对企业员工信息进行维护,制定企业长期的人力资源计划。通过第三章的系统需求分析,可以得知主要实体有是员工、部门、职位等。1.1.2数据库中所涉及到的表浏览Tab_user(管理员信息表)如图8所示。图1管理员信息表Tab_Dept(部门信息表)部门信息表用于记录部门的信息,如图9所示。62
图1部门信息表tab_Employees(员工信息表)员工信息表用来保存公司员工信息,如图10所示。图2员工信息表tab_check(考勤信息表)考勤信息表用于记录员工每天的考勤信息,如图11所示。62
图1考勤信息表1.2本章小结本章主要描述了人事考勤管理系统的详细设计,分别从系统概要设计、系统主要功能模块设计、系统数据库设计等方面作了具体阐述。本章对系统进行的详细设计,为后面的系统实现做了充分的准备。62
1系统实现通过适当的设计方法,实现用户对本软件各项功能的要求。这个阶段的主要目的是将系统分析阶段所提出的反映了用户信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理(技术)方案。其主要任务是从客户方对人力资源管理系统的总体目标出发,根据系统分析阶段的逻辑功能的要求,并考虑到经济、技术和运行环境等方面的条件,确定系统的总体结构和系统各组成部分的技术方案,合理选择计算机和通信的软硬件设备,提出系统的实施计划,确保总体目标的实现。1.1ADO公共类实现本系统采用ADO连接数据库。为了能更方便地在程序中使用ADO建立数据库连接并进行相应数据操作,在公共类中对系统中所使用的ADO操作进行了封装。在该系统中建立了ADO的两个公共类CADOConnection和CADODataSet,这两个类定义在ADO.h头文件中,实现在ADO.cpp文件中。1.CADOConnection类CADOConnection类是用来连接数据库的,实现了对_Connection接口的封装。CADOConneciton类在头文件中的定义如下://载入msado15dll,这样在工程中就不必再载入了#import"C:ProgramFilesCommonFilesSystemadomsado15.dll"no_namespacerename("EOF","rsEOF")classCADOConnection{private:StaticvoidInitADO();//初始化ADOstaticvoidUnInitADO();protected:_ConnectionPtrm_Connection;//接口指针public:BOOLIsOpen();//判断是否与数据库连接_ConnectionPtrGetConnection();//获取连接接口CStringGetSQLConStr();//获取SQL连接字符串BOOLOpen(CStringConStr);//建立数据库连接CADOConnection(void);virtual~CADOConnection(void);62
};CADOConnection*GetConnection();//获取全局连接类的函数CADOConnection类的实现代码如下:定义两个全局变量ConCount和g_Connection,其中ConCount变量是一个整型变量,用来记录在工程中所创建的CADOConnection类的实例个数。在构造方法中,当此变量为0时调用CoInitialize函数实现OLE的初始化。在析构方法中,当此变量为0时调用CoUninitialize方法取消OLE的初始化。intConCount=0;CADOConnectiong_Connection;//全局数据库连接对象GetConnection函数是一个全局函数,用于返回全局数据库连接对象的指针。代码如下:CADOConnection*GetConnection(){return&g_Connection;}CADOConnection方法是构造方法,用于初始化OLE和创建_Connection接口的指针实例。代码如下:CADOConnection::CADOConnection(){InitADO();m_Connection.CreateInstance("ADODB.Connection");}~CADOConnection方法是析构方法,用于取消OLE的初始化和释放_Connection接口指针。代码如下:CADOConnection::~CADOConnection(){if(IsOpen())m_Connection->Close();m_Connection=NULL;UnInitADO();}InitADO方法是一个静态方法,用于初始化OLE。代码如下:voidCADOConnection::InitADO()62
{if(ConCount++==0)CoInitialize(NULL);};UnInitADO方法是一个静态方法,用于取消OLE的初始化。代码如下:voidCADOConnection::UnInitADO(){if(--ConCount==0)CoUninitialize();};Open方法通过指定的数据库连接字符串与SQL数据库建立连接。代码如下:BOOLCADOConnection::Open(CStringConStr){if(IsOpen())m_Connection->Close();m_Connection->Open((_bstr_t)ConStr,"root","ivas_admin",adModeUnknown);returnIsOpen();}GetSQLConStr方法用来生成与数据库连接所需要的连接字符串。代码如下:CStringCADOConnection::GetSQLConStr(){CStringStr;Str.Format("DSN=odbcTest;server=localhost;");returnStr;}GetConnection方法用于返回_Connection接口指针。代码如下:_ConnectionPtrCADOConnection::GetConnection(){returnm_Connection;}IsOpen方法用来判断当前数据库连接对象与数据库的连接状态。代码如下:BOOLCADOConnection::IsOpen(){longState;62
m_Connection->get_State(&State);if(State==adStateOpen)returntrue;returnfalse;}2.CADODataSet类CADODataSet类是用来存储数据的数据集类,该类实现了_Recordset接口的实例。该类在头文件中的定义如下:classCADODataSet{protected:_RecordsetPtrm_DataSet;//数据集接口指针CADOConnection*m_Connection;//数据库连接类对象public:voidDelete();//记录删除intGetRecordNo();//获取记录集行号voidmove(intnIndex);//移动记录指针voidSave();//保存对记录集的修改voidSetFieldValue(CStringFieldName,_variant_tValue);//设置字段的值voidAddNew();//添加新记录BOOLNext();//记录集指针指向下一条记录FieldsPtrGetFields();//获取记录集字段集合intGetRecordCount();//获取记录集中记录数量voidSetConnection(CADOConnection*pCon);//设置记录集的数据库连接对象BOOLOpen(CStringSQLStr);//打开记录集CADODataSet();virtual~CADODataSet();private:BOOLIsOpen();//判断记录集是否打开};CADODataSet类的实现代码如下:CADODataSet方法为记录集实现类的构造方法,在该方法中实现记录集接口对象的创建。代码如下:62
CADODataSet::CADODataSet(){m_DataSet.CreateInstance("ADODB.Recordset");}~CADODataSet类为记录集实现类的析构方法,在该方法中实现记录集的关闭与接口的释放。代码如下:CADODataSet::~CADODataSet(){if(IsOpen())m_DataSet->Close();m_DataSet=NULL;m_Connection=NULL;}SetConnection方法用来设置记录集所连接的数据库连接类的对象。代码如下:voidCADODataSet::SetConnection(CADOConnection*pCon){m_Connection=pCon;}GetRecordCount方法用来获取记录集中数据的数量。代码如下:intCADODataSet::GetRecordCount(){if(IsOpen())returnm_DataSet->GetRecordCount();elsereturn0;}Open方法通过SQL查询语句打开数据集。代码如下:BOOLCADODataSet::Open(CStringSQLStr,intLockType){if(IsOpen())m_DataSet->Close();/*m_DataSet->CursorType=adOpenStatic;m_DataSet->CursorLocation=adUseClient;*/try62
{m_DataSet->Open(_bstr_t(SQLStr),_variant_t((IDispatch*)g_Connection.GetConnection(),true),adOpenKeyset,(LockTypeEnum)LockType,adCmdText);}catch(_com_errore){e.Description();}returnIsOpen();}IsOpen方法用来判断数据集是否处于打开状态。代码如下:BOOLCADODataSet::IsOpen(){longState;m_DataSet->get_State(&State);if(State==adStateOpen)returntrue;returnfalse;}GetFields方法用来获取记录集中字段的集合。代码如下:FieldsPtrCADODataSet::GetFields(){returnm_DataSet->GetFields();}Next方法将记录集指针下移一位。代码如下:BOOLCADODataSet::Next(){if(m_DataSet->adoEOF)returnfalse;m_DataSet->MoveNext();returntrue;}AddNew方法用于向记录集中添加一个新行。代码如下:62
voidCADODataSet::AddNew(){m_DataSet->AddNew();}SetFieldValue方法用来向记录集中指定的字段赋值。代码如下:voidCADODataSet::SetFieldValue(CStringFieldName,_variant_tValue){m_DataSet->PutCollect((_bstr_t)FieldName,Value);}Save方法用来保存对记录集中数据所做的任何更改。代码如下:voidCADODataSet::Save(){m_DataSet->Update();}Move方法将记录集的当前指针移动到指定的索引位置。代码如下:voidCADODataSet::move(intnIndex){m_DataSet->MoveFirst();m_DataSet->Move(nIndex);}GetRecordNo方法用来获取记录集中的当前行号。代码如下:intCADODataSet::GetRecordNo(){returnm_DataSet->AbsolutePosition;}Delete方法用来删除记录集中的当前行。代码如下:voidCADODataSet::Delete(){m_DataSet->Delete(adAffectCurrent);}1.1系统功能结构实现1.1.1用户登录与注销62
用户登录窗体是整个系统中创建并显示的第一个窗体,所以该窗体应在主窗体创建前创建并显示。在登录窗体创建的同时应该创建数据库连接。这些操作都应在应用程序类的初始化方法中实现,该方法名为InitInstance。代码如下:BOOLCPersonApp::InitInstance(){AfxEnableControlContainer();#ifdef_AFXDLLEnable3dControls();#elseEnable3dControlsStatic();#endifLoadSkin();//创建全局数据库连接BOOLbCon=GetConnection()->Open(GetConnection()->GetSQLConStr("127.0.0.1","tb_person"));CLoginDialoglogindlg;//定义登录窗体对象if(logindlg.DoModal()!=IDOK)//显示登录窗体returnfalse;CPersonDlgdlg;//定义应用程序主窗体m_pMainWnd=&dlg;intnResponse=dlg.DoModal();//显示主窗体if(nResponse==IDOK){}elseif(nResponse==IDCANCEL){returnFALSE;}用户登录模块实现过程(1)创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGLOGIN,将对话框标题改为“登录”。62
(2)向对话框中添加两个静态文本控件、一个编辑框控件、一个列表框控件和两个按钮控件。分别设置两个静态文本控件的Caption属性为“用户名:”和“密码:”;设置编辑框控件的类型为password;分别设置两个按钮的Caption属性为“确定”和“取消”。(3)在窗体的初始化方法中创建用户表的数据集,并将用户名添加到列表控件中。代码如下:BOOLCLoginDialog::OnInitDialog(){CDialog::OnInitDialog();m_DataSet.SetConnection(GetConnection());//设置数据集连接的数据库连接对象m_DataSet.Open("Select*FromTab_User");//打开用户表intcount=m_DataSet.GetRecordCount();//获取用户数量for(inti=0;iItem[L"UserName"]->Value);m_DataSet.Next();//记录下移}m_UserList.SetCurSel(0);//设置第1个用户为当前用户returnTRUE;}(4)在“确定”按钮的事件中实现用户名和密码的验证。代码如下:voidCLoginDialog::OnLogin(){CStringsql,user,pass;m_UserList.GetWindowText(user);//获取用户名m_PassWord.GetWindowText(pass);//获取密码sql.Format("Select*Fromtab_userWhereUserName="%s"andPassWord="%s"",user,pass);//生成SQL查询语句m_DataSet.Open(sql);//打开数据库if(m_DataSet.GetRecordCount()==1){::SetUserName(user);//设置当前用户62
this->OnOK();}elseAfxMessageBox("用户名或密码不正确!");}1.1.1用户管理模块在用户管理模块中使用CListCtrl控件显示用户信息。当对某一记录进行编辑或删除操作时必须要获取一个与记录对应的标识,所以在对用户列表进行添加时,利用列表视图控件的SetItemData方法将记录集对应的行号添加到每一行对应的数据中。这样,当对记录进行修改时就可以通过获取对应的行号对数据集中的数据进行修改了。获取数据时使用列表视图控件中的GetItemData方法。用户管理模块实现过程实现过程如下:(1)创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGUSER,将对话框标题改为“用户管理”。(2)向对话框中添加1个列表视图控件和4个按钮控件,列表视图控件的变量为m_grid,分别设置按钮控件的Caption属性为“添加”、“修改”、“删除”和“退出”。(3)定义UpdateGrid方法,用来更新列表视图中显示的用户信息。代码如下:voidCUserManage::UpdateGrid(){m_DataSet.Open("Select*Fromtab_User");//打开用户表m_grid.DeleteAllItems();//清空列表视图中的全部记录for(inti=0;iItem[L"UserName"]->Value);intno=m_DataSet.GetRecordNo();//获取当前记录集行号m_grid.SetItemData(i,no);//存储列表视图中的项对应的行号m_DataSet.Next();//行下移}}(4)向对话框中添加OnInitDialog方法,在对话框的初始化方法中添加列表视图控件应显示的表头,并向列表视图控件中添加数据。代码如下:62
BOOLCUserManage::OnInitDialog(){CDialog::OnInitDialog();m_grid.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//列表视图控件样式m_grid.InsertColumn(0,"用户名");//添加列m_grid.SetColumnWidth(0,150);//设置列宽m_DataSet.SetConnection(::GetConnection());//设置数据集的数据库连接对象UpdateGrid();//向列表视图控件中添加数据returnTRUE;}(5)在“添加”按钮的事件中弹出“用户编辑”窗体,输入用户名后单击“确定”按钮,实现对用户的添加。代码如下:voidCUserManage::OnAppend(){CUserEdituseredit;//定义用户编辑窗体if(useredit.DoModal()==IDOK)//显示用户编辑窗体{m_DataSet.AddNew();//数据集添加行m_DataSet.SetFieldValue("UserName",(_bstr_t)useredit.name);//设置用户名字段的值为新用户m_DataSet.Save();//保存数据集UpdateGrid();//更新列表视图控件中的数据}}(6)在“修改”按钮的事件中弹出“用户编辑”窗体,输入用户名后单击“确定”按钮,实现对用户的修改。代码如下:voidCUserManage::OnEdit(){CUserEdituseredit;//用户编辑窗体intno=m_grid.GetItemData(m_grid.GetSelectionMark());//获取当前记录行号m_DataSet.move(no-1);//记录集指向指定行useredit.name=(char*)(_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value;//获取用户名62
if(useredit.DoModal()==IDOK)//显示用户编辑窗体{m_DataSet.SetFieldValue("UserName",(_bstr_t)useredit.name);//设置新的用户名m_DataSet.Save();//保存数据UpdateGrid();//更新列表}}(7)在“删除”按钮的单击事件中获取当前记录,进行删除操作。代码如下:voidCUserManage::OnDelete(){if(MessageBox("是否删除此记录!","提示",MB_YESNO|MB_ICONWARNING)==IDYES){intno=m_grid.GetItemData(m_grid.GetSelectionMark());//获取记录集行号m_DataSet.move(no-1);//移到指定行m_DataSet.Delete();//删除m_DataSet.Save();//保存UpdateGrid();//更新列表}}1.1.1部门管理模块由于部门通常都是存在层次级别的,所以在设计数据表结构时应至少创建3个字段“编号”、“父编号”和“名称”;而在程序中显示部门信息时,也是根据“父编号”作为查询条件不断查找下一级部门。在本系统中,由于部门信息通常不会太多,所以可以用嵌套的方式将部门信息一次性地读入树控件中。代码如下:voidCDeptManage::GetNode(HTREEITEMpNode,intnPid){HTREEITEMnode;CADODataSetDataSet;//定义记录集DataSet.SetConnection(::GetConnection());//设置数据库连接对象CStringstr;str.Format("Select*Fromtab_Deptwherepid=%d",nPid);//查询语句DataSet.Open(str);//打开记录集intcount=DataSet.GetRecordCount();//获取记录数量62
intID;_variant_tvalue;for(inti=0;iItem["DeptName"]->Value,pNode);//部门名称value=(_variant_t)DataSet.GetFields()->Item["ID"]->Value;//编号ID=value.intVal;m_tree.SetItemData(node,ID);//与节点关联GetNode(node,ID);//获取子节点DataSet.Next();//记录下移}}部门管理模块实现过程实现过程如下:(1)创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGDEPT,将对话框标题改为“部门管理”。(2)向对话框中添加1个树控件、4个按钮控件,分别设置按钮控件的Caption属性为“添加”、“修改”、“删除”和“关闭”。(3)定义GetNode方法,用来按层级关系获取部门表中的所有数据,并添加到树控件中。该方法由UpdateDept方法进行调用,代码如下:voidCDeptManage::UpdateDept(){m_tree.DeleteAllItems();//清空树列表中的所有数据GetNode(TVI_ROOT,0);//生成树列表}voidCDeptManage::GetNode(HTREEITEMpNode,intnPid){HTREEITEMnode;CADODataSetDataSet;//定义记录集DataSet.SetConnection(::GetConnection());//设置数据库连接对象CStringstr;str.Format("Select*Fromtab_Deptwherepid=%d",nPid);//查询语句DataSet.Open(str);//打开记录集62
intcount=DataSet.GetRecordCount();//获取记录数量intID;_variant_tvalue;for(inti=0;iItem["DeptName"]->Value,pNode);//部门名称value=(_variant_t)DataSet.GetFields()->Item["ID"]->Value;//编号ID=value.intVal;m_tree.SetItemData(node,ID);//与节点关联GetNode(node,ID);//获取子节点DataSet.Next();//记录下移}}(4)当单击“添加”按钮时将弹出部门编辑窗体,输入部门信息后单击“确定”按钮,将添加一个新的部门。代码如下:voidCDeptManage::OnAdd(){CDeptEditdeptedit;//部门编辑if(deptedit.DoModal()==IDOK)//显示部门编辑窗体{HTREEITEMpNode=m_tree.GetSelectedItem();//获取选中节点intpID;if(deptedit.isroot)//根节点pID=0;elsepID=m_tree.GetItemData(pNode);//子节点CADODataSetdataset;//定义记录集dataset.SetConnection(::GetConnection());//设置数据库连接对象dataset.Open("Selecttop1*Fromtab_Dept");//打开记录集dataset.AddNew();//添加新记录dataset.SetFieldValue("DeptName",(_variant_t)deptedit.name);//部门名称dataset.SetFieldValue("memo",(_variant_t)deptedit.memo);//备注dataset.SetFieldValue("PID",(long)pID);//父编号62
dataset.Save();//保存UpdateDept();//更新树列表}}(5)当单击“修改”按钮时将弹出部门编辑窗体,输入部门信息后单击“确定”按钮,实现部门信息的修改。代码如下:voidCDeptManage::OnEdit(){CDeptEditdeptedit;//部门编辑窗体deptedit.visible=false;HTREEITEMpNode=m_tree.GetSelectedItem();//获取选中节点if(pNode==0)return;intpID=m_tree.GetItemData(pNode);//获取节点对应的编号CADODataSetdataset;//定义记录集dataset.SetConnection(::GetConnection());//设置数据库连接CStringstr;str.Format("Select*Fromtab_Deptwhereid=%d",pID);//生成查询语句dataset.Open(str);//打开记录集deptedit.name=(char*)(_bstr_t)dataset.GetFields()->Item[L"DeptName"]->Value;//部门名称deptedit.memo=(char*)(_bstr_t)dataset.GetFields()->Item["memo"]->Value;//备注if(deptedit.DoModal()==IDOK)//显示部门编辑窗体{dataset.SetFieldValue("DeptName",(_variant_t)deptedit.name);//部门名称dataset.SetFieldValue("memo",(_variant_t)deptedit.memo);//备注dataset.Save();//保存UpdateDept();//更新树列表}}(6)当单击“删除”按钮时,将删除当前选中的节点。代码如下:voidCDeptManage::OnDelete(){HTREEITEMpNode=m_tree.GetSelectedItem();//获取选中节点62
if(pNode==0)return;if(MessageBox("是否删除此记录!","提示",MB_YESNO|MB_ICONWARNING)==IDYES){intpID=m_tree.GetItemData(pNode);//获取节点对应编号CADODataSetdataset;//定义记录集dataset.SetConnection(::GetConnection());//设置数据库连接CStringstr;str.Format("Select*Fromtab_Deptwhereid=%d",pID);//生成查询语句dataset.Open(str);//打开记录集dataset.Delete();//删除记录dataset.Save();//保存UpdateDept();//更新树列表}}1.1.1人员信息管理模块在人员信息管理界面中可以看到,窗体的左侧是部门信息,右侧是人员信息。当选中某一部门信息分类时,在右侧会根据选中的部门进行人员信息的分类显示。这一操作主要是通过树控件中的OnSelchanged事件完成的,当树列表中的选中节点发生改变时就会触发该事件。代码如下:voidCPersonManage::OnSelchangedTreedept(NMHDR*pNMHDR,LRESULT*pResult){NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;//获取树列表结构信息m_DeptID=m_tree.GetItemData(pNMTreeView->itemNew.hItem);//获取部门编号UpdatePerson();//更新人员信息*pResult=0;}人员信息管理实现过程实现过程如下:62
(1)创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGPERSON,将对话框标题改为“人员信息管理”。(2)向对话框中添加2个群组框控件、1个树控件、1个列表视图控件和4个按钮控件,分别设置按钮控件的Caption属性为“添加”、“修改”、“删除”和“退出”。(3)添加GetNode方法,获取部门表中的数据信息并添加到树控件中。该方法由UpdateDept方法调用。代码如下:voidCDeptManage::UpdateDept(){m_tree.DeleteAllItems();//清空树列表中的所有数据GetNode(TVI_ROOT,0);//生成树列表}voidCDeptManage::GetNode(HTREEITEMpNode,intnPid){HTREEITEMnode;CADODataSetDataSet;//定义记录集DataSet.SetConnection(::GetConnection());//设置数据库连接对象CStringstr;str.Format("Select*Fromtab_Deptwherepid=%d",nPid);//查询语句DataSet.Open(str);//打开记录集intcount=DataSet.GetRecordCount();//获取记录数量intID;_variant_tvalue;for(inti=0;iItem["DeptName"]->Value,pNode);//部门名称value=(_variant_t)DataSet.GetFields()->Item["ID"]->Value;//编号ID=value.intVal;m_tree.SetItemData(node,ID);//与节点关联GetNode(node,ID);//获取子节点62
DataSet.Next();//记录下移}}(4)定义UpdatePerson方法用来更新人员信息,将其显示在列表视图控件中。代码如下:voidCPersonManage::UpdatePerson(){m_list.DeleteAllItems();//清空列表视图控件中的数据CADODataSetDataSet;//定义记录集DataSet.SetConnection(::GetConnection());//设置数据库连接对象CStringstr;if(m_DeptID==-1)str.Format("Select*Fromtab_Employees");//显示所有人员信息elsestr.Format("Select*Fromtab_EmployeeswhereDept=%d",m_DeptID);//显示指定部门的人员信息DataSet.Open(str);//打开记录集intcount=DataSet.GetRecordCount();//获取记录集数量intn=0;_variant_tvalue;for(inti=0;iItem["Emp_Id"]->Value);//人员编号value=DataSet.GetFields()->Item["AutoID"]->Value;//自动编号m_list.SetItemData(n,value.lVal);//将自动编号与列表中的项关联m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Emp_NAME"]->Value);//名称m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Sex"]->Value);//性别m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Nationality"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->62
Item["Birth"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Political_Party"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Culture_Level"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Marital_Condition"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Id_Card"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Office_phone"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Mobile"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["HireDate"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Duty"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Memo"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Files_Keep_Org"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Hukou"]->Value);m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields()->Item["Family_Place"]->Value);n++;DataSet.Next();//记录下移}}(5)添加OnInitDialog方法,用于初始化人员信息管理窗体中的数据。在该方法中显示部门信息、人员信息。代码如下:BOOLCPersonManage::OnInitDialog(){CDialog::OnInitDialog();62
m_DeptID=-1;UpdateDept();inti=0;m_list.InsertColumn(i,"人员编号");m_list.SetColumnWidth(i++,80);m_list.InsertColumn(i,"人员名称");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"性别");m_list.SetColumnWidth(i++,50);m_list.InsertColumn(i,"民族");m_list.SetColumnWidth(i++,50);m_list.InsertColumn(i,"出生日期");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"政治面貌");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"文化程度");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"婚姻状况");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"身份证号");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"办公电话");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"手机电话");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"到岗日期");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"职务");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"备注");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"家庭住址");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"档案所在地");62
m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"户口所在地");m_list.SetColumnWidth(i++,100);m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);UpdatePerson();returnTRUE;}(6)单击“添加”按钮,弹出人员编辑窗体,输入人员信息后单击“保存”按钮,实现人员信息的添加。代码如下:voidCPersonManage::OnAdd(){CPersonEditpersonedit;personedit.m_DeptData=m_DeptID;if(personedit.DoModal()==IDOK){CADODataSetdataset;dataset.SetConnection(::GetConnection());CStringstr="selecttop1*fromtab_Employees";dataset.Open(str);dataset.AddNew();dataset.SetFieldValue("Emp_Id",(_bstr_t)personedit.m_id);dataset.SetFieldValue("Emp_NAME",(_bstr_t)personedit.m_name);dataset.SetFieldValue("Sex",(_bstr_t)personedit.m_sex);dataset.SetFieldValue("Nationality",(_bstr_t)personedit.m_nationality);dataset.SetFieldValue("Birth",(_bstr_t)personedit.m_birth.Format("%Y-%m-%d"));dataset.SetFieldValue("Political_Party",(_bstr_t)personedit.m_farty);dataset.SetFieldValue("Culture_Level",(_bstr_t)personedit.m_culture);dataset.SetFieldValue("Marital_Condition",(_bstr_t)personedit.m_marital);dataset.SetFieldValue("Id_Card",(_bstr_t)personedit.m_card);dataset.SetFieldValue("Office_phone",(_bstr_t)personedit.m_office);dataset.SetFieldValue("Mobile",(_bstr_t)personedit.m_mobile);dataset.SetFieldValue("HireDate",(_bstr_t)personedit.m_hire.Format("%Y-%m-%d"));62
dataset.SetFieldValue("Duty",(_bstr_t)personedit.m_duty);dataset.SetFieldValue("Memo",(_bstr_t)personedit.m_memo);dataset.SetFieldValue("Files_Keep_Org",(_bstr_t)personedit.m_files);dataset.SetFieldValue("Hukou",(_bstr_t)personedit.m_hukou);dataset.SetFieldValue("Family_Place",(_bstr_t)personedit.m_family);dataset.SetFieldValue("dept",personedit.m_DeptData);dataset.Save();UpdatePerson();}}(7)单击“修改”按钮,弹出人员编辑窗体,输入人员信息后单击“保存”按钮,实现人员信息的修改。代码如下:voidCPersonManage::OnEdit(){if(m_list.GetSelectionMark()==-1)return;intid=m_list.GetItemData(m_list.GetSelectionMark());CPersonEditpersonedit;CADODataSetdataset;dataset.SetConnection(::GetConnection());CStringstr;str.Format("select*fromtab_Employeeswhereautoid=%d",id);dataset.Open(str);personedit.m_id=(char*)(_bstr_t)dataset.GetFields()->Item["Emp_Id"]->Value;personedit.m_name=(char*)(_bstr_t)dataset.GetFields()->Item["Emp_NAME"]->Value;personedit.m_sex=(char*)(_bstr_t)dataset.GetFields()->Item["Sex"]->Value;personedit.m_nationality=(char*)(_bstr_t)dataset.GetFields()->Item["Nationality"]->Value;CStringbirth=(char*)(_bstr_t)dataset.GetFields()->Item["Birth"]->Value;if(!birth.IsEmpty()){//设置日期数据intyy=atoi(birth.Left(4));62
intmm=atoi(birth.Mid(6,2));intdd=atoi(birth.Mid(9,2));CTimetbirth(yy,mm,dd,0,0,0);personedit.m_birth=tbirth;}personedit.m_farty=(char*)(_bstr_t)dataset.GetFields()->Item["Political_Party"]->Value;personedit.m_culture=(char*)(_bstr_t)dataset.GetFields()->Item["Culture_Level"]->Value;personedit.m_marital=(char*)(_bstr_t)dataset.GetFields()->Item["Marital_Condition"]->Value;personedit.m_card=(char*)(_bstr_t)dataset.GetFields()->Item["Id_Card"]->Value;personedit.m_office=(char*)(_bstr_t)dataset.GetFields()->Item["Office_phone"]->Value;personedit.m_mobile=(char*)(_bstr_t)dataset.GetFields()->Item["Mobile"]->Value;CStringhire=(char*)(_bstr_t)dataset.GetFields()->Item["HireDate"]->Value;if(!hire.IsEmpty()){//设置日期数据intyy=atoi(hire.Left(4));intmm=atoi(hire.Mid(6,2));intdd=atoi(hire.Mid(9,2));CTimethire(yy,mm,dd,0,0,0);personedit.m_hire=thire;}personedit.m_duty=(char*)(_bstr_t)dataset.GetFields()->Item["Duty"]->Value;personedit.m_memo=(char*)(_bstr_t)dataset.GetFields()->Item["Memo"]->Value;personedit.m_files=(char*)(_bstr_t)dataset.GetFields()->Item["Files_Keep_Org"]->Value;personedit.m_hukou=(char*)(_bstr_t)dataset.GetFields()->Item["Hukou"]->Value;personedit.m_family=(char*)(_bstr_t)dataset.GetFields()->Item["Family_Place"]->Value;personedit.m_DeptData=dataset.GetFields()->Item["Dept"]->Value;62
if(personedit.DoModal()==IDOK){dataset.SetFieldValue("Emp_Id",(_bstr_t)personedit.m_id);dataset.SetFieldValue("Emp_NAME",(_bstr_t)personedit.m_name);dataset.SetFieldValue("Sex",(_bstr_t)personedit.m_sex);dataset.SetFieldValue("Nationality",(_bstr_t)personedit.m_nationality);dataset.SetFieldValue("Birth",(_bstr_t)personedit.m_birth.Format("%Y-%m-%d"));dataset.SetFieldValue("Political_Party",(_bstr_t)personedit.m_farty);dataset.SetFieldValue("Culture_Level",(_bstr_t)personedit.m_culture);dataset.SetFieldValue("Marital_Condition",(_bstr_t)personedit.m_marital);dataset.SetFieldValue("Id_Card",(_bstr_t)personedit.m_card);dataset.SetFieldValue("Office_phone",(_bstr_t)personedit.m_office);dataset.SetFieldValue("Mobile",(_bstr_t)personedit.m_mobile);dataset.SetFieldValue("HireDate",(_bstr_t)personedit.m_hire.Format("%Y-%m-%d"));dataset.SetFieldValue("Duty",(_bstr_t)personedit.m_duty);dataset.SetFieldValue("Memo",(_bstr_t)personedit.m_memo);dataset.SetFieldValue("Files_Keep_Org",(_bstr_t)personedit.m_files);dataset.SetFieldValue("Hukou",(_bstr_t)personedit.m_hukou);dataset.SetFieldValue("Family_Place",(_bstr_t)personedit.m_family);dataset.SetFieldValue("dept",personedit.m_DeptData);dataset.Save();UpdatePerson();}}(8)单击“删除”按钮,实现删除当前选中的人员信息记录。代码如下:voidCPersonManage::OnDelete(){if(MessageBox("是否删除此记录!","提示",MB_YESNO|MB_ICONWARNING)==IDYES){if(m_list.GetSelectionMark()==-1)return;62
intid=m_list.GetItemData(m_list.GetSelectionMark());CADODataSetdataset;dataset.SetConnection(::GetConnection());CStringstr;str.Format("select*fromtab_Employeeswhereautoid=%d",id);dataset.Open(str);dataset.Delete();dataset.Save();UpdatePerson();}}1.1考勤管理模块在进行程序设计时,日期型数据可以使用字符串的形式存入日期类型的数据库字段中,但字符串类型的日期数据要想转换成日期类型的数据就必须自己实现其转换功能。在该模块中实现了字符串形式的日期和时间分别转换成日期类型的数据。GetTimeForStr方法用来将字符串形式的时间转换成日期类型。代码如下:CTimeCCheckManage::GetTimeForStr(CStringtimestr){inth,m,s;if(timestr.GetLength()<8)//不足8位补0timestr="0"+timestr;h=atoi(timestr.Left(2));//获取小时m=atoi(timestr.Mid(3,2));//获取分s=atoi(timestr.Right(2));//获取秒CTimeresult(2000,1,1,h,m,s);//生成日期returnresult;}GetDateForStr方法用来将字符串类型的日期值转换成日期类型的数据。代码如下:CTimeCCheckManage::GetDateForStr(CStringdatestr){inty,m,d;y=atoi(datestr.Left(4));//年m=atoi(datestr.Mid(5,2));//月62
d=abs(atoi(datestr.Right(2)));//日CTimeresult(y,m,d,8,0,0);//生成日期returnresult;}在该模块中还实现了一个时间相减的方法,在这个方法中都是将时间转换成秒后进行减法计算的,然后再将秒转换成对应的时间类型数据。代码如下:CTimeCCheckManage::DecTime(CTimeone,CTimetwo){intyy,mm,dd,h,s,m,onetemp,twotemp;yy=2000;//one.GetYear();//-two.GetYear();mm=1;dd=1;onetemp=one.GetSecond()+one.GetMinute()*60+one.GetHour()*60*60;//总秒数twotemp=two.GetSecond()+two.GetMinute()*60+two.GetHour()*60*60;if((onetemp-twotemp)<0){h=m=s=0;}else{h=(onetemp-twotemp)/60/60;//小时m=((onetemp-twotemp)-h*60*60)/60;//分种s=((onetemp-twotemp)-h*60*60)-m*60;//秒}CTimetime(yy,mm,dd,h,m,s);//生成时间数据returntime;}考勤管理模块实现过程实现过程如下:(1)创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGCHECK,将对话框标题改为“考勤管理”。(2)向对话框中添加1个复选框控件、3个静态文本控件、3个组合框控件、4个按钮控件和1个列表视图控件。设置复选框控件的Caption属性为“62
显示全部”;分别设置静态文本控件的Caption属性为“年”、“月”和“员工”;分别设置按钮控件的Caption属性为“添加”、“修改”、“删除”和“退出”。(3)添加UpdateList方法,用于更新显示人员的考勤信息。代码如下:voidCCheckManage::UpdateList(){this->UpdateData();CStringstr;if(m_check)str.Format("Select*Fromtab_check");//显示所有员工考勤信息else{CStringStarttime,EndTime;Starttime=m_yy+"-"+m_mm+"-1";EndTime.Format("DATEADD(month,1,"%s")",Starttime);if(m_emp=="(全部)")//显示指定时间内的所有员工考勤信息str.Format("Select*Fromtab_checkwherecheckdatebetween"%s"and%s",Starttime,EndTime);else//显示指定时间内的某个员工考勤信息str.Format("Select*Fromtab_checkwherename="%s"andcheckdatebetween"%s"and%s",m_emp,Starttime,EndTime);}CADODataSetdataset;//定义记录集dataset.SetConnection(::GetConnection());//设置数据库连接对象dataset.Open(str);//打开记录集m_list.DeleteAllItems();//清空列表视图控件中的所有数据for(inti=0;iItem["autoid"]->Value;m_list.InsertItem(i,"");m_list.SetItemData(i,data);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["name"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["ondutytime"]->Value);62
m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["offdutytime"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["ontime"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["offtime"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["leave"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["onleave"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["offleave"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["latetime"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["leaveearly"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["memo"]->Value);m_list.SetItemText(i,n++,(_bstr_t)dataset.GetFields()->Item["checkdate"]->Value);dataset.Next();//记录下移}}(4)向对话框中添加OnInitDialog方法,在对话框初始化时设置列表视图控件的表头和列宽度,以及查询条件。代码如下:BOOLCCheckManage::OnInitDialog(){CDialog::OnInitDialog();inti=0;m_list.InsertColumn(i,"人员姓名");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"上班时间");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"下班时间");62
m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"上班考勤时间");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"下班考勤时间");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"请假类别");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"请假起始时间");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"请假结束时间");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"迟到时间");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"早退时间");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"备注");m_list.SetColumnWidth(i++,100);m_list.InsertColumn(i,"考勤日期");m_list.SetColumnWidth(i++,130);m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_check=true;this->UpdateData(false);intcuryear,curmonth;//当前年、月CTimetime(CTime::GetCurrentTime());curyear=time.GetYear();//当前年curmonth=time.GetMonth();//当前月charvalue[10];for(inty=2000;y<2100;y++)//向年列表中添加数值{_itoa(y,value,10);m_cyy.InsertString(y-2000,value);}62
m_cyy.SetCurSel(curyear-2000);for(intn=1;n<=12;n++)//向月列表中添加数值{_itoa(n,value,10);m_cmm.InsertString(n-1,value);}m_cmm.SetCurSel(curmonth-1);CADODataSetdataset;dataset.SetConnection(::GetConnection());dataset.Open("Select*Fromtab_Employees");//打开员工信息表m_cemp.InsertString(0,"(全部)");for(intindex=1;indexItem["emp_name"]->Value);dataset.Next();}m_cemp.SetCurSel(0);UpdateList();//更新考勤信息列表returnTRUE;}(5)添加OnAdd方法,用于向考勤信息表中添加员工的日考勤数据。代码如下:voidCCheckManage::OnAdd(){CCheckEditcheckedit;//员工考勤编辑窗体if(checkedit.DoModal()==IDOK)//显示员工考勤编辑窗体{CStringtime;CStringstr="Selecttop1*Fromtab_check";CADODataSetdataset;dataset.SetConnection(::GetConnection());dataset.Open(str);//打开员工考勤表62
dataset.AddNew();//添加新记录dataset.SetFieldValue("name",(_bstr_t)checkedit.m_name);dataset.SetFieldValue("checkdate",(_bstr_t)checkedit.m_datecheck.Format(%Y-%m-%d"));dataset.SetFieldValue("ondutytime",(_bstr_t)checkedit.m_timeonduty.Format("%H:%M:%S"));dataset.SetFieldValue("offdutytime",(_bstr_t)checkedit.m_timeoffduty.Format("%H:%M:%S"));dataset.SetFieldValue("ontime",(_bstr_t)checkedit.m_timeon.Format("%H:%M:%S"));dataset.SetFieldValue("offtime",(_bstr_t)checkedit.m_timeoff.Format("%H:%M:%S"));dataset.SetFieldValue("leave",(_bstr_t)checkedit.m_leave);dataset.SetFieldValue("onleave",(_bstr_t)checkedit.m_timeonleave.Format("%H:%M:%S"));dataset.SetFieldValue("offleave",(_bstr_t)checkedit.m_timeoffleave.Format("%H:%M:%S"));dataset.SetFieldValue("memo",(_bstr_t)checkedit.m_memo);CTimelatetime=DecTime(checkedit.m_timeon,checkedit.m_timeonduty);//时间相减time.Format("%d:%d:%d",latetime.GetHour(),latetime.GetMinute(),latetime.GetSecond());dataset.SetFieldValue("latetime",(_bstr_t)time);Ctimeleaveearly=DecTime(checkedit.m_timeoff,checkedit.m_timeoffduty);time.Format("%d:%d:%d",leaveearly.GetHour(),leaveearly.GetMinute(),leaveearly.GetSecond());dataset.SetFieldValue("leaveearly",(_bstr_t)time);Dataset.Save();//保存记录UpdateList();//更新考勤信息列表}}(6)添加OnEdit方法,用于编辑考勤信息表中员工的日考勤数据。代码如下:voidCCheckManage::OnEdit(){62
if(m_list.GetSelectionMark()==-1)//判断是否存在选中记录return;intid=m_list.GetItemData(m_list.GetSelectionMark());//获取记录唯一标识CCheckEditcheckedit;//考勤信息编辑窗体CStringstr;str.Format("Select*Fromtab_checkwhereautoid=%d",id);CADODataSetdataset;dataset.SetConnection(::GetConnection());dataset.Open(str);//打开记录集checkedit.m_name=(char*)(_bstr_t)dataset.GetFields()->Item["name"]->Value;checkedit.m_timeonduty=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["ondutytime"]->Value);checkedit.m_timeoffduty=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["offdutytime"]->Value);checkedit.m_timeon=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["ontime"]->Value);checkedit.m_timeoff=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["offtime"]->Value);checkedit.m_leave=(char*)(_bstr_t)dataset.GetFields()->Item["leave"]->Value;checkedit.m_timeonleave=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["onleave"]->Value);checkedit.m_timeoffleave=GetTimeForStr((char*)(_bstr_t)dataset.GetFields()->Item["offleave"]->Value);checkedit.m_memo=(char*)(_bstr_t)dataset.GetFields()->Item["memo"]->Value;checkedit.m_datecheck=GetDateForStr((char*)(_bstr_t)dataset.GetFields()->Item["checkdate"]->Value);if(checkedit.DoModal()==IDOK)//显示考勤信息编辑窗体{CStringtime;dataset.SetFieldValue("name",(_bstr_t)checkedit.m_name);dataset.SetFieldValue("checkdate",(_bstr_t)checkedit.m_datecheck.Format("%Y-%m-%d"));dataset.SetFieldValue("ondutytime",(_bstr_t)checkedit.m_timeonduty.Format("%H:%M:%S"));62
dataset.SetFieldValue("offdutytime",(_bstr_t)checkedit.m_timeoffduty.Format("%H:%M:%S"));dataset.SetFieldValue("ontime",(_bstr_t)checkedit.m_timeon.Format("%H:%M:%S");dataset.SetFieldValue("offtime",(_bstr_t)checkedit.m_timeoff.Format("%H:%M:%S"));dataset.SetFieldValue("leave",(_bstr_t)checkedit.m_leave);dataset.SetFieldValue("onleave",(_bstr_t)checkedit.m_timeonleave.Format("%H:%M:%S"));dataset.SetFieldValue("offleave",(_bstr_t)checkedit.m_timeoffleave.Format("%H:%M:%S"));dataset.SetFieldValue("memo",(_bstr_t)checkedit.m_memo);CTimelatetime=DecTime(checkedit.m_timeon,checkedit.m_timeonduty);time.Format("%d:%d:%d",latetime.GetHour(),latetime.GetMinute(),latetime.GetSecond());dataset.SetFieldValue("latetime",(_bstr_t)time);CTimeleaveearly=DecTime(checkedit.m_timeoffduty,checkedit.m_timeoff);time.Format("%d:%d:%d",leaveearly.GetHour(),leaveearly.GetMinute(),leaveearly.GetSecond());dataset.SetFieldValue("leaveearly",(_bstr_t)time);dataset.Save();//保存记录集修改UpdateList();//更新考勤信息列表}}(7)添加OnDelete方法,用于删除当前选择的考勤记录。代码如下:voidCCheckManage::OnDelete(){if(MessageBox("是否删除此记录!","提示",MB_YESNO|MB_ICONWARNING)==IDYES){if(m_list.GetSelectionMark()==-1)return;62
intid=m_list.GetItemData(m_list.GetSelectionMark());CADODataSetdataset;dataset.SetConnection(::GetConnection());CStringstr;str.Format("select*fromtab_checkwhereautoid=%d",id);dataset.Open(str);dataset.Delete();dataset.Save();UpdateList();}}1.1本章小结本章首先介绍了后台ADO连接MYSQL数据库编程,然后就是安装第四章设计的流程图进行程序设计,系统先分成多个模块,然后各个模块再组合在一起,以上是整个系统的代码实现过程。62
1系统测试1.1系统安装部署·服务器配置要求操作系统:支持WindowsNT/2000/XP/98等相关系统。推荐使用:WindowsXPWindows7Windows编译工具:MicrosoftVisualStudio2008(MFC)数据库:mysql-essential-5.1.53-win32.msi数据库辅助软件:navicat8_mysql_en.exe内存:256MB以上1.2系统功能测试1.2.1用户登录与注销确保MySQL服务是启动的,程序里面数据库的密码是正确的,如图12所示。图1登录界面图用户在登录界面用户名下拉菜单中选择用户名,然后输入密码,输入错误就会提示用户名或密码不正确,如图13所示。62
图1登录密码错误提示图当登录密码输入正确以后,就会显示人事考勤管理系统的主界面,如图14所示。图2主界面示意图62
主界面的最上面显示菜单栏:系统设置、基本信息管理、员工考勤管理分别如图15、图16、图17所示。图1系统设置功能列表图图2基本信息功能列表图图3员工考勤管理功能列表图1.1.2用户信息管理用户通过用户信息管理模块可以对登录系统的用户进行修改、增加和删除,具体如图18所示。图4用户信息管理图62
1.1.1部门信息管理用户通过部门信息管理模块可以添加、修改、删除部门,具体如图19所示。图1部门信息管理图1.1.2员工信息管理用户通过人员信息管理模块对各部门里面的人员进行添加、修改、删除,示意图如图20所示。图2员工信息管理图62
员工信息管理模块中添加员工时输入的信息预览如图21所示。图1添加员工信息图1.1.2考勤数据录入用户通过考勤管理模块可以对员工的考勤进行添加、修改、删除,示意图如图22所示。图2考勤管理图62
其中添加按钮选项如图23所示。图1人员考勤编辑图1.2系统测试运行情况在论文完成之际,人事考勤管理系统己经顺利运行。目前,可以使用考勤管理功能记录本部门人员的出勤情况。系统的建设基本实现了最初的建设目标,减轻了管理部门的工作负担,提高了工作效率,提升了管理水平,促进了公司人力资源信息管理模式的转变。1.3本章小结本章首先介绍了系统运行需要的软件环境和系统部署的具体操作步骤,然后简单介绍了系统运行过程中部分功能的使用方法,最后阐述了系统运行的实际情况,并根据这些情况对系统的实现及运行实施做了总结。62
1总结与展望1.1工作总结本文结合人事发展的背景与现状,概述了人事系统的特点与作用。在明确了本文的研究内容与思路的基础上,对系统的功能性需求与非功能性需求进行了详细分析,给出了系统的结构设计、功能设计和数据库设计方案,并进行了编程实现,最后对系统运行情况进行测试,分析了测试结果。总体来说,开发出的人事考勤管理系统符合要求,基本满足日常工作需求,运行过程安全稳定。本文的详细研究内容如下:(1)概述了人事考勤管理系统的背景、发展历程和研究意义,分析了国内外的研究现状,确定了本论文的主要工作;(2)分析了人事考勤管理系统的特点、作用与组成,根据其特点和应用背景,对开发过程中可能用到的关键技术做了介绍;(3)结合公司的实际情况,对本系统做了深入的需求分,确定了系统的功能与边界,为接下来的总体设计和详细功能模块的设计奠定了基础;(4)对系统进行了总体设计、主要功能模块设计和数据库设计;对设计实现的难点和关键技术进行了深入地分析与探讨;并给出代码,对整个系统进行了编程实现;(5)根据软件工程的思想,对系统进行试运行,给出了测试结果的分析,保障了系统安全稳定地运行。1.2展望虽然本系统顺利试运行,但由于本人水平有限,在系统设计与实现过程中难免有疏漏之处。在用户使用过程中,主要反馈以下问题需要解决:(1)员工信息的采集只能手工录入,若增加数据批量导入功能则可大大减少工作量;(2)展示手段过于单一,若能在展示部门多添加较为直观的图表功能并相互切换,界面会更加美观,也更容易接受;综上所述,人事考勤管理系统的建设是一个系统的过程,不能一蹴而就。系统的进一步完善,还需要用户在使用过程中提出需求,不断进行系统升级,才能研发出符合公司的实际情况与个性需求的产品。62
参考文献[1]张潇.推进我国企业人力资源管理信息化的对策研究[M].管理观察,2010(1):148-149[1]马聪.人力资源信息系统的功能及其构建方法与步骤[M].石油知识,2009(3):46-48[2]谢春兴.如何选择人力资源软件系统[M].厦门科技,2009(4):25-27[3]杨小薇.人力资源管理跨出后院[M].IT经理世界,2002(9):23-30[4]王挺.企业人力资源管理决策支持系统结构设计[J].中国管理信息化(综合版),2007(07):23-30[5]王锦秀,黄红发.现代企业人力资源管理及管理偶是探讨[M].江西社会科学,2003,34(12):153-156[6]程红梅.传统人事管理与现代人力资源管理的比较研究[M].万方数据库,2010(7)[7]李清黎,徐慧娟.人力资源管理系统的现状与不足[M].当代经济,2009(6):66-67[8]侯俊杰.深入浅出MFC[M].松岗,1997.05[9]孙鑫.VC++深入详解[M].电子工业出版社,2012.07.01[10]辛长安,王颜国.Visual.C.权威剖析--MFC的原理、机制与开发实例[M].清华大学出版社,2008[11]IvorHorton著李颂华康会光译.VisualC++2005入门经典[M].清华大学,2012.12.01[12]博罗塞斯.MFC.Windows程序设计(第2版)[M].清华大学,2007.562
致谢在本科学习阶段即将结束之际,首先,我想把最诚挚的谢意献给我的导师张丹老师。从论文选题到内容修订,张老师都给予了我悉心的指导与亲切的关怀。同时,她的严谨的态度、朴素的作风,都给了我深深的影响,让我受益匪浅,永生难忘。在这里,我要向张老师致以深深的敬意,真诚地祝愿张老师身体健康、家庭幸福、工作顺利!感谢湖南科技学院的领导老师们,感谢您在教学岗位上的辛勤付出!感谢在百忙之中抽出时间对本文进行审阅的老师们,您的意见给了我很大的指导和帮助!最后,感谢我的同学、同事和家人们,没有你们的帮助和支持,就没有我今天的成绩。62
您可能关注的文档
- 我公司考勤管理制度
- 员工考勤管理办法
- 法学院学生考勤管理办法(修订)
- 最新最全公司考勤管理制度
- 员工考勤管理制度范文
- 员工考勤管理制度范本
- 劳动纪律管理等重要方面,因此,考勤管理系统是一个企业
- 江西师范大学城市建设学院学生课堂考勤管理办法( …
- 江西师范大学城市建设学院学生课堂考勤管理办法( …
- 餐厅考勤管理制度
- 员工手册 (内涵公司简介以及考勤管理制度).
- 公司考勤管理制度(模板)x
- 公司职工考勤管理制度-职工管理制度
- 市政公司考勤管理制度
- 区委机关指纹考勤管理制度
- XC-MS-101-005考勤管理办法本_制度规范_工作范文_应用文书
- 人事行政考勤管理制度
- Excel函数COUNTIF及VLOOKUP在考勤管理中的应用