摘 要
进入21世纪,已经步入了信息时代。单位的现代化管理也应该与时俱进。目前,企业的人事档案管理系统信息化已经越来越受到企业的重视。本项目立足于实习调查,严格按照学校毕设的规章制度,做到实事求是。本课题研究目的是,遵循科学管理,立足实际,开发出一个简单实用,功能丰富的人事档案管理系统。本系统有:用户信息管理、人事档案信息管理、数据库管理、信息对接管理等等。系统管理:分为系统用户和普通用户,系统用户可以添加、删除、修改用户信息,修改所有用户的密码;进行数据库管理。普通用户则只能修改自己的密码;部门管理:可以设置、修改部门信息;人事档案管理:操作和查看员工信息,并且能够实时修改员工信息,并且替换原有信息,将考勤结果录入。工资管理:对员工的薪酬信息以及奖惩信息进行核对和管理。数据库管理:数据库的备份和恢复工作。
关键词: 1、人事档案; 2、人事档案管理系统; 3、信息系统;
目 录
一、绪 论 4
(一)开发人事档案管理系统的背景 4
(二)采用的关键技术 4
(三)开发工具及环境简介 5
二、系统分析 6
(一)需求分析 6
(二)系统功能描述 7
三、系统设计 8
(一)开发设计思想 8
(二)系统总体设计 8
四、数据库设计 10
(一)数据库需求分析 10
(二) 数据库概念结构设计 10
(三) 数据库逻辑结构设计 11
五、系统详细设计及实施 15
(一)界面及编程风格 15
(二)系统模块功能实现 17
六、系统测试 26
(一)测试策略 27
(二)功能测试 27
(三)性能测试 28
(四)界面测试 28
(五)测试结论 28
参考文献 28
致 谢 辞 29
附 录 30
一、绪 论
(一)开发人事档案管理系统的背景
1、企业信息系统发展现状
企业现代化建设的重点之一就是企业信息系统的建设工作。我国自改革开放以来在不同程度上都大力提倡企业的新系统建设。并且随着我国信息技术的推广,软件公司的发展壮大,目前我国国内已经有数百家ERP软件供应商。
2、信息系统开发的紧迫性
随着电子信息技术的日益普及和推广网络的数据库应用范围越来越广阔,因此人事档案管理系统的开发则显得更加重要。由于人事档案管理系统能够提高企业内部管理效率,从而任何企业都必须进行人事管理工作,因此开发人事档案管理系统具有广大的市场需求。人事档案管理系统是信息系统与智能系统交叉的软件系统。
(二)采用的关键技术
1、软件工程概要
广义的软件生命周期主要有三个阶段,分别为:软件定义、软件开发与软件维护。
本系统软件生命周期中各个具体阶段如下面表格所示:
软件生命周期 注释
软件定义 确定软件开发工程必须完成的总目标;确定工程的可行性;研究实现工程目标应该采用的方法;估计完成工程需要的资源和成本;制定工程进度表。
软件开发 具体设计和实现在问题定义时期定义的软件。软件开发时期通常进一步划分为总体设计、详细设计、编码与测试四个阶段。
软件维护
对软件进行深度优化,方便客户使用。
2、软件生命周期
软件周期不同阶段内,各个阶段的基本任务以及结束标准如下:
(1)问题定义:该阶段基本任务为明确待解决问题,本阶段结束后,得到有关性质、项目目标的报表。由于只有用户才真正了解他们自己的需求,而许多用户在开始时并不能准确、具体地描述他们的需要。因此,系统分析员必须与用户进行足够的沟通,直至得出一份双方都满意的文档。
(2)可行性分析:基本任务为寻求解决问题定义阶段明确的问题方法,建立高层逻辑模型,并对系统进行成效分析。
(3)需求分析:该阶段基本任务是确定目标系统功能。开发者在经过详细的调研获得参考信息之后,确认系统逻辑模型。本阶段结束标准为:逻辑模型和算法描述。
(4)总体设计:这一阶段的基本任务是考虑如何解决系统分析时期提出的问题。本阶段的成本方案依次排为低成本、中成本、高成本方案。通过对比确定最佳方案,并且制订实现该方案的详细计划。
(5)详细设计:该阶段的基本任务是,抽象问题具体化,复杂问题细化,设计出程序的详细规格说明。
(6)编码测试:该阶段的关键任务是确定程序模块。
(7)软件维护:该阶段关键任务是,通过维护使系统更好的满足市场需要。通常包括bug修改、使用环境维护、完善性维护和预防性维护四类维护活动。进行每一次维护的时候,都必须严格按章程实施,即分析、提出方案、审核、确定计划、修改设计、测试、查验、推送等等步骤。
(三)开发工具及环境简介
1、 Delphi7.0简介
Delphi是Borland公司推出的基于真正面向对象语言Object Pascal语言的可视化编程工具,是当今世界上最快的编译器。
Delphi作为开发平台,很重要的一点就是提供了一个"无所不包"的应用框架。Delphi提供了VCL,VCL是用Object Pascal写的。Object Pascal几乎是Inprise"专用"的,不必考虑"标准"问题,因此Inprise写VCL时就把全部精力放在了结构与性能上,结果语言与框架的磨合程度非常好。VCL框架的结构清晰,VCL代码的可读性非常好。
2、 Microsoft ACCESS 2003 简介
Access是一种关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access是一种关系数据库工具,在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系表格的分类、合并、连接或选取等运算来实现数据的管理。这种数据库是已开发的最通用的数据库之一。综上所述Access具备了关系型数据库的一切功能,而且比其它的数据库操作简单便于掌握。因此Access强大的数据库管理功能与Delphi 7.0方便灵活的开发非常适合于开发中小型应用系统软件,所以本系统采用Delphi 7.0企业版与Access2003在Windows 平台上进行开发。
二、系统分析
(一)需求分析
每个企业都有自身的管理特点,以及每个员工都有它的特异性,因此,对软件进行开发的时候需要对信息进行细致的分析,从而避免管理信息的混乱,因此在进行系统开发前有必要对需求进行分析。
1、系统开发目标
(1)以魏桥创业集团有限公司的人事管理需求为背景,支持企业实现科学化、规范化的人事档案管理。
(2)高效进行人事管理工作(建立、管理员工档案,提高管理效率)
(3)简化管理层获取信息途径,推动企业的有效、规范的管理。优化管理层获得人事信息途径,方便决策。
(4)提供友好的用户操作界面,尽量减少用户的录入工作量。
(5)提高信息管理速度和准确性。
(6)确保系统信息的安全性和可靠性,保护用户的信息数据。
2、 系统数据流图
本系统的数据流图: D1 基本信息
D2 基本工资
图2-1 人事档案管理系统顶层数据流图
图2-2 人事档案管理系统第一层数据流图
(二)系统功能描述
人事档案管理系统的首要目的是实现对员工信息和档案的管理。依据不同的需求实现系统不同的功能。具体功能分析如下:
1、基本功能描述
(1)公司员工管理:包括基本信息、工作信息、合同信息、工作经历、家庭成员、考勤管理、教育培训、调动信息、奖惩信息等信息的录入、修改、维护。
(2)员工基本信息及工资信息的查询:基本信息的查询,主要有单人查询和多人查询两种方式。
(3)统计信息:系统可以根据部门、性别、学历、年龄、职称、入公司时间分别进行统计并可以把统计信息输出保存。
(4)系统维护:管理员用户和普通用户的权限管理,以及对数据库的维护等操作。
(5)部门信息的管理:可以根据公司的实际需要随时进行部门和单位的信息维护。
2、管理功能描述
(1)人事档案的添加、删除、修改、打印功能
首先要进行人事档案的信息录入,并且对信息进行分类操作。在添加信息的同时应该具有删除和修改功能。可将管理的范围缩小,从而大大提高管理效率。
(2)查询功能
通过检索界面输入检索条件,如果满足,查询的条件就可以从数据库中调去员工的人事档案信息。
(3)员工档案信息的删除功能
一些企业的员工流动性比较大因此当员工离职后需要对答案进行一个删除的操作。
(4)员工档案信息的修改功能
在对员工的信息进行检索之后可以调出该员工的人事档案信息,并且有权限的人可以对该员工的信息进行修改,如此同时气化而该系统原有的员工信息。
(5)人事档案信息的浏览功能
实现浏览功能有两种形式,一是通过首页目录链接浏览;另一种是通过报表的格式给出的,报表可进行打印,而且可以更具实际需要对打印的信息进行选择。
三、系统设计
(一)开发设计思想
参考公司现有的软硬件环境并且借鉴先进的开发经验,充分利用公司现有的资源提高系统开发水平。并且要仔细研究公司的人事管理制度,对是的日常人事管理需要进行详细的了解。为了方便功能的组合实现和修改,在系统开发的过程中,应当尽量采用模块化程序设计方法。
(二)系统总体设计
通过需求分析,人事档案管理系统主要具备五大主要功能:
员工信息管理
员工信息的查询
员工信息统计
部门信息维护
系统维护(包括数据库管理)。
现在模块化设计的思想收入开发者的内心,并且模块化设计方便小饰和维护,因此软件开发的通常采用模块化的方法来对付复杂的难题。这种思想方法是将系统进行分拆将单一的功能进行模块化组合从而,有一变多,分工细化,化繁为简,有利于系统的稳定性与可维护性。
系统功能模块图(如图3.1所示)能够更加方便的使用各模块功能,加快熟悉业务操作流程,方便系统的推广普及。
图3-1 系统功能模块图
四、数据库设计
(一)数据库需求分析
数据库的数据项主要包括一下几个方面:
项目 项目注释
员工基本信息 工号、姓名、性别、年龄、生辰、住址、电话、学历、身份证号、岗位、备注等。
员工培训信息 培训时间、培训机构、培训内容、所获证书等
考勤管理 考勤的类型、考勤分数、考勤原因、考勤部门、备注等
工资管理 工号、姓名、薪酬、奖惩信息、实发工资、日期
人事变动
部门单位管理
管理员 员工编号、员工姓名、基本工资、奖惩工资、奖惩分数、实发工资、月份
编号、名称
编号、用户名、口令、是否是管理员、备注等。
(二) 数据库概念结构设计
该阶段以需求分析为基础,这个阶段可用的工具很多,用的最多的是E-R图(Entity-Relation,实体-联系图)。也可以使用众多的辅助设计工具进行设计。
根据上面的设计,实体有:员工基本信息实体、员工考勤信息实体、员工调动调薪信息实体、员工工资信息实体、部门管理实体。
实体与实体之间的E-R模型如图4-1所示。
图4-1 系统E-R图
(三) 数据库逻辑结构设计
概念结构是独立于实际数据模型的信息结构,以需求为基础,并且把需求抽象为Access数据库系统所支持的实际数据模型
本系统数据库中各个表格的具体设计如下面表格所示:
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型 是 否
Uid 文本 32 是 否
Pwd 文本 32 是 是 用户密码
Sys 是/否 否 否 是否管理员
Des 文本 500 否 是 备注
表4-1 用户表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型 否
Stano 文本 50 是 否 员工编号
Name 文本 50 否 否 员工姓名
Sex 文本 4 否 是 性别
Birth 时间/日期 否 是 生日
Dep 文本 18 否 是 部门
Sdep 文本 18 否 是 单位
Sorts 文本 18 否 是 工种
Duty 文本 32 否 是 职务
Provi 文本 32 否 是 省市
Folk 文本 50 否 是 民族
Level 文本 12 否 是 学历
Special 文本 32 否 是 专业
Cardno 文本 18 否 是 身份证号
Recno 文本 20 否 是 档案编号
Politics 文本 12 否 是 政治面貌
Slevel 文本 50 否 是 基本工资
Married 文本 8 否 是 婚姻状态
Indate 时间/日期 常规日期 否 入公司时间
Body 文本 8 否 是 身体状况
Baryear 文本 8 否 是 合同期限
Barstart 时间/日期 常规日期 否 合同开始时间
Barend 时间/日期 常规日期 否 合同结束时间
Pcode 文本 8 否 是 邮编
Adress 文本 64 否 是 家庭地址
Image 文本 18 否 是 照片
Des 文本 250 否 是 备注
表4-2 员工基本信息表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型 是 否
Sid 数字 长整型
Sort 文本 6 否 否 奖惩类型
Topic 文本 90 否 否 奖惩原因
Dep 文本 18 否 否 奖励部门
Mdate 时间/日期 常规时间 否 否 奖励时间
Fendhu 数字 50 否 否 奖励分数
Month 文本 50 否 否 奖励月份
Des 文本 250 否 否 备注
表4-3 考勤信息表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型
Dep 文本 18 否 否 部门
Des 文本 90 否 否 备注
Ornum 数字 长整型 序号
Mdate 日期/时间 常规时间 否 时间
表4-4 部门表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型
Sid 数字 长整型
Bfdept 文本 100 否 是 调前部门
Bhdep 文本 100 否 是 调后部门
Ddcase 文本 100 否 是 调动原因
Bfsdept 文本 100 否 是 调前单位
Bhsdept 文本 100 否 是 调后单位
Month 文本 100 否 是 调动月份
Bfzw 文本 100 否 是 调前职务
Bhzw 文本 100 否 是 调后职务
Time 时间/日期 常规时间 否 调动时间
Bfgz 数字 长整型 否 调前工资
Bhgz 数字 长整型 否 调后工资
Txcase 文本 100 否 是 调薪原因
Beizhu 文本 250 否 是 备注
表4-5 调动调薪表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型
Sid 数字 长整型
Name 文本 32 否 否 成员姓名
Fami 文本 32 否 否 成员关系
Tel 文本 90 否 是 联系电话
Com 文本 32 否 是 工作单位
Des 文本 250 否 是 备注
表4-6 家庭成员表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型
Sname 文本 32 否 否 部门名称
Des 文本 250 否 是 备注
Iflag 字节 否 标记
Mdate 时间/日期 常规时间 否 时间
表4-7 其他信息表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型
Sid 数字 长整型
Course 文本 90 否 否 培训课程
Dlimit 文本 32 否 否 培训期限
Sdate 时间/日期 常规时间 否 开始时间
Edate 时间/日期 常规时间 否 结束时间
Trcom 文本 32 否 是 培训机构
Certi 文本 32 否 是 所获证书
表4-8 培训记录表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型
Sid 数字 长整型
Sdate 日期/时间 常规时间 否 开始时间
Edate 时间/日期 常规时间 否 结束时间
Company 文本 90 否 否 公司
Dep 文本 32 否 是 部门
Duty 文本 180 否 是 职责
Leftts 文本 180 否 是 离职原因
表4-9 工作经历表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型
Sid 数字 长整型
Stano 文本 50 否 是 员工编号
Name 文本 50 否 是 员工姓名
Slevel 文本 50 否 是 基本工资
Fenshu 文本 50 否 是 奖惩分数
Jcsalary 文本 50 否 是 奖惩工资
Sfsalary 文本 50 否 是 实发工资
Month 文本 50 否 是 工资月份
表4-10 工资表
字段名称 字段类型 字段大小 是否必填 是否允许空 说明
Id 自动编号 长整型
Sdept 文本 18 否 否 单位
Dep 文本 18 否 否 部门
Des 文本 90 否 否 备注
Ornum 数字 长整型 序号
Mdate 日期/时间 常规时间 否 时间
表4-11单位表
五、系统详细设计及实施
(一)界面及编程风格
程序设计风格是程序设计时要考虑的一个重要问题,它是衡量软件设计人员程序素养的主要标志之一。程序的风格与程序易读性有关。如果程序设计人员养成一致的、良好的程序设计风格,则彼此之间更易于理解和交流所编写的程序。我们的人事管理信息系统采用了如下的编程规范。
1、编程风格
(1)命名规范
数据库表的命名:以具有英语语义的单词或单词缩写命名。数据库中数据项的命名:依据数据项的英文或者其缩写命名。PAS文件的命名:以u作为前缀加相应的英语单词或缩写命名。窗体文件的命名:以frm作为前缀加相应的英语单词或缩写命名。
(2)行文规范
为保证程序的可读性,对程序中的变量、语句做有效、适当的注释。尽量做到每行只写一个语句,且避免过长的语句的出现。适当的运用缩进和空格增强程序可读性。
(3)其他规范
尽量避免程序中不必要的变量,避免冗余和重复。使用含义鲜明的变量名,保持命名的一致性。使用从超类中继承的对象控件。
2、界面风格
良好的用户界面十分重要,为了使用户原本枯燥烦琐的工作变得轻松、简便,本系统的界面以标准化、简单化为目标进行设计。
(1)根据用户的使用习惯,合理设置菜单位置,便于用户快速找到有用的信息。
(2)界面以浅蓝色(Green)作为背景色,文字使用黑色(Black)显示。
(3)在下拉菜单的基础上增加图标按钮(ICO)和快捷键。
(4)查询条件的输入,尽量采用下拉框,减小信息录入时的工作量。
3、编码实例
此为登录模块用户判断的实例代码:
procedure TfrmLogin.bbtnloginClick(Sender: TObject);
var aqPer: TADOQuery;
begin
if edtuid.Text <> ‘’ then
begin
aqPer := TADOQuery.Create(nil); aqPer.Connection := dmPer.acPer;
aqPer.SQL.Text := ‘select * from admin where uid=’ + QuotedStr(Trim(edtuid.Text)) + ‘’; aqPer.Open;
if not aqPer.Eof then
begin
Dec(i);
if aqPer.FieldByName(‘pwd’).AsString = edtpwd.Text then
begin
sUserID := Trim(edtuid.Text); sUserPwd := edtpwd.Text;
if aqPer.FieldByName(‘sys’).AsBoolean then
sysadmin := true
else sysadmin := false;
self.ModalResult := mrOk;
end
else begin
if i = 0 then Close;
MessageBox(self.Handle, ‘密码有误,请重新输入!’, ‘提示’, mb_IconWarning + mb_Ok);
edtPwd.Clear; edtPwd.SetFocus; Exit;
end
end
else begin
MessageBox(self.Handle, ‘账号不存在,请重新输入!’, ‘提示’, mb_IconInformation + mb_Ok);
edtUid.Clear; edtUid.SetFocus; Exit;
end;
end
else
begin
MessageBox(self.Handle, ‘请输入账号!’, ‘提示’, mb_IconInformation + mb_Ok);
edtUid.SetFocus; Exit; end;end;
(二)系统模块功能实现
根据前期分析、设计,已经基本完成人事档案管理系统的编制,其程序的功能详细介绍如下:
1、用户登录模块
系统启动,如图5.1所示,此时虽然显示了主界面但是在用户登录前主界面是不可编辑的只有用户通过了登录模块的验证才可以对主界面中的菜单进行操作。
在进入系统之前,首先进行安全性检查,防范恶意盗取和破坏数据的行为,在确认安全后,合法用户才可以在顺利登录之后可进入系统。
图5-1 未登录系统主界面
登录流程如图5-2所示,其主要目的是身份识别。系统根据使用者提供的用户名、口令进行查询鉴别,本系统不允许空密码,如果用户名或密码文本框中为空点击登录按钮时会弹出不能为空的提示信息。对用户名和密码分别进行判断,如果用户名在数据库中不存在则提示用户名不存在信息;只有存在该用户时,才会进行密码的判别。为了增强系统安全性系统中设置了非法登录次数的限制:同一个用户名如果连续三次密码输入不正确则自动退出系统。经过判断如果用户名和密码均正确则激活系统主界面(如图5-3所示),并且将操作人员信息导入系统主界面。如果用户不能通过登录模块的验证则只能看到系统主界面但是无法对主界面进行操作。
图5-2 登录流程
2、系统主界面
图4-3是系统登录成功后的窗口,一共展示了7个功能模块,即系统管理(用户管理)、员工信息管理、员工工资管理、设置(包括部门管理)、数据库管理。同时,在主界面中在标题栏和状态栏会显示此登录用户的基本信息如用户名、用户类型;还可以显示系统当前时间并且时间是动态变化的。除此之外,用户可以对标题栏和状态栏中显示的系统的名称在前台进行修改,系统主界面的背景图案也可以根据用户的个人需要进行设置。
图5-3 登录后的主界面
3、用户管理模块
用户管理主界面,只有管理员用户才有进入此操作界面。在这个界面中系统管理员用户可以进行相应的操作如:编辑(修改用户名称、密码或修改用户权限)、添加用户、删除用户的操作;为了能够更好的满足管理的需要,可以根据实际需要在备注信息中添加一些用户的信息。这些只允许系统管理员操作而其它普通用户没有进入此模块的权限,也就没法修改用户信息,增强了系统安全性。
4、 员工信息管理模块
员工信息管理模块具体功能描述如下:
(1)新员工基本信息的登记,已有员工基本信息更新,已有员工信息的删除,已有员工信息的打印。用户除了可以通过查询按钮进行查询外还可以通过“上一个”和“下一个”按钮选择员工的基本信息进行查看,也可以在树中单击相应的节点,员工的信息就会显示在相应的表单中。如图5-4所示
图5-4 员工基本信息
(2)员工其它信息的维护,这部分主要包括员工工作经历(如图5-5所示),家庭成员(图5-6),培训经历等信息的维护,在这部分中可以添加、删除、更新、查询打印工作经历和员工的家庭信息以使公司更全面的了解员工的社会关系。在这个窗体中除了设置了用来显示信息的文本框外,还使用了DBGridEH控件,用来以表格的方式显示相关信息,更加直观明了。
图4-5 员工工作经历
图5-6 员工家庭成员
(3)员工管理信息维护,主要包括两方面的内容:员工奖惩(如图5-7)和人事调动管理(如图5-8),其中奖惩记录以加分或扣分的形式进行管理,不同的奖惩类别奖惩分数不相同,以此来对员工进行奖惩管理。奖惩类别可以根据公司的实际需要进行设置;人事调动管理包括正常的人事调动还伴随着员工基本工资的调整。同时,这部分也是员工工资报表生成的基础。
图5-7 奖惩记录
图5-8 人事调动
(4)员工信息统计,为了公司能够从多个角度了解公司的人力资源状况,在这个窗体中可以根据部门、性别、年龄、职称、进入公司的时间对员工信息进行统计,并且可以通过图片按钮把得到的统计图输出。
图5-9 统计信息
5、 员工工资信息模块
(1)工资结算:根据员工基本信息中的基本工资、奖惩管理中的奖惩分数和人事调动中的调薪管理按月份来生成工资报表。图5-10中的“基本金额”用来设置每一分对应的金额,结合奖惩管理中的奖惩分数来计算实发工资。计算公式为:实发工资=基本工资+基本金额*奖惩分数
图5-10 工资结算
(2)员工工资查询:其主要功能是方便员工查询自己的工资信息,信息以条目和表格两种方式显示,并且可以选择月份,查询指定月份的工资信息。图5-11中的员工编号、员工姓名、查询月份三者缺一不可,否则会提示相应的项不能为空。
图5-11 工资查询
6、部门管理模块
主要是实现部门和单位的添加删除更新等操作。
图5-12 部门设置
7、数据库管理模块
为了减轻系统管理员管理系统的负担还在前台为管理员设置了数据库的备份与恢复功能,可以自动执行数据库的备份与恢复,备份文件自动保存为DataBakUP加系统时间的形式,即可以避免备份文件重名,又可以方便管理员查找;数据库恢复界面中使用ListView控件显示所有的数据库备份文件以备当数据库遭到破坏时将数据库恢复到紧紧的状态。在备份与恢复时还增加了进度条,增强了可交互性,方便了管理员的操作。这个权限只有管理员用户才有,一般用户不允许对数据库进行操作。界面如图5-13和5-14所示:
图5-13 数据库备份
图5-14 数据库恢复
8、 系统其它功能简介
(1)员工信息查询:如图5-15和5-16所示,其主要功能是快速查询某一个或某几个员工的信息,本系统中的员工查询又分为单人查询和多人查询单人查询主要是根据员工编号或员工姓名查询;多人查询可以根据部门、性别、工种、学历等信息进行综合查询。
图5-15 多人查询
(2)其它信息设置:如图5-16其主要功能是对系统中的工种、职位、民族、学历、专业、考勤类别等信息进行添加、更新、删除等操作,管理员可以根据公司的发展对如图所示的各种信息随时进行更新以适应公司的实际情况。
图5-16 其它信息设置
员工信息打印设置:如图5-17所示操作人员可以根据自己的需要选择员工的各种信息进行打印,选中对应的复选框,就会得到对应的信息。
图5-17 打印设置
六、系统测试
在系统开发过程中,我们基本按照规范化要求进行,使得系统总的质量比较高,用户界面友好。软件测试是极其重要的把关环节。但是,由于测试的依据是规格说明书、设计文档和使用说明书,如果设计错误,测试的质量就难以保证。在开发完成之后发现错误,再进行修改的代价非常大。
因此软件开发的过程中,需要在各个工程阶段对软件进行测试,从而确保系统的稳定性和可靠性。
本人在毕业设计过程中,对人事档案管理系统进行了测试。测试遵循了图6-1中所示的步骤:
.
.
.
图6-1 测试步骤
(一)测试策略
测试主要以黑盒法为主,首先确保测试系统的准确性,其次确保测试系统的整体性。如果黑盒法测试的结果显示有缺陷,那么再对相应的程序段进行白盒测试,主要以程序员自己检查为主。
(二)功能测试
利用现有数据库,对下列功能做一系列测试:
1、数据录入
录入员工信息如:基本信息、职务信息、家庭成员、教育培训、工作经历、考勤信息、调动调薪信息、部门单位信息等等。
2、根据录入的员工信息进行数据查询及打印表格显示,提供相关的数据进行查询,数据显示结果正确。
(三)性能测试
经过多人在不同环境下测试,本系统检索、删除迅速、维护方便、成本低、效率高。
(四)界面测试
1、菜单
系统主要是使用文本菜单进行操作,经测试菜单设置合理、加入了快捷键使用方便、界面友好,符合人们的使用习惯。
2、窗口
对窗口的测试主要有以下几点:
1、窗口的正常开启与关闭:出来窗口的关闭方法以外,多数情况下还提供了定义的“退出”、“关闭”或“取消”按钮。
2、窗口风格:窗口的颜色和操作方法基本一致,比较和谐、统一。
3、提示信息
系统的提示信息比较丰富、准确,有警告信息、结果信息、提示信息等;并且在数据库管理界面中,数据库备份和恢复时有进度条。在这些提示下,用户可以比较容易、直观的进行操作。
(五)测试结论
按照相应的测试策略,分别测试了系统的功能,系统的性能和用户界面。测试结果表明系统总的质量比较高,基本能够满足用户的需求,用户界面也比较友好,各方面的效果良好。
致 谢
紧张而忙碌的毕业设计就要结束了,在完成了系统的功能设计后,我感到由衷的喜悦和自豪。在我做毕业设计期间,学校的齐斯琴导师给了我很大的帮助,在此表示衷心的感谢。
因为自己从事实际开发的经验不足,从事软件开发的朋友给我提出了许多宝贵的经验,并指导我进行功能模块的修改。
最后,请允许我再一次向毕业设计期间帮助过我的齐老师,朋友表示最衷心的感谢。
参考文献
[1] 伍俊良编著.Delphi应用与开发教程[M].北京:机械工业出版社,2004,52-85.
[2] 李维著.Delphi高校数据库程序设计[M].北京:机械工业出版社,2003,253-289.
[3] 求是科技编著.Delphi信息管理系统开发实例导航[M].北京:人民邮电出版社,2005,67-95.
[4] 李春葆,曾平编著.ACCESS数据库程序设计[M].北京:清华大学出版社,2005,74-86.
[5] 王晟,韩泽坤编著. ACCESS数据库开发经典案例解析[M]. 北京:清华大学出版,2006,132-153.
[6]D.H.Howe.NEW ACCESS WORKBOOK[M].HongKong Oxford university press,2004,152-178.
[7] CORNELL,G.,STRAIN,T. DELPHI7.0[M].北京:科学出版社,2005
[8] 阮俊杰编著.软件开发方法与管理教程[M].北京:希望电子出版社,2002,98-106.
[9] Mcleod.Management Information System[M].Printice Hall , 1998,20-50.
[10]O’Brien,James.A.Introduction to information systems[M].BeiJing:Higher Education Press,2002,35-87.
[11] McLeod, Raymond. Management information systems[M].北京:北京大学出版社,2002,356-392.
[12] 陈明编著.软件工程学教程[M].北京:科学出版社,2002,168-187.
附 录
附录1部分核心代码
unit umain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, Jpeg, ExtCtrls, XPMenu, ComObj, ComCtrls, IniFiles, ImgList,
ActnList, StdCtrls{TfrmBkData};
type
TfrmPer = class(TForm)
mnuPer: TMainMenu;
miSys: TMenuItem;
miChgPwd: TMenuItem;
miAdmin: TMenuItem;
miLogin: TMenuItem;
space01: TMenuItem;
miExit: TMenuItem;
tmrMain: TTimer;
sbPer: TStatusBar;
tmrTime: TTimer;
miStaff: TMenuItem;
miStaInfo: TMenuItem;
miAdds: TMenuItem;
miInqus: TMenuItem;
miEdits: TMenuItem;
miDels: TMenuItem;
miSet: TMenuItem;
miDep: TMenuItem;
miAbout: TMenuItem;
miBkData: TMenuItem;
miData: TMenuItem;
miReData: TMenuItem;
miSetp: TMenuItem;
imgMain: TImage;
xmPer: TXPMenu;
miSeto: TMenuItem;
miOther: TMenuItem;
ilPer: TImageList;
N5: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
procedure tmrMainTimer(Sender: TObject);
procedure tmrTimeTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure miChgpwdClick(Sender: TObject);
procedure miAdminClick(Sender: TObject);
procedure miLoginClick(Sender: TObject);
procedure miExitSystemClick(Sender: TObject);
procedure miStaInfoClick(Sender: TObject);
procedure miAddClick(Sender: TObject);
procedure miEditClick(Sender: TObject);
procedure miDelClick(Sender: TObject);
procedure miDepClick(Sender: TObject);
procedure miOtherClick(Sender: TObject);
procedure miSetClick(Sender: TObject);
procedure miBackupClick(Sender: TObject);
procedure miRestoreClick(Sender: TObject);
procedure miAboutClick(Sender: TObject);
procedure miInqusClick(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
private
{ Private declarations }
procedure ActiveForm;
public
{ Public declarations }
end;
var
frmPer: TfrmPer;
implementation
uses ulogin, uchgpwd, uglobal, uadmin, ustainfo, ufind, udep, uabout,
udata, uset, uoinfo, uredata,uBkData,usalaryjs,uSalaryQuery,uSalaryPrint;
{$R *.dfm}
procedure TfrmPer.FormCreate(Sender: TObject);
var
iFile: TIniFile;
begin
sPath := ExtractFilePath(Application.ExeName);
iFile := TIniFile.Create(sPath + ‘perset.ini’);
sTopic := iFile.ReadString(‘sTopic’, ‘topic’, ‘人事档案管理系统’);
bgstr := iFile.ReadString(‘sysbg’, ‘bground’, ‘main.jpg’);
iFile.Free;
if sTopic = ‘’ then sTopic := ‘人事档案管理系统’;
if (bgStr = ‘’) or (not FileExists(sPath + bgStr)) then
bgStr := ‘main.jpg’;
imgMain.Picture.LoadFromFile(sPath + bgStr);
self.Caption := sTopic;
Application.Title := sTopic;
Application.ShowHint := true;
//clLime(浅绿),clYellow(黄色),clBlue(蓝色),clFuchsia(紫红),clAqua(青绿),clWhite(白色)。 默认值: BackColor 为…clLime(浅绿),clYellow(黄色),clBlue(蓝色),clFuchsia(紫红),clAqua(青绿),clWhite(白色)
Application.HintColor := clLime;
self.Constraints.MaxWidth := 800;
self.Constraints.MaxHeight := 600;
end;
procedure TfrmPer.tmrMainTimer(Sender: TObject);
var
frmLogin: TfrmLogin;
begin
sbPer.Panels[0].Text := ‘还没有登录’;
sbPer.Panels[1].Text := sTopic;
tmrMain.Enabled := false;
frmLogin := TfrmLogin.Create(self);
if frmLogin.ShowModal<> mrOk then
Close;
FreeAndNil(frmLogin);
self.Caption := sTopic;
self.Caption := self.Caption + ’ 用户:’ + sUserID;
sbPer.Panels[0].Text := ‘用户:’ + sUserID;
if sysAdmin then
begin
self.Caption := self.Caption + ’ --系统管理员’;
sbPer.Panels[0].Text := sbPer.Panels[0].Text + ’ 您是系统管理员’;
end
else
sbPer.Panels[0].Text := sbPer.Panels[0].Text + ’ 您是普通管理员’;
end;
procedure TfrmPer.tmrTimeTimer(Sender: TObject);
var
wdStr: string;
begin
case DayOfWeek(Date()) of
1: wdStr := ‘星期日’;
2: wdStr := ‘星期一’;
3: wdStr := ‘星期二’;
4: wdStr := ‘星期三’;
5: wdStr := ‘星期四’;
6: wdStr := ‘星期五’;
7: wdStr := ‘星期六’;
end;
sbPer.Panels[2].Text := FormatDateTime(‘yyyy年mm月dd日 hh时nn分ss秒’, Now()) + ’ [’ + wdStr + ‘]’;
end;
procedure TfrmPer.ActiveForm;
begin //判断frmStainfo窗体是否已经在内存中Create,如果没有就去创建
if not System.Assigned(frmStainfo) then
frmStainfo := TfrmStainfo.Create(Application)
else if frmStainfo.WindowState = wsMinimized then
frmStainfo.WindowState := wsNormal;
end;
procedure TfrmPer.miChgpwdClick(Sender: TObject);
var
frmChgPwd: TfrmChgPwd;
begin
sbPer.Panels[1].Text := ‘更新您的密码’;
frmChgPwd := TfrmChgPwd.Create(self);
if frmChgPwd.ShowModal = mrOk then
MessageBox(self.Handle, ‘密码更新成功!’, ‘提示’, mb_IconInformation + mb_Ok);
FreeAndNil(frmChgPwd); //释放资源 (可选)
sbPer.Panels[1].Text := sTopic;
end;
procedure TfrmPer.miAdminClick(Sender: TObject);
var
frmAdmin: TfrmAdmin;
begin
sbPer.Panels[1].Text := ‘管理员管理–此为系统管理员权限’;
if sysAdmin = true then
begin
frmAdmin := TfrmAdmin.Create(self);
frmAdmin.Show; //或使用frmAdmin.ShowModal
//FreeAndNil(frmAdmin); (可选)
end
else
MessageBox(handle, ‘您的权限不够,请与管理员联系!’, ‘提示’, mb_IconWarning + mb_Ok);
sbPer.Panels[1].Text := sTopic;
end;
procedure TfrmPer.miLoginClick(Sender: TObject);
begin
tmrMainTimer(Sender);
end;
procedure TfrmPer.miExitSystemClick(Sender: TObject);
begin
sbPer.Panels[1].Text := ‘退出系统’;
if MessageBox(self.Handle, ‘确定要退出系统么?’, ‘提示’, mb_IconQuestion + mb_YesNo) = idYes then
Close;
sbPer.Panels[1].Text := sTopic;
end;
procedure TfrmPer.miStaInfoClick(Sender: TObject);
begin
sbPer.Panels[1].Text := ‘员工档案信息’;
frmStainfo:=TfrmStainfo.Create(self);
frmStainfo.Show;
//ActiveForm;
end;
procedure TfrmPer.miAddClick(Sender: TObject);
begin
sbPer.Panels[1].Text := ‘档案信息添加’;
frmStainfo:=TfrmStainfo.Create(self);
frmStainfo.Show;
//ActiveForm;
//frmStaInfo.btnaddClick(Sender);
end;
procedure TfrmPer.miEditClick(Sender: TObject);
begin
sbPer.Panels[1].Text := ‘档案信息编辑’;
frmStainfo:=TfrmStainfo.Create(self);
frmStainfo.Show;
//ActiveForm;
{if frmStaInfo.tvper.selected.data <> nil then
frmStaInfo.btneditClick(Sender)
else
MessageBox(self.Handle, ‘请先选择记录!’, ‘提示’, mb_IconInformation + mb_Ok);}
end;
procedure TfrmPer.miDelClick(Sender: TObject);
begin
sbPer.Panels[1].Text := ‘档案信息删除’;
frmStainfo:=TfrmStainfo.Create(self);
frmStainfo.Show;
//ActiveForm;
end;
procedure TfrmPer.miInqusClick(Sender: TObject);
var
frmFind: TfrmFind;
begin
ActiveForm;
frmFind := TfrmFind.Create(self);
frmFind.Show;
end;
procedure TfrmPer.miDepClick(Sender: TObject);
var
frmDep: TfrmDep;
{begin
frmDep := TfrmDep.Create(self);
frmDep.ShowModal;
FreeAndNil(frmDep);
end;}
begin
sbPer.Panels[1].Text := ‘管理员管理–此为系统管理员权限’;
if sysAdmin = true then
begin
frmDep := TfrmDep.Create(self);
frmDep.Show; //或使用frmAdmin.ShowModal
//FreeAndNil(frmAdmin); (可选)
end
else
MessageBox(handle, ‘您的权限不够,请与管理员联系!’, ‘提示’, mb_IconWarning + mb_Ok);
sbPer.Panels[1].Text := sTopic;
end;
procedure TfrmPer.miOtherClick(Sender: TObject);
var
frmOInfo: TfrmOInfo;
{begin
frmOInfo := TfrmOInfo.Create(self);
frmOInfo.ShowModal;
FreeAndNil(frmOInfo);
end;}
begin
sbPer.Panels[1].Text := ‘管理员管理–此为系统管理员权限’;
if sysAdmin = true then
begin
frmOInfo := TfrmOInfo.Create(self);
frmOInfo.Show; //或使用frmAdmin.ShowModal
//FreeAndNil(frmAdmin); (可选)
end
else
MessageBox(handle, ‘您的权限不够,请与管理员联系!’, ‘提示’, mb_IconWarning + mb_Ok);
sbPer.Panels[1].Text := sTopic;
end;
procedure TfrmPer.miSetClick(Sender: TObject);
var
frmSet: TfrmSet;
{begin
frmSet := Tfrmset.Create(self);
frmSet.ShowModal;
FreeAndNil(frmSet);
end; }
begin
sbPer.Panels[1].Text := ‘管理员管理–此为系统管理员权限’;
if sysAdmin = true then
begin
frmSet := TfrmSet.Create(self);
frmSet.Show; //或使用frmAdmin.ShowModal
//FreeAndNil(frmAdmin); (可选)
end
else
MessageBox(handle, ‘您的权限不够,请与管理员联系!’, ‘提示’, mb_IconWarning + mb_Ok);
sbPer.Panels[1].Text := sTopic;
end;
procedure TfrmPer.miBackupClick(Sender: TObject);
var
frmBkData :TfrmBkData;
{begin
frmBkData := TfrmBkData.Create(self);
frmBkData.Show;
end;}
begin
sbPer.Panels[1].Text := ‘管理员管理–此为系统管理员权限’;
if sysAdmin = true then
begin
frmBkData := TfrmBkData.Create(self);
frmBkData.Show; //或使用frmAdmin.ShowModal
//FreeAndNil(frmAdmin); (可选)
end
else
MessageBox(handle, ‘您的权限不够,请与管理员联系!’, ‘提示’, mb_IconWarning + mb_Ok);
sbPer.Panels[1].Text := sTopic;
end;
procedure TfrmPer.miRestoreClick(Sender: TObject);
var
frmReData: TfrmReData;
{begin
frmReData := TfrmReData.Create(self);
frmReData.ShowModal;
FreeAndNil(frmReData);
end;}
begin
sbPer.Panels[1].Text := ‘管理员管理–此为系统管理员权限’;
if sysAdmin = true then
begin
frmReData := TfrmReData.Create(self);
frmReData.ShowModal; //或使用frmAdmin.ShowModal
//FreeAndNil(frmAdmin); (可选)
end
else
MessageBox(handle, ‘您的权限不够,请与管理员联系!’, ‘提示’, mb_IconWarning + mb_Ok);
sbPer.Panels[1].Text := sTopic;
end;
procedure TfrmPer.miAboutClick(Sender: TObject);
var
frmAbout: TfrmAbout;
begin
frmAbout := TfrmAbout.Create(self);
frmAbout.ShowModal;
FreeAndNil(frmAbout);
end;
procedure TfrmPer.FormResize(Sender: TObject);
begin
if Screen.Width = 800 then Exit;
self.Left := Trunc((Screen.Width - self.Width) / 2);
self.Top := Trunc((Screen.Height - self.Height) / 2);
end;
procedure TfrmPer.N7Click(Sender: TObject);
var
frmSalaryJS: TfrmSalaryJS;
begin
frmSalaryJS:=TfrmSalaryJS.Create(self);
frmSalaryJS.ShowModal;
freeandnil(frmSalaryJS);
end;
procedure TfrmPer.N8Click(Sender: TObject);
var
frmSalaryQuery: TfrmSalaryQuery;
begin
frmSalaryQuery:=TfrmSalaryQuery.Create(self);
frmSalaryQuery.ShowModal;
freeandnil(frmSalaryQuery);
end;
procedure TfrmPer.N9Click(Sender: TObject);
begin
frmSalaryPrint.Show;
end;
end.