信息与计算科学专业
数据库课程设计报告
题 目: 企业人事管理系统
班 级: 信息与计算科学131801班
指导教师: 金海波
学 生: 王慧兰 201318030120
王巾 201318030121
建宏 201318030128
摘 要
随着网络的发展越来越快,网络办公自动化应运而生,它的主要目的是实现信息交流和信息共享,提供协同工作的手段,提高办公的效率,让人们从繁琐的有纸的办公中解脱出来。企业人事管理系统的设计,为大小企业的工作管理带来便利,使得管理体制更加完善,工作水平和效率得以提高。信息技术为企业的发展提供了机遇,也带来了挑战。如何改善企业部的经营机制,公正、客观、全面、快捷的评价员工的业绩,实现以人为本的经营战略,提高人事管理工作的效率,使人事管理有更多的精力去做人力资源分析、研究和开发工作,是企业立足发展,开拓未来,领先同行业的关键。此次人事管理系统采用SQL Server作为开发数据库的工具。企业人事管理系统的具体功能可以根据用户的需要来分配,但主要还是包括企业人事的信息增加、删除、修改、查找。在企业人事管理系统中,用户能够方便的对企业人事进行信息的检索与处理。
本人事管理系统具有如下功能:员工基本信息的查询、增加、修改、删除模块,员工考勤信息、部门信息、员工工资、员工调动信息的录入、修改、查询、删除模块,员工评价信息的增加、修改、删除,以及员工工资信息的添加、修改系统维护功能。为公司人事管理提供信息咨询,信息检索,信息存取等服务,基本上能够满足现代企业对人事管理的需要。
关键字:企业人事管理系统 SQL Server Java
附录.............................................................
1.1 引言
1.1.1 编写目的
人事管理系统能够为使用者提供充足的信息和快捷的查询手段,建立一套完整的人事管理系统能够加快物资的周转速度,提高生产效率,加强管理的信息化手段,提高本单位的经济效益。使用计算机对人事资料进行管理,会给应用者带来很多方便,如检索迅速,查找方便,可靠量大,性好,成本低等。
可行性分析研究的目的是用最小的代价在尽可能短的时间确定数据库系统是否可能开发,是否值得开发(在该报告中主要是考察《企业人事管理系统》是否可能开发,是否值得开发,是否可以开发)。其实质是在较高层次上以较抽象的方式进行的,简化的压缩的需求分析和概要设计过程。
1.1.2 编写背景
开发软件名称:企业人事管理系统
项目任务提出者:金海波
项目开发者:王慧兰、建宏、王巾
用户:各小型企业
1.2 可行性研究的前提
1.2.1 目标
人事管理系统用于支持企业完成人事管理工作,有如下三个方面的目标:
1.支持企业实现规化管理;
2. 支持企业高效率完成人事管理日常业务,包括企业人事的增加、查询、修改、删除;
3.支持企业进行人事管理及相关方面的科学决策并在系统开发总任务的基础上进行该系统的方案设计论证,需要实现以下功能:
a.建立员工基本信息表,包括:员工编号、、部门、性别、出生日期、籍贯、职称、进入公司时间等;
b.建立员工考勤信息表,包括:员工编号、、日期、本月天数、出勤、旷工、早退、加班等;
c.建立员工工作评价信息表,包括:员工编号、、部门、业务水平、工作业绩、时间、工作态度等;
d.建立员工工资信息表,包括:员工编号、、时间、底薪、奖金、扣考核、房租、实发工资等;
1.2.2 要求
企业人事管理系统必须提供部门信息、员工信息等基本信息,还必须提供强
大的查、删、改功能。可以分为不同权限、不同用户的对该系统进行操作。另外,
该系统还必须保证数据的安全性、完整性和准确性。
1.3 技术可行性分析
本系统是基于数据库的管理与查询系统。现在硬件、软件的性能指标和开发环境等各项开发条件都符合我们开发系统的要求,因此,开发出此系统的关键是我们掌握技术的熟练程度。
本系统开发设计中用到的技术因素有:
(1)本系统开发方法。在本小组中,小组成员比较熟练地掌握开发信息系统的过程和技术,在信息开发方法上不存在太大的问题。
(2)网络和通信技术。因为在本地客户端模拟运行的系统,因此不需要配置和网络。
(3)数据库技术。小组成员具有应用数据库开发小型信息系统的经验。
(4) Java开发技术。小组成员需要熟练使用Java语言。
综上所述,本系统的开发在技术上是可行的。
1.3.1 技术的支持能力
本系统采用APMServ5.2.0工具建立数据库,并通过eclipse使两者进行连接从而进行系统软件开发。此前,我们简单使用相同技术模拟开发过类似软件系统,具有一定开发经验。
1.3.2 技术的优势
一、管理操作方便、快捷、高效。技术要求较低,数据维护简单、安全。使用数据库管理信息资源,可以进行添加、修改、插入、删除等操作,而且方便、快捷。
二、检索统计准确、迅速、高效。数据库应用系统的使用,可以按关键词对数据进行各种分类,而且关键词还可以作各种各样的组合,使得数据的检索、统计等操作形式多样,结果准确;又由于几乎所有的数据库都采用了索引技术,使得检索数据速度快,效率高。
三、数据应用共享性好。由于对数据进行集中管理,可以通过网络等各种技术,使得数据额应用能够共享,并且数据应用的效率也高。
1.3.3 技术的难点
一、数据库设计和维护,由于系统分析人员或开发人员对企业业务需求以及数据库技术认识不足,导致设计出来的数据结构或应用程序往往存在各种各样问题,并因此造成在生产环境中,系统故障层出不穷,直接影响业务运转。
二、系统负荷和安全问题,系统信息安全,系统安全通常受到的威胁如下,黑客对数据库入侵,并盗取想要的资料。
1.4 经济可行性分析
由于人事管理系统主要用于员工个人相关信息的管理,使公司领导准确掌握员工的动向和员工的综合素质,及时调整人才的分析,提高工作效率,可以为企业带来可观的经济效益。并且由于系统开发并不是太复杂,操作起来也比较简单,只需要一台作为服务器的计算机就可以运行,因此开发费用较低。
1.5 社会可行性分析
随着计算机的发展与普及,互联网的扩展和网络安全技术的不断提高,用信息系统管理人事在实际应用中越来越受企业或个人欢迎,并且在实际企业活动中表现出了巨大的经济价值。把人士管理系统纳入公司部的Internet体系中去,实现数据的共享,这样有利于人事信息在单位部的流动,提高了数据资源的利用,并且能得到及时的更新,不需要像过去那样浪费大量的人力物力去进行抄写,提高了工作效率,人事管理覆盖面广,并且会产生大量数据和信息,对如此多的信息进行管理和运用,必须要在规化和标准化的基础上借助于网络化的人事管理系统才能满足这些要求。
社会需要企业管理额现代化和信息化。企业人事管理系统的开发和运行与国家的政策法规不存在任何冲突和抵触之处。另外,企业人事管理系统采用的操作和工作方式符合工作人员和客户的日常习惯,而且操作方便灵活,便于使用。因此,该系统具有可行性。
1.5.1 用户使用可行性
本软件操作简单,界面友好,功能完备,有一定计算机基础的人员就能进行操作。1.6 意见结论
经过技术、经济、社会等方面的可行性分析,可以确定本系统的开发完全必要。
第二章 需求分析
2.1 系统需求
用户的需求具体体现在选课信息和用户信息的提供、保存、更新和查询的方面。这就要求数据库的设计必须合理,使之能够充分满足各种信息的输入和输出,保证数据存储的可靠性,并且能够快速取出和存入。而前台显示部分,应具有人性化的界面,方便用户操作。因各个企业的实际情况不同,系统应该具有兼容性。系统需要同时处理很大的数据量,这时系统不会因此崩溃。此外,系统还应该具有较强的安全性,保证身份不同的用户,不能越权操作。非合法用户不能对数据进行操作。
2.2 功能需求
本系统分为五个模块:员工基本信息、员工工作评价信息、员工考勤信息、员工工资信息、系统。得到如图所示的系统功能模块图:
2.3 数据流图
2.3.1 系统顶层图
2.3.2 数据流程图一层分解图
员工基本信息,员工考勤信息,员工工作评价信息,员工工资信息
2.3.3 数据流程图二层分解图
查询所有员工信息,按员工编号查询,按员工查询,员工信息的增加、修改、删除
2.3.3 数据流程图三层分解图
查询所有员工工作评价
2.3.3 数据流程图四层分解图
查询所有员工考勤,查询员工考勤
2.3.3 数据流程图五层分解图
查询所有员工工资,增加员工记录,修改员工记录,删除员工记录
2.4 数据字典
项目名称:企业人事管理系统
数据库表:
1、 员工基本信息表
2、 员工工作评价信息表
3、 员工考勤信息表
4、 员工工资信息表
2.4.1 数据流定义
1、数据流名称:员工情况
位置:员工
定义:员工情况=员工编号++部门+性别+出生日期+籍贯+职称+进入公司时间
数据流量:根据企业的员工具体录用情况来确定
说明:要对每一位被聘用的新员工进行唯一编号
2、数据流名称:员工考勤信息情况
位置:员工
定义:员工考勤信息情况=员工编号++日期+本月天数+出勤+旷工+早退+加班
数据流量:根据企业具体情况来确定
说明:要对每一个员工进行唯一编号
3、数据流名称:员工工资评价情况
位置:员工
定义:员工工作评价情况=员工编号++部门+业务水平+工作业绩+时间+工作态度
数据流量:根据企业具体情况来确定
说明:要对每一个员工进行唯一编号
4、数据流名称:员工工资信息情况
位置:员工
定义:员工工资信息情况=员工编号++时间+底薪+奖金+扣考核+房租+实发工资
数据流量:根据企业具体情况来确定
说明:要对每一个员工进行唯一编号
2.4.2 数据存储
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。
将日志文件和数据库对象(表、索引等)分别放在不同的磁盘,可以改进系统的性能,提高系统的安全性。所以,系统应将日志文件和数据文件存放在不同磁盘上。
第三章 概念设计
3.1 实体之间的联系
部门与员工之间的联系:一个部门信息对应多个员工信息,而一个员工信息对应一个部门信息,所以员工信息与部门信息之间是一对多的关系。
将每一个实体转换成一个关系(关系就是给出关系名,写出属性,并标明该关系的主码)
a.员工基本信息(员工编号、、部门、性别、出生日期、籍贯、职称、进入公司时间)。在此联系中主码为员工编号,因为员工信息与部门是多对一的联系,所以将部门传入员工基本信息中做非主属性。
b.员工考勤信息(员工编号、、日期、本月天数、出勤、旷工、早退、加班)
c.员工工作评价信息(员工编号、、部门、业务水平、工作业绩、时间、工作态度)
d.员工工资信息(员工编号、、时间、底薪、奖金、扣考核、房租、实发工资)。
3.2 E-R图
1、员工基本信息E-R图
2、员工考勤信息E-R图
3、员工工作评价信息E-R图
4、员工工资信息E-R图
第四章 逻辑设计
4.1 概念模型向关系模型的转换
根据需求分析中的E-R图,通过对实体的属性和之间的联系的分析,我们将其由概念模型向关系模型转化,并且根据式化理论进行优化。
4.2 概念模型的优化
4.2.1 确定式级别
根据上述分析所归结出来的数据依赖的种类和在本系统实际的开发过程中,需要涉及多表的查询及表的修改和删除,且存在多值依赖的实际情况下,其关系模式应达到BCNF。
4.2.2 实施规化处理
实体型转换为关系模式。实体的属性就是关系的属性,实体的码就是关系的码。对于实体间的联系则有以下不同的情况:
一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合
具有相同码的关系模式可合并。
第五章 物理设计
5.1 数据库的存储结构
通过需求分析,概要设计和逻辑设计流程得到本系统的数据库结构。
5.1.1 数据库的表设计
进一步确定上一章逻辑设计中设计好的关系模式中各个数据项的类型和长度,将每个关系转换为数据库中的二维表格,并确定了各个表的主键和外键,得到以下表结构:
字段名称 | 字段含义 | 数据类型及长度 | 约束 |
ygid | 员工编号 | varchar(10) | 主键 |
ygname | char(10) | ||
ygdept | 部门 | varchar(20) | |
ygsex | 性别 | varchar(2) | |
ygbirthday | 出生日期 | datetime | |
ygplace | 籍贯 | varchar(40) | |
yglevel | 职称 | varchar(10) | |
ygdate | 进入公司时间 | datetime | |
表5.1 员工基本信息表
字段名称 | 字段含义 | 数据类型及长度 | 约束 |
kqid | 员工编号 | varchar(10) | 主键 |
kqname | varchar(10) | ||
kqdate | 日期 | datetime | |
kqdays | 本月天数 | varchar(10) | |
qwork | 出勤 | varchar(10) | |
kqabsent | 旷工 | varchar(10) | |
kqearly | 早退 | varchar(10) | |
kqover | 加班 | varchar(10) | |
表5.2 员工考勤信息表
字段名称 | 字段含义 | 数据类型及长度 | 约束 |
pjid | 员工编号 | varchar(10) | 主键 |
pjname | varchar(40) | ||
pjdept | 部门 | varchar(10) | |
pjlevel | 业务水平 | varchar(10) | |
ygresult | 工作业绩 | varchar(10) | |
pjdate | 时间 | varchar(10) | |
pjposition | 工作态度 | varchar(10) | |
pjother | 其他 | varchar(10) | |
表5.3 员工工资评价信息表
字段名称 | 字段含义 | 数据类型及长度 | 约束 |
gxid | 员工编号 | varchar(10) | 主键 |
gxname | varchar(40) | ||
gzdate | 时间 | datetime | |
gxbase | 底薪 | varchar(10) | |
gxbonus | 奖金 | varchar(10) | |
gxduct | 扣考核 | varchar(10) | |
gxhouse | 房租 | varchar(10) | |
gxlaborage | 实发工资 | varchar(10) | |
表5.4 员工工资信息表
5.1.2 关系模式的存取方式
关系模式采用索引存取方法与聚簇存取方法共用。为数据库中各基本表建立的索引如下:基本表员工编号、经常在查询条件中出现,考虑在其之上建立聚簇索引。
5.1.3 数据库安全性
安全与要求:此系统可以分为用户和管理员,用户可以浏览自己的个人信息,但不能修改自己的信息,凡要修改都需通过管理员去修改。管理员主要管理
系统的各种信息。
目标:在于开发一个功能使用、操作方便,简单明了的人事管理系统。再设计出功能强大的软件的同时,尽可能地减少对系统资源的占用,并且还要力求做到通过使用本系统,尽量使单位的人事管理工作系统化、自动化和规化,从而达到提高企、事业单位管理效率的目的,同时也希望此次工程加强我们自身的小组协作意识,加深程序设计思想,同时要学习工程设计思想,再技术和软件工程思想上同时得到锻炼和提高。人事管理信息系统,在实际工作中得到了广泛的应用,它对企事业单位的人力资源进行有效的管理,提高了管理的效率。本系统的技术完备、成熟,经济效益合理,满足安全真实的企业人事管理信息系要求:
1、规企业管理,实现对全公司人事管理的实时监控;
2、实现对每名员工个人业绩的考核;
3、实现较完善的人事管理体系;
4、为企业领导决策提供依据;
5、系统符合实际生产需求,人机界面友好,操作简单。
第六章 实现运行与维护
6.1 实现
根据概要设计和逻辑设计的结果,在计算机上建立实际的数据库结构,导入数据进行程序调试。
1、创建员工基本信息的数据库
2、创建员工考勤信息数据库
3、创建员工工作评价信息数据库
4、员工工资信息数据库
6.2 人机界面设计
6.2.1 用户登录界面
用户登陆界面是每一个用户,在登陆本系统时出现的界面,如要用户输入用户名、密码,以及确定用户身份。其界面如下图:
图6-1 登陆页面
登陆成功后的页面:
图6-2 登陆成功的页面
员工基本信息视图:
图6-3 员工基本信息页面
员工工作评价视图:
图6-4 员工工作评价页面
员工考勤视图:
图6-5员工考勤页面
员工工资视图:
图6-6 员工工资页面
系统视图:
图6-7 系统页面
6.3 系统测试
6.3.1员工基本信息测试
1、查询员工信息
a.查询所有员工信息
图6-8 员工基本信息页面
b.按员工编号查询
查找员工信息页面:
图6-9 查找员工信息页面
查询结果:
图6-10 查询结果页面
c.按员工查询
查找员工信息页面:
图6-11 查询结果页面
2、增、删、改员工信息
a.增加员工信息
图6-12 查询结果页面
增加成功:
图6-13 查询结果页面
结果显示:
图6-14 查询结果页面
b.修改员工信息
图6-15 修改页面
修改成功:
图6-16 修改成功页面
c.删除员工信息
执行操作:
图6-17 删除员工界面
删除成功:
图6-18 删除成功页面
6.3.3员工工作评价测试
图6-19 系统页面
6.3.4 员工考勤测试
a.查询所有员工考勤
图6-20 系统页面
b.查询员工考勤
图6-21 查询页面
查询结果:
图6-22 查询结果页面
6.3.5 员工工资测试
1.查询员工工资
图6-23 查询结果页面
2.增、删、改工资记录
a.增加工资记录
图6-24 系统页面
增加成功:
图6-25 系统页面
结果显示:
图6-26 系统页面
b.修改工资记录
修改成功页面:
图6-27 修改成功页面
结果显示:
图6-28 系统页面
c.删除工资记录
删除成功:
图6-29 系统页面
结果显示:
图6-30 系统页面
6.4 系统维护
设备的硬件故障可能造成本软件不能运行或不能正常进行输入、输出等后果,系统的资源不足及网络传输通道阻塞可能造成本软件不能正常运行,并有可能造成机器“死机”,上述故障的处理由用户自行解决。软件在运行过程中产生的数据库错误,将由系统自动记入错误日志,非数据传输引起的错误将由系统管理员或软件开发者解决。软件在运行过程中产生的其他错误,将根据情况由软件开发者或软件开发者协助系统管理员解决。
总结
在本系统的开发过程中,由于是我们初次开发软件,一方面对企业人事管理的整个流程不够熟悉,另一方面在知识、经验方面都存在着不足,时间也比较仓促,因此该系统必然会存在一些缺陷,缺少需要密码的登录页面,缺乏对系统整体进行周密考虑,这些都有待于进一步的改善。但其功能全面、易于日后系统更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是本管理系统所具备的。我们设计的企业人事管理系统,提供了较为完备的员工、工资等信息,实现了数据库的基本操作,如修改、插入、删除、查询等。完善的信息管理,支持员工信息、人员增加、调动。系统主要针对查看员工的各种信息需求所设计的,可以很好地管理数据。
通过这次课程设计,我们受益匪浅,在这短短的几个星期里,我们不仅将课堂上老师传授的理论知识付诸于实践,提高自己的理论水平,实际操作技巧,更重要的是我们还学到了很多可多课本上没有的知识。那就是”团结“”探索“和”支持“。团结——我们是一个团队,单靠一个人的力量什么也做不成,只有大家进网一处使,才能把事情做好;探索——凡事都要有探索的精神,它是助人向前的动力之源,遇事多问个“为什么”,你会从中学到很多;坚持——一路走来,困难重重 ,我们坚持,我们成功!
最后,感金海波老师的关心,指导与教诲,向所有帮助我们做好数据库设计的老师和同学们之一深深的感。
[3]《管理信息系统(第四版)》 薛华成著 清华大学 2005年
[4]《Java语言与面向对象程序设计》 清华大学 2007年
附录
主程序:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class MainUI implements ActionListener{
private JFrame jf; //主界面,显示表格数据
private JFrame jFrame;
private JMenuBar jmb; //主界面上的菜单栏对象
private JMenu jm1,jm2,jm3,jm4,jm5;//五个菜单,分别为员工基本信息、员工工作评价、员工考勤、员工工资、系统
private JMenuItem jmx1,jmx2,jmx3,jmx4,jmx5,jmx6;//员工基本信息的菜单项,分别为查询所有员工、按员工编号查询,按员工查询,增加员工,修改员工,删除员工
private JMenuItem jmp; //课程管理的菜单项,分别为
private JMenuItem jmk1,jmk2; //选课管理的菜单项,分别为
private JMenuItem jmg1,jmg2,jmg3,jmg4;
private JMenuItem jmexit; //系统的菜单项:退出
private JTable jt; //表格显示组件
private JScrollPane jsp; //滚动Pane,表格组件会用到
private Vector
private Vector
public static void main(String[] args) {
new MainUI();
}
public MainUI(){
jf=new JFrame(); //创建Frame
jmb=new JMenuBar(); //以下代码生成菜单栏、菜单、菜单项
jm1=new JMenu("员工基本信息");
jm2=new JMenu("员工工作评价");
jm3=new JMenu("员工考勤");
jm4=new JMenu("员工工资");
jm5=new JMenu("系 统");
jmx1=new JMenuItem("查询所有员工");
jmx1.addActionListener(this); //增加事件监听者
jmx2=new JMenuItem("按员工编号查询");
jmx2.addActionListener(this);
jmx3=new JMenuItem("按员工查询");
jmx3.addActionListener(this);
jmx4=new JMenuItem("增加员工");
jmx4.addActionListener(this);
jmx5=new JMenuItem("修改员工");
jmx5.addActionListener(this);
jmx6=new JMenuItem("删除员工");
jmx6.addActionListener(this);
jmp=new JMenuItem("查询所有员工工作评价");
jmp.addActionListener(this);
jmk1=new JMenuItem("查询所有员工考勤");
jmk1.addActionListener(this);
jmk2=new JMenuItem("查询员工缺勤");
jmk2.addActionListener(this);
jmg1=new JMenuItem("查询所有员工工资");
jmg1.addActionListener(this);
jmg2=new JMenuItem("增加员工工资记录");
jmg2.addActionListener(this);
jmg3=new JMenuItem("修改员工工资记录");
jmg3.addActionListener(this);
jmg4=new JMenuItem("删除员工工资记录");
jmg4.addActionListener(this);
jmexit=new JMenuItem("退出");
jmexit.addActionListener(this);
jf.setJMenuBar(jmb);
jf.setTitle("企业人事管理系统");//下两行把菜单项和菜单连接起来
jm1.add(jmx1);jm1.add(jmx2);jm1.add(jmx3);jm1.addSeparator();jm1.add(jmx4);jm1.add(jmx5);jm1.add(jmx6);
jm2.add(jmp);
jm3.add(jmk1);jm3.add(jmk2);
jm4.add(jmg1);jm4.addSeparator();jm4.add(jmg2);jm4.add(jmg3);jm4.add(jmg4);
jm5.add(jmexit);
jmb.add(jm1);jmb.add(jm2);jmb.add(jm3);jmb.add(jm4);jmb.add(jm5);//把菜单和菜单栏连接起来
rowData=new Vector
singleRowData=new Vector
jf.setExtendedState(JFrame.MAXIMIZED_BOTH);//设定主界面最大化,并显示它
jf.setVisible(true);
}
public void actionPerformed(ActionEvent e) { //事件处理方法,选择菜单项会执行此函数
if(e.getSource()==jmexit) System.exit(0); //选择“退出“菜单项,执行此语句
if(e.getSource()==jmp) //选择“查询所有员工评价“菜单项,执行此语句
{
new PjAdmin().queryAll(rowData); //通过PjAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers1(); //通过表格组件显示数据
}
if(e.getSource()==jmk1) //选择“查询所有员工考勤“菜单项,执行此语句
{
new KqAdmin().queryAll(rowData); //通过KqAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers3(); //通过表格组件显示数据
}
if(e.getSource()==jmk2) //选择“查询员工缺勤“菜单项,执行此语句
{
new KqAdmin().queryAll(rowData);//通过KqAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
String Ygid=JOptionPane.showInputDialog("请输入员工编号:"); //通过输入对话框得到待查询员工编号
new XxAdmin().queryByYgid(rowData,Ygid); //通过XxAdmin对象传递员工编号并查询数据库,得到的数据放入rowData中
this.displayWorkers3(); //通过表格组件显示数据
}
if(e.getSource()==jmg1) //选择“查询所有员工工资“菜单项,执行此语句
{
new GzAdmin().queryAll(rowData); //通过GzAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers2(); //通过表格组件显示数据
}
if(e.getSource()==jmg2){ //选择“增加员工工资记录“菜单项,执行此if语句
this.singleRowData.clear(); //使用vector变量前,先清空
new GzEditUI(jf,"增加工资记录",true,singleRowData); //生成员工工资记录编辑窗口,并取得新增员工工资数据,放入存储记录的数据变量singleRowData中
int rs=new GzAdmin().insert(singleRowData); //通过GzAdmin对象的insert方法向数据库插入记录
if(rs>0) //判断是否插入操作成功,并显示提示窗口
JOptionPane.showMessageDialog(null, "成功增加员工工资记录!");
else
JOptionPane.showMessageDialog(null, "增加员工工资记录失败!");
new GzAdmin().queryAll(rowData); //通过GZAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers2(); //通过表格组件显示数据
}
if(e.getSource()==jmg3){ //选择“修改员工工资记录“菜单项,执行此if语句
String Ygid=JOptionPane.showInputDialog("请输入员工编号:"); //通过输入对话框得到待修改员工号
new GzAdmin().queryByYgid(rowData,Ygid); //通过GzAdmin对象传递学号并查询数据库,得到的数据放入rowData中
new GzEditUI(jf,"修改员工工资记录",true,rowData.get(0)); //生成员工工资记录编辑窗口,并传入待修改学生数据,用户编辑后再取回放入存储记录的数据变量中
int rs=new GzAdmin().update(rowData.get(0));//通过GzAdmin对象的update方法向数据库修改记录,rowData.get(0)表示单条记录
if(rs>0) //判断是否插入操作成功,并显示提示窗口
JOptionPane.showMessageDialog(null, "成功修改员工工资记录!");
else
JOptionPane.showMessageDialog(null, "修改员工工资记录失败!");
new GzAdmin().queryAll(rowData); //通过GzAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers2(); //通过表格组件显示数据
}
if(e.getSource()==jmg4){ //选择“删除员工工资记录“菜单项,执行此if语句
String Ygid=JOptionPane.showInputDialog("待删除员工编号:"); //通过输入对话框得到待删除员工编号
new GzAdmin().queryByYgid(rowData,Ygid); //通过GzAdmin对象传递员工编号并查询数据库,得到的数据放入rowData中
new GzEditUI(jf,"删除员工工资记录",true,rowData.get(0)); //生成员工记录编辑窗口,并传入待修改员工数据,待用户确认待删除数据
int rs=new GzAdmin().delete(Ygid); //通过GzAdmin对象的delete方法向数据库删除记录,需要员工记录值
if(rs>0) //判断是否插入操作成功,并显示提示窗口
JOptionPane.showMessageDialog(null, "成功删除员工工资记录!");
else
JOptionPane.showMessageDialog(null, "删除员工记录工资失败!");
new GzAdmin().queryAll(rowData); //通过GzAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers2(); //通过表格组件显示数据
}
if(e.getSource()==jmx1) //选择“查询所有员工“菜单项,执行此语句
{
new XxAdmin().queryAll(rowData); //通过XxAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers(); //通过表格组件显示数据
}
if(e.getSource()==jmx2){ //选择“按员工编号查询员工“菜单项,执行此if语句
String Ygid=JOptionPane.showInputDialog("请输入员工编号:"); //通过输入对话框得到待查询员工编号
new XxAdmin().queryByYgid(rowData,Ygid); //通过XxAdmin对象传递员工编号并查询数据库,得到的数据放入rowData中
this.displayWorkers(); //通过表格组件显示数据
}
if(e.getSource()==jmx3){ //选择“按员工查询员工“菜单项,执行此if语句
String Ygname=JOptionPane.showInputDialog("请输入员工:");//通过输入对话框得到待查询员工
new XxAdmin().queryByYgname(rowData,Ygname); //通过XxAdmin对象传递省份数据并查询数据库,得到的数据放入rowData中
this.displayWorkers(); //通过表格组件显示数据
}
if(e.getSource()==jmx4){ //选择“增加员工“菜单项,执行此if语句
this.singleRowData.clear(); //使用vector变量前,先清空
new XxEditUI(jf,"增加员工记录",true,singleRowData); //生成员工记录编辑窗口,并取得新增员工数据,放入存储记录的数据变量singleRowData中
int rs=new XxAdmin().insert(singleRowData); //通过XxAdmin对象的insert方法向数据库插入记录
if(rs>0) //判断是否插入操作成功,并显示提示窗口
JOptionPane.showMessageDialog(null, "成功增加员工记录!");
else
JOptionPane.showMessageDialog(null, "增加员工记录失败!");
new XxAdmin().queryAll(rowData); //通过XxAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers(); //通过表格组件显示数据
}
if(e.getSource()==jmx5){ //选择“修改员工“菜单项,执行此if语句
String Ygid=JOptionPane.showInputDialog("请输入员工编号:"); //通过输入对话框得到待修改员工编号
new XxAdmin().queryByYgid(rowData,Ygid); //通过XxAdmin对象传递并查询数据库,得到的数据放入rowData中
new XxEditUI(jf,"修改员工记录",true,rowData.get(0)); //生成员工记录编辑窗口,并传入待修改员工数据,用户编辑后再取回放入存储记录的数据变量中
int rs=new XxAdmin().update(rowData.get(0));//通过XxAdmin对象的update方法向数据库修改记录,rowData.get(0)表示单条记录
if(rs>0) //判断是否插入操作成功,并显示提示窗口
JOptionPane.showMessageDialog(null, "成功修改员工记录!");
else
JOptionPane.showMessageDialog(null, "修改员工记录失败!");
new XxAdmin().queryAll(rowData); //通过XxAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers(); //通过表格组件显示数据
}
if(e.getSource()==jmx6){ //选择“删除员工“菜单项,执行此if语句
String Ygid=JOptionPane.showInputDialog("待删除员工编号:"); //通过输入对话框得到待删除员工编号
new XxAdmin().queryByYgid(rowData,Ygid); //通过XxAdmin对象传递员工号并查询数据库,得到的数据放入rowData中
new XxEditUI(jf,"删除员工记录",true,rowData.get(0)); //生成员工记录编辑窗口,并传入待修改员工数据,待用户确认待删除数据
int rs=new XxAdmin().delete(Ygid); //通过XxAdmin对象的delete方法向数据库删除记录,需要员工编号值
if(rs>0) //判断是否插入操作成功,并显示提示窗口
JOptionPane.showMessageDialog(null, "成功删除员工记录!");
else
JOptionPane.showMessageDialog(null, "删除员工记录失败!");
new XxAdmin().queryAll(rowData); //通过XxAdmin对象执行queryAll方法查询数据库,得到的数据放入rowData中
this.displayWorkers(); //通过表格组件显示数据
}
}
public void displayWorkers() //用表格组件jt显示变量rowData的数据,其中数据从数据库中查询得到
{
Vector
columns.add("员工编号");columns.add("员工");columns.add("员工部门");columns.add("员工性别");
columns.add("员工出生日期");columns.add("员工籍贯");columns.add("员工职称");columns.add("入职日期");
jt=new JTable(rowData,columns); //用表头vector和数据库中取得数据rowData来生成表格
jt.setRowHeight(0,30); //以下几行设置表格行间距等
jt.setRowHeight(25);
jt.setRowMargin(5);
jsp=new JScrollPane(jt);
jf.setContentPane(jsp);
jf.validate();
}
public void displayWorkers1() //用表格组件jt显示变量rowData的数据,其中数据从数据库中查询得到
{
Vector
columns.add("员工编号");columns.add("员工");columns.add("评价部门");columns.add("业务水平");
columns.add("工作业绩");columns.add("时间");columns.add("工作态度");columns.add("其他");
jt=new JTable(rowData,columns); //用表头vector和数据库中取得数据rowData来生成表格
jt.setRowHeight(0,30); //以下几行设置表格行间距等
jt.setRowHeight(25);
jt.setRowMargin(5);
jsp=new JScrollPane(jt);
jf.setContentPane(jsp);
jf.validate();
}
public void displayWorkers2() //用表格组件jt显示变量rowData的数据,其中数据从数据库中查询得到
{
Vector
columns.add("员工编号");columns.add("员工");columns.add("工资日期");columns.add("员工底薪");
columns.add("加班奖金");columns.add("迟到扣除");columns.add("房租费用");columns.add("实发工资");
jt=new JTable(rowData,columns); //用表头vector和数据库中取得数据rowData来生成表格
jt.setRowHeight(0,30); //以下几行设置表格行间距等
jt.setRowHeight(25);
jt.setRowMargin(5);
jsp=new JScrollPane(jt);
jf.setContentPane(jsp);
jf.validate();
}
public void displayWorkers3() //用表格组件jt显示变量rowData的数据,其中数据从数据库中查询得到
{
Vector
columns.add("员工编号");columns.add("员工");columns.add("考勤日期");columns.add("本月天数");
columns.add("出勤");columns.add("缺勤");columns.add("早退");columns.add("加班");
jt=new JTable(rowData,columns); //用表头vector和数据库中取得数据rowData来生成表格
jt.setRowHeight(0,30); //以下几行设置表格行间距等
jt.setRowHeight(25);
jt.setRowMargin(5);
jsp=new JScrollPane(jt);
jf.setContentPane(jsp);
jf.validate();
}
}
员工考勤信息的程序:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JTable;
public class KqAdmin {
Connection con;
String sql;
Statement statement;
PreparedStatement pstmt;
ResultSet rs;
int result;
public KqAdmin() {
}
public void dbConnect(){
try {
Class.forName(".mysql.jdbc.Driver");// 加载驱动程序
con = DriverManager.getConnection(
"jdbc:mysql://localhost/qyrs?useUnicode=true&characterEncoding=utf-8", "root", "");
} catch (Exception ex) {
System.out.println(ex);
}
}
public void dbClose(){
try {
// if(rs.next())rs.close();
if(!con.isClosed()) con.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
public void queryAll(Vector
if(!rowData.isEmpty()) rowData.clear();
dbConnect();
try {
sql="SELECT ygid,ygname,kqdate,kqdays,kqwork,kqabsent,kqearly,kqover FROM ygkqgl";
pstmt = con.prepareStatement(sql);// 数据库操作
rs = pstmt.executeQuery();
rsToRowData(rowData);
}catch (Exception ex) {System.out.println(ex);}
dbClose();
}
public void queryByYgid(Vector
if(!rowData.isEmpty()) rowData.clear();
dbConnect();
try {
sql="SELECT ygid,ygname,kqdate,kqdays,kqwork,kqabsent,kqearly,kqover FROM ygkqgl where ygid=?";
pstmt = con.prepareStatement(sql);// 数据库操作
pstmt.setString(1, ygid);
rs = pstmt.executeQuery();
rsToRowData(rowData);
}catch (Exception ex) {System.out.println(ex);}
dbClose();
}
public void rsToRowData(Vector
try
{
if (!rs.next()){}
else {
do{
Vector
row.add(rs.getString("ygid"));
row.add(rs.getString("ygname"));
row.add(rs.getString("kqdate"));
row.add(rs.getString("kqdays"));
row.add(rs.getString("kqwork"));
row.add(rs.getString("kqabsent"));
row.add(rs.getString("kqearly"));
row.add(rs.getString("kqover"));
rowData.add(row);
} while (rs.next());
}
}catch(Exception ex) {
System.out.println(ex);
}
}
public void queryByYgname(Vector
if(!rowData.isEmpty()) rowData.clear();
dbConnect();
try {
sql="SELECT ygid,ygname,kqdate,kqdays,kqwork,kqabsent,kqearly,kqover FROM ygkqgl where ygname=?";
pstmt = con.prepareStatement(sql);// 数据库操作
pstmt.setString(1, ygname);
rs = pstmt.executeQuery();
rsToRowData(rowData);
}catch (Exception ex) {System.out.println(ex);}
dbClose();
}
}
员工评价信息程序:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JTable;
public class PjAdmin {
Connection con;
String sql;
Statement statement;
PreparedStatement pstmt;
ResultSet rs;
int result;
public PjAdmin() {
}
public void dbConnect(){
try {
Class.forName(".mysql.jdbc.Driver");// 加载驱动程序
con = DriverManager.getConnection(
"jdbc:mysql://localhost/qyrs?useUnicode=true&characterEncoding=utf-8", "root", "");
} catch (Exception ex) {
System.out.println(ex);
}
}
public void dbClose(){
try {
// if(rs.next())rs.close();
if(!con.isClosed()) con.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
public void queryAll(Vector
if(!rowData.isEmpty()) rowData.clear();
dbConnect();
try {
sql="SELECT ygid,ygname,pjdept,pjlevel,pjresult,pjdate,pjpostion,pjother FROM yggzpjgl";
pstmt = con.prepareStatement(sql);// 数据库操作
rs = pstmt.executeQuery();
rsToRowData(rowData);
}catch (Exception ex) {System.out.println(ex);}
dbClose();
}
public void queryByYgid(Vector
if(!rowData.isEmpty()) rowData.clear();
dbConnect();
try {
sql="SELECT ygid,ygname,pjdept,pjlevel,pjresult,pjdate,pjpostion,pjother FROM yggzpjgl where ygid=?";
pstmt = con.prepareStatement(sql);// 数据库操作
pstmt.setString(1, ygid);
rs = pstmt.executeQuery();
rsToRowData(rowData);
}catch (Exception ex) {System.out.println(ex);}
dbClose();
}
public void rsToRowData(Vector
try
{
if (!rs.next()){}
else {
do{
Vector
row.add(rs.getString("ygid"));
row.add(rs.getString("ygname"));
row.add(rs.getString("pjdept"));
row.add(rs.getString("pjlevel"));
row.add(rs.getString("pjresult"));
row.add(rs.getString("pjdate"));
row.add(rs.getString("pjpostion"));
row.add(rs.getString("pjother"));
rowData.add(row);
} while (rs.next());
}
}catch(Exception ex) {
System.out.println(ex);
}
}
}
员工基本信息程序:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JTable;
public class PjAdmin {
Connection con;
String sql;
Statement statement;
PreparedStatement pstmt;
ResultSet rs;
int result;
public PjAdmin() {
}
public void dbConnect(){
try {
Class.forName(".mysql.jdbc.Driver");// 加载驱动程序
con = DriverManager.getConnection(
"jdbc:mysql://localhost/qyrs?useUnicode=true&characterEncoding=utf-8", "root", "");
} catch (Exception ex) {
System.out.println(ex);
}
}
public void dbClose(){
try {
// if(rs.next())rs.close();
if(!con.isClosed()) con.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
public void queryAll(Vector
if(!rowData.isEmpty()) rowData.clear();
dbConnect();
try {
sql="SELECT ygid,ygname,pjdept,pjlevel,pjresult,pjdate,pjpostion,pjother FROM yggzpjgl";
pstmt = con.prepareStatement(sql);// 数据库操作
rs = pstmt.executeQuery();
rsToRowData(rowData);
}catch (Exception ex) {System.out.println(ex);}
dbClose();
}
public void queryByYgid(Vector
if(!rowData.isEmpty()) rowData.clear();
dbConnect();
try {
sql="SELECT ygid,ygname,pjdept,pjlevel,pjresult,pjdate,pjpostion,pjother FROM yggzpjgl where ygid=?";
pstmt = con.prepareStatement(sql);// 数据库操作
pstmt.setString(1, ygid);
rs = pstmt.executeQuery();
rsToRowData(rowData);
}catch (Exception ex) {System.out.println(ex);}
dbClose();
}
public void rsToRowData(Vector
try
{
if (!rs.next()){}
else {
do{
Vector
row.add(rs.getString("ygid"));
row.add(rs.getString("ygname"));
row.add(rs.getString("pjdept"));
row.add(rs.getString("pjlevel"));
row.add(rs.getString("pjresult"));
row.add(rs.getString("pjdate"));
row.add(rs.getString("pjpostion"));
row.add(rs.getString("pjother"));
rowData.add(row);
} while (rs.next());
}
}catch(Exception ex) {
System.out.println(ex);
}
}
}
¥29.8
¥9.9
¥59.8