密码.txt

人事档案管理系统设计与实现

收藏

资源目录
跳过导航链接。
人事档案管理系统设计与实现.rar
张艳明人事档案管理信息系统代码
密码.txt---(点击预览)
人事档案管理系统报告.doc---(点击预览)
人事档案管理系统
Main.txt---(点击预览)
images
Main.dcu
MAIN.ddp
MAIN.dfm
MAIN.PAS
MAIN.~ddp
MAIN.~dfm
MAIN.~PAS
permis.bak
permis.mdb
PersonMIS.cfg
PersonMIS.dof
PersonMIS.DPR
PersonMIS.exe
PersonMIS.res
PersonMIS.ZMX
PersonMIS.~DPR
uChange.dcu
uChange.ddp
uChange.dfm
uChange.pas
uChange.~ddp
uChange.~dfm
uChange.~pas
udata.dcu
uData.ddp
uData.dfm
uData.pas
uData.~ddp
uData.~dfm
uData.~pas
uDBadmin.dcu
uDBadmin.ddp
uDBadmin.dfm
uDBadmin.pas
uDBadmin.~ddp
uDBadmin.~dfm
uDBadmin.~pas
udep.dcu
uDep.ddp
uDep.dfm
uDep.pas
uDep.~ddp
uDep.~dfm
uDep.~pas
ufind.dcu
uFind.ddp
uFind.dfm
uFind.pas
uFind.~ddp
uFind.~dfm
uFind.~pas
uglobal.dcu
uglobal.pas
uLogin.dcu
uLogin.ddp
uLogin.dfm
uLogin.pas
uLogin.~ddp
uLogin.~dfm
uLogin.~pas
uPublic.dcu
uPublic.pas
uPublic.~pas
uRightsSetting.dcu
uRightsSetting.ddp
uRightsSetting.dfm
uRightsSetting.pas
uRightsSetting.~ddp
uRightsSetting.~dfm
uRightsSetting.~pas
ustainfo.dcu
uStainfo.ddp
uStainfo.dfm
uStainfo.pas
uStainfo.~ddp
uStainfo.~dfm
uStainfo.~pas
压缩包内文档预览:

资源预览需要最新版本的Flash Player支持。
您尚未安装或版本过低,建议您

人事档案管理系统设计与实现,人事,档案管理系统,设计,实现
编号:59081421    类型:共享资源    大小:2.43MB    格式:RAR    上传时间:2020-03-17 上传人:qq77****057 IP属地:江苏
7.2
积分
关 键 词:
人事 档案管理系统 设计 实现
资源描述:
人事档案管理系统设计与实现,人事,档案管理系统,设计,实现
内容简介:
湖 南 农 业 大 学毕业论文(设计)人事档案管理系统学生姓名: 湖南长沙提交日期:2005年5月人事档案管理系统摘 要:人事档案系统是典型的信息管理系统(MIS),是一个实用的C/S结构单机版人事档案管理管理系统。其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求数据一致性和完整性强,数据安全性好。而对于后者我设计应用程序功能完备、易使用、解决人工记录、统计、实现检索迅速、查找方便、数据输入、数据更新等。这些优点能够极大地提高人事档案管理的效率,也是提高公司人事管理,更好地为公司服务的有利工具。关键词:档案管理系统,后台数据库,数据一致性,完整性。目 录一 前言1 1.1 开发背景 1 1.2 开发意义 1 1.3 内容简介 1 二 软件开发环境2 2.1 系统开发 2 2.2 运行环境简介 4 三 需求分析5 3.1 功能需求 5 3.2 性能需求 6四 总体设计 7 4.1 系统层次模块设计 9 4.2 模块设计 10 4.3 数据库设计 12五 详细设计14 5.1系统项目文件和公共文件 21 5.2 主控制平台的界面效果 28 5.3 用户登录模块36 5.4 权限管理模块40 5.5 部门设置模块44 5.6 员工档案理模块46 5.7 人事变更管理模块48 5.8 数据库管理模块49六 综合测试50七 系统运行50八 系统开发总结50 结 论 49 参考文献 51 致谢.51前 言n 1.1 开发背景随着计算机技术在各个领域的广泛应用,近年来,计算机在网络方面也是迅速发展,系统是根据现代社会化发展而设计的基于ADO的人事档案管理系统,实现公司的统一管理,还可以对个人档案信息进行信息录入。由于职员在公司情况复杂,可以实现信息修改,及时调整职员的基本情况。n 1.2 开发意义我现在所做的课题就是在目前的情形下,从一些大型公司现有的条件实际出发,利用他们所拥有的计算机硬件设备和软件条件,把科技强国从思想上,工作思维和工作方式做起,实现一整套关于人事档案管理系统。为我们的这一特定阶层减少点负担,从根本上做到科技强国这一目的,这也是我国各个领域发展的必然趋势。开创教育基层工作建设的新局面,增强中等教育的战斗力,使这些学校真正建设成为适应网络时代新形势下要求的坚强的战斗实体。n 1.3 内容简介本课题主要是解决职员的在公司一些情况,目标是使这人事档案管理真正实现无纸化。本系统主要由用户登录模块、权限管理模块、部门设置模块、员工档案模块、人事变更模块、数据库管理模块六个子模块。在每一个模块中,必须做到良好的输入/输出界面,并能做到操作简单的功能。本课题是基于Windows2000环境的数据库管理,数据库采用Microsoft Access2000,前端使用Dreamweaver MX 2004进行开发。本课题要求有熟练ADO的开发能力,有较强的自学能力以及一定的数据库开发功底,并且具有一定的网页制作能力。2软件开发环境n 2.1 系统开发一、此系统是基于Windows 2000/XP环境的数据库管理,数据库采用Access 2000,前端开发使用Dreamweaver MX 2004,开发语言采用ASP,此系统属于网络版系统。二、开发系统中,数据库采用了Access 2000,综合开发整个系统是为了适应大多数公司的需要,方便职员可以选职位,老师管理三、编程中,对查询职员业绩部分添加了打印功能,这样可以使职员业绩用纸张的形式打印出来,便于存档。四、在系统中,其中部分需要保密码,比如说职员、领导的管理,只能由超级用户控制等,因此在这些模块加入了身份验证,只有身份验证通过之后才能做相应的操作。n 2.2 运行环境简介一、系统的性能要求系统的性能要求通常指系统需要的存储容量以及后援存储,重新启动和安全性,运行效率等方面的考虑。 本系统运行环境为网络版,在运行时对系统整体性能要有一定的要求,要求:服务器端:软件系统环境win2000及以上+Access 2000硬件系统环境PIII 1G、256MB内存、10G硬盘客 户 端:软件系统环境win98及以上+IE 硬件系统环境C300、32MB内存系统运行时对数据的保密性要求不高对一般的数据不要求进行加密。此外,对其它软件几乎没有依赖性,程序健壮性较好。二、其他需求本系统有较好的可维护性、可靠性、可理解性、效率。易于用户理解和操作。可维护性包括了可读性、可修改性、可测试性、等含义。可靠性通常包括正确性和健壮性。开发过程中,在各种矛盾的目标之间作权衡,并在一定的限制的条件下(经费、时间、可用的软、硬件资源等),使上述各方面最大限度的得到满足。3. 需求分析31 功能需求 本系统需要实现以下一些基本功能:3.1.1 部门信息管理:操作员可以添加新的科室,或删除已无庸的部门(确定部门内无员工时方可删除)。3.1.2权限管理:增加或栓出系统造作人员,并指定造作人员的权限。3.1.3人事档案的管理:操作人员进行员工档案信息录入及更改,其中包括员工的基本行信息,工作经历,家庭关系,奖罚记录和培训经历,要求这些员工档案信息可以进行新增,删除,修改操作,同时可以进行浏览和查询的操作。该模块是本系统的重点,用户可以通过该模块为单位建立一个比较完整的人事档案系统,同时可以比较方便地对档案进行查看。我们可以提供多种查询方式。3.1.4人事变动管理:对于人事上的变动调整进行专门的服务,系统自动对人员档案的信息进行更新(如:员工职务,员工职称,工作性质等的变动),并且将变动信息单独保存,便于对变动信息的查询。3.1.5数据库管理:对现有的数据库进行管理,包括数据压缩,备分和恢复,以方便用户对数据库的管理和维护工作。32性能需求系统的运行环境还有一些要求:3.2.1硬件环境处理器:Inter Pentium 166 MX或更高。内存:32MB硬盘空间:1GB显卡:SVGA显示适配器。3.2.2软件环境操作系统:Windows98/ME/2000/XP。数据库:Microsoft Access 2000。4. 总体设计41 系统层次模块图 “人事档案管理信息系统“可以分为6个模块:用户登录(uLogin.dfm),权限管理(uRightSetting.dfm),部门设置(uDep.dfm),员工档案管理(uStaInfo.dfm),人事变更管理(uChange.dfm)数据库管理(uDBAdmin.dfm),如图所示。用户登录(uLogin.dfm)员工档案管理(uStaInfo.dfm)数据库管理(uDBAdmin.dfm)人事管理信息系统(PersonMIS.dpr)部门设置(uDep.dfm)权限管理(uRightSetting.dfm)人事变更管理(uChange.dfm)图4.1 系统层次模块图42 模块设计 4.2.1用户登录模块:选择用户名称,填写正确的密码,进入主控制平台。 4.2.2权限管理模块:增加新的造作人员,赋于权限,同时可以编辑和删除已有的操作人员。4.2.3部门设置模块:新增部门,同时可以编辑和删除已有的部门信息。 4.2.4员工档案管理模块:一员工信息为叶节点,根据不同部门建立一个部门树结构图,用户可以根据该树结构来进行员工信息浏览工作。在该模块中,操作员进行员工担案信息录入及更改,其中包括员工的基本性信息,工作经历,家庭关系,奖罚记录和培训经历,要求对于这些员工担案信息可以进行新增,删除,修改操作,同时可以进行浏览和查询的操作。 4.2.5人事变更管理模块:录入人事变更的情况,包括人事变更时间和变更原因,同时可以编辑和删除已有的变更记录。 4.2.6数据库管理模块:对于数据库进行压缩,备分,同时可以完成数据库的还原43 数据库设计4.3.2 ADO综述本系统是通过对象型ADO(Activex Data Objects)来访问数据库的,ADO使我们能够编写应用程序,以通过OLE。DB提供者访问和操作数据库服务器中的数据。ADO最主要的优点是易于使用,速度快,内存支出少和磁盘遗迹小。ADO支持建立客户端/服务器和基于Web的应用程序的关键功能。ADO的另一个功能是“远程数据访问”(RDS),能够通过一个来回的传输将数据从服务器移动到客户端应用程序或Web页中,然后在客户端对数据进行操作,最后将新数据返回服务器。 ADO对象模型是有8个对象组成的,他们中的大多数的功能上和RDO对象相似,只不过具有更强的功能性。下面介绍ADO的几个主要的对象:Command对象。包含关于某个命令,例如查询字符串,参数定义等的信息。Command对象在功能上和RDO的rdoQuery对象相似的。 Connection对象。包含关于某个数据提供程序的信息。Connection对象在功能上和RDO的rdoConnection对象功能相似,并且包含了欢娱结构描叙的信息。它还包含某些RDOEnvironmnet对象的功能,例如transaction控件。 Recordset对象。Recordset对象包含某个查询返回的记录,以及那些记录中的游标。Recordset对象在功能上和RDO的rdoResrltset对象相似。用户可以在不同显示的打开Connection对象情况下,打开一个Recordset(例如,执行一个查询)。不过,如果选择创建一个Connection对象,就可以在同一个连接上打开多个Recordset对象。 Parameter对象。包含参数化的Command对象的某单个参数的信息。该Command对象有一个包含其所有Parameter对象的Parameter集合。Parameter对象在功能上和RDO的rdoParameter对象是相似的。 ADO的目标是访问,编辑和更新数据源,而编程模型体现了为完成该目标所必须的系列动作的顺序。ADO提供类和对象以完成一下活动:连接到数据源(Connection)。可选择开始个事务。 可选择创建对象来表示SQL命令(Command)。可选择在SQL命令中指定列,表和值作为变量参数(Parameter)。执行命令(Command,Connection或Recordset)。如果命令按行返回,则将行存储在缓存中(Recordset)。可选择创建缓存视图,以便能对数据进行排序,筛选和定位(Recordset)。通过添加,删除或更改行和列编辑数据(Recordset)。适当情况下,使用缓存中的更改内容来更新数据源。(Recordset)。在使用事务之后,可以接受或拒绝在事务期间所作的更改,结束事务(Connection)。4.3.2 表结构实现 根据系统功能设计的需求以及功能模块的划分,对于系统用户信息数据库,可以列出以下数据项和数据结构:名称:操作人员表。 表名称标识:Operator。 数据来源:权限管理快进行录入。名 称字段名称类 型主 建非 空标识Id自动编号YesNo用户名UserName文本NoYes用户密码UserPwd文本NoNo用户类型Class数字NoNo图表4.1 操作人员表 名称:部门信息表。 表名称标识:Dept。 数据来源:部门管理模块进行录入。名称字段名称类型主建非空标识Id自动编号YesNo部门名称Dep文本NoYes部门描叙Des文本YesNo部门排序Ornum数字NoYes创立时间MDate日期/时间NoYes图表4.2 部门信息表名称:人事基本信息表。 表名称标识:StaInfo。 数据来源:基本档案录入模块进行录入。名称字段名称类型主建非空标识Id自动编号YesNo工号Stano文本NoYes姓名Name文本NoNo性别Sex文本NoNo出生日期Birth文本NoNo所属部门Dep文本NoNo职业Sorts文本NoNo职称Duty文本NoNo省市Provi文本NoNo民族Folk文本NoNo学历Level文本NoNo身份证号CardNo文本NoNo档案编号RecNo文本NoNo政治面貌Politics文本NoNo技术等级SLevel文本NoNo婚否Married文本NoNo入单位时间InDate文本NoNo健康情况Body文本NoNo合同期限BarYear文本NoNo合同开始BarStart文本NoNo邮编PCode文本NoNo家庭住址Address文本NoNo图片地址Image文本NoNo备注Des文本NoNo创建时间MDate日期/时间NoNo图表4.3人事基本信息表名称:工作经历表。 表名称标识:wExper。 数据来源:基本档案录入模块进行录入。名称字段名称类型主建非空标识Id自动编号YesNo公号Sid数字NoYes开始时间SDate文本NoNo结束时间EDate文本NoNo公司名称Company文本NoNo部门Dep文本NoNo职责Duty文本NoNo图表4.4工作经历表名称:家庭成员表。 表名称标识:family。 数据来源:基本档案录入模块进行录入。名称字段名称类型主建非空标识Id自动编号YesNo工号SId数字NoYes名称Name文本NoNo与员工关系Fami文本NoNo电话Tel文本NoNo单位Com文本NoNo备注Des文本NoNo图表4.5家庭成员表 奖惩记录表。 表名称标识:aandp。 数据来源:基本档案录入模块进行录入。名称字段名称自动编号主建非空标识Id数字YesNo工号Sid文本NoYes类别Sort文本NoNo事件Topic文本NoNo处理部门Dep文本NoNo处理时间MDate文本NoNo备注Des文本NoNo图表4.6奖惩记录表名称:培训经历表。 表名称标识:train。 数据来源:基本档案录入模块进行录入。名称字段名称类型主建非空标识Id自动编号YesNo工号SId数字NoYes培训课程Course文本NoNo培训期限DLimit文本NoNo培训单位TrCom文本NoNo证书Certi文本NoNo图表4.7培训经历表人员变更表。 表名称标识:change。 数据来源:认识变更模块进行录入。名称字段名称类型主建非空标识Id自动编号YesNo工号Sid数字NoYes原部门SDep文本NoNo新部门DDep文本NoNo变更时间CDate日期/时间NoNo变更原因Reason文本NoNo创建时间MDate日期时间NoNo图表4.8人事变更表5详细设计根据已有的需求信息和总体设计,可以进行系统的详细设计和实现。为此我们建立了一个Delphi工程。系统的设计和实现如下:51 系统项目文件和公共文件(1)每一个Delphi工程都有一个项目文件,在本系统中,项目文件如下所示(PersonMIS.pas):Program PersonMIS;UsesForms,Sysutils,Main in MSIN.PASMainForm,/主控制平台uLogin in uLogin.pasfrmLogin,/登录模块uPublic in uPublic.pas,/公共变脸uRightsSetting in uRightsSetting.psafrmRightSetting./权限设置模块uStainfo in uStainfo.pas frmStainfo./人事档案管理模块uData in uData.pas dmPer:TDataModule,/公共数据库对象模块 uDep in uDep.pas frmDep./部门设置模块uDBadmin in uDBadmin.pas frmDBadmin./数据库管理模块uChange in “uChange.pasfrmChange;/人事变动模块$R*.RESBeginApplication.Initialize;/dmPer模块先于主窗体之前建立,是因为登录模块中使用了其数据库连接对象Application.CreateForm(TdmPer,dmPer);Application.CreateForm(TMainForm,MainForm);Application.CreateForm(TfrmDep,frmDep);Application.CreateForm(TfrmDBadmin,frmDBadmin);Application.CreateForm(TfrmChange,frmChange);Application.Run;End.(2) 公共的数据库连接对象(uData.pas).Unit uData;InterfaceUses SysUtils,Classes,DB,ADODB;Type TdmPer=class(TDataModule) acPer;TADOConnection;/公共的数据库连接对象,其他模块的数据绑定控建通过该连接对象来完成对数据库的连接privatePrivate declarationsPublicPublic declarationsVar dmPer:TdmPer;end;vardmPer: TdmPer;implementation$R*.dfmEnd.52主控制平台的界面效果 图5.2人事档案管理系统窗口主控制平台使用简单和直观的布局如图所示。主控制平台主要年对模块的调用和显示工作,为此,我们提供了菜单和按纽两中方式。5.3 用户登录(ulpgin.dfm)模块图5.3 用户登录窗口5.3.1用户身份验证输入:疑难高呼名和密码。处理: 用户登录窗体启动。 从操作人员表中读取操作人员的名称信息,并些入用户名下拉框中,以方便登录。 用户选择用户名并输入密码。 从操作人员表中检查是否有相应的用户名和密码。 如果用户名或密码错误,进行提示。 如果输入的用户名和相应的密码正确,则根据该用户的权限类别进行权限设置。 进入主控制平台。输出:主控制平台。5.3.2用户登录模块的主要代码(uLogin.pas) 该单元使用的其他单元文件:Main.uPublic,uData。 确认操作:检验用户名和密码,并完成权限的分配。/在【确认】按纽被点击后,检查操作表中是否为相应的操作人员的口令procedure TfrmLogin.btnOKClick(Sender: TObject);var Query : TADOQuery;begin /如果验证输入的口令正确,则进入主操作界面 try /检查操作人员表中是否有匹配记录 Query := TADOQuery.Create(nil); Query.Connection := dmPer.acPer ; Query.SQL.Add(select * from Operator where UserName=:UserName and userpwd=:userpwd);Query.Parameters.ParamByName(UserName).Value := cmbUsername.Text ; Query.Parameters.ParamByName(userpwd).Value := edtpassword.Text ;Query.Open; if Query.RecordCount = 0 then begin MessageDlg(请输入正确的用户名和密码,mtError,mbok,0); Exit; end;/根据不同的操作员级别,允许进行不同的功能操作 if query.FieldByName(class).AsInteger =0 then begin /超级用户拥有全部权限 mainform.menuSRight.Enabled :=true; mainform.menuPDepartment.Enabled :=true; mainform.menuPBasicSetting.Enabled := true; mainform.menuPDB.Enabled :=true; mainform.menuPChange.Enabled:= true; end; if query.FieldByName(class).AsInteger =1 then begin /操作员用户拥有除数据库管理和权限管理外的全部权限 mainform.menuSRight.Enabled :=false; mainform.menuPDepartment.Enabled :=true; mainform.menuPBasicSetting.Enabled := true; mainform.menuPDB.Enabled :=false; mainform.menuPChange.Enabled:= false; end; edtpassword.Text :=; /密码信息要清空 Query.Close; Query.Free; mainform.Show; frmLogin.close; except MessageDlg(连接数据库出错!,mtError,mbok,0); end;end; 登录窗体创建时,需要完成的一些初始化工作,读取可以登录的用户名称,并形成列表,供用户进行选择。/窗体创建时,读取操作员表中的操作者名称procedure TfrmLogin.FormCreate(Sender: TObject);var Query : TADOQuery;begin cmbusername.Clear ; try Query := TADOQuery.Create(nil); Query.Connection := dmPer.acPer ; Query.SQL.Add(select username from Operator ); Query.Open; if Query.RecordCount = 0 then begin MessageDlg(没有可以登陆的用户名,mtError,mbok,0); Exit; end else begin Query.First ; while Query.Eof =false do begin cmbUserName.items.add(query.FieldByName(Username).asstring ); Query.next; end end; Query.Close; Query.Free; cmbusername.ItemIndex :=0 ; except MessageDlg(连接数据库出错!,mtError,mbok,0); end;end; 提高用户界面可操作性的相关的代码。/在密码输入框中的回车操作被视为【确定】按纽的单击动作procedure TfrmLogin.edtPasswordKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin if Key = 13 then btnOKClick(Sender);end;procedure TfrmLgin.FormShow(Sender:TObject);begin edtPpassword.SetFocus;end5.4权限管理模块(uRightSetting.dfm)图5.4权限管理模块窗口权限管理模块负责对操作人员基本信息的建立,以及对操作人员的权限进行基本维护,不同权限的操作人员可以使用的模块范围不一样。权限管理模块功能树如图所示。增加新的操作人员 编辑操作人员权限和设置口令 权限管理 删除指定的操作人员 5.4.1 权限管理模块实现3个主要功能:增加新的操作人员,编辑操作人员权限和设置口令,删除指定的操作人员。5.4.2权限管理模块的窗体设计效果如图所示。5.4.3增加新的操作人员的处理。 指定“新建用户”选择框为选择状态。 输入用户名称,用户口令和权限的类别。 确认操作 完成对数据库中操作人员表的相应操作。5.4.4编辑操作人员权限的处理 在“用户列表”中选择需要编辑的用户 输入新的用户口令和权限的类别 确认操作 完成对数据库中操作人员表的相应操作5.4.5删除指定的操作人员的处理 指定“用户列表”中某一操作人员 删除操作 完成对数据库中的操作人员表的相应操作5.4.6权限管理模块的主要代码(uRightsSetting.pas) 该单元使用的其他单元文件:uses Main,uPublic,uData. 添加操作人员或编辑某操作人员的相关属性。流程:检查当前的状态为添加或者编辑;如果为添加装备,先检查用户名称是否已经存在,然后插入新的用户;如果为编辑状态,更新用户信息;跟该相关控件的状态。/添加或者修改用户信息/添加或者修改用户信息procedure TfrmRightSetting.btnOKClick(Sender: TObject);begin /添加新的用户 if chkNewuser.Checked then begin if CheckExistUserName(edtUsername.Text) then begin MessageDlg(此用户已经存在,mtError,mbok,0); Exit; end; try InsUser(edtUsername.Text,edtPassword.Text,cmbLevel.ItemIndex); except MessageDlg(新建用户出错,mtError,mbok,0); Exit; end; end;/修改用户信息 if chkNewuser.Checked=false then begin try UpdateUser(edtUsername.Text,edtPassword.Text,cmbLevel.ItemIndex); except MessageDlg(修改用户出错,mtError,mbok,0); Exit; end; end; edtUsername.Text := ; edtPassword.Text := ; cmbLevel.ItemIndex := 0; RefreshUser;end; 删除指定的操作人员。流程:判断“用户列表”中的每行是否被选择;如果被选择,删除该用户;如果删除失败,提示用户。 /在操作者表中delete特定的用户procedure TfrmRightSetting.DelUser(UserName: string);var Query : TADOQuery;begin Query := TADOQuery.Create(nil); Query.Connection := dmPer.acPer ; Query.SQL.Add(delete from Operator where UserName =:UserName); Query.Parameters.ParamByName(UserName).value:= UserName; Query.ExecSQL; Query.Free;end;/删除指定用户procedure TfrmRightSetting.btnDeleteClick(Sender: TObject);var i : integer;begin for i := ListView1.Items.Count -1 downto 0 do if ListView1.Itemsi.Selected then try DelUser(ListView1.Itemsi.Caption); ListView1.Items.Delete(i); except MessageDlg(删除用户出错,mtError,mbok,0); end;end; 窗体初始化时需要完成的一些工作。 procedure TfrmRightSetting.FormCreate(Sender: TObject);begin try RefreshUser; except ListView1.Items.Clear; MessageDlg(得到用户信息出错,mtError,mbok,0); end; cmbLevel.ItemIndex := 0;end;退出权限设置窗体。procedure TfrmRightSetting.btnCancelClick(Sender: TObject);begin close;end; 提高和完善界面可操作性的相关代码。/新建用户时,可以对用户编辑框进行编辑,反之,不可以编辑。procedure TfrmRightSetting.chkNewUserClick(Sender: TObject);begin if chkNewuser.Checked = true then begin edtUsername.Enabled :=true; edtUsername.Text := ; edtPassword.Text := ; end; if chkNewuser.Checked = false then begin edtUsername.Enabled := false; edtUsername.Text := ; edtPassword.Text := ; end;end;5.5 部门设置模块(uDep.dfm)图5.5 部门设置模块部门设置模块负责对部门基本信息的维护,包括部门信息的新建,编辑和删除,同时完成对部门的排序指定。部门设置模块功能树如图所示。增加新的部门信息 编辑部门信息 部门设置 删除部门信息 部门排序 5.5.1 部门设置模块实现4个主要功能:增加新的部门信息,编辑部门信息删除部门信息,部门排序。5.5.2功能:从部门信息表中读取已有的相关部门信息,同时实现对部门信息的新增记录,更新记录,删除记录以及对部门进行排序的工作。5.5.3输入:部门名称和部门描叙,读取部门信息表中的已有记录。5.5.4处理: 部门设置窗体启动。 从部门信息表中读取所有的记录,并进行显示。 用户选择完成部门信息的新增记录,更新记录,删除记录,部门排序工作。 输出:对部门信息表进行记录修改。5.5.5部门设置模块的主代码(uDep.pas) 该单元使用的其他单元文件:udata。 该单元使用的数据库控件:aqdep(TADOQuery),该控件与部门信息表进行关联。 添加新的部门信息记录操作。添加过程的两个步骤:一是是相关的数据库绑定控件处于添加状态,而是问成事务提交。为实现这种步骤,我们使用下面的流程。处理添加信息的流程:判断当前状态是否为“添加”或“提交”;如果为“添加”,相关绑定控件指定为添加状态,同时完成一些控件的设置,以防止用户的错误操作;如果为“提交”,先判断关键字段是否为空,然后检查关键字段的否已经重复,如果不为空或重复,则在数据库中添加新的记录,同时完成相关控件的设置,否则提示用户。/添加部门操作procedure TfrmDep.btnAppendClick(Sender: TObject);var queryc, queryt: TADOQuery;begin if btnAppend.Caption = 添 加 then begin dbedep.SetFocus; aqdep.Append; btnAppend.Caption := 提 交; btnModify.Caption := 取 消; btnup.Visible := false; btndown.Visible := false; btnDelete.Visible := false; end else begin if dbedep.Text then begin queryc := TADOquery.Create(self); queryc.Connection:= dmper.acper; queryc.SQL.Text := select * from dept where dep= + dbedep.Text + ; queryc.open; if not queryc.Eof then begin MessageBox(handle, 此部门已存在!, 提示, mb_IconInformation + mb_Ok); aqdep.Cancel; exit; end else begin queryt := TADOquery.Create(nil); Try queryt.Connection:= dmper.acper; queryt.SQL.Text := update dept set ornum=ornum+1; queryt.ExecSQL; finally FreeAndNil(queryt); end; aqdep.Post; btnAppend.Caption := 添 加; btnModify.Caption := 更 新; btnup.Visible := true; btndown.Visible := true; btnDelete.Visible := true; end; end else begin MessageBox(handle, 请输入部门名!, 提示, mb_IconInformation + mb_Ok); dbedep.SetFocus; exit end; end;end; 修改部门信息记录操作。在添加操作中,有可能把【更新】按纽设置为取消添加操作的按纽,对于这种情况,我们需要作如下处理。处理修改部门信息的流程:判断【更新】按纽状态为“更新”或者“取消”;如果为更新,则为相关的数据库绑定控件进行编辑和提交处理;如果为“取消”,取消当前的数据库添加事务,完成相关控件的状态设置。 procedure TfrmDep.btnModifyClick(Sender: TObject);begin if btnModify.Caption =更 新 then begin aqdep.Edit; aqdep.Post; end else begin aqdep.Cancel; btnAppend.Caption := 添 加; btnModify.Caption := 更 新; btnup.Visible := true; btndown.Visible := true; btnDelete.Visible := true; end;end; 删除部门信息记录操作。处理删除部门信息的流程:提示用户;删除相关的记录;完成其余部门信息的一个排序工作。procedure TfrmDep.btnDeleteClick(Sender: TObject);var ornum: integer;begin if MessageBox(handle, 真的要删除此部门么?, 提示, mb_IconQuestion + mb_YesNo) = idYes then begin ornum := aqdep.FieldByName(ornum).AsInteger; aqdep.Delete; aqdep.Close; aqdep.SQL.Clear; aqdep.sql.add(update dept set ornum=ornum-1 where ornum + inttostr(ornum); aqdep.ExecSQL; aqdep.Close; aqdep.SQL.Clear; aqdep.sql.Text := select * from dept order by ornum; aqdep.Open; end;end; 排序处理:对每一个部门,我们指定一个顺序号,以方便在部门显示时,可以体现不同部门的先后顺序。每一个部门有一个顺序号,我门可以指定该部门在所有部门中的顺序,实现方式是通过往前和向后移动记录来实现。a) 部门的排序往前处理: procedure TfrmDep.btnUpClick(Sender: TObject);var id, ornum: integer;begin id := aqdep.FieldByName(id).AsInteger; ornum := aqdep.FieldByName(ornum).AsInteger - 1; aqdep.Close; aqdep.SQL.Clear; aqdep.sql.add(update dept set ornum=ornum-1 where id= + inttostr(id); aqdep.ExecSQL; aqdep.Close; aqdep.SQL.Clear; aqdep.sql.add(update dept set ornum=ornum+1 where id + inttostr(id) + and ornum= + inttostr(ornum); aqdep.ExecSQL; aqdep.Close; aqdep.SQL.Clear; aqdep.sql.Text := select * from dept order by ornum; aqdep.Open; aqdep.Locate(id, id, );end;b)部门的排序向后处理: procedure TfrmDep.btnDownClick(Sender: TObject);var id, ornum: integer;begin id := aqdep.FieldByName(id).AsInteger; ornum := aqdep.FieldByName(ornum).AsInteger + 1; aqdep.Close; aqdep.SQL.Clear; aqdep.sql.add(update dept set ornum=ornum+1 where id= + inttostr(id); aqdep.ExecSQL; aqdep.Close; aqdep.SQL.Clear; aqdep.sql.add(update dept set ornum=ornum-1 where id + inttostr(id) + and ornum= + inttostr(ornum); aqdep.ExecSQL; aqdep.Close; aqdep.SQL.Clear; aqdep.sql.Text := select * from dept order by ornum; aqdep.Open; aqdep.Locate(id, id, );end;对于部门信息记录的特殊位置,如第一个位置和作后一个位置,向前排序和向后排序不能完成,对此,我们进行屏蔽。Procedure TfrmDep.dsdepDataChange(Sender:TObject;field:TFiel);Begin If aqdep.RecNo=2 thenBtnup.Enabled:=falseElse Btndown.Enabled:=true;End; 退出部门设置模块的处理:Procedure TfrmDep.btnCancelClick(Sender:TPbject);Begin Close; Aqdep.Free;End;5.6 员工档案管理模块(frmStaInfo.dfm)图5.6员工信息管理窗口员工档案管理模块主要是实现对员工相关信息的录入工作,包括员工基本档案,员工工作禁例,员工家庭成员,员工的奖惩记录,员工的培训经历的录入,编辑和删除这些主要功能,同时实现对员工信息的浏览和查询功能。5.6.1员工档案管理模块功能树如图增加新的员工档案信息编辑某员工档案信息档案管理 删除某员工档案员工信息浏览 员工信息查询图表5.6.1员工档案管理模块功能树 5.6.2工档案管理模块实现5个主要功能:增加新的员工档案信息,编辑某员工档案信息,删除某员工档案,员工信息查询和浏览。5.6.3员工档案管理模块的窗体设计效果所示。5.6.4该单元使用的其他单元文件:main.uData,uglobal,udep。5.6.5档案管理窗体的部门树结构的构造和处理。界面处理时,有一个非常重要的工作是对窗体中的部门树进行构造,同时需要和相关的员工信息进行关联,为此,我们建立了一个一员工为树叶的树状部门结构,其流程如下: 处理:从部门信息表中读取部门信息,从员工信息表中读取员工信息,依据员工表中的部门字段进行判断,来建立一个以员工为叶节点的树结构。 字定义结构Psid.该结构用来存取树结构的节点信息,以方便对树结构中信息的读取: 生成和释放树结构的主要代码。/根据部门名称生成一个节点为员工的树结构 procedure TfrmStainfo.DrawTree;var aqm01, aqm02: TADOQuery; i, j: integer; nodeo, nodep: TTreeNode; sid: Psid;begin tvper.Items.Clear; aqm01 := TADOQuery.Create(nil); aqm01.Connection := dmper.acper; aqm01.Close; aqm01.sql.Clear; aqm01.SQL.Text := select dep from dept order by ornum; aqm01.Open; aqm02 := TADOQuery.Create(nil); aqm02.Connection := dmper.acper; if not aqm01.Eof then begin tvper.AutoExpand := true; tvper.ReadOnly := true; nodeo := tvper.Items.AddFirst(nil, 公司); for i := 0 to aqm01.RecordCount - 1 do begin nodep := tvper.Items.AddChild(nodeo, aqm01.FieldByName(dep).Asstring); aqm02.Close; aqm02.SQL.Clear; aqm02.SQL.Text := select id, stano, name, ename from stainfo where dep = + aqm01.FieldByName(dep).Value + order by name; aqm02.Open; if not aqm02.Eof then for j := 0 to aqm02.RecordCount - 1 do begin New(sid); sid.id := StrToInt(aqm02.FieldByName(id).AsString); sid.sno := aqm02.FieldByName(stano).AsString; sid.sen := aqm02.FieldByName(ename).AsString; tvper.Items.AddChildObject(nodep, aqm02.FieldByName(name).AsString, sid); aqm02.Next; end; aqm01.Next; end; end; aqm02.Free; aqm01.Free; tvper.SetFocus;end;procedure TfrmStainfo.FreeTree;var i: integer;begin for i := 0 to tvper.Items.Count - 1 do Dispose(tvper.Itemsi.data);end;5.6.6 增加新的员工档案信息处理过程:设置当前控件的状态,使得该状态下只能进行添加信息或取消添加两种操作。如果用户在添加信息后选择保存操作,那么首先检查添加的信息是否有误,工号是否重复,关键字段填写格式是否正确。如果填写无误,则保存新的员工档案信息,同时提示用户 主要代码。/添加档案信息的处理 procedure TfrmStainfo.btnAppendClick(Sender: TObject);var aqt: TADOQuery;begin /添加操作的第一步是使当前模块处于添加记录状态 if btnAppend.Caption = 添 加 then begin btnAppend.Caption := 提 交; btnprint.Caption := 取 消; btnModify.Visible := false; btnSearch.Visible := false; btnPre.Visible := false; btnNext.Visible := false; btnDelete.Visible := false; btnCancel.Visible := false; if pcsta.ActivePageIndex = 0 then /添加操作的第二步是检查添加信息是否正确,同时完成对数据库添加记录的操作 Begin /个人档案 if pcsta.ActivePageIndex = 0 then begin if (trim(dedtstano.Text) ) and (trim(dedtname.Text) ) and (trim(dcbodep.Text) ) then begin aqt := TADOQuery.Create(nil); aqt.Connection := dmper.acper; aqt.SQL.Text := select * from stainfo where stano= + trim(dedtstano.Text) + ; aqt.Open; if not aqt.Eof then begin MessageBox(handle, 此工号已存在,请另输入!, 提示, mb_IconWarning + mb_Ok); dedtstano.SetFocus; exit; end else begin aqsta.FieldByName(ename).AsString := GetEn(dedtname.Text); aqsta.post; DrawTree; aqsta.Append; end; aqt.Free; end else begin MessageBox(handle, 工号和姓名及部门不能为空!, 提示, mb_IconWarning + mb_Ok); if dedtstano.Text = then dedtstano.SetFocus else if dedtname.Text = then dedtname.SetFocus else dcbodep.SetFocus; exit; end; end elsebegin /工作经历 if pcsta.ActivePageIndex = 1 then if (trim(dedtsdate.Text) = ) or (trim(dedtedate.Text) = ) or (trim(dedtcom.Text) = ) then begin MessageBox(handle, 开始时间,结束时间和公司不能为空!, 提示, mb_IconWarning + mb_Ok); if trim(dedtsdate.Text) = then dedtsdate.SetFocus else if trim(dedtedate.Text) = then dedtedate.SetFocus else dedtcom.SetFocus; exit; end; /家庭关系 if pcsta.ActivePageIndex = 2 then if (trim(dbename.Text) = ) or (trim(dbcfami.Text) = ) then begin MessageBox(handle, 家庭成员姓名和关系不能为空!, 提示, mb_IconWarning + mb_Ok); if trim(dbename.Text) = then dbename.SetFocus else dbcfami.SetFocus; exit; end; / 奖惩记录 if pcsta.ActivePageIndex = 3 then if (trim(dbcsort.Text) = ) or (trim(dbetopic.Text) = ) then begin MessageBox(handle, 类别和事件不能为空!, 提示, mb_IconWarning + mb_Ok); if trim(dbcsort.Text) = then dbcsort.SetFocus else dbetopic.SetFocus; exit; end; /培训经历 if pcsta.ActivePageIndex = 4 then if (trim(dbecourse.Text) = ) or (trim(dbedlimit.Text) = ) then begin MessageBox(handle, 培训课程和期限不能为空!, 提示, mb_IconWarning + mb_Ok); if trim(dbecourse.Text) = then dbecourse.SetFocus else dbedlimit.SetFocus; exit; end; aqo.FieldByName(sid).AsInteger := id; aqo.post; aqo.Append; end; end;end;5.6.7 通过汉字获取拼音的处理。本系统中的一个特点就是可以通过拼音进行查询档案的操作,为此,我们需要首先通过员工的名字来获得拼音信息。函数GetEn把每一个汉字拼音的第一个字母进行组合,获得第一个汉字拼音字母的方法参见函数GetEnChar,并将该字母组合返回给调用者。Function GetEn(CnString: string): string;var i, len: integer;begin CnString := StringReplace(CnString, , , rfReplaceAll); /删除空格 len := Length(CnString) - Length(WideString(CnString); /汉字个数 For i :=1 to len do result := result + GetEnChar(copy(CnString, 2*i-1, 2);end;函数GetEnChar获得第一个汉字拼音字母,通过有规律的汉字码的区间来判断, 对区间内的汉字分别返回相应的字符,对于区间外的汉字或字符,则不予处理。其汉字与首字母的分布如下,如果需要作进一步的拼音信息读取,请参考相关资料。function GetEnChar(cnchar: string): char;begin case Word(cnchar1) shl 8 + Word(cnchar2) of $B0A1.$B0C4: result := a; $B0C5.$B2C0: result := b; $B2C1.$B4ED: result := c; $B4EE.$B6E9: result := d; $B6EA.$B7A1: result := e; $B7A2.$B8C0: result := f; $B8C1.$B9FD: result := g; $B9FE.$BBF6: result := h; $BBF7.$BFA5: result := j; $BFA6.$C0AB: result := k; $C0AC.$C2E7: result := l; $C2E8.$C4C2: result := m; $C4C3.$C5B5: result := n; $C5B6.$C5BD: result := o; $C5BE.$C6D9: result := p; $C6DA.$C8BA: result := q; $C8BB.$C8F5: result := r; $C8F6.$CBF9: result := s; $CBFA.$CDD9: result := t; $CDDA.$CEF3: result := w; $CEF4.$D188: result := x; $D1B9.$D4D0: result := y; $D4D1.$D7F9: result := z; else result := char(0); end;end; 5.6.8 取消操作。如果我们放弃员工信息添加的工作,则需要对相关的一些控件进行设置,以恢复到添加新的员工档案信息前的状态。procedure TfrmStainfo.btnPrintClick(Sender: TObject);begin if btnprint.Caption = 打 印 then begin aqsta.Cancel; btnprint.Caption := 打 印; btnAppend.Caption := 添 加; btnModify.Visible := true; btnSearch.Visible := true; btnPre.Visible := true; btnNext.Visible := true; btnDelete.Visible := true; btnCancel.Visible := true; end;end; 5.6.9编辑员工档案信息的过程 流程:判断当前编辑的信息是基本信息还是其他信息;如果是基本档案信息,则相应的数据库绑定控件编辑并提交,并提示用户;如果是其他信息,则相应的数据库绑定控件编辑并提交,并提示用户 主要代码。在不同的属性页,因为其绑定的数据库控件不一样,因此需要作不同的处理。procedure TfrmStainfo.btnModifyClick(Sender: TObject);begin if pcsta.ActivePageIndex = 0 then begin aqsta.Edit; aqsta.Post; MessageBox(self.Handle, 信息更新成功!, 提示, mb_IconInformation + mb_Ok); end else begin aqo.Edit; aqo.Post; MessageBox(self.Handle, 信息更新成功!, 提示, mb_IconInformation + mb_Ok); end;end; 5.6.10删除员工档案信息的处理 流程:判断当前删除的信息是基本信息还是其他信息;如果是基本档案信息,则相应的数据库绑定控件进行删除操作,同时更新部门树结构,对树结构进行重新排列,并提示用户;如果是其他信息,则相应的数据库绑定控件进行删除操作,并提示用户 主要代码procedure TfrmStainfo.btnDeleteClick(Sender: TObject);var sid: integer;begin if pcsta.ActivePageIndex = 0 then begin if MessageBox(handle, 真的要删除此员工记录么?, 提示, mb_IconQuestion + mb_OkCancel) = idOk then if aqsta.Active = true then begin sid := tvper.selected.AbsoluteIndex; aqsta.Delete; sleep(200); DrawTree; if sid - 1 0 then tvper.Selected := tvper.Itemssid - 1 else if sid tvper.Items.Count then tvper.Selected := tvper.Itemssid + 1 end else MessageBox(handle, 还没有记录!, 提示, mb_IconWarning + mb_Ok); end else begin if MessageBox(handle, 真的要删除此记录么?, 提示, mb_IconQuestion + mb_OkCancel) = idOk then aqo.Delete; end;end; 5.6.11 部门树结构的相关操作。我们在前面建立了以员工为节点的一个部门树结构,为了方便用户操作,我们还需要对该树结构进行一些优化,从而提供信息录入的效率和便捷性。 当该树结构发生变化时,我们需要重新整理该树结构,同时,考虑到录入档案信息的属性页与之应有对应关系,在调整树结构的同时,也应该对相应的属性页的显示进行调整,以确认两者是匹配的。 procedure TfrmStainfo.tvperChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);begin if btnDelete.Caption 删 除 then btnDeleteClick(nil); if node.IsFirstNode then gbper.Caption := node.Text; if not node.IsFirstNode and (node.HasChildren) then gbper.Caption := 部门: + node.Text; if not node.HasChildren then begin if node.data nil then begin gbper.Caption := ; gbper.Caption := 员工: + node.Parent.Text + - + node.Text; id := Integer(Psid(node.data).id); btnediti.Enabled := true; btndeli.Enabled := true; if pcsta.ActivePageIndex = 0 then tsinfoShow(nil); if pcsta.ActivePageIndex = 1 then tsexperShow(nil); if pcsta.ActivePageIndex = 2 then tsfamiShow(nil); if pcsta.ActivePageIndex = 3 then tsapShow(nil); if pcsta.ActivePageIndex = 4 then tstrainShow(nil); end else begin btnediti.Enabled := false; btndeli.Enabled := false; if pcsta.ActivePageIndex 0 then btnAppend.Enabled := false else btnAppend.Enabled := true end; end else begin btnediti.Enabled := false; btndeli.Enabled := false; if pcsta.ActivePageIndex 0 then btnAppend.Enabled := false else btnAppend.Enabled := true end;end; 树结构被点击的处理:判断被点击的是否是叶节点,如果是,则根据属性页的当前情况,在属性页中分别进行员工档案相关信息的显示。 procedure TfrmStainfo.tvperClick(Sender: TObject);begin if not tvper.Selected.HasChildren then begin if tvper.selected.data nil then begin id := Integer(Psid(tvper.selected.data).id); btnediti.Enabled := true; btndeli.Enabled := true;if pcsta.ActivePageIndex = 0 then tsinfoShow(nil); if pcsta.ActivePageIndex = 1 then tsexperShow(nil); if pcsta.ActivePageIndex = 2 then tsfamiShow(nil); if pcsta.ActivePageIndex = 3 then tsapShow(nil); if pcsta.ActivePageIndex = 4 then tstrainShow(nil); end endend;5.6.12 树结构处理中调用的相关的过程。 在属性页中显示基本信息: procedure TfrmStainfo.tsinfoShow(Sender: TObject);var i: integer; aqDep: TADOQuery; begin if btnAppend.Enabled = false then btnAppend.Enabled := true; aqDep := TADOQuery.Create(nil); aqDep.Connection := dmPer.acPer; aqDep.SQL.Text := select dep from dept order by ornum; aqDep if not aqDep.Eof then begin dcbodep.Clear; for i :=0 to aqdep.RecordCount - 1 do begin dcbodep.AddItem(aqdep.FieldByName(dep).AsString, nil); aqdep.next; end; end; aqsta.close; aqsta.SQL.Clear; aqsta.SQL.Text := select * from stainfo where id= + IntToStr(id); aqsta.Open; try if FileExists(ExtractFilePath(Application.ExeName) + images + aqsta.FieldByName(image).AsString) then imgi.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + images + aqsta.FieldByName(image).AsString) else imgi.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + imagesimgd.jpg); except end; aqsta.Refresh;end;在属性页中显示工作经历:procedure TfrmStainfo.tsexperShow(Sender: TObject);begin FreeTSfami; FreeTSap; FreeTStrain; if btnDelete.Caption = 取 消 then btnDeleteClick(nil); if (tvper.Selected.HasChildren) or (tvper.Selected.Data = nil) then btnAppend.Enabled := false else btnAppend.Enabled := true; dedtsdate.SetFocus; aqo.close; aqo.SQL.Clear; aqo.SQL.Text := select * from wexper where sid= + IntToStr(id); aqo.Open; dbgexper.DataSource := dso; dedtsdate.DataSource := dso; dedtsdate.DataField := sdate; dedtedate.DataSource := dso; dedtedate.DataField := edate; dedtcom.DataSource := dso; dedtcom.DataField := company; dedtdep.DataSource := dso; dedtdep.DataField := dep; dedtdutyd.DataSource := dso; dedtdutyd.DataField := duty;end;在属性页中显示家庭关系信息: procedure TfrmStainfo.tsfamiShow(Sender: TObject);begin FreeTSexper; FreeTSap; FreeTStrain; if btnDelete.Caption = 取 消 then btnDeleteClick(nil); if (tvper.Selected.HasChildren) or (tvper.Selected.Data = nil) then btnAppend.Enabled := false else btnAppend.Enabled := true; dbename.SetFocus; aqo.close; aqo.SQL.Clear; aqo.SQL.Text := select * from family where sid= + IntToStr(id); aqo.Open; dbgfami.DataSource := dso; dbename.DataSource := dso; dbename.DataField := name; dbcfami.DataSource := dso; dbcfami.DataField := fami; dbetel.DataSource := dso; dbetel.DataField := tel; dbecom.DataSource := dso; dbecom.DataField := com; dbedes.DataSource := dso; dbedes.DataField := des;end; 在属性页中显示奖惩记录: procedure TfrmStainfo.tsapShow(Sender: TObject);begin FreeTSexper; FreeTSfami; FreeTStrain; if btnDelete.Caption = 取 消 then btnDeleteClick(nil); if (tvper.Selected.HasChildren) or (tvper.Selected.Data = nil) then btnAppend.Enabled := false else btnAppend.Enabled := true; dbcsort.SetFocus; aqo.close; aqo.SQL.Clear; aqo.SQL.Text := select * from aandp where sid= + IntToStr(id); aqo.Open; dbgap.DataSource := dso; dbcsort.DataSource := dso; dbcsort.DataField := sort; dbetopic.DataSource := dso; dbetopic.DataField := topic; dbeddep.DataSource := dso; dbeddep.DataField := dep; dbedate.DataSource := dso; dbedate.DataField := mdate; dbmdes.DataSource := dso; dbmdes.DataField := des;end;在属性页中显示培训记录 procedure TfrmStainfo.tstrainShow(Sender: TObject);begin FreeTSexper; FreeTSfami; FreeTSap; if btnDelete.Caption = 取 消 then btnDeleteClick(nil); if (tvper.Selected.HasChildren) or (tvper.Selected.Data = nil) then btnAppend.Enabled := false else btnAppend.Enabled := true; dbecourse.SetFocus; aqo.close; aqo.SQL.Clear; aqo.SQL.Text := select * from train where sid= + IntToStr(id); aqo.Open; dbgtrain.DataSource := dso; dbecourse.DataSource := dso; dbecourse.DataField := course; dbedlimit.DataSource := dso; dbedlimit.DataField := dlimit; dbestdate.DataSource := dso; dbestdate.DataField := sdate; dbeenddate.DataSource := dso; dbeenddate.DataField := edate; dbetrcom.DataSource := dso; dbetrcom.DataField := trcom; dbecerti.DataSource := dso; dbecerti.DataField := certi;end;/初始化工作经历属性页中的相关数据控件procedure TfrmStainfo.FreeTSexper;begin dbgexper.DataSource := nil; dedtsdate.DataSource := nil; dedtsdate.DataField := ; dedtedate.DataSource := nil; dedtedate.DataField := ; dedtcom.DataSource := nil; dedtcom.DataField := ; dedtdep.DataSource := nil; dedtdep.DataField := ; dedtdutyd.DataSource := nil; dedtdutyd.DataField := ;end;/初始化家庭关系属性页中的相关数据控件procedure TfrmStainfo.FreeTSfami;begin dbgfami.DataSource := nil; dbename.DataSource := nil; dbename.DataField := ; dbcfami.DataSource := nil; dbcfami.DataField := ; dbetel.DataSource := nil; dbetel.DataField := ; dbecom.DataSource := nil; dbecom.DataField := ; dbedes.DataSource := nil; dbedes.DataField := ;end;/初始化奖惩记录属性页中的相关数据控件procedure TfrmStainfo.FreeTSap;begin dbgap.DataSource := nil; dbcsort.DataSource := nil; dbcsort.DataField := ; dbetopic.DataSource := nil; dbetopic.DataField := ; dbeddep.DataSource := nil; dbeddep.DataField := ; dbedate.DataSource := nil; dbedate.DataField := ; dbmdes.DataSource := nil; dbmdes.DataField := ;end;/初始化培训经历属性页中的相关数据控件procedure TfrmStainfo.FreeTStrain;begin dbgtrain.DataSource := nil; dbecourse.DataSource := nil; dbecourse.DataField := ; dbedlimit.DataSource := nil; dbedlimit.DataField := ; dbestdate.DataSource := nil; dbestdate.DataField := ; dbeenddate.DataSource := nil; dbeenddate.DataField := ; dbetrcom.DataSource := nil; dbetrcom.DataField := ; dbecerti.DataSource := nil; dbecerti.DataField := ;end; 5.6.13 员工档案中图片信息的相关操作。档案信息中还包含图片信息,对于图片信息的处理,如果编辑或增加员工档案时,提供了图片,则进行保存,否则,使用默认的图片,同时需要对员工信息表中的相关信息进行更新,并提示用户。procedure TfrmStainfo.btneditiClick(Sender: TObject);var aqimg: TADOQuery; imgstr, path: string;begin if odimg.Execute then begin imgstr := ExtractFileName(odimg.FileName); path := ExtractFilePath(Application.ExeName); if not FileExists(path + images + imgstr) then begin aqimg := TADOQuery.Create(nil); aqimg.Connection := dmper.acper; aqimg.Close; aqimg.sql.Clear; aqimg.SQL.Text := select image from stainfo where id= + IntToStr(id); aqimg.open; if FileExists(path + images + aqimg.Fieldbyname(image).AsString) then DeleteFile(path + images + aqimg.Fieldbyname(image).AsString); CopyFile(Pchar(odimg.FileName), pchar(path + images + imgstr), false); aqimg.Close; aqimg.sql.Clear; aqimg.SQL.Text := update stainfo set image= + imgstr + where id= + IntToStr(id); aqimg.ExecSQL; MessageBox(handle, 照片更新成功!, 提示, mb_IconWarning + mb_Ok); imgi.Picture.LoadFromFile(path + images + imgstr); FreeAndNil(aqimg); end else begin MessageBox(handle, 此照片文件名已存在,请改名先!, 提示, mb_IconWarning + mb_Ok); exit; end; end;end;如果用户要删除某员工的图片信息,则首先提示用户;如果用户确认,则从员工信息表中读取图片名称信息,判断该员工是否有图片;如果有,进行删除,同时进行提示,如果没有则提示用户。 procedure TfrmStainfo.btndeliClick(Sender: TObject);var aqimg: TADOQuery; path: string;begin if MessageBox(handle, 真的要删除此员工照片吗?, 提示, mb_IconQuestion + mb_OkCancel) = idOk then begin path := ExtractFilePath(Application.ExeName); aqimg := TADOQuery.Create(nil); aqimg.Connection := dmper.acper; aqimg.Close; aqimg.sql.Clear; aqimg.SQL.Text := select image from stainfo where id= + IntToStr(id); aqimg.open; if FileExists(path + images + aqimg.Fieldbyname(image).AsString) then begin deletefile(path + images + aqimg.Fieldbyname(image).AsString); MessageBox(handle, 照片删除成功!, 提示, mb_IconWarning + mb_Ok); imgi.Picture.LoadFromFile(path + imagesimgd.jpg); end else MessageBox(handle, 没有此员工照片!, 提示, mb_IconWarning + mb_Ok); end;end; 5.6.14 员工档案信息的浏览操作。浏览操作包括向后浏览和向前浏览两个操作。向后浏览:判断当前员工的树结构中的相应位置,如果不是做后一个位置,那么找到该位置的下一个节点,并点击,从而完成向后浏览员工档案的操作。 procedure TfrmStainfo.btnNextClick(Sender: TObject);begin if tvper.Selected.AbsoluteIndex tvper.Items.Count - 1 then begin tvper.Selected := tvper.Itemstvper.Selected.AbsoluteIndex + 1; if tvper.Selected.Data nil then begin tvperClick(nil); tvper.SetFocus; end else btnnextClick(nil); end;end;向前浏览:判断当前员工的主节点中的相应位置,如果不是最前面的一个位置,那么到该位置的前面一个节点,并点击,从而完成向前浏览员工档案的操作。 procedure TfrmStainfo.btnPreClick(Sender: TObject);begin if tvper.Selected.AbsoluteIndex 0 then begin tvper.Selected := tvper.Itemstvper.Selected.AbsoluteIndex - 1; if tvper.Selected.Data nil then begin tvperClick(nil); tvper.SetFocus; end else btnPreClick(nil); end;end; 5.6.15 窗体相关的操作。窗体创建时,提示基本档案信息。Procedure TfrmStainfl.FormCreate(Sender:TObject);Begin tsinfoShow(nil);end;窗体显示时,建立树结构,并显示基本档案信息Procedure TfrmStainfo.FormShow(Sender:TObject);Begin Self.DoubleBuffered:=true; DrawTree; Pcsta.ActivePageIndex:=0;End;窗体激活时,显示基本档案信息Procedure TfrmStainfo.FormActivate(Sender:TObject);Begin Pcsta.ActivePage:=tsinfo;End; 5.6.16 员工档案信息查询的处理。对于员工档案信息查询,我们使用了单独的窗体来完成这一功能。 员工档案信息对查询窗体的调用。Procedure TfrmStainfo.btnSearchClick(Sender:TObject);Begin frmFind.show;end; 员工档案信息查询窗体的效果如图所示。图5.6.16员工档案信息查询窗口 查询窗体的处理过程:通过用户输入的关键字,我们可以在员工档案模块中通过树结构来完成查询操作,同时可以通过对树结构发送消息,来完成对查找到的员工信息的定位。 查询处理的主要代码(uFind.pas)。 procedure Tfrmfind.btnOKClick(Sender: TObject);var i: integer;begin if edtinqu.Text then begin with frmstainfo do begin tvper.SetFocus;/通过工号来进行查询if rbstano.Checked = true then begin for i := fid to tvper.Items.Count - 1 do begin fid := fid + 1; if tvper.Itemsi.data nil then if Psid(tvper.Itemsi.Data).sno = edtinqu.Text then begin tvper.Itemsi.Selected := true; tvper.Setfocus; break; end; end; if i = tvper.Items.Count then begin fid := 0; /MessageBox(handle, 已到了末尾!, 提示, mb_IconInformation + mb_Ok); MessageDlg(已到了末尾!, mtInformation, mbOk, 0); end; end/通过名字来进行查询else if rbname.Checked = true then begin for i := fid to tvper.Items.Count - 1 do begin fid := fid + 1; if tvper.Itemsi.data nil then if tvper.Itemsi.text = edtinqu.Text then begin tvper.Itemsi.Selected := true; tvper.Setfocus; break; end; end; if i = tvper.Items.Count then begin fid := 0; /MessageBox(handle, 已到了末尾!, 提示, mb_IconWarning + mb_Ok); MessageDlg(已到了末尾!, mtInformation, mbOk, 0); end; end else begin for i := fid to tvper.Items.Count - 1 do begin fid := fid + 1; if tvper.Itemsi.data nil then if Psid(tvper.Itemsi.Data).sen = edtinqu.Text then begin tvper.Itemsi.Selected := true; tvper.Setfocus; break; end; end; if i = tvper.Items.Count then begin fid := 0; /MessageBox(handle, 已到了末尾!, 提示, mb_IconWarning + mb_Ok); MessageDlg(已到了末尾!, mtInformation, mbOk, 0); end; end; end; end else begin MessageBox(self.Handle, 请输入查询条件!, 提示, mb_IconInformation + mb_Ok); edtinqu.SetFocus; end;end; 查询窗体的其他处理。我们需要在用户输入时做一些提示,以方便用户,处理如下: procedure Tfrmfind.rbstanoClick(Sender: TObject);begin label3.Caption := 请输入工号:; edtinqu.SetFocus;end;procedure Tfrmfind.rbnameClick(Sender: TObject);begin label3.Caption := 请输入姓名:; edtinqu.SetFocus;end;procedure Tfrmfind.rbenameClick(Sender: TObject);begin label3.Caption := 请输入拼音:; edtinqu.SetFocus;end; 5.6.17 退出员工档案模块的操作。 procedure Tfrmfind.btnCancelClick(Sender: TObject);begin FreeTree; /释放部门树结构 close;end;5.7 人事变更管理模块(uChange.dfm) 图5.7 人事变更管理窗口人事变更管理模块负责对人事变更的情况进行录入,同时可以编辑和删除已有的变更记录,并把变更记录以列表的形式提供给用户。人事变更管理模块功能树如图所。 增加新的人事变更记录 编辑某人事变更记录人事变更管理 删除指定人事变更记录 图表 :人事变更示意图 5.7.1人事变更管理模块实现3个主要功能:增加新的认识变更记录,编辑某人事变更记录,删除指定人事变更记录。5.7.2人事变更管理模块的窗体设计效果如图所示。5.7.3人事变更管理模块的IPO图功能:从人事变更表中读取已有的相关人事变更信息,同时实现对人事变更信息的新增记录,更新记录,删除记录的工作。输入:工号,原部门,新部门,变更时间和变更原因,读取人事变更表中的已有记录。处理: 人事变更窗体启动。 从人事变更表中读取所有的记录,并进行显示。 用户选择完成人事变更的新增记录,更新记录,删除记录工作 输出:对人事变更表进行记录修改。5.7.4人事变更模块的主要代码(uDep.pas) 该单元使用的其他单元文件:udata。 添加新的人事变更信息记录操作。添加过程两个步骤:一是使相关的数据库绑定控件处于添加状态,二是完成事务提交。为实现这种步骤,我们使用下面的流程。 流程:判断当前状态的否为“添加”或“提交”;如果为“添加”,相关绑定控件指定为添加状态,同时完成一些控件的设置,以防止用户的错误操作;如果为“提交”,先判断关键字段是否为空,然后检查关键字段的否已经重复,如果不为空或重复,则在数据库中添加新的记录,同时完成相关控件的设置,否则提示用户。/添加记录的操作procedure TfrmChange.btnAppendClick(Sender: TObject);begin if btnAppend.Caption = 添 加 then begin dbeID.SetFocus; aqChange.Append; btnAppend.Caption := 提 交; btnModify.Caption := 取 消; btnDelete.Visible := false; end else begin if dbeID.Text then begin aqChange.Post; btnAppend.Caption := 添 加; btnModify.Caption := 更 新; btnDelete.Visible := true; end else begin MessageBox(handle, 请输入工号!, 提示, mb_IconInformation + mb_Ok); dbeID.SetFocus; exit end; end;end; 修改人事变更信息记录操作。在添加操作中,有可能吧【更新】按纽设置为取消添加操作的按纽,对于这种情况,我们需要作如下处理: 流程:判断【更新】按纽状态为“更新”或者“取消”;如果为“更新”,则对相关的数据库绑定控件进行编辑和提交处理;如果为“取消”,取消当前的数据库添加事务,完成相关控件的状态设置。/修改记录的操作procedure TfrmChange.btnModifyClick(Sender: TObject);begin if btnModify.Caption =更 新 then begin aqChange.Edit; else begin aqChange.Cancel; btnAppend.Caption := 添 加; btnModify.Caption := 更 新;end;5.7.5删除部门信息记录操作。流程:提示用户;删除相关的记录。/删除记录的操作procedure TfrmChange.btnDeleteClick(Sender: TObject);begin if MessageBox(handle, 真的要删除此变更记录么?, 提示, mb_IconQuestion + mb_YesNo) = idYes then begin aqChange.Delete;end;5.7.6 退出人事变更管理模块。 procedure TfrmChange.btnCancelClick(Sender: TObject);begin close;end;5.8 数据库管理模块(uDBAdmin.dfm)图5.8数据库管理窗口数据库管理模块负责对数据库进行一些简单的管理,通过这些工作来维护数据库的安全和高效。数据库管理模块功能树如图所示。 数据库压缩 数据库备分数据库管理 数据库还原 图表:数据库管理示意图5.8.1 数据库管理模块实现3个主要功能:数据库压缩,数据库备分,数据库还原。5.8.2 数据库管理模块的窗体效果如图所示。5.8.3 数据库管理模块的IPO图。 功能:对数据库进行管理,包括
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:人事档案管理系统设计与实现
链接地址:https://www.renrendoc.com/p-59081421.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!