成人教育毕业论文 (计算机信息管理专业)
人事工资管理系统
班 级
姓 名 姚睿杰 专 业 计算机信息管理 指 导 老 师
成人大专计算机信息管理专业毕业论文
徐州工程学院成人教育学院
二〇一二年三月
摘 要
随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业人事工资的管理势在必行。本系统结合某中型公司实际的人事、财务制度,经过实际的需求分析,采用功能强大的DDLPHI 5做为开发工具、Paradox7做为数据库开发出来的单机版人事管工资理系统。
整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成人事、工资管理的全过程,包括新进员工加入时人事档案的建立、老员工的转出、职位等的变动引起职工信息的修改、员工信息查询、统计等人事管理工作以及新进员工工资的新增、老员工工资修改、出盘、工资短信等工资管理工作。经过实际使用证明,本文所设计的人事工资管理系统可以满足某中型公司人事、工资管理方面的需要。
论文主要介绍了本课题的开发背景,所要完成的功能和开
第 1 页 共 56 页
成人大专计算机信息管理专业毕业论文
发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。
关键词:数据库,Paradox7,Delph 5,出盘,工资短信、人事工资管理
目 录
第一章 绪 论 ................................................................. 4
1.1 课题来源 .............................................................. 4 1.2 开发工具的选择 ........................................................ 5 1.3 本文所作工作 .......................................................... 5 第二章 需求分析 ............................................................... 7
2.1 总体需求调查 .......................................................... 7
2.1.1 组织结构图 ...................................................... 7 2.1.2 系统目标 ............................................................ 7
2.1.3 应用现状调查 .................................................... 7 2.1.4业务总体流程调查 ................................................. 7 2.2系统功能调查 ........................................................... 8
2.2.1人事管理功能 ..................................................... 9 2.2.2工资管理功能 ..................................................... 9 2.2.3系统维护功能 ..................................................... 9 2.3系统功能模块图 ......................................................... 9 第三章 概要设计 .............................................................. 10
3.1概念设计 .............................................................. 10 3.2数据库设计 ............................................................ 12
3.2.1 ygzlb(员工资料表) ............................................ 13 3.2.2 Yhklb用户口令表 ................................................ 13 3.2.3 Ygxjjgb员工薪金结构表 .......................................... 14 3.2.4 Kjcsb控制参数表 ................................................ 14 3.2.5 Jbcsb基本参数表 ................................................ 15
第四章 详细设计 .............................................................. 16
4.1启动界面设计 .......................................................... 16
4.1.1 功能说明 ....................................................... 16
第 2 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.1.2屏幕格式设计 .................................................... 16 4.2 登录窗口设计 ......................................................... 17
4.2.1功能说明 ........................................................ 17 4.2.2屏幕格式设计 .................................................... 17 4.2.3源程序分析 ...................................................... 17 4.3 主窗口设计 ........................................................... 19
4.3.1功能说明 ........................................................ 19 4.3.2屏幕格式设计 .................................................... 19 4.3.3源程序分析 ...................................................... 20 4.4人事管理模块的实现 .................................................... 23
4.4.2员工基本信息维护 ................................................ 26 4.4.3员工基本信息查看: ............................................... 28 4.4.4员工基本信息条件查询 ............................................ 29 4.4.5人事状况曲线: ................................................... 31 4.4.6企业员工花名册: ................................................. 32 4.5 工资管理模块的实现 ................................................... 32
4.5.1出盘 ............................................................ 32 4.5.2员工工资结构调整 ................................................ 46 4.5.3工资短信 ........................................................ 49 4.6系统维护模块设计 ...................................................... 53
4.6.1基本参数维护 .................................................... 53 4.6.2 用户管理 ....................................................... 54 4.7系统其它功能的实现 .................................................... 55
4.7.1 打开计算器 ..................................................... 55 4.7.2打开写字板 ...................................................... 56 4.7.3窗口的层叠、平铺、极小化操作 ................................... 56 4.7.4关于窗口的实现 .................................................. 56
第五章 毕业设计小结 .......................................................... 56
第 3 页 共 56 页
成人大专计算机信息管理专业毕业论文
第一章 绪 论
1.1 课题来源
随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业人事工资的管理势在必行。对于大中型企业来说,利用计算机支持企业高效率完成劳动人事管理的日常事务,是适应现代企业制度要求、推动企业劳动人事管理走向科学化、规范化的必要条件;而工资管理是一项琐碎、复杂而又十分细致的工作,工资计算、发放、核算的工作量很大,一般不允许出错,如果实行手工操作,每月发放工资须手工填制大量的表格,这就会耗费工作人员大量的时间和精力,计算机进行工资发放工作,不仅能够保证工资核算准确无误、快速输出,而且还可以利用计算机对有关工资的各种信息进行统计,服务于财务部门其他方面的核算和财务处理,同时计算机具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人事工资资管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
不同的企业具有不同的人事、工资管理制度,这就决定了不同的企业需要不同的人事工资管理系统。某中型公司以前的所有资料都是用Foxbase来进行管理的,面对目前的实际状况,迫切需要开发一个新系统来适应这一些工作。
第 4 页 共 56 页
成人大专计算机信息管理专业毕业论文
1.2 开发工具的选择
现在,市场上可以选购的应用开发产品很多,流行的也有数十种。目前在我国市场上最为流行、使用最多、最为先进的可用作企业级开发工具的产品有:
Microsoft公司的Visual Basic Microsoft公司的Visual C Borland公司的Delphi Powersoft公司的PowerBulider Java等等
在目前市场上这些众多的程序开发工具中,有些强调程语言的弹性与执行效率;有些则偏重于可视化程序开发工具所带来的便利性与效率的得高,各有各的优点和特色,也满足了不同用户的需求。然而,语言的弹性和工具的便利性是密不可分的,只有便利的工具,却没有弹性的语言作支持,许多特殊化的处理动作必需要耗费数倍的工夫来处理,使得原来所标榜的效率提高的优点失去了作用;相反,如果只强调程语言的弹性,却没有便利的工具作配合,会使一些即使非常简单的界面处理动作,也会严重地浪费程序设计师的宝贵时间。
作为数据库系统的开发,Delphi是一个非常理想选择。Delphi因简单易学、功能强大、编译速度快而从众多的软件开发工具中脱颖而出。它提供了灵活的可视化设计工具,将可视化界面与面向对象技术完善、紧密地结合起来,并封装了Windows编程的复杂性。程序的规模小到简单的个人数据库应用,大到复杂的企业的多层次分布式系统,都可以使用Delphi进行开发,其友好的集成开发界面,可视化的双向开发模式,良好的数据库应用支持高效的程序开发和程序运行,备受广大程序开发人员的好评。尤其是Delphi对数据库应用的强大支持,大大提高了数据库应用软件开发的效率,缩短了开发周期,深受广大数据库应用程序设计人员的喜爱。Delphi为数据库应用开发人员提供了丰富的数据库开发组件,使数据库应用开发功能更强大,控制更灵活,编译后的程序运行速度更快。
本系统采用Dephi 5而不选择Dephi 6、Dephi 7是因为开发移动2000综合业务管理系统的过程中发现其稳定性比较好,所以到现在还用它。
1.3 本文所作工作
第一章 绪论部分 主要叙述课题提出背景、目前应用现状、分析比较当前开
第 5 页 共 56 页
成人大专计算机信息管理专业毕业论文
发工具,数据库技术的比较。
第二章 结合软件工程方法,对系统进行需求分析、功能划分、数据流图设计,并结合数据库原理和功能划分进行ER图的绘制、数据库结构设计,
第三章 根据需求分析的结果,用户概念数据模型表示数据及其相互间的联系。
第四章 根据需求分析的结果,对系统进行详细设计,主要介绍用Delphi和Pradox实现每一个模块的具体功能。
第五章 毕业设计小结,总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向。
第 6 页 共 56 页
成人大专计算机信息管理专业毕业论文
第二章 需求分析
2.1 总体需求调查
2.1.1 组织结构图
某中型公司组织结构图如下
总经理经理室总经理室总工室业务部多经部财务部运维部工程部2.1.2 系统目标
采用公司现有的软硬件软件及科学的管理系统开发方案,建立某中型人事工资管理系统,实现移动人事工资管理的计算机自动化。
系统应符合公司人事、工资管理制度,并达到操作直观、方便、实用、安全等要求。
2.1.3 应用现状调查
目前,公司使用的人事工资管理系统采用的是DOS环境下的Foxbase数据库,界面不友好,不能适应移动公司发展的需要。 2.1.4业务总体流程调查
第 7 页 共 56 页
成人大专计算机信息管理专业毕业论文
开始 维护员工基本信息 维护员工工资信息 数据统计 表格制作出盘 结束
维护员工基本信息:人事管理主要负责人员基本信息的维护,包括新进员工档案的建立,员工信息的修改。
公司工资管理基本流程如下:
数据来源:将各部门送达的员工工资信息包括基本工资、奖金、水电费等作为数据来源,分为新增员工工资数据和老员工每月修改数据。
数据的输入:由工作人员通过新员工本月工资增加和老员工上月工资表修改完成。
数据的统计:由工作人员通过对修改后的上月工资表进行计算得到每个人的实发工资以及总金额。
表格的制作:由工作人员以修改、计算后的在上月工资表为蓝本生成与银行进行数据交换的软件即出盘。同时可打印工资报表。
2.2系统功能调查
整个系统从总体上分为人事管理、工资管理、系统维护三大部分,每一部分应实现的功能如下:
第 8 页 共 56 页
成人大专计算机信息管理专业毕业论文
2.2.1人事管理功能 ➢ 新员工档案的输入:
➢ 员工基本信息维护:包括修改、删除(删除员工只是将该员工登记为无效,并
不要求从表中删除). ➢ 员工基本信息查看:
➢ 员工基本信息查询:支持多条件查询,可以选择某一部门、某一职位、某一
职称、学历、性别等进行查询,也可以组合查询。 ➢ 人事状况曲线: ➢ 企业员工花名册: 2.2.2工资管理功能 ➢ 新员工工资新增: ➢ 员工工资修改:
➢ 出盘:按所规定的格式生成与银行进行数据交换的软件,一般为文本文件 ➢ 出盘出错回滚:
➢ 工资短信:将员工本月工资信息通过短信发出,并通知领工资时间。 2.2.3系统维护功能
➢ 部门信息维护:实现灵活的增减部门信息 ➢ 职务信息维护:实现灵活的增减职务信息 ➢ 职称信息维护:实现灵活的增减职称信息
➢ 工资账目维护:能够灵活的改变员工的薪水账目。 ➢ 用户管理:包括新增用户、删除用户、修改用户密码等。
2.3系统功能模块图
第 9 页 共 56 页
成人大专计算机信息管理专业毕业论文
增新 员 工档 案的 新员工基本信息维护 人事管理模块 工资管理模块 系统维护模块 株洲移动人事工资管理系统 员工基本信息查看 员工基本信息查询 人事状况曲线分析 企业员工花名册 新员工工资新增 老员工工资维护 出盘工资报表 工资短信 部门信息维护 职务信息维护 职称信息维护 工资账目维护 用户管理
新增用户 删除用户 修改密码 第三章 概要设计
3.1概念设计
概要设计基础是完成需求分析后提供的需求说明书,用概念数据模型表示数据及其相互间的关系,这种数据模型是与DBMS无关的、面向现实世界的、易如理解的数据模型,其独立于计算机的数据模型,独立于计算机的软硬件系统,与用户进行交流十分方便。
概念性数据模型关心的是如何完整、正确地反映客观实际情况,不关心在数据库中如何实现。这种数据模式能真实地反应用户要求的实际情况,是一种容易被人们理解的直观的数据库结构模式。同时也是一种相对稳定统一的数据模式,一般情况下很少变动。概念性数据在用户和设计者之间建立了桥梁。是设计数据
第 10 页 共 56 页
成人大专计算机信息管理专业毕业论文
库结构的基础。
概念设计中自顶向下的实体分析方法,即常用的实体联系模型(简称E-R模型),对具体数据进行抽象加工,将实体集合抽象成实体类型。用实体间联系反映现实世界事物间的内在联系。E-R模型是建立概念性数据模型的有力工具。 通过对企业员工管理内容、工资管理内容和过程的分析,本系统应设计的实体和属性如下:
员工(包括员工工号、员工姓名、学历、性别、政治面貌、出生日期、所属部门、职称、职务、入职时间、身份证号、联系电话、家庭住址、手机号码、Email、有效标志)
部门(部门代号、部门名称) 职务(职务代号、职务名称) 职称(职称代号、职称名称)
薪金结构(月份、员工工号、薪水帐目、数目) 薪水帐目(薪水帐目代号、薪水帐目名称) 性职 所属部门 出生日期 政治面貌 学职员工工号 员工姓名 员工 有效标志 Email
所属部门 身份证号 联系电话 家庭住址 手机号码 部门代号 部门 部门名称 职务代号 职务 职务名称 职称代号 职称 职称名称 薪水帐目代号 薪水帐目 第 11 页 共 56 页 薪水帐目名称 成人大专计算机信息管理专业毕业论文
实体和实体之间的关系E-R图如下:
3.2数据库设计
作为Borland公司的桌面数据库,Paradox在Delphi中的应用非常广泛,为此我选用Paradox数据库来进行数据库的逻辑设计。根据前面定义的实体及实休之间的关系,形成数据库的表格以及各个表之间的关系。
为了减少数据冗余度,将职称实体、部门实体、职务实体、薪水帐目实体放在同一个表里,以一个类型字段加以区分。对个关系选择主健,按照关系模式的规范化进行规范,消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的’分离’。
职务 担任 薪水账目 1:N 具有 职称 具有 员工 具有 部门 属于 1:N 薪金结构 月份 员工工号 薪水帐目 数目 薪金结构 第 12 页 共 56 页
成人大专计算机信息管理专业毕业论文
3.2.1 ygzlb(员工资料表)
序号 域名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Ygh Xm Xb Zzmm Xl Qsrq Ssbm Zc Zw Rzsj Sfzh Gdlxdh Jtzz Sjhm Email Yxbz Czy Czrq 域中文名 员工工号 员工姓名 性别 政治面貌 学历 出生日期 所属部门 职称 职务 入职时间 身份证号 联系电话 家庭住址 手机号码 Email 有效标志 操作员 操作时间 域类型 Alpha(6) Alpha (12) Alpha(2) Alpha(4) Alpha(12) Alpha(19) Alpha(30) Alpha(30) Alpha(30) Alpha(19) Alpha(20) Alpha(16) Alpha(60) Alpha(12) Alpha(20) Short Alpha(20) Alpha(19) 备注 主键 1代表有效员工;9代表无效员工 说明:员工基本信息表用于存储员工基本信息,为保证数据的一致和历史资料的完整,表的记录在一般的情况不能被删除,如果发生员工离职,只更改其有效标志为9。
3.2.2 Yhklb用户口令表
序号 域名 1 2 Dlgh Pswd 域中文名 登录工号 口令 域类型 Alpha(20) Alpha (10) 备注 主键
说明:为了便于多个用户管理该系统,建立此表,记录用户的登录工号和口令
第 13 页 共 56 页
成人大专计算机信息管理专业毕业论文
3.2.3 Ygxjjgb员工薪金结构表
序号 1 2 3 4 5 6 域名 Yf Ygh Xszmid Sm Czy Czsj 域中文名 月份 员工工号 薪水帐目ID 数目 操作员 操作时间 域类型 Alpha(6) Alpha(6) Short Money Alpha(6) Alpha(19) 备注 主键 主键 主键
说明:员工薪金结构表采用竖表结构,便于以后薪水帐目的新增,利于系统保持较长时间的适用。同时该表采用月帐的形式,便于历史资料的稳定查询,和统计,同时也能做到出盘发生错误时,进行回滚。在准备当前月份的数据的时候,将同时校验该员工的有效性。如果是无效员工,则系统将不会显示该员工的资料。但在历史月份还是将体现该员工的资料。系统将根据基本参数表中的工资帐目的费用影响关系(1或-1)来形成员工的应发工资和实发工资。
3.2.4 Kjcsb控制参数表
序号 域名 1 2 3 4 5 Yf Csdm Csmc Czy Czsj 域中文名 序列 参数代码 参数名称 操作员 操作时间 域类型 Short Alpha(20) Alpha(40) Alpha(6) Alpha(19) 备注 主键 说明:控制参数表用于控制出盘,在每次出盘成功后,会在该表中插入一条记录,以记录该月是否已经出盘;在需要再次出盘的时候,系统将会首先判断该月的出盘标志,如果已经出盘,则对数据库不做操作,仅仅在界面上进行出盘,生成TXT文本文件,如果未出盘则需要对数据库进行操作(将该月的数据重新插
第 14 页 共 56 页
成人大专计算机信息管理专业毕业论文
入数据库,作为下个月出盘的初始数据)
3.2.5 Jbcsb基本参数表
序号 1 2 3 4 5 6 域名 ID Lx Mc Czy Czsj Rela 域中文名 ID 参数类型 参数名称 操作员 操作时间 费用影响关系 域类型 Short Short Alpha(30) Alpha(20) Alpha(19) Short 备注 主键 1:薪水帐目;2:部门代码;3:职务代码;4:职称代码 -1代表该项目对实发工资是负的影响; 1代表该项目对实发工资是正的影响;
3.2.6工资短信表
序号 1 2 域名 ygh sfgz 域中文名 员工号 实发工资 域类型 Alpha(6) Alpha(10) 备注 主键
说明:基本参数表用于维护系统的一些基本参数,例如职务,职称,工资帐目等、部门。
员工信息表和员工薪金结构表通过员工ID进行关联;可得知每个员工的工资明细情况;
员工薪金结构表中的帐目ID在基本参数表中进行定义;
员工信息表的职务ID和职称ID和部门ID也在基本参数表中进行定义; 工资短信表:是为便于发送工资短信信息而建立的,只保存当前月的工资数据。
第 15 页 共 56 页
成人大专计算机信息管理专业毕业论文
第四章 详细设计
根据需求分析、概要设计的结果,采用Delphi做为开发工具,实现公司人事工资管理各模块的功能。 4.1启动界面设计
4.1.1 功能说明
系统运行时,首先弹出此启动窗口,4秒钟后自动关闭出现主窗口和登录窗口,实现此界面主要是修改了工程文件,并调用了一个延时函数,实现起来很简单,源程序不加以介绍。 4.1.2屏幕格式设计
启动界面
第 16 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.2 登录窗口设计
4.2.1功能说明
控制员工登录,防止非法用户闯入本系统,保证系统的安全,输入口令时屏幕显示为“*”以利保密。 4.2.2屏幕格式设计
登录界面
4.2.3源程序分析
procedure TFrm_dl.Button1Click(Sender: TObject); begin if edit2.text='' then //判断密码是否输入为空 begin Application.MessageBox('密码不能为空,请重新输入!','系统提示',mb_IconInformation+mb_OK); 第 17 页 共 56 页
成人大专计算机信息管理专业毕业论文
Edit2.SetFocus; Exit; end; query1.sql.clear; query1.sql.add('select pswd from yhklb where dlyh='+''''+trim(edit1.text)+''''); if query1.Active then query1.close; query1.open; //根据用户名从用户口令表中取出用户口令 if edit2.text<>query1.fieldbyname('pswd').asstring then begin if err_cou=2 then //判断是否三次输入错误 begin application.messagebox('三次登录的用户名或密码错误',' 系统退出',mb_IconInformation+mb_OK); frm_main.close; //关闭主窗口,退出系统 end; Application.MessageBox('密码或工号不正确','请重新输入!',mb_IconInformation+mb_OK); //若密码输入错误,提示重新输入 Edit2.SetFocus; err_cou:=err_cou+1; //输入次数加1 exit; end; dluser:=edit1.text; //给变量赋值,记录登录用户,供其它程序使用 Close; end;
第 18 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.3 主窗口设计
4.3.1功能说明
界面采用MDI方式,可同时打开几处子窗口体,在界面上放置了菜单栏和工具栏、状态栏;菜单栏集中了系统操作的入口,各功能模块的执行从此进入;工具框显示了系统菜单中常用项目的快键图标,使用户只需点击相应图标即可进入相应功能模块,当鼠标移动到相应图标时,系统会出现提示信息。状态栏主要是用于显示日期时钟信息,以及系统操作过程中的信息。 4.3.2屏幕格式设计
系统主界面
第 19 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.3.3源程序分析
procedure TFrm_main.N20Click(Sender: TObject); //菜单关闭事件 begin close; end; procedure TFrm_main.N_shutdownClick(Sender: TObject);件 begin //菜单退出系统并关机事件 if messagedlg('是否退出并关闭计算机?',mtinformation,[mbyes,mbno],1)=mryes then begin close; ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 ); //调用API函数 end; end; procedure TFrm_main.N_closeClick(Sender: TObject); begin close; end; procedure TFrm_main.N_bmcxwhClick(Sender: TObject);//打开部门参数维护窗口 begin Application.CreateForm(TFrm_bmxg, Frm_bmxg); if frm_bmxg.query1.active then frm_bmxg.query1.close; //判断Query是否打开 frm_bmxg.query1.open; //打开Query end; procedure TFrm_main.N_zwwhClick(Sender: TObject); //打开职务参数维护窗口 begin Application.CreateForm(TFrm_zwxg, Frm_zwxg); if frm_zwxg.query1.active then frm_zwxg.query1.close; frm_zwxg.query1.open; end; procedure TFrm_main.N_ygjbxxsrClick(Sender: TObject);//打开新增员工信息窗口 begin Application.CreateForm(Tfrm_ygzbxxsr, frm_ygzbxxsr); end; procedure TFrm_main.N_yhwhClick(Sender: TObject);//打开用户维护窗口 begin Application.CreateForm(TFrm_yhgl, Frm_yhgl); if frm_yhgl.query1.active then frm_yhgl.query1.close; 第 20 页 共 56 页
成人大专计算机信息管理专业毕业论文
frm_yhgl.query1.open; end; procedure TFrm_main.Timer1Timer(Sender: TObject); var y,m,d:word; //在状态栏上显示日期时间星期 begin decodedate(now,y,m,d); statusbar1.Panels[1].text:=concat('【',inttostr(y),'年',inttostr(m),'月',inttostr(d),'日 ',formatdatetime('hh:nn:ssAM/PM',now) ,f_get_week,'】');//调用函数f_get_week end; procedure TFrm_main.N_zcwhClick(Sender: TObject);//打开职称维护窗口 begin Application.CreateForm(TFrm_zcxg, Frm_zcxg); if frm_zcxg.query1.active then frm_zcxg.query1.close; frm_zcxg.query1.open; end; procedure TFrm_main.N_ygzbxxwhClick(Sender: TObject);//打开员工信息维护窗口 begin Application.CreateForm(Tfrm_ygzbxxwh, frm_ygzbxxwh); end; procedure TFrm_main.N_zbxxckClick(Sender: TObject); //打开员工信息查看窗口 begin Application.CreateForm(Tfrm_llygzbxx, frm_llygzbxx); end; procedure TFrm_main.N_tjcxClick(Sender: TObject); //打开员工信息条件查询窗口 begin Application.CreateForm(Tfrm_ygzlcx, frm_ygzlcx); end; procedure TFrm_main.N_gzzmwhClick(Sender: TObject);//打开薪水帐目维护窗口 begin Application.CreateForm(TFrm_gzzmwh, Frm_gzzmwh); if Frm_gzzmwh.query1.active then Frm_gzzmwh.query1.close; Frm_gzzmwh.query1.open; end; procedure TFrm_main.N_cpClick(Sender: TObject); //打开出盘窗口 begin Application.CreateForm(Tfrm_cp, frm_cp); end; procedure TFrm_main.N_gzdxClick(Sender: TObject); //打开工资短信窗口 begin 第 21 页 共 56 页
成人大专计算机信息管理专业毕业论文
frm_gzdx:=Tfrm_gzdx.create(application); frm_gzdx.showmodal; frm_gzdx.free; end; procedure TFrm_main.N_jsbClick(Sender: TObject); //打开写字板 begin ShellExecute(handle,'open','notepad.exe',nil,nil,SW_ShowNormal);//调用API函数 end; procedure TFrm_main.N_jsqClick(Sender: TObject); //打开计算器 begin ShellExecute(handle,'open','calc.exe',nil,nil,SW_ShowNormal); end; procedure TFrm_main.N_ppClick(Sender: TObject); //实现窗口平铺 begin TileMode := tbVertical; Tile; end; procedure TFrm_main.N_cdClick(Sender: TObject); //实现窗口层叠 begin Cascade; end; procedure TFrm_main.N_jxhClick(Sender: TObject); //实现窗口极小化 var i:integer; begin with frm_main do begin for i := MDIchildcount-1 downto 0 do MDIChildren[i].Windowstate := wsMinimized; end; end; procedure TFrm_main.N_aboutClick(Sender: TObject); //打开关于本系统窗口 begin Application.CreateForm(Tfrm_about, frm_about); end; function Tfrm_main.f_get_week :string; //获取星期函数 var days: array[1..7] of string; begin days[1] := '星期日'; 第 22 页 共 56 页
成人大专计算机信息管理专业毕业论文
days[2] := '星期一'; days[3] := '星期二'; days[4] := '星期三'; days[5] := '星期四'; days[6] := '星期五'; days[7] := '星期六'; result :=days[DayOfWeek(now)]; end; procedure TFrm_main.N_ygzlbbClick(Sender: TObject); //生成企业员工花名册 begin frm_ygbb:=Tfrm_ygbb.create(application); if frm_ygbb.Query1.active then frm_ygbb.Query1.close; frm_ygbb.Query1.open; frm_ygbb.QuickRep1.Prepare; frm_ygbb.QuickRep1.Preview; frm_ygbb.Free; end; procedure TFrm_main.N_rsqxfxClick(Sender: TObject); begin //打开人事状况曲线分析窗口 Application.CreateForm(Tfrm_rsqkqxfs, frm_rsqkqxfs); if frm_rsqkqxfs.Query1.Active then frm_rsqkqxfs.Query1.Close; frm_rsqkqxfs.Query1.open; end; end.
4.4人事管理模块的实现
4.4.1员工基本信息输入
4.4.1.1功能说明
完成新员工人事档案的建立,初始状态下所有输入和选择框框均无效,只有点新增按钮后才可用,同时提交按钮变成有效。
第 23 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.4.1.2屏幕格式说明
新员工资料录入界面
4.4.1.3源程序分析
//增加按钮事件,只是将各输入框和提交按钮置为可用。 procedure Tfrm_ygzbxxsr.Button3Click(Sender: TObject); //提交按钮事件 var Sql: String; qsrq,rzsj,czdate: String; begin qsrq:=FormatDatetime('YYYY-MM-DD',datetimepicker1.Datetime); //出生日期 rzsj:=FormatDatetime('YYYY-MM-DD',datetimepicker2.Datetime); //入职时间 czdate := FormatDatetime('YYYY-MM-DD HH:MM:SS',Now); //操作时间 if Application.MessageBox('您确认要提交吗?','系统提示',mb_IconInformation+mb_OK+mb_OKCancel)=IDCancel then Exit; begin if (Edit1.text='') or (Edit2.text='') then begin Application.MessageBox('姓名不能为空或员工号不能为空!','系统提示',mb_IconInformation+mb_OK); Exit; end; 第 24 页 共 56 页
成人大专计算机信息管理专业毕业论文
if trim(DBLookupComboBox1.Text) ='' then begin showmessage('请选择部门');exit;end; if trim(DBLookupComboBox2.Text) ='' then begin showmessage('请选择职务');exit;end; if trim(DBLookupComboBox3.Text) ='' then begin showmessage('请选择职称');exit;end; sql:='select * from ygzlb where ygh='''+trim(edit1.text)+''''; //根据此员工号是否已存在 query1.sql.clear; query1.sql.add(sql); if query1.Active then query1.close; query1.open; if not query1.isempty then begin showmessage('此员工号已存在,请重新输入员工号'); edit1.selectall; edit1.setfocus; exit; end else begin //执行插入操作,往员工资料表中插入一条记录 sql:='insert into ygzlb(ygh,xm,xb,xl,qsrq,ssbm,zc,zw,rzsj,sfzh,jtzz,gdlxdh,' +'sjhm,email,zzmm,yxbz,czy,czrq)' +'values('''+Trim(Edit1.Text)+''','''+trim(Edit2.text)+''',' +''''+combobox1.text+''','''+combobox3.text+''','''+qsrq+''','''+DBLookupComboBox1.keyvalue+''',' +''''+DBLookupComboBox3.keyvalue+''','''+DBLookupComboBox2.keyvalue+''','''+rzsj+''','''+edit3.text+''',' +''''+trim(edit4.text)+''','''+trim(edit7.text)+''','''+trim(edit6.text)+''','''+trim(edit5.text)+''',' +''''+combobox2.text+''',1,'''+dluser+''','''+czDate+''')'; query1.sql.clear; query1.sql.add(sql); query1.execsql; if Application.MessageBox('该记录提交成功,继续提交吗?','系统提示',mb_IconInformation+mb_OK+mb_OKCancel)=IDCancel then begin Button3.Enabled := False; Exit; end; button1.Click; end; end; end;
第 25 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.4.2员工基本信息维护
4.4.2.1功能说明
包括修改、删除(删除员工只是将该员工登记为无效,并不要求从表中删除).输入员工号后按回车或点击查询按钮,查询待修改员工基本信息,各输入框初始状态为只读,
4.4.2.2屏幕格式说明
4.4.2.3源程序分析
procedure Tfrm_ygzbxxwh.Button1Click(Sender: TObject); //查询按钮事件 begin if trim(edit1.text)<>'' then begin Query1.sql.clear; //根据员工号从员工资料表中取出员工信第 26 页 共 56 页
成人大专计算机信息管理专业毕业论文
息 Query1.sql.add('select * from ygzlb where ygh=:ygh and yxbz=1'); Query1.ParamByName ('ygh').ASSTRING :=edit1.text; IF Query1.ACTIVE THEN Query1.CLOSE; Query1.OPEN; IF Query1.IsEmpty THEN //判断是否存在此员工,如不存在,系统提示 begin SHOWMESSAGE('对不起!没有员工档案数据!请正确输入员工号!'); edit1.selectall; exit; end; DateTimePicker1.Datetime:=strtodate(query1.fieldbyname('qsrq').asstring); DateTimePicker2.Datetime:=strtodate(query1.fieldbyname('rzsj').asstring); end; end; procedure Tfrm_ygzbxxwh.Button2Click(Sender: TObject); //删除按钮事件 var sql:string; //询问是否删除 begin if Application.MessageBox('您确认要删除吗?','系统提示',mb_IconInformation+mb_OK+mb_OKCancel)=IDCancel then Exit; Sql := 'update ygzlb set yxbz=9 where ygh='''+trim(edit1.text)+''''; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; //将有效标志必为9,记录并不删除 Application.MessageBox('该记录删除成功!','系统提示',mb_IconInformation+mb_OK); end; procedure Tfrm_ygzbxxwh.Button3Click(Sender: TObject); //提交按钮事件 var czdate,qsrq,rzsj:string; begin if ((Query1.state=dsEdit )or( Query1.state=dsInsert)) then else exit; //判断Query是否在编辑状态 qsrq:=FormatDatetime('YYYY-MM-DD',datetimepicker1.Datetime); rzsj:=FormatDatetime('YYYY-MM-DD',datetimepicker2.Datetime); czdate := FormatDatetime('YYYY-MM-DD HH:MM:SS',Now); if messagedlg('是否保存员工数据?',mtinformation,[mbyes,mbno],1)=mryes then else exit; Query1.fieldbyname('qsrq').asstring:=qsrq; //出生日期赋值 Query1.fieldbyname('rzsj').asstring:=rzsj; //入职日期赋值 Query1.fieldbyname('czrq').asstring:=czdate; //操作时间 Query1.fieldbyname('czy').asstring:=dluser; //操作员赋值 第 27 页 共 56 页
成人大专计算机信息管理专业毕业论文
Query1.post; query1.close; query1.open; messagedlg('数据提交成功!',mtinformation,[mbok],1); //提交成功,系统提示 edit1.setfocus; edit1.ReadOnly:=false; end; //提交按钮置为不可用 4.4.3员工基本信息查看:
4.4.3.1功能说明
用于浏览员工的基本信息,采用卡片式和表格式两种形式表现员工的基本信息,浏览时应具有浏览前一条记录、后一条记录、最前一条、最后一条记录的功能。实现采用pagecontrol控件,中间放置两个Tablesheet,其中一个放置Dbgrid按件实现表格式浏览,另一个放置Dbedti控件,实现卡片式浏览。由于只涉及到查询不做源程序分析。
4.4.3.2屏幕格式说明
第 28 页 共 56 页
成人大专计算机信息管理专业毕业论文
浏览员工基本信息界面
4.4.4员工基本信息条件查询
4.4.4.1功能说明
可以根据不同的条件组合,查询员工的基本信息,查询条件包括所属部门、职称、职务、学历、性别、政治面貌、员工号、姓名,和条件可以任意组合。同时应具有查询标专为无效的员工的作用。系统同时应提供Excel输出和打印的功能。
多条件查询是本模块重点考虑的内容,本设计完成了对多字段、多条件的查询,其实现程序如源程序分析:
4.4.4.2屏幕格式说明
第 29 页 共 56 页
成人大专计算机信息管理专业毕业论文
员工资料查询界面
4.4.4.3源程序分析
procedure Tfrm_ygzlcx.BitBtn1Click(Sender: TObject); //查询按钮事件 begin if query1.active then //判断Query是否已经Open query1.close; //关闭Query query1.sql.clear; //翻译用户输入,动态添加SQL Query1.sql.add('select * from ygzlb where 1=1'); if DBLookupComboBox1.text<>'' then //判断是否选择了部门 begin //若选择,添加所属部门条件 query1.sql.add('and ssbm=:ssbm'); query1.parambyname('ssbm').asstring:=DBLookupComboBox1.keyvalue; end; if DBLookupComboBox2.text<>'' then //判断是否选择了职务 begin //若选择,添加职务条件 query1.sql.add('and zw=:zw'); query1.parambyname('zw').asstring:=DBLookupComboBox2.keyvalue ; end; if DBLookupComboBox3.text<>'' then //判断是否选择了职称 begin //若选择,添加职称条件 query1.sql.add('and zc=:zc'); query1.parambyname('zc').asstring:=DBLookupComboBox3.keyvalue; end; if combobox1.text<>'' then //判断是否选择了学历 begin //若选择,添加学历条件 query1.sql.add('and xl=:xl'); query1.ParamByName('xl').asstring:=combobox1.text; end; if combobox2.text<>'' then //判断是否选择了政治面貌 begin //若选择,添加政治面貌条件 query1.sql.add('and zzmm=:zzmm'); query1.ParamByName('zzmm').asstring:=combobox2.text; end; 第 30 页 共 56 页
成人大专计算机信息管理专业毕业论文
if combobox3.text<>'' then //判断是否选择了性别 begin //若选择,添加性别条件 query1.sql.add('and xb=:xb'); query1.ParamByName('xb').asstring:=combobox3.text; end; if edit1.text<>'' then //判断是否输入了员工号 begin //若已输入,添加员工号条件 query1.sql.add('and ygh=:ygh'); query1.parambyname('ygh').asstring:=edit1.text; end; if edit2.text<>'' then //判断是否输入了姓名 begin //若输入,添加员工姓名条件 query1.sql.add('and xm=:xm'); query1.parambyname('xm').asstring:=edit2.text end; if checkbox1.checked then //有效标志是否选择 query1.sql.add('and yxbz=1'); //若选择,只选择标志有效的员工 query1.open; //打开查询 if query1.isempty then //判断是来有记录,若无,弹出提示框 showmessage('没有你所要的员工资料,请确认条件是否正确'); procedure Tfrm_ygzlcx.BitBtn3Click(Sender: TObject); //打印按钮事件 begin print_dbgrid(DataSource1,dbgrid1,'HX') ; //调用自定义过程print_dbgrid; end; end; procedure Tfrm_ygzlcx.BitBtn2Click(Sender: TObject); //Excel输出按钮事件 begin PUB_INSET_EXCEL(QUERY1,DBGRID1); //调用自定义过程PUB_INSET_EXCEL end; 4.4.5人事状况曲线:
4.4.1.1功能说明
采用饼状图分析公司的人事状况,实现按性别、职称、职务、学历、部门五
第 31 页 共 56 页
成人大专计算机信息管理专业毕业论文
种情况分析公司人员的分布情况,直观的分析了公司的人力资源情况,用以辅助公司领导安排人力资源计划,采用Dbchart控件可以方便的实现,不做程序分析。 4.4.6企业员工花名册:
4.4.6.1功能说明
为了保存企业员工信息,生成公司员工花名册,设计了此报表打印模块,通过采用QuickReport控件可能方便实现,由于无特殊之处,在此不做源程序分析。
4.5 工资管理模块的实现
4.5.1出盘
4.5.1.1 功能说明
选择月份出盘,打印工资清单,出软盘与银行接口,一般不准删除历史月份,不能修改,只能查询,如需对本月工资信息进行维护,见新员工工资新增、员工工资修改。
第 32 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.5.1.2 屏幕格式设计
出盘界面
4.5.1.3程序流程图 出盘:
选取出盘的月份 否 确认出盘 是 否 退出 选择存盘路径 是 将该月的数据作为下个月的初始数据插入Ygxjjgb中 成功 在Kjcsb中插入一条记录,表示该月已经出盘成功 成功 数据存盘 第 33 页 共 56 页
失败 回滚 失败 成人大专计算机信息管理专业毕业论文
出盘回滚:
出盘发生错误 如果Ygxjjgb已经存在下月数据,删除 如果Cjcsb存在该月出盘成功标志,删除 4.5.1.4源程序分析
多数据库表之间的链接操作是本模块的设计重点,在生成员工工资信息的过程中,为了能够显示工资数据,系统要建立基本参数表、员工资料表、员工薪水帐目表之间的连接操作,为了能够按银行格式输出,本程序花了很多功夫。
第 34 页 共 56 页
成人大专计算机信息管理专业毕业论文
procedure Tfrm_cp.Button5Click(Sender: TObject); //查询按钮事件 var Sql: String; I,J: Integer; Mark: Boolean; begin Mark := False; J := 2; for I := 0 to StringGrid1.RowCount - 1 do // StringGrid1清空 StringGrid1.Rows[I].Clear; Sql := 'select mc from jbcsb’ //从基本参数表中取出薪水帐目 +' where lx=1'; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.Open; Query1.First; while not Query1.Eof do //将薪水帐目显示在stringgrid1控件上做为标题 begin StringGrid1.Cells[J,0] := Query1.FieldByName('mc').AsString; J := J + 1; Query1.Next; end; StringGrid1.Cells[1,0] := '姓名'; //0行1列显示姓名标题 StringGrid1.Cells[0,0] := '工号'; //0行0列显示姓名标题 Sql := 'select distinct a.ygh,a.xm xm from ygzlb a,ygxjjgb b where b.yf=''' +Edit1.Text+''''+' and a.ygh=b.ygh'; //多连接操作,从员工资料表和薪金结构表中取出员工号和姓名 Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.Open; StringGrid1.RowCount := Query1.RecordCount + 2; if StringGrid1.RowCount > 1 then StringGrid1.FixedRows := 1; Query1.First; while not Query1.Eof do //将员工号和姓名插入StringGrid控件 begin StringGrid1.Cols[0].Add(Query1.FieldByname('ygh').AsString);//第一列显示员工号 StringGrid1.Cols[1].Add(Query1.FieldByname('xm').AsString);//第二列显示姓名 Query1.Next; end; 第 35 页 共 56 页
成人大专计算机信息管理专业毕业论文
Sql := 'select a.mc,b.ygh,c.sm,c.ygh,c.xszmid from' //从员工资料表、薪金结构表、基本参数表 +' jbcsb a,ygzlb b,ygxjjgb c where c.yf=' 中取出员工号、薪水帐目、数目 +''''+Edit1.Text+''''+' and a.id=c.xszmid and a.lx=1' +' and b.ygh=c.ygh'; //多表之间的连接操作 Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.Open; Query1.First; //向第一条记录 while not Query1.Eof do //循环,动态加入各员工的薪水数目 begin for I := 1 to StringGrid1.RowCount - 1 do begin if Query1.FieldByName('ygh').AsString = StringGrid1.Cols[0].Strings[I] then //员工号相同 begin for J := 2 to StringGrid1.ColCount - 1 do begin if Query1.FieldByName('mc').AsString = StringGrid1.Rows[0].Strings[J] then begin //如果薪水帐目与标题相同,显示数目 StringGrid1.Cells[J,I] := FormatFloat('0.00',Query1.FieldByName('sm').AsFloat); Break; end; end; end; end; Query1.Next; //指向下一条 end; for I := 1 to StringGrid1.ColCount - 1 do //统计在StringGrid中加入合计 begin if I = 1 then StringGrid1.Cells[I,StringGrid1.RowCount-1] := '合计'//在第1列最后一行显示合计 else begin if Trim(StringGrid1.Cells[I,StringGrid1.RowCount-1])='' then //最后一行如无空,置为0.00 StringGrid1.Cells[I,StringGrid1.RowCount-1]:= '0.00'; for J := 1 to StringGrid1.RowCount - 1 do begin if (J <> StringGrid1.RowCount-1) then begin if Trim(StringGrid1.Cells[I,J]) = '' then StringGrid1.Cells[I,J] := '0.00'; //各列为空,置为0.00 第 36 页 共 56 页
成人大专计算机信息管理专业毕业论文
StringGrid1.Cells[I,StringGrid1.RowCount-1]:= FloatToStr(StrToFloat(StringGrid1.Cells[I,J])+StrToFloat(StringGrid1.Cells[I,StringGrid1.RowCount-1])); //将各列值求和 StringGrid1.Cells[I,StringGrid1.RowCount-1]:= FormatFloat('0.00',StrToFloat(StringGrid1.Cells[I,StringGrid1.RowCount-1])); //设定显示格式 end; end; end; end; end; procedure Tfrm_cp.Button2Click(Sender: TObject); //出盘按钮事件 var FileDir: String; Sql: String; begin if Application.MessageBox('确认出盘吗?','系统提示',mb_IconInformation+mb_OK+mb_OKCancel)=IDCancel then Exit; if Trim(StringGrid1.Cols[0].Strings[1]) = '' then //判断是否有数据,如没数据,提示 begin Application.MessageBox('没有可出盘的数据!','系统提示',mb_IconInformation+mb_OK); Exit; end; if SaveDialog1.Execute then //执行保存 begin Sql := 'select csdm from kjcsb where yf=' //查询控制参数表本月是否有记录 +''''+Trim(Edit1.Text)+''' and csmc=''出盘标志'''; Query2.Close; Query2.Sql.Clear; Query2.Sql.Add(Sql); Query2.Open; if query2.IsEmpty then //第一次使用时,执行outdisk2 outdisk2 else if Query2.FieldByName('csdm').AsString = '0' then //有记录,但未出盘,执行outdisk OutDisk; FileDir := SaveDialog1.FileName; Save_Disk(FileDir); //调用过程保存文本文件 Application.MessageBox('出盘成功!','系统提示',mb_IconInformation+mb_OK);//提示出盘成功 end else begin 第 37 页 共 56 页
成人大专计算机信息管理专业毕业论文
Application.MessageBox('您未选择存放路径,系统将不出盘!','系统提示',mb_IconInformation+mb_OK); Exit; end; end; procedure Tfrm_cp.OutDisk; var Sql,DateStr,NextMonth: String; begin DateStr := FormatDateTime('YYYY-MM-DD HH:MM:SS',Now); Sql := 'select yf,ygh,xszmid,sm from ygxjjgb where yf='''+Edit1.Text+''''; //取出本月工资数据 Query2.Close; Query2.Sql.Clear; Query2.Sql.Add(Sql); Query2.Open; Query2.First; while not Query2.Eof do //将本月记录作为下月工资初始数据 begin Sql := 'insert into ygxjjgb(yf,ygh,xszmid,sm,czy,czsj) values(' +''''+ReturnNextMonth(StrToInt(Trim(Edit1.Text)))+''''+','+''''+Query2.FieldByName('ygh').AsString+'''' +','+Query2.FieldByName('xszmid').AsString+','+Query2.FieldByName('sm').AsString +','+''''+dluser+''''+','+''''+DateStr+''''+')'; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; //插入员工薪金结构表 Query2.Next; end; Sql := 'update kjcsb set csdm=''1'' where yf='''+Trim(Edit1.Text)+'''' //更新控制参数表 +' and csmc=''出盘标志'''; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; if Copy(Trim(Edit1.Text),5,2) = '12' then NextMonth := IntToStr(StrToInt(Copy(Trim(Edit1.Text),5,2))+1)+'01' else NextMonth := IntToStr(StrToInt(Trim(Edit1.Text))+1); //取下一个月月份 Sql := 'insert into kjcsb(csdm,yf,csmc) values(' //控制参数表插入记录,但标志为0 第 38 页 共 56 页
成人大专计算机信息管理专业毕业论文
+'''0'','''+NextMonth+''',' +'''出盘标志'')'; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; end; procedure Tfrm_cp.OutDisk2; //第一次使用时,出盘操作 var Sql,DateStr,NextMonth: String; begin DateStr := FormatDateTime('YYYY-MM-DD HH:MM:SS',Now); Sql := 'select yf,ygh,xszmid,sm from ygxjjgb where yf='''+Edit1.Text+''''; Query2.Close; Query2.Sql.Clear; Query2.Sql.Add(Sql); Query2.Open; Query2.First; while not Query2.Eof do //将本月记录作为下月工资初始数据 begin Sql := 'insert into ygxjjgb(yf,ygh,xszmid,sm,czy,czsj) values(' +''''+ReturnNextMonth(StrToInt(Trim(Edit1.Text)))+''''+','+''''+Query2.FieldByName('ygh').AsString+'''' +','+Query2.FieldByName('xszmid').AsString+','+Query2.FieldByName('sm').AsString +','+''''+dluser+''''+','+''''+DateStr+''''+')'; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; Query2.Next; end; sql:='insert into kjcsb(csdm,yf,csmc) values(' //控制参数表插入本月出盘记录 +'''1'','''+Trim(Edit1.Text)+''',' +'''出盘标志'')'; //Sql := 'update kjcsb set csdm=''1'' where yf='''+Trim(Edit1.Text)+'''' // +' and csmc=''出盘标志'''; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; 第 39 页 共 56 页
成人大专计算机信息管理专业毕业论文
if Copy(Trim(Edit1.Text),5,2) = '12' then NextMonth := IntToStr(StrToInt(Copy(Trim(Edit1.Text),5,2))+1)+'01' else NextMonth := IntToStr(StrToInt(Trim(Edit1.Text))+1); Sql := 'insert into kjcsb(csdm,yf,csmc) values('本 //控制参数表插入下月记录,以供更新用 +'''0'','''+NextMonth+''',' +'''出盘标志'')'; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; end; procedure Tfrm_cp.N1Click(Sender: TObject); //快捷键新增事件 begin Application.CreateForm(Tfrm_yggzjgtz, frm_yggzjgtz); //打开员工工资结构调整窗口 Frm_yggzjgtz.Button3.Caption := '确认新增(&A)'; //将按钮3改为确认新增 end; procedure Tfrm_cp.N2Click(Sender: TObject); //快捷键修改事件 begin Application.CreateForm(Tfrm_yggzjgtz, frm_yggzjgtz); //打开员工工资结构调整窗口 frm_yggzjgtz.Edit1.Text := StringGrid1.Cells[0,SelRowCount]; frm_yggzjgtz.Button2.Click; frm_yggzjgtz.Button3.Caption := '确认修改(&S)'; //将按钮3改为确认修改 end; procedure Tfrm_cp.Save_Disk(Str: String); //按银行格式生文本保存过程 var I,J,Count,Amount,shifacol: Integer; TempStr: String; begin ListBox1.Items.Clear; for J := 0 to StringGrid1.ColCount - 1 do //查找实发金额的列数 begin if (StringGrid1.Rows[0].Strings[J]='实发工资') then shifacol:=J; end; for I := 1 to StringGrid1.RowCount - 1 do begin if I < StringGrid1.RowCount - 1 then 第 40 页 共 56 页
成人大专计算机信息管理专业毕业论文
begin for J := 0 to StringGrid1.ColCount - 1 do begin if J = 0 then TempStr := ' '+BankShortBit(StringGrid1.Cells[J,I],1); //员工号 if J = 1 then TempStr := TempStr + BankShortBit(StringGrid1.Cells[J,I],0); //姓名 if J = shifacol then TempStr := TempStr + BankBit(FloatToStr( //实发工资 StrToFloat(StringGrid1.Cells[J,I])*100)); end; ListBox1.Items.Add(TempStr); //往Listbox里加数据 end; end; ListBox1.Items.Add(BankLongBit(IntToStr(StringGrid1.RowCount - 2),0)+ //取合计工资 BankLongBit(FloatToStr(StrToFloat( StringGrid1.Cells[shifacol, StringGrid1.RowCount-1])*100),1)); ListBox1.Items.SaveToFile(Str); end; function Tfrm_cp.BankBit(Str: String): String; //按银行格式要求设计的函数 begin if Str = '000' then Result := '000000' else begin if Length (Str) = 6 then Result := Str; if Length (Str) = 5 then Result := ' '+Str; if Length (Str) = 4 then Result := ' '+Str; if Length (Str) = 3 then Result := ' '+Str; if Length (Str) = 2 then Result := ' '+Str; if Length (Str) = 1 then Result := ' '+Str; 第 41 页 共 56 页
成人大专计算机信息管理专业毕业论文
end; end; function Tfrm_cp.BankLongBit(Str: String; Flag: Integer): String; //按银行格式要求设计的函数 begin if Flag = 0 then begin if Length(Str) = 1 then Result := ' '+Str; if Length(Str) = 2 then Result := ' '+Str; if Length(Str) = 3 then Result := ' '+Str; if Length(Str) = 4 then Result := ' '+Str; if Length(Str) = 5 then Result := ' '+Str; if Length(Str) = 6 then Result := ' '+Str; if Length(Str) = 7 then Result := ' '+Str; if Length(Str) = 8 then Result := ' '+Str; if Length(Str) = 9 then Result := Str; end; if Flag = 1 then begin if Length(Str) = 1 then Result := ' '+Str; if Length(Str) = 2 then Result := ' '+Str; if Length(Str) = 3 then Result := ' '+Str; if Length(Str) = 4 then Result := ' '+Str; if Length(Str) = 5 then Result := ' '+Str; if Length(Str) = 6 then Result := ' '+Str; 第 42 页 共 56 页
成人大专计算机信息管理专业毕业论文
if Length(Str) = 7 then Result := ' '+Str; if Length(Str) = 8 then Result := ' '+Str; if Length(Str) = 9 then Result := ' '+Str; if Length(Str) = 10 then Result := ' '+Str; if Length(Str) = 11 then Result := ' '+Str; if Length(Str) = 12 then Result := ' '+Str; if Length(Str) = 13 then Result := ' '+Str; if Length(Str) = 14 then Result := Str; end; end; function Tfrm_cp.BankShortBit(Str: String;Flag: Integer): String; //按银行格式要求设计的函数 begin if Flag = 0 then begin if Length(Str) = 4 then Result := Str + ' '; if Length(Str) = 6 then Result := Str + ' '; if Length(Str) = 8 then Result := Str; end; if Flag = 1 then begin if Length (Str) = 6 then Result := Str; if Length (Str) = 5 then Result := ' '+Str; if Length (Str) = 4 then Result := ' '+Str; if Length (Str) = 3 then Result := ' '+Str; 第 43 页 共 56 页
成人大专计算机信息管理专业毕业论文
if Length (Str) = 2 then Result := ' '+Str; if Length (Str) = 1 then Result := ' '+Str; end; end; procedure Tfrm_cp.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin if (CanSelect) and (ARow <> StringGrid1.RowCount - 1) then if ARow <> 0 then SelRowCount := ARow; end; procedure Tfrm_cp.PopupMenu1Popup(Sender: TObject); begin if SelRowCount = -1 then N2.Enabled := False else N2.Enabled := True; end; procedure Tfrm_cp.Button4Click(Sender: TObject); //打印按钮事件 begin if Trim(StringGrid1.Cols[0].Strings[1]) = '' then begin Application.MessageBox('没有可打印的数据!','系统提示',mb_IconInformation+mb_OK); Exit; end; if Application.MessageBox('确认要打印吗?','系统提示',mb_IconInformation+mb_OK+mb_OKCancel)=IDCancel then Exit; PrintStringGrid(StringGrid1,'HX'); //调用过程PrintStringGrid end; procedure Tfrm_cp.Button3Click(Sender: TObject); //出盘回滚事件 var Sql,NextMonth,NowDate: String; begin NowDate := FormatDatetime('YYYYMMDDHHMMSS',Date); if Trim(Edit1.Text) <> Copy(NowDate,1,6) then //检查是否是当前月,只能回滚当月工资数据 begin Application.MessageBox('只能回滚当月的数据!','系统提示',mb_IconInformation+mb_OK); Exit; end; 第 44 页 共 56 页
成人大专计算机信息管理专业毕业论文
if Copy(Trim(Edit1.Text),5,2) = '12' then NextMonth := IntToStr(StrToInt(Copy(Trim(Edit1.Text),5,2))+1)+'01' else NextMonth := IntToStr(StrToInt(Trim(Edit1.Text))+1); if Application.MessageBox(PChar('确认将'+Edit1.Text+'月的数据回滚吗?'),'系统提示',mb_IconInformation+mb_OK+mb_OKCancel)=IDCancel then Exit; Sql := 'Delete From ygxjjgb Where yf='''+NextMonth+''''; //从员工薪金结构表中删除数据 Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; Sql := 'update kjcsb set csdm=''0'' where yf='''+Trim(Edit1.Text) +''' and csmc=''出盘标志'''; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; //修改控制参数表当月记录,置为0 Sql := 'delete from kjcsb where yf='''+NextMonth +''' and csmc=''出盘标志'''; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.ExecSQL; //删除控制能数表中下个月控制记录 Application.MessageBox(PChar('回滚'+Edit1.Text+'月的数据成功!'),'系统提示',mb_IconInformation+mb_OK); end; function Tfrm_cp.ReturnNextMonth(Curr: Integer): String; //取下一个月函数 begin if StrToInt(Copy(IntToStr(Curr),5,2))+1>12 then Result := IntToStr(StrToInt(Copy(IntToStr(Curr),1,4))+1)+'01' else Result := IntToStr(Curr+1); end; procedure Tfrm_cp.Edit1KeyPress(Sender: TObject; var Key: Char); //月份编辑框事件 begin if (edit1.text<>'') and (key=#13) then //若不为空,且按下回车键,触发查询事件 button5click(sender); end; end.
第 45 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.5.2员工工资结构调整
4.5.2.1功能说明
要求在同一窗口上实现新员工工资新增和员工工资结构调整。通过在出盘窗口上点击右键选择是新增还是修改员工工资信息,动态改变提交按钮上显示的信息,实现调整员工工资结构的目的。
4.5.2.2屏幕格式说明
员工工资结构维护界面
第 46 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.5.2.3源程序分析
输入员工工号后按回车,触发查询事件,从基本参数表中取出工资帐目信息(包括ID、名称、关系)再从薪水帐目表中取出数据,显示在表格上。直接在网格上对工资信息进行修改,系统自动计算应发工资和实发工资,修改的程序差不多,只不过最后执行的是更新操作。
procedure Tfrm_yggzjgtz.Button3Click(Sender: TObject); // 确认新增按钮事件 var curdate,sql:string; i:integer; begin curdate:=FormatDatetime('yyyy-mm-dd hh:mm:ss',now); if button3.caption='确认新增(&A)' then begin if Application.MessageBox('确认新增吗?','系统提示',mb_IconInformation+mb_OK+mb_OKCancel)=IDCancel then Exit; Sql := 'select * from ygxjjgb where yf=''' +Trim(frm_cp.Edit1.Text)+'''' +' and ygh='''+Trim(Edit1.Text)+''''; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(Sql); Query1.Open; if not query1.isempty then // 查询该员工本月是否存在工资信息 begin application.messagebox('该月已经存在员工信息,无法完成新增!','系统提示',mb_iconinformation+mb_ok); button1click(sender); edit1.setfocus; exit; end; for i:=1 to stringgrid1.rowcount-1 do // 往薪金结构表插入工资信息 begin 第 47 页 共 56 页
成人大专计算机信息管理专业毕业论文
sql:=' insert into ygxjjgb(yf,ygh,xszmid,sm,czy,czsj) values('''+trim(frm_cp.edit1.Text)+''',' +''''+trim(edit1.text)+''','+stringgrid1.cols[0].strings[i]+',' +''+stringgrid1.cols[3].strings[i]+','''+dluser+''','''+curdate+''')'; query1.close; query1.sql.clear; query1.sql.add(sql); query1.execsql; end; application.messagebox('操作成功!','系统提示',mb_iconinformation+mb_ok); frm_cp.button5.click; if Application.MessageBox('是否继续新增?','系统提示',mb_IconInformation+mb_OK+mb_OKCancel)=IDCancel then Exit; button1click(sender); edit1.SetFocus; end; procedure Tfrm_yggzjgtz.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); // 当表格被修改后,重新计算应发和实发工资 var I,YingFaRow,ShiFaRow: Integer; ShiFa,YingFa: Real; begin for I := 1 to StringGrid1.RowCount - 1 do级别 // 查找应发和实发工资所在行数 begin if (StringGrid1.Cols[2].Strings[I] = '应发工资') then YingFaRow := I; if StringGrid1.Cols[2].Strings[I] = '实发工资' then ShiFaRow := I; end; ShiFa := 0.00; YingFa := 0.00; for I := 1 to StringGrid1.RowCount - 1 do begin 第 48 页 共 56 页
成人大专计算机信息管理专业毕业论文
if (StringGrid1.Cols[1].Strings[I] = '1') and (StringGrid1.Cols[3].Strings[I]<>'') then begin YingFa := YingFa+StrToFloat(StringGrid1.Cols[3].Strings[I]); StringGrid1.Cols[3].Strings[YingFaRow] := FormatFloat('#####0.00',YingFa); ShiFa := YingFa; end; end; for I := 1 to StringGrid1.RowCount - 1 do begin if (StringGrid1.Cols[1].Strings[I] = '-1') and (StringGrid1.Cols[3].Strings[I]<>'') then ShiFa := ShiFa-StrToFloat(StringGrid1.Cols[3].Strings[I]); end; StringGrid1.Cols[3].Strings[ShiFaRow] := FormatFloat('#####0.00',ShiFa); end;
4.5.3工资短信
4.5.3.1功能说明
将当月出盘后的工资(只能发当月的)信息通过短信发给员工,告知其本月实发工资和领取工资时间和银行。同时也能实现给某一特定的手机号码发送其它信息。
4.5.3.2 设计思路
刚开始设计的时候,本想利用公司现有的短信数据库进行操作,即将要发的内容插入到短信数据中去,具体的发送可不管,这样实现简单、方便。后来考虑到系统的通用性,决定采用手机加电脑发送短信的方式,即手机通过串口连接电脑,短消息通过COM发送到手机上再发射出来,这种做法虽然速度慢,但是通用性好。适合一般的企业。但由于自己水平有限,只能采用别人开发的一个发送短
第 49 页 共 56 页
成人大专计算机信息管理专业毕业论文
信的动态链,加入到自己的程序中来,目前此模块的稳定性不是很好,影响整个系统的功能,是以后必须改进的地方。
4.5.3.3 屏幕格式设计
工资短信界面
4.5.3.4 源程序分析
implementation {$R *.DFM} //=============DLL 函数调用声明 开始 ========= procedure ConnectToMobile;stdcall; external 'SMSLIB.DLL'; procedure DisconnectToMobile;stdcall; external 'SMSLIB.DLL'; Function IsConnected:boolean;stdcall; external 'SMSLIB.DLL'; Function IsBusy:boolean;stdcall; external 'SMSLIB.DLL'; 第 50 页 共 56 页
成人大专计算机信息管理专业毕业论文
procedure InitMobile;stdcall; external 'SMSLIB.DLL'; procedure SetSMC(SMC:PChar);stdcall; external 'SMSLIB.DLL'; Function SendSMS(phone,text:PChar):boolean;stdcall; external 'SMSLIB.DLL'; Function ReadSMS(Text,sendnum,smc,time:PChar):boolean;stdcall; external 'SMSLIB.DLL'; //=============DLL 函数调用声明 结束 ========= procedure Tfrm_gzdx.Button1Click(Sender: TObject); begin ConnectToMobile; //建立串口连接 memo2.Lines.Add ('已经发出连接命令。'); sleep(4000); //等待4秒,等待手机准备好 while not IsConnected do ; //直到连接成功 memo2.Lines.Add ('已经连接到手机。'); InitMobile; // 初始设置 memo2.Lines.Add ('已经初始化。'); SetSMC(PChar(SMC.Text )); //设置短信息中心号码 memo2.Lines.Add ('短信中心设置成功。'); end; procedure Tfrm_gzdx.Button3Click(Sender: TObject); //信息发送按钮事件 begin Button3.Enabled :=FALSE; if IsBusy then //端口忙否 begin beep; memo2.Lines.Add ('系统正忙,请稍候再试...'); //信息框显示 Button3.Enabled :=TRUE; exit; end; if SendSMS(PChar(Phone.Text),PChar(Memo1.text)) then memo2.Lines.Add ('发送成功.') else memo2.Lines.Add ('发送失败!'); 第 51 页 共 56 页
成人大专计算机信息管理专业毕业论文
Button3.Enabled :=TRUE; end; procedure Tfrm_gzdx.FormClose(Sender: TObject; var Action: TCloseAction);//窗口关闭事件 begin if IsBusy then begin memo2.Lines.Add ('系统正忙,请稍后再退出...'); exit; end; DisconnectToMobile; end; procedure Tfrm_gzdx.Button2Click(Sender: TObject); //工资短信事件 begin if IsBusy then //端口忙否 begin beep; memo2.Lines.Add ('系统正忙,请稍候再试...'); Button3.Enabled :=TRUE; exit; end; if Query_gzdx.active then Query_gzdx.close; //从工资短信表和员工资料表中 Query_gzdx.SQL.Clear; 取出手机号码、当月实发工资 Query_gzdx.SQL.add('select a.ygh ygh,a.sjhm sjhm,b.sfgz sfgz from ygzlb a,gzdxb b where a.ygh=b.ygh '); Query_gzdx.open; Query_gzdx.First; while not Query_gzdx.eof do begin if Query_gzdx.fieldbyname('sjhm').asstring<>'' then //员工手机号码不为空 begin if SendSMS(PChar(query_gzdx.FieldByName('sjhm').asstring),PChar('您本月实发工资为第 52 页 共 56 页
成人大专计算机信息管理专业毕业论文
'+Query_gzdx.FieldByName('sfgz').asstring+memo1.text)) //发送内容 then memo2.Lines.Add ('发送成功.') else memo2.Lines.Add ('发送失败!'); Query_gzdx.Next; //取下一条记录 end else Query_gzdx.Next; //取下一条记录 end; end; end.
4.6系统维护模块设计
系统维护模块主要包括部门信息维护、职务信息维护、职称信息维护、工资账目维护、用户管理等几个方面。主要是对员工部门信息、职务信息、职称信息、工资帐目信息进行增加、删除等功能,不能修改,若要修改,先删除再增加,当然删除操作会使数据不一致,系统会给以提示。用户管理主要实现新增、删除用户、修改密码等功能。 4.6.1基本参数维护
4.6.1.1实现流程
➢ 初始状态下,输入框置为无效
➢ 点击新增按钮后,在输入框中输入要新增的内容,点击提交按钮将信息
提交到数据库中。
➢ 选择某行后,点击删除按钮,系统提示,删除将导致数据的不一致是否
删除,若点确定,将此记录从数据库中删除。 4.6.1.2 屏幕格式设计
部门屏幕格式如下:职称、职务维护大体相同,只是将部门两字做相应改动。
第 53 页 共 56 页
成人大专计算机信息管理专业毕业论文
部门参数维护界面
4.6.2 用户管理
4.6.2.1 功能说明
为了保证系统安全,系统初始化时建立一个系统用户其用户名和密码均为小字的system ,只有此用户才具有用户管理的功能,其它用户不能访问这个界面,如果要新增用户、删除用户、修改密码只能以此用户登录,当然系统用户可以修改自己的密码,但不能删除自己。修改口令时要输入两次,只要两次一致才能修改成功。数据来源用户口令表。
4.6.2.2屏幕格式设计
第 54 页 共 56 页
成人大专计算机信息管理专业毕业论文
用户管理界面 新增用户界面
密码修改界面
4.7系统其它功能的实现
4.7.1 打开计算器
通过这条语句ShellExecute(handle,'open','calc.exe',nil,nil,SW_ShowNormal);实现。
第 55 页 共 56 页
成人大专计算机信息管理专业毕业论文
4.7.2打开写字板
通过这条语句ShellExecute(handle,'open','notepad.exe',nil,nil,SW_ShowNormal)实现
4.7.3窗口的层叠、平铺、极小化操作
当同时打开几个子窗口时有时要将窗口平铺显示,系统提供此功能。 ➢ 平铺实现过程: TileMode := tbVertical;
Tile;
➢ 层叠实现过程: Cascade; ➢ 极小化所有窗口过程:with frm_main do begin
for i := MDIchildcount-1 downto 0 do MDIChildren[i].Windowstate := wsMinimized;
end;
4.7.4关于窗口的实现
点击关于本系统菜单,由里向外弹出关于本系统窗口,当点击窗口时,启动界面图像的淡入淡出果展现你人眼前,给人一种赏心悦目的感觉。
第五章 毕业设计小结
本系统通过自己的努力,经过试用证明,系统基本满足人事工资管理方面的需要。实现了人事管理、工资管理、出盘、代码维护、报表生成等功能,给公司人事管理带来很多方便,在界面上立求做到美观、在操作方面尽量做到满足用户使用习惯。但由于自己水平有限,加上时间有限,还存在很多不足:
1. 工资短信模块采用的是别人开发的动态链,在发送短信上得借助别人的
东西,而且这个动态链还存在问题,我没有把它放在系统上去用,只是做为毕业设计提出来,以后要自己开发短信发送模块。
2. 目前采用的是单机版,已经不大适应发展趋势,可能用不了多久又得更
第 56 页 共 56 页
因篇幅问题不能全部显示,请点此查看更多更全内容