基于C的企业考勤管理系统的设计与开发_第1页
基于C的企业考勤管理系统的设计与开发_第2页
基于C的企业考勤管理系统的设计与开发_第3页
基于C的企业考勤管理系统的设计与开发_第4页
基于C的企业考勤管理系统的设计与开发_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要黑体二号黑体二号随着现代科学技术的发展,越来越多的公司和公司对职工的考勤都实行了信息化管理,使用计算机系统代替复杂的手工方式来管理考勤事务。考勤管理系统可以有效地管理公司员工的出勤情况,规范人事制度管理,保证公司正常的工作,是人力资源管理的重要组成部分。系统的开发重要涉及后台数据库的建立,维护以及前端应用程序的开发两个方面,重要模块涉及基本信息管理模块,考勤信息管理模块,记录查询模块和系统用户管理模块。系统是使用VisualC++开发语言,使用MicrosoftVisualStudio6.0作为工具软件,数据库为SQLServer2023。系统采用目前比较流行的ADO数据访问技术,并将每个数据库表的字段和操作封装到类中,它使应用程序的各个窗口都可以共享对表的操作,不需要反复编码,使程序更加易于维护,从而将面向对象的程序设计思想应用到数据库应用程序中。关键词:考勤管理;人力资源;数据库;数据访问技术AbstractAlongwiththedevelopmentofthemodernscienceandtechnology,moreandmorecompaniesandenterprisesimplementedtheinformationmanagementtothestaff'scheckingattendance,andusecomputersysteminsteadofthecomplexmanualwaytomanagethecheckingattendancebusiness.Thecheckingattendancemanagementsystemmayeffectivelymanagethestaff'sgoingoutondutysituation,Standardpersonnelsystemmanagement,Guaranteesthecompanynormalwork.ItistheimportantpartofhumanresourcesmanagementThedevelopmentofthissystemmainlyincludestwoaspects:theestablishmentofthebackstagedatabaseandthedevelopmentofthefront-sideapplication.Thissystemcontainsfollowingseveralmodules:thebasicinformationmanagementmodule,theattendanceinformationmanagementmodule,thestatisticalinquirymoduleandthesystemuseradministrationmodule.VisualC++andSQLServer2023areusedinthedevelopmentofthesystem.ThesystemusesthepopularADOtechnology,andencapsulatesthefieldsandtheoperationsofeachtableintosomeclasses.Itcausestheoperationwhichtheapplicationprocedureeachwindowallcansharesynchronizestables.Ithasnotrepeatcodes,andmakestheapplicationtobeeasiertomaintain.Bythisway,theideaofobject-orientedprogrammingwillbeappliedinthedatabaseapplication.Keywords:Attendancemanagement;Humanresources;Database;Dataaccesstechnology目录二号黑体居中二号黑体居中26291摘要黑体二号 2黑体二号第1章2131概述一级标题黑体二号理工类学科的论文主体不少于10000字 1一级标题黑体二号理工类学科的论文主体不少于10000字14361.1公司考勤管理系统意义二级标题黑体三号 1二级标题黑体三号15927公司考勤系统的应用背景 1159261.3公司考勤系统基于的技术种类 1第2章20277系统的可行性研究 1322402.1技术可行性分析 120236经济可行性分析 11442.3操作运营可行性分析 14204第3章一级标题黑体二号系统分析 1一级标题黑体二号314193.1系统二级标题黑体三号需求分析 1二级标题黑体三号2838用户工作流程 1218523.1.2功能需求 122953.2性能需求 1270233.3全局分析 132123第4章系统软件设计 1268284.1系统设计预览 164134.1.1系统设计目的与功能结构 1151904.1.2业务流程图展示 1241354.2数据库设计 1120974.2.1数据库分析 1187864.3公共类的设计 1257374.3.1CADOconnection类 1256984.3.2CADODataSet类 118164.4统主体窗的设计 1137334.5系统模块设计 1116834.5.1用户登入模块设计 191304.5.2用户管理模块设计 1114624.5.3部门管理模块设计 1774.5.4人员信息管理模块 1265804.5.5考勤管理模块设计 1160904.5.6考勤汇总查询模块设计 113607第5章总结与展望 113205参考文献 123033附录黑体,二号,居中 1黑体,二号,居中28848致谢黑体,二号,居中 1黑体,二号,居中目录页码与正文页码分开,不同目录页码与正文页码分开,不同概述一级标题黑体二号理工类学科的论文主体不少于10000字一级标题黑体二号理工类学科的论文主体不少于10000字公司考勤管理系统意义二级标题黑体三号二级标题黑体三号 考勤管理是企事业单位经营的重要环节,加强考勤管理,严厉考勤制度是企事业单位搞好各项经营管理工作的前提与保障.科学地管理考勤不仅可以保证各项经营管理计划得以贯彻,并且有助于提高工作学习效率.长期以来,很多单位沿袭人工方式进行考勤管理,每个单位都有专门负责考勤登记的人员.即便如此科学准确地管理考勤也绝非易事,因素重要在于考勤涉及人员、班种、请假等诸多因素,每日考勤记录工作量极大等.运用计算机管理考勤不仅能使管理人员从繁重的考勤管理工作中解脱出来,并且可以使考勤管理工作更加科学化,规范化,智能化.

随着计算机技术的高速发展,正在改变着整个世界的经济,也改变着公司的管理.顺应信息技术发展的潮流,作为公司信息化的核心部分,选择先进的,符合国际标准的考勤系统,不仅可以有效提高公司管理,协作与监控员工的出勤效率,更可认为公司进一步信息化建设奠定良好的基础.运用计算机实现公司人事考勤管理势在必行。本系统结合公司实际考勤管理制度,通过实际的需求分析,采用功能强大的VisualC++6.0作为开发工具,开发出来的公司考勤管理系统。 其一,可以将考勤事务交给基本部门解决,交个每个员工自己解决,交给系统自动解决,用IT技术推动人事考勤管理的变革。 其二,新的考勤系统的实行,不仅把HR人员从考勤的具体事务中解放出来,并且也推动了全员对人事管理的参与和互动.HR人员的可以把工作重心可以放在服务员工、支持公司管理层的战略决策上,放在公司最重要的资产—员工和员工的集体智慧的管理上等核心业务上来。在此讨论的考勤管理系统的开发,旨在探索一种新的考勤模式.通过这种新的模式,为公司的传统考勤模式发明一种新的概念,提高考勤工作效率和标准化水平。

整个系统从符合操作简便、界面和谐、灵活、实用、安全的规定出发,完毕平常的员工签到,出勤修改,出勤查询,用户维护,员工维护,以及系统配置等功能.通过实际使用证明,本文所设计的系统可以满足公司进行平常的员工考勤管理方面的需要。公司考勤系统的应用背景随着计算机在国内外的普及和计算机科学技术的飞速发展,人们开始越来越多地运用计算机解决实际问题。公司员工考勤信息管理是公司信息管理的重要部分。面对大量的人事考勤信息,采用人力解决将浪费大量的时间、人力和物力,且数据的准确性低。

因此,开发一个界面和谐,易于操作的员工信息管理软件进行自动化解决具有较大的社会现实意义。同时,人事考勤管理系统是一切应用系统的典范,它具有一切应用系统的特性,系统结构与现实生活紧密结合,具体直观,开发应用简朴,不失一般性。

人事考勤管理系统的特点是从人事考勤管理的角度出发,用集中的数据库将几乎所有与人事考勤相关的数据统一管理起来,形成了集成的信息源。和谐的用户界面,强有力的报表生成工具、分析工具和信息的共享使得人事考勤管理人员得以摆脱繁重的平常工作,集中精力从战略的角度来考虑公司人事考勤规划和政策.

作为计算机应用的一部分,使用计算机对考勤信息进行管理,有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点可以极大地提高人事劳资管理的效率,也是公司的科学化、正规化管理,与世界接轨的重要条件。

考勤管理系统就是把分散的企事业单位的考勤信息实行统一、集中、规范的收集管理,建立分类编号管理、电脑存储查询以及防火、防潮、防蛀、防盗等现代化、专业化的管理系统,为企事业单位和职工解除后顾之忧。

公司考勤管理系统为企事业单位提供信息征询、信息检索、信息存取等服。本考勤管理系统基本上可以满足现代公司考勤管理需求。信息录入项目齐全、完整、系统。现代考勤管理系统灵活使用表格对各种信息分门别类,组成公司考勤管理系统,可以方便地查询、阅读、修改、交流和反复使用。公司考勤系统基于的技术种类 基于Client/Server结构的远程电脑考勤系统,PB和SQLServer结合开发出两层C/S结构的远程电脑考勤系统。该系统采用条码扫描的形式,在Client端采集考勤数据,在Server端综合汇总,汇总的数据除供管理者查询以做决策的依据外,还可直接将其传至公司的财务系统,作为薪金发放的重要参考。在论述远程电脑考勤系统实例的同时,还从系统环境,前台应用程序的设计,后台数据库的设计,系统数据库的安全,系统网络的安全等方面给出了开发两层次C/S结构应用系统、一般方法和技巧,具有一定的参考价值。 基于VB/SQLServer的管理系统的实现——智能化考勤系统设计,VB作为一种面向对象的可视化编程工程,具有简朴易学、灵活方便和易于扩充的特点.与后端的SQLServer相结合,VB可以提供一个高性能的客户机/服务器方案.重要讲述在软件工程原理指导下,考勤管理方案的设计,该系统服务端采用了MircosoftSQLServe2023,客户端采用VisualBasic编程,通过微软的ADO控件调用服务器端的相关数据,实现数据的分布式管理. 基于ASP.NET的考勤管理系统的设计与实现,考勤管理系统是企事业单位实现员工考勤自动化管理的重要设施.本文具体讨论了某公司考勤管理系统的系统功能、系统结构的设计和关键技术实现的过程.用ASP.NET开发的该系统具有操作简便、界面和谐、灵活、实用和安全等特点.正文页码要用阿拉伯数字,与目录页码不同正文页码要用阿拉伯数字,与目录页码不同系统的可行性研究技术可行性分析为达成技术的可行支持在程序设计开发之前,首要拟定运用什么工具来开发,必须考量运用如何的形式才干达成最佳的效果。1991年微软公司推出VisualBasic,是基于BASIC的可视化的程序设计语言。既继承了其先辈的BASIC所有的程序设计简朴易用的特点,其程序也采用了面向对象,事件驱动的编程机制,用一种巧妙的方法把Windows的编程复杂性封装起来,提供了一种所见即所得的可视界面设计方法。VB的多种功能特点体现于:具有面向对象的可视化设计工具,应用面向对象的程序设计方法,把程序和数据封装起来视为一个对象,每个对象都是可逆的。程序员在设计时只需要根据现有界面设计的规定,直接在屏幕上画出窗口,菜单,按扭等不同类型的对象,并为每个对象设立属性。程序员的编程工作仅编写针对对象要完毕哪些功能的程序,因而程序设计的效率可提高很多。事件驱动的编程机制的运用,事件驱动是非常适合图形用户界面的编程方式。传统的编程方式是一种面向过程,按程序事先设计的流程运营。但在图形用户界面的应用程序中,用户的动作即事件掌握着程序的运营流向,每个事件都能驱动一段程序的运营。程序员只要编写响应用户动作的代码,各个动作之间不一定有联系。这样的应用程序代码较短,使得程序既易于编写又易于维护。明确提供了易学易用的应用程序集成开发环境在VB集成开发环境中,用户可设计界面、编写代码、调试程序,直至把应用程序编译成可执行文献,在Windows中运营,使用户在和谐的开发环境中工作。结构化的程序设计语言,VB具有丰富的数据类型、众多的内部函数和结构化程序结构,并且简朴易学。支持多种数据库系统的访问,运用数据控件或ODBC可以访问的数据库系统有,MicrosoftAccess、Btrieve、dBASE、MicrosoftFoxPro和Paradox等,也可以访问MicrosoftExcel、Lotus1-2-3等多种电子表格。OLE技术在于VB的核心就是其对对象的链接与嵌入(OLE)的支持,运用OLE,VB可以开发集声音、图像、动画、字解决、Web等对象于一体的应用程序。Active技术发展了原有的OLE技术,它使开发人员摆脱了特定语言的束缚。可方便地使用标准的Active部件,调用标准的接口,实现特定的功能。完备的help联机帮助功能,与Windows环境下的软件同样,在VB中,运用帮助菜单和F1功能键,用户可随时方便地得到所需的帮助信息,VB帮助窗口中显示了有关的示例代码,通过复制、粘贴操作可获得大量的示例代码,为用户的学习和使用提供了捷径。基于以上关于VisulBasicC++强大功能和易操作性的介绍,我们将采用其作为本次考勤系统的前台开发工具。SQLServer2023是Microsoft公司推出的数据库管理系统,它继承了SQLServer7.0在数据库软件设计和引擎方面的优势,同时增长了读多新的功能,使用更加方便,完全支持Web应用,并且更具可靠性和稳定性。我们选择SQLServer2023作为后台支持,大家都知道,SQLServer2023对一些公司级用户来说是个福音,它在存储大容量数据、保证数据的安全性、维护数据的完整性都有着极其杰出的一方面。它还具有自动高效的机制以及运营分布式解决等优点。这种关系型数据库管理系统可以满足各种类型数据库的单独开发和其他商业应用程序开发的需要。使用SQLServer2023我们可以很方便的建立数据库,可以将所建立的数据库很好的和VB结合起来。经济可行性分析考勤系统的面向主体用户群是公司,而公司在运营过程中准求的在范围内的尽量少的成本下实现最大的产出,已达成最高的性价比。以公司员工的数量可满足考勤系统的容量与需求,因此只需在配备定量的服务器的条件下,增长考勤机和IC卡即可。考勤系统运营的环境采用操作系统WINDOWS系统,系统开发工具,以及后台数据库均无需购买。因此实行此考勤系统无需硬件资金投入,若想将管理系统全面投入运营,所需资金投入也只需平常维护与技术支持等必须费用。所以,实行考勤系统在经济上是可行的,将考勤系统全面投入运营,在经济上也是可行的。操作运营可行性分析信息化考勤系统是考勤管理模式的发展方向,以现代化信息技术完毕考勤工作,可以提高工作效率和工作质量,迎合现代化公司发展管理的需求,也是与国际社会流行趋势相吻合的。公司管理制度的齐全与稳定,提供了公司创新发展的基础。公司计算机设备齐全,网络完善,有良好的机房和技术人员。公司DBA对微机操作纯熟,完全可以掌握系统的使用和维护。因此,考勤系统的操作运营是可行的。一级标题黑体二号系统分析一级标题黑体二号系统二级标题黑体三号需求分析二级标题黑体三号需求分析是系统开发必要环节,也是重中之重;需求过程研究业务工作,以期设计出有助于业务工作的更加完善的系统。作为该过程的结果,需求规格说明书是对系统的功能和行为完整的描述。系统设计将来自于需求和分析的抽象规格说明转变为面向真实世界的设计。一旦构建完毕,该系统就会投入使用,同时会不可避免地产生更多的新需求。同时,需求过程与分析活动之间有相称限度的重叠,分析建模对于设定工作的范围和其他一些事来说是必要的,所以我们运用分析模型来描述需求过程,随着开发工作的继续,分析活动在工作中占的比例将变得越来越大,直到所有需求都已知。用户工作流程登陆——运营——更新(删除)——查询系统开发重要有以下五个模块组成:在系统模块中实现了,登录与运营功能。在维护模块中实现了,对数据库更新与删除的功能。在查询模块中实现了,条件模糊查询功能。可以清楚的让使用者了解本系统,并帮助使用者如何更好的使用本系统3.1.2用户业务需求(1)该管理软件将对公司人事考勤档案进行管理和记录,对部门信息、员工信息、考勤数据、考勤信息进行管理和记录。(2)该管理软件将根据用户的需要对个人信息进行查询,并能打印具体信息。(3)该管理软件将为用户提供账号管理工具,以便用户对账号进行管理,具体为添加用户、删除用户、修改用户密码。(4)该管理软件提供公司人员管理,可以对公司员工的分类管理,新员工的加入以及员工删除,修改善本信息等功能。功能需求基于系统需求分析,该系统需要实现以下基本功能:用户管理:管理系统操作人员,设立操作人员口令和权限。在满足不同系统用户的操作需求的基础上,提高系统的安全性。人事考勤管理:完毕公司对员工个人考勤信息(涉及员工的基本档案和在职信息)的管理及相关操作。操作员进行员工考勤信息录入及更改,其中涉及员工的基本信息、工作部门、工作流程,规定对这些员工档案信息可以进行新增、修改、删除操作,同时可以进行查询和浏览操作。该模块是本系统的重点,用户可以通过该模块为单位建立一个比较完整的人事考勤系统,同时可以对数据进行查看。基础数据管理:维护人事管理相关的一些基础数据。重要涉及以下功能:(1)部门类别设立:维护公司中设立的部门类别信息;(2)职工类型设立:维护当前公司职工与公司的关系的类别信息;(3)职务类别设立:维护公司中设立的职务类别信息;(4)职工资类别设立:维护公司中设立的工资类别信息;(5)称类别设立:维护公司职工的职称类别信息;人事变动管理:对于人事上的变动调整进行管理,对人员考勤的信息进行更新(如:员工职务、员工职称、员工性质等的变动)考勤管理:考勤管理可帮助公司完毕时间管理记录员工上下班、加班、出缺勤时间,并可将数据连至薪资计算系统解决,以便作薪资结算。公司还可根据此考勤系统查询公司内各时段的员工出缺勤状况,作管理方面的分析。提供了全面的考勤管理。数据库管理:对现有的数据库进行管理,涉及数据备份和恢复,以方便用户对数据库的管理和维护工作,提高系统的数据安全性。性能需求(1)硬件环境在最低配置的情况下,系统的性能往往不尽如人意,现在的硬件性能已经相称杰出,且价格也很便宜,因此通常给服务器端配置高性能硬件。解决器:InterPentiumII266MX或更高内存:64MB硬盘空间:2GB显卡:SVGA显示适配器(2)软件环境操作系统:Windows98/ME/2023/NT数据库:MSQ全局分析用户需要输入用户名和密码进入人事考勤管理系统,对人事考勤管理系统的部门、员工的基本信息进行维护和管理。在考勤管理模块中录入员工当天的考勤信息,同时可对年、月、员工进行查询。还可以通过考勤汇总查询对员工某月的考勤记录进行汇总,计算出员工月工作天数,早退、迟到的天数等。UseCase是对一个活动者使用系统的一项功能时所进行的交互过程的一个文字描述序列.在该UseCase图中只有顶层图,重要是考虑到考勤管理系统体积不大,做成一个顶层图会使得各用例间的关系更清楚.具体关系如图所示.图3-1考勤管理系统顶层UseCase全局分析系统软件设计系统设计预览系统设计目的与功能结构人事考勤管理系统以实现员工平常出勤信息管理为设计目的,加以强大的数据库管理功能,可以方便对考勤信息进行管理,大大地提高了人事部门的平常工作效率。本系统在设计时应满足以下几点:采用人机对话的操作方式,信息查询灵活、方便、快捷、准确、数据存储安全可靠。对考勤信息的操作简朴,可以方便的进行添加、修改、和删除,可以录入员工信息、部门信息。对员工的考勤信息可按月进汇总计算,对用户输入的数据,系统进行严格的数据检查,尽也许排除人为的错误。系统最大限度的实现了易维护性和易操作性。统运营稳定、安全可靠。人事考勤系统功能结构如图4-1所示。图4-1人事考勤系统功能结构业务流程图展示图4-2人事考勤系统业务流程图数据库设计数据库分析人事考勤管理系统使用了MicrosoftSQLSever2023数据库来满足系统的规定,数据库名称为tb_person,在数据库中创建4张表用于存储各种不同的信息,如图4-2所示图4-2数据库中的标2数据库逻辑结构设计下面给出人事考勤管理系统数据库中的重要表的表结构。Tab_User(管理员信息表):用于保存管理员的信息,如图4-3所示Tab_Dept(部门信息表):用于记录部门的信息情况,如图4-4所示Tab_Employees(员工信息表):用于保存公司员工信息,如图4-5所示Tab_check(考勤信息表):记录员工天天的考勤信息,如图4-6所示公共类的设计本系统是使用ADO连接数据库的,为了能更方便地在程序中使用ADO建立数据库连接与数据表的操作,就在公共类中对系统中所使用的ADO操作进行了封装。在该系统中建立了ADO的两个公共类CADOConnection和CADODataSet,这两个类定义在ADO.h头文献中,实现ADO.cpp文献中。CADOconnection类CADOConnection类是用来连接数据库的,实现了对_Connection接口的封装,CADOConnection类在头文献中的定义如下:#import"msado15.dll"no_namespacerename("EOF,"adoEOF")classCADOConnection{private:StaticvoidInitADO();StaticvoidUnInitADO();protected:_ConnectionPtrm_Connection;public:BOOLIsOpen();_ConnectionPtrGetConnection();CstringGetSQLConstr(CStringIP,CStringDBName);BOOLOpen(CStringConStr);CADOConnection();Virtual~CADOConnection();};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(){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,","adModeUnknown);returnIsOpen();}GetSQLConStr方法用来生成与数据库连接所需要的连接字符串,代码如下:CStringCADOConnection::GetSQLConStr(CStringIP,CStringDBName){CStringStr;Str.Format("Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID=sa;InitialCatalog=%s;DataSource=%s",DBName,IP);returnStr;}GetConnection方法用于返回_Connection接口指针,代码如下:_ConnectionPtrCADOConnection::GetConnection(){returnm_Connection:}IsOpen方法用来判断当前数据库连接对象与数据库的连接状态,代码如下:BOOLCADOConnection::IsOpen(){longState;m_Connection->get_State(&State);if(State==adStateOpen)returntrue;returnfalse;}CADODataSet类CADODataSet类是用来存储数据的数据集类,该类实现了_Recordset接口的实例,该类在头文献中的定义如下:classCADODataSet{protected:_RecoedsetPtrm_DataSet;CADOConnection*m_Connectionpublic:voidDelete();intGetRecordNo();voidmove(intnIndex);voidSave();voidSetFieldValue(CStringFieldName,_variant_tValue);voidAddNew();BOOLNext();FieldsPtrGetFields();intGetRecordCount();voidSetConnetion(CADOConnection*pCon);BOOLOpen(CStringSQLStr);CADODataSet();virtual~CADODataSet();private:BOOLIsOpen();};CADODataSet方法为记录集实现类的构造方法,在该方法中实现记录集接口对象的创建,代码如下: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){if(IsOpen)m_DataSet->Close();}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)retuenfalse;m_DataSet->MoveNext();returntrue;}AddNew方法用于记录集中添加一个新行,实现代码如下:voidCADODataSet::AddNew(){m_DataSet->AddNew();}SetFieldValue方法用来向记录集中指定的字段赋值,实现代码如下:voidCADODataSet::SetFieldValue(CStringFieldName,_variant_tValue0){m_DataSet->PutCollect((_bstr_t)FieldName,Value);}Save方法用来保存对记录集中所做的任何数据更改,实现代码如下:voidCADODataSet::Save(){m_DataSet->Upsate();}Move方法将记录集的当前指针移动到指定的索引位置,实现代码如下:voidCADODataSet::Move(intnIndex){m_DataSet->MoveFirst();m_DataSet->Move(nIndex);}GetRecordNo方法用来获取记录集中的当前行号,实现代码如下:intCADODataSet::GetRecordNO(){returnm_DataSet->AbsolutePositon;}Delete方法用来删除记录集中的当前行,实现代码如下:voidCADODataSet::Delete(){m_DateSet->Delete(adAffectCurent);}统主体窗的设计人事考勤系统主窗口由菜单和客户区域组成,其中,客户区域显示了一幅位图,主窗体效果如图4-3所示。主窗体设计环节如下:启动VisualC++6.0,选择File/New命令,打开New窗口,如图4-4所示。在New窗口左方的列表视图中选择MFCAppWizard[exe]选项,在Projectname编辑框中输入工程名称,在Location编辑框中设立工程保存的途径。单击OK按钮进入MFCAppWizard-Step1窗口,如图4-5所示。单击Finish按钮完毕工程的创建。向工程中导入一幅位图资源。创建一个菜单资源,并设立各个菜单项的ID和名称。通过类向导向主窗口添加菜单项的单击事件。系统模块设计用户登入模块设计用户登入模块是所有管理系统所应具有的基础模块之一,该模块实现了用户使用系统的检查工作,使没有权限的用户不能使用该系统,增长了系统的安全性。用户登入界面如图4-6所示。用户登录窗体是整个系统中创建并显示的第一个窗体,所以该窗体应在主窗体创建前创建并显示。在登录窗体创建的同时应当创建数据库连接。这些操作都应在程序类的初始化方法中实现,该方法名为InitInstance,代码如下:BOOLCPersonApp::InitInstance(){AfxEnableControlContainer();#ifdef_AFXDLLEnable3dControls();#elseEnable3dControlsStatic(); #endifLoadSkin();BOOLbCon= GetConnection()->Open(GetConnection()->GetSQLConStr("","tb_person"));CLoginDialoglogindlg;if(logindlg.DoModal()!=IDOK)returnfalse;CPersonDlgdlg;m_pMainWnd=&dlg;intnResponse=dlg.DoModal();if(nResponse==IDOK){}elseif(nResponse==IDCANCEL){}returnFALSE;}创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGOGIN,将对话框标题改为“登入”。想对话框中添加两个静态文本控件、一个编辑框控件、一个列表框控件和两个按钮控件。分别设立两个按钮的Caption属性为“拟定”和“取消”。在窗体的初始化方法中创建用户表的数据集,并将用户名添加到列表控件中,实现代码如下:BOOLCLoginDialog::OnInitDialog(){CDialog::OnInitDialog();m_DataSet.SetConnection(GetConnection());m_DataSet.Open("Select*FromTab_User");intcount=m_DataSet.GetRecordCount();for(inti=0;i<count;i++){m_UserList.AddString((_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value);m_DataSet.Next();}m_UserList.SetCurSel(0);returnTRUE;}在“拟定”按钮的事件中实现用户名和密码的检证,实现代码如下:voidCLoginDialog::OnLogin(){CStringsql,user,pass;m_UserList.GetWindowText(user);m_passWord.GetWindowText(pass);sql.Format("Select*Fromtab_userWhereUserName='%s'andPassWord='%s'",user,pass);m_DataSet.Open(sql);if(m_DataSet.GetRecordCount()==1){::SetUserName(user);this->OnOk();}elseAfxMessageBox;}用户管理模块设计用户管理模块实现了对系统登录用户的添加、修改和删除操作。用户管理模块的界面如图4-7所示。在用户管理模块中使用CListCtrl控件显示用户信息,当对某一记录进行编辑或删除操作时必须获取一个与记录相应的标记,所以在对用户列表进行添加时运用列表视图控件SetItemData方法将记录集相应的行号添加到每一行相应的数据中。当对记录进行修改时即可通过获取相应的行号对数据集中的数据进行修改。获取数据时使用列表视图控件中的GetItemData方法.创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGUSER,将对话框标题改为“用户管理”。向对话框中添加一个列表视图控件和4个按钮控件。列表视图控件的变量为m_grid,分别设立按钮控件的Caption属性为“添加”、“修改”、“删除”和“退出”。定义UpdateGrid方法,用来更新列表视图中显示的用户信息,实现代码如下:voidCUserManage::UpdateGrid(){m_DataSet.Open("Select*Fromtab_User");m_grid.DeleteAllItems();for(int=0;i<m_DataSet.GetRecordCount();i++){ m_grid.InsertItem(i,(_bstr_t)m_DataSet.GetFields()->Item [L"UserName"]->Value); intno=m_DataSet.GetRecordNo(); m_grid.SetItemData(i,no); m_DataSet.Next();}}向对话框中添加OnInitDialog方法,在对话框的初始化方法中添加列表视图控件应显示的列头,并在下拉列表视图控件中添加数据,代码如下: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;}在“添加”按钮事件中弹出“用户编辑”窗体,输入用户名后单击“拟定”按钮,实现对用户的添加,代码如下:voidCUserManage::OnAppend(){ CUserEdituseredit; if(useredit.DoModal()==IDOK) { m_DataSet.AddNew(); m_DataSet.SetFieldValue("UserName",(_bstr_t)); m_DataSet.Save(); UpdateGrid(); }}在“修改”按钮事件中弹出“用户编辑”窗体,输入用户名后单击“拟定”按钮实现对用户的修改,代码如下:voidCUserManage::OnEdit(){ CUserEdituseredit; intno=m_grid.GetItemData(m_grid.GetSelectionMark()); m_DataSet.move(no-1); =(char*)(_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value; if(useredit.DoModal()==IDOK) { m_DataSet.SetFieldValue("UserName",(_bstr_t)); m_DataSet.Save(); UpdateGrid(); }}在“删除”按钮的单击事件中获取当前记录进行删除操作,代码如下: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(); }}部门管理模块设计部门管理记录了部门间的层次结构和部门信息,所以通常部门管理窗体中对于部门的显示是使用树列表显示的。部门管理界面如图4-8所示。由于部门通常都是存在层次级别的,所以在设计数据表结构时应至少创建3个字段,即“编号”、“父编号”和名称。而在程序中显示部门信息时也根据“父编号”作为查询条件不断地查找下一级的部门。在本系统中,由于部门信息通常不会太多,所以可以用嵌套的方式将部门信息一次性地读入树列表视图控件中,实现代码如下: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;i<count;i++){node=m_tree.InsertItem((bstr_t)DataSet.GetFields()->Item["DeptName"]->Value,pNode);value=(_vaiant_t)DataSet.GetFields()->Item["ID"]->Value;ID=Val;m_tree.SetItemData(node,ID);GetNode(node,ID);DataSet.Next();}}创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGDEPT,将对话框标题改为“部门管理”。向对话框中添加一个树列表控件、4个按钮控件,分别设立按钮控件的Caption属性为“添加”、“修改”、“删除”和“退出”。定义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;i<count;i++) { node=m_tree.InsertItem((_bstr_t)DataSet.GetFields()->Item["DeptName"]->Value,pNode); value=(_variant_t)DataSet.GetFields()->Item["ID"]->Value; ID=Val; m_tree.SetItemData(node,ID); GetNode(node,ID); DataSet.Next(); }}当单击“添加”按钮时将弹出部门编辑窗体,输入部门信息后单击“拟定”按钮将添加一个新的部门,代码如下:voidCDeptManage::OnAdd(){ CDeptEditdeptedit; if(deptedit.DoModal()==IDOK) { HTREEITEMpNode=m_tree.GetSelectedItem(); intpID; if(deptedit.isroot) pID=0; else pID=m_tree.GetItemData(pNode); CADODataSetdataset; dataset.SetConnection(::GetConnection()); dataset.Open("Selecttop1*Fromtab_Dept"); dataset.AddNew(); dataset.SetFieldValue("DeptName",(_variant_t)); dataset.SetFieldValue("memo",(_variant_t)deptedit.memo); dataset.SetFieldValue("PID",(long)pID); dataset.Save(); UpdateDept(); }}当单击“修改”按钮时将弹出部门编辑窗体,输入部门信息后单击“拟定”按钮将添加一个新的部门,代码如下: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); =(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)); dataset.SetFieldValue("memo",(_variant_t)deptedit.memo); dataset.Save(); UpdateDept(); }}当单击“删除”按钮时将删除当前选中的节点,代码如下:voidCDeptManage::OnDelete(){ HTREEITEMpNode=m_tree.GetSelectedItem(); 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(); }}人员信息管理模块人员信息管理模块根据部门分类显示,同时可对人员信息进行维护。人员信息管理界面如图4-9所示。在人员信息管理界面中可以看到,左侧是部门信息,右侧是人员信息。当选中某一部门信息分类时右侧的人员信息会根据选中的部门进行人员信息的分类显示。这一操作重要是通过数列表视图控件中的OnSelchanged事件完毕的,当树列表中的选中节点发生改变时就会触发该事件,实现代码如下:voidCPersonManage::OnSelchangedTreedept(NMHDR*pNMHDR,LRESULT*pResult){NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR;m_DeptID=m_tree.GetItemData(pNMTreeView->itemNew.hItem);UpdatePerson();*pResult=0;}创建一个对话框,打开对话框属性窗口,将对话框的ID改为IDD_DLGPERSON,将对话框标题改为“人员信息管理”。向对话框中添加两个群组控件、一个树列表视图控件、一个列表视图控件和4个按钮控件。分别设立按钮的Caption属性为“添加”、“修改”、“删除”和“退出”。添加GetNode方法获取部门表中的数据信息添加到树列表视图控件中。该方法由UpdateDept方法调用,实现代码如下: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;i<count;i++){intindex=1;m_list.InsertItem(n,(_bstr_t)DataSet.GetFields()->Item["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()->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();}}添加OnInitDialog方法,用于初始化人员信息管理界面中的数据。在该方法中显示部门信息、人员信息,代码如下:BOOLCPersonManage::OnInitDialog(){ CDialog::OnInitDialog(); 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,"档案所在地"); 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;}单击“添加”按钮,弹出人员编辑窗体,输入人员信息后单击“保存”按钮实现人员信息添加,代码如下:BOOLCPersonManage::OnInitDialog(){ CDialog::OnInitDialog(); 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,"档案所在地"); 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;}单击“修改”按钮,弹出人员编辑窗体,输入人员信息后单击“保存”按钮实现人员信息修改,代码如下: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)); 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_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论