1、摘要公司人事管理系统是典型的人事信息管理系统,其主要的功能是把人事管理过程信息化,自动化以减轻人工的重复繁琐劳动。其开发主要包括后台数据库的建立维护以及前台应用程序的开发两个方面。对于后台数据库要求建立一个稳定的数据库,保持数据的一致性,完整性,安全性也是必要的。对于前台要求稳定,实用,易用。本系统是为公司人事管理的各种工作而设计的。根据需求分析,需要实现对系统用户,基本信息(公司部门,人员相关信息等),考勤考评的管理。经过分析,本系统使用SQL SERVER做为其后台数据库,采用ADO数据库链接技术;Visual C+做为开发工具, 提供了相当齐备的类库、友好的编程界面和多种多样的数据库访问
2、技术。其中ADO使得编写数据库应用程序变得简单容易。公司人事管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性,完整性,安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。关键词: VC+ 数据库; 人事管理系统; ADO 数据源AbstractCompanys personnel administrative system is typical personnel information management systems , its main function is to information and
3、 automation the process of the personnel information management system which lighten people from repeated and tedious artificial work. It develops two respects of main development including the setting-up and maintaining of backstage supporters database and the front desk application program. Demand
4、 to set up a steady database to backstage supporters database, keep the consistency of the data, integrality, security are all essential. As to the thing that the front desk requires steadily, practical, easy to use.This system was worked and designed for various kinds of companys personnel manageme
5、nt. According to demand analysis, need to realize systematic users correctly, basic information (companys department, personnels relevant information, etc.), the management that the attendance checks and rate.After analyzing ,this system uses SQL SERVER as its backstage database , adopt ADO database
6、 technology to chain; taking Visual C + + as the developing instrument which has offered quite complete kinds of storehouses , friendly programming interface and varied database visiting technology. ADO technology makes it simple and easy to write database application program.Companys personnel admi
7、nistrative system is typical information management systems, it develops two respects of main development including setting-up and maintenance and front application program of backstage supporters database . As to the thing that the former demands to set up consistency of the data, integrality , the
8、 storehouse with good security . Require to the latter the function of the application program is complete, apt characteristic of using etc. Keywords: The database of Visual C+; Personnel Manage System; The data source of ADO目 录1引言42 系统分析52.1概要分析52.2 总体设计72.3 开发环境83 数据库设计153.1 数据规范化问题153.2设计表的结构154
9、建立数据库表的类194.1 部门表的类194.2员工基本信息表的类194.3员工家庭信息的类194.4员工教育及工作经历记录的类194.5员工考评表的类204.6员工工作考勤表的类204.7用户信息表的类205 系统实现215.1用ADO进行数据库编程:215.2实现用户登录功能315.3 实现部门管理功能335.4 实现员工信息管理功能355.5 实现考勤管理功能405.6 实现员工考评管理功能445.7实现用户管理功能476 结论517致 谢518参考文献521引言人事管理是一个企业在经营管理中不可缺少的部分,它的成功与否对于企业的发展来说都是至关重要的,所以公司人事管理系统应该能够为用户
10、提供充足的信息和快捷的查询手段。但如果使用传统的人工直接统计的话,工作量十分的庞大,存在许多的缺点,如:效率低,保密性差,且如果人多,时间一长,将产生大量的文件及数据,对于查找,更新和维护带来困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对人事进行管理,可使人们从繁重而又单调的统计运算中解脱出来,仅用一些简单的操作便可及时准确地获得需要得信息。使企业实现科学化,正规化管理,与世界接轨。因此,开发这样一套管理软件成为很必要的事情。此设计主要实现的功能有系统用户管理,基本信息管理
11、(部门、员工信息),考勤考评管理。本文主要构成如下:系统分析、数据库设计、建立数据库表的类、系统实现。本次毕业设计的数据库采用了ADO技术,这是一个基于OLE DB的访问接口,它继承了OLE DB的技术的优点,并且ADO基于COM,提供编程语言可利用的对象,如面向VC+。 ADO在服务器应用方面非常有效,特别是对动态服务器页面的支持。 2 系统分析2.1概要分析2.1.1 系统功能分析(UML)人事信息管理系统是对企业部门,人事档案,考勤,考评等人事管理进行全面管理的系统。该系统通过采集在日常的人事管理中所产生的各种原始的数据,根据现代人事管理的要求,对数据进行分类,分析,汇总,建立程序化,制
12、度化,规范化的人事信息计算机软件管理系统,对各项人事信息进行分类维护与综合查询,为人事信息管理提供一个现代化管理手段,保持各种数据的完整性,及时性,正确性,完善管理体系,提高管理水平。 系统的用例图:基本的类图:2.1.2 验证需求分析阶段的工作结果是开发软件的重要基础,大量统计数字表明,软件系统中15%的错误起源于错误的需求。为了提高软件的质量,确保软件开发成功,降低软件的开发成本,一旦对目标系统提出一组要求之后,必须严格验证这些需求的正确性。一般来说,应从下面四个方面进行验证: a. 一致性 所有需求必须是一致的,任何一条需求不能和其他需求互相矛盾。 b. 完整性 需求必须是完整的,规格说
13、明书应该包括用户需要的每一个功能或性能。 c现实性 指定的需求应该是用现有的硬件技术和软件技术基础上可以实现的。对硬件技术的进步可以做些预测,对软件技术的进步很难做些预测,只能从现有的技术水平出发判断需求的现实性。 d 有效性 必须证明需求是正确有效的,确保能解决用户面对的问题。通过用户和设计者对上述需求分析所得到的管理系统功能的复查,并且对照上面几点要求进行验证,人事信息管理系提出的基本满足需求分析验证的要求。2.2 总体设计 系统主要模块分布如下:人事管理系统主窗体系统用户管理基本信息管理考勤考评管理用户管理修改密码部门管理员工管理退出系统考勤管理考评管理系统用户管理模块:完成新建用户信息
14、,用户信息管理,用户密码修改,用户管理代码功能。基本信息管理模块:完成对公司部门信息编辑,管理,选择;完成对员工选择,基本信息管理,信息编辑,调转部门,照片管理,家庭信息编辑,家庭信息管理,教育及工作经历编辑,教育及工作经历管理。完成退出系统。考勤考评管理模块:完成考勤信息编辑,管理及员工月度考勤;员工考评信息编辑与管理。2.3 开发环境2.3.1开发工具的选择 1. Visual C+Visual C+是运行于Windows平台上的交互式的可视化集成开发环境,它是美国Microsoft公司开发的Microsoft Visual Studio 套件中的一部分。像其他可视化集成开发环境一样,Vi
15、sual C+集程序的代码编辑、编译、连接和调试等功能于一体,给编程人员提供了一个完整方便的开发界面和许多有效的辅助开发工具。Visual C+的应用程序向导可以以很大一部分类型的程序提供框架代码,用户不用书写程序代码,只需按几个按钮就可以生成一些完整的可以运行的程序。Visual C+具有以下优点:1)面向对象、可视化开发。提供了面向对象的应用程序框架MFC(Microsoft Foundation Class:微软基础类库),大大简化了程序员的编程工作,提高了模块的可重用性。Visual C+还提供了基于CASE技术的可视化软件自动生成和维护工具AppWizard、ClassWizard、
16、Visual Studio、WizardBar等,帮助用户直观的、可视地设计程序的用户界面,可以方便的编写和管理各种类,维护程序源代码,从而提高了开发效率。用户可以简单而容易地使用C/C+编程。2)众多的开发商支持以及业已成为工业标准的MFC类库。MFC类库已经成为事实上的工业标准类库,得到了众多开发商和软件开发工具的支持;另外,由于众多的开发商都采用Visual C+进行软件开发,这样用Visual C+开发的程序就与别的应用软件有许多相似之处,易于学习和使用。 3)Visual C+封装了Windows的API(应用程序接口)函数、USER、KERNEL、GDI函数,帮助我们弄清了许多函数
17、的组织方法,隐去了创建、维护窗口的许多复杂的例行工作,简化了编程。2)ADO(ActiveX Data Object)ADO技术是基于OLE DB的访问接口,它继承了OLE DB技术的优点,并且,ADO对OLE DB的接口作了封装,定义了ADO对象,使程序开发得到简化,ADO技术属于数据库访问的高层接口。 2. SQL主要语法 SQL SERVER 提供了关系数据库的查询语言SQL(Structured Query Language),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,包含了资料的定义(DDL)以及资料的处理(DML)。SQL原来拼成SEQUEL,
18、这语言的原型以“系统 R“的名字在 IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R 的技术基础发展出来 IBM 的产品。而且美国国家标准学会(ANSI)及国际标准化组织(ISO)在1987遵循一个几乎是以 IBM SQL 为基础的标准关连式资料语言定义。 一、资料定义 DDL(Data Definition Language) 资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。 1、建表格
19、: CREATE TABLE table_name( column1 DATATYPE NOT NULL NOT NULL PRIMARY KEY, column2 DATATYPE NOT NULL, .) 说明: DATATYPE -是资料的格式,详见表。 NUT NULL -可不可以允许资料有空的(尚未有资料填入)。 PRIMARY KEY -是本表的主键。 2、更改表格 ALTER TABLE table_name ADD COLUMN column_name DATATYPE 说明:增加一个栏位(没有删除某个栏位的语法)。 ALTER TABLE table_name ADD PRI
20、MARY KEY (column_name) 说明:更改表得的定义把某个栏位设为主键。 ALTER TABLE table_name DROP PRIMARY KEY (column_name) 说明:把主键的定义删除。 3、建立索引 CREATE INDEX index_name ON table_name (column_name) 说明:对某个表格的栏位建立索引以增加查询时的速度。 4、删除 DROP table_name DROP index_name 二、资料形态 DATATYPEs smallint 16 位元的整数。 interger 32 位元的整数。 decimal(p,s)
21、 p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。 float 32位元的实数。 double 64位元的实数。 char(n) n 长度的字串,n不能超过 254。 varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。 graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为 了支援两个字元长度的字体,例如中文字。 vargraphic(n) 可变长度且其最大长度为 n 的双字元字
22、串,n不能超过 2000。 date 包含了 年份、月份、日期。 time 包含了 小时、分钟、秒。timestamp 包含了 年、月、日、时、分、秒、千分之一秒。 组合查询 组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的 表格才能够得到结果的。 SELECT * FROM table1,table2 WHERE table1.colum1=table2.column1 说明: 1.查询两个表格中其中 column1 值相同的资料。 2.当然两个表格相互比较的栏位,其资料形态必须相同。 3.一个复杂的查询其动用到的表格可能会很多个。 整合性的查询: SELECT COUNT
23、 (*) FROM table_name WHERE column_name = xxx 说明: 查询符合条件的资料共有几笔。 SELECT SUM(column1) FROM table_name 说明: 1.计算出总和,所选的栏位必须是可数的数字形态。 2.除此以外还有 AVG() 是计算平均、MAX()、MIN()计算最大最小值的整合性查询。 SELECT column1,AVG(column2) FROM table_name GROUP BY column1 HAVING AVG(column2) xxx 说明: 1.GROUP BY: 以column1 为一组计算 column2
24、的平均值必须和 AVG、SUM等整合性查询的关键字 一起使用。 2.HAVING : 必须和 GROUP BY 一起使用作为整合性的限制。 复合性的查询 SELECT * FROM table_name1 WHERE EXISTS ( SELECT * FROM table_name2 WHERE conditions ) 说明: 1.WHERE 的 conditions 可以是另外一个的 query。 2.EXISTS 在此是指存在与否。 SELECT * FROM table_name1 WHERE column1 IN ( SELECT column1 FROM table_name2
25、WHERE conditions ) 说明: 1. IN 后面接的是一个集合,表示column1 存在集合里面。 2. SELECT 出来的资料形态必须符合 column1。 其他查询 SELECT * FROM table_name1 WHERE column1 LIKE x% 说明:LIKE 必须和後面的x% 相呼应表示以 x为开头的字串。 SELECT * FROM table_name1 WHERE column1 IN (xxx,yyy,.) 说明:IN 後面接的是一个集合,表示column1 存在集合里面。 SELECT * FROM table_name1 WHERE colum
26、n1 BETWEEN xx AND yy 说明:BETWEEN 表示 column1 的值介於 xx 和 yy 之间。 3、更改资料: UPDATE table_name SET column1=xxx WHERE conditoins 说明: 1.更改某个栏位设定其值为xxx。 2.conditions 是所要符合的条件、若没有 WHERE 则整个 table 的那个栏位都会全部被更改。 4、删除资料: ELETE FROM table_name WHERE conditions 说明:删除符合条件的资料。 说明:关于WHERE条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下
27、: (1)如果是ACCESS数据库,则为:WHERE mydate#2000-01-01# (2)如果是ORACLE数据库,则为:WHERE mydatecast(2000-01-01 as date) 或:WHERE mydateto_date(2000-01-01,yyyy-mm-dd) 如果比较日期时间型,则为: WHERE mydatetimeto_date(2000-01-01 10:00:01,yyyy-mm-dd hh24:mi:ss)2.3.2 运行环境 硬件平台: CPU的主频在500MHz上,内存在128MB以上软件平台: 操作系统: Window 98/Me/NT/200
28、0/XP 开发工具: Visual Studio 2003 数据库: SQL Server 2000及其以上版本3 数据库设计通过对人事信息管理系统的需求分析及验证和总体的规划设计,确定了设计本系统所需的各个模块及各模块所要的基本功能。就要设计数据库及数据库数据,并用数据库对各模块进行设计和编码。3.1 数据规范化问题 当把数据库收集在一个二维表中,往往有很多重复的数据,即冗余度大。像这样的二维表是不宜作为数据库管理的,必须进行规范化后才能使用。数据规范化理论是研究如何将一个不好的关系模型转化成为好的关系模型。规范化理论认为,关系数据库中的每一个关系都要满足一定的规范。根据满足规范的条件不同,
29、可分为五个等级,分别称为第一范式(1NF),第二范式(2NF)第五范式(5NF),通常解决一般性问题时,只要把数据规范到第三范式(3NF)标准就可满足需要,不是规范化等级越高越好。运用Microsoft access 2003 新建一个“hr.mdb”的数据库,人事管理所有人事信息的数据都保存在这个数据库中。3.2设计表的结构 表 3-1列名(中文)列名(英文)数据类型宽度是否为空部门编号(主键)Dep_idintNo部门名称Dep_namevarchar40No部门描述Describechar200No上级部门UpperIdintNo表3-2 列名(中文)列名(英文)数据类型宽度是否为空员工
30、编号(主键)Emp_IdintNo员工姓名Emp_namevarchar50No照片ImageYes性别Sexchar2Yes民族Nationalityvarchar40Yes出生日期Birthvarchar20Yes政治面貌Political_Partyvarchar40Yes文化程度Culture_levelvarchar40Yes婚姻状况Marital_Conditionvarchar20Yes家庭住址Family_Placevarchar60Yes身份证号Id_Cardvarchar20Yes工作证号BadgeIDvarchar40Yes办公电话Office_phonevarchar3
31、0Yes手机号Mobilevarchar30Yes档案所在地File_keep_orgvarchar100Yes户口所在地Hukouvarchar100Yes到岗日期HireDatevarchar20Yes所在部门编号Dep_IdintYes工作岗位Positionvarchar40Yes职务Titlevarchar20Yes员工状态StateintYes上级员工UpperIdintYes合同有效期Contract_Durationvarchar20Yes填表人Fillin_Personvarchar30Yes填表时间Fillin_Timevarchar20Yes表3-3 列名(中文)列名(英
32、文)数据类型宽度是否为空编号(主键)IdintNo员工编号Emp_IdintNo姓名Namevarchar50No性别Sexchar2Yes年龄AgeintYes关系Relationshipvarchar20Yes工作单位Workingorgvarchar40Yes表3-4 列名(中文)列名(英文)数据类型宽度是否为空编号(主键)IdintNo员工编号Emp_IdintNo开始日期Start_Datechar10Yes结束日期End_Datechar10Yes学校/单位School_Orgvarchar50Yes职务Titlevarchar20Yes表3-5 列名(中文)列名(英文)数据类型宽
33、度是否为空考评月份EvaMonthchar10No员工编号(主键)Emp_IdintNo总体评价ztEvavarchar200Yes奖励事由jlReasonvarchar200Yes奖励金额jlAmountsmallintYes处罚事由cfReasonvarchar200Yes处罚金额cfAmountintYes表3-6列名(中文)列名(英文)数据类型宽度是否为空考勤日期CheckDatechar10No员工编号(主键)Emp_IdintNo全勤天数qqDaysintYes出差天数cqDaysintYes病家天数bjDaysintYes事假天数sjDaysintYes旷工天数kgDaysint
34、Yes法定休假日fdxjDaysintYes年休假日nxjDaysintYes倒休假天数dxjDaysintYes迟到分钟数cdMinutesintYes早退分钟数ztMinutesintYes一类加班天数Ot1DaysintYes二类加班天数Ot2DaysintYes三类加班天数Ot3DaysintYes备注信息Memovarchar200Yes表3-7列名(中文)列名(英文)数据类型宽度是否为空用户名(主键)UserNamevarchar40No密码Pwdvarchar40No用户类型User_TypeintNo4 建立数据库表的类4.1 部门表的类部门表的类用来管理部门表的数据库操作。定
35、义部门编号,部门名称,部门描述以及上级部门;构造和析构部门表;设置和读取成员变量;对数据库的操作:判断指定部门名称是否存在,是否包含下级部门(如果又则不能删除),指定部门是否有员工(若有则不能删除);读取所有部门名称,上级部门及相关的描述信息等。4.2员工基本信息表的类员工表的类用来管理员工基本信息表的数据库操作。定义员工编号,姓名,性别,民族,出生年月,政治面貌,文化程度,婚姻状况,家庭住址,身份证号,识别卡号,办公室电话,手机号,档案所在地,户口,受雇日期,所在部门编号,职位,头衔,国籍,上级部门编号,合同期,备忘录,;构造和析构员工基本信息表;设置和读取成员变量;数据库操作:判定指定的员
36、工姓名是否存在;根据指定的员工编号返回员工姓名;根据员工编号读取所有的字段值,更新部门信息,以便调转部门时调用。4.3员工家庭信息的类员工家庭信息的类用来管理员工家庭信息的数据库操作。定义员工家庭成员的编号,员工编号,姓名,性别,年龄,关系,原先工作地;构造和析构员工家庭信息表;读取和设置成员变量;数据库操作:根据员工编号读取所有字段值,更新家庭成员信息。4.4员工教育及工作经历记录的类员工教育及工作经历记录的类用来管理员工教育及工作经历记录的数据库操作。定义员工教育及工作经历记录表的项:编号,员工编号,起始日期,截止日期,学校,职称。构造和析构员工教育及工作经历记录表。读取和设置成员变量。数
37、据库操作:跟据员工编号读取所有的字段值,更新记录编号。4.5员工考评表的类员工考评表的类用来管理员工考评的数据库操作。定义考评表的基本项:月度考评,员工编号,总体考评,奖励原因,奖励数目,处罚原因,处罚数目,备忘录。构造和析构员工考评表。读取和设置成员变量。数据库操作:判断指定员工/月份考评记录是否存在,根据员工编号读取所有的字段值,更新月份考评情况。4.6员工工作考勤表的类员工考勤表的类用来管理员工考勤表的数据库操作。定义考勤表的基本项:考勤日期,员工编号,缺勤天数,出勤天数,病假天数,事假天数,旷工天数,法定休假天数,年休假天数,调休假天数,迟到分钟数,早退分钟数,加班一天,加班两天,加班
38、三天,备忘录。构造和析构员工考勤表。读取和设置成员变量。数据库操作:判定指定员工/日期的考勤记录是否存在;根据员工编号读取所有字段值,更新员工/日期的考勤记录。4.7用户信息表的类用户信息表的类用来管理用户信息的数据库操作。定义用户信息的基本项:用户名,密码。构造和析构用户信息表。读取和设置成员变量。数据库操作:判断指定用户名是否存在;获取用户名,更新密码。 5 系统实现5.1用ADO进行数据库编程: 1. 生成应用程序框架并初始化OLE/COM库环境 创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为
39、ADO库是一个COM DLL库)。本例为: BOOL CAdotestDlg:OnInitDialog() :CoInitialize(NULL); /初始化OLE/COM库环境 程序最后要调用 :CoUninitialize();/释放程序占用的COM 资源。另外:m_pRecordset-Close(); 注意!不要多次关闭!m_pConnection-Close();m_pRecordset = NULL;m_pConnection = NULL; 2. 引入ADO库文件 使用ADO前必须在工程的stdafx.h文件最后用直接引入符号import引入ADO库文件,以使编译器能正确编译。代
40、码如下:#import C:Program Filescommon filessystemadomsado15.dll no_namespace rename(EOF,adoEOF)ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C使用的COM vtable接口。当使用import指令时,在运行时Visual C需要从ADO DLL中读取这个类型库,并以此创建一组C头文件。这些头文件具有.tli 和.tlh扩展名,读者可以在项目的目录下找到这两个文件。在C程序代码中调用的ADO类要在这些文件中定义。 程序的第三行指示A
41、DO对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第三行程序修改为: rename_namespace(AdoNS)。第四行代码将ADO中的EOF(文件结束)更名为adoEOF,以避免与定义了自己的EOF的其他库冲突。 3利用智能指针进行数据库操作 在CaboutDlg头文件中定义两个ADO智能指针类实例,并在对话框中加入一个ListCtrl。class CAdotestDlg : public CDialog _ConnectionPtr m_pConnection; _RecordsetP
42、tr m_pRecordset; ClistCtrl m_List; . ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。_CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提
43、供了更多的控制功能,如记录锁定、游标控制等。 在使用ADO程序的事件响应中OnButton1加入以下代码: void CAdotestDlg:OnButton1() m_List.ResetContent();m_pConnection.CreateInstance(_uuidof(Connection); /初始化Connection指针m_pRecordset.CreateInstance(_uuidof(Recordset);/初始化Recordset指针try m_pConnection-Open(DSN=ADOTest,0); /连接叫作ADOTest的ODBC数据源 /注意:这是连接不需要用户ID或密码的open 函数 / 否则形式为 -Open(DSN=test;uid=sa;pwd=123;,0); / 执行SQL语句得到一个记录集把其指针赋值给m_pRecordset CString strSql=select * from middle; BSTR bstrSQL = strSql.AllocSysString(); m_pRecordset-Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); /adOpenDy