文章目录
-
系列文章目录
-
前言
- 一、数据库课设概述
- 二、需求分析
- 三、概念结构设计
- 四、逻辑结构设计
- 五、物理结构设计
- 六、数据库设计实施
- 七、团队成员负责模块
- 八、涉及到数据库与JAVA连接部分代码
- 九、完成界面设计主要涉及到JAVA的代码部分
- 十、企业人事资源管理系统功能的主要演示展示
-
十一、总结课程设计所遇到的问题以及如何解决问题
前言
结合MySQL语法和JAVA相关知识,在分析用户设计需求的基础上,设计并实现了企业人事资源管理系统。本文所介绍的企业人事资源管理系统主要用于员工个人资料的录入、职务变动的记录和管理,使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配。人事管理系统主要以下几项功能要求:新员工资料的输入;自动分配员工号,并且设置初始的用户密码;人事变动的详细记录,包括岗位和部门的调整;员工信息的查询和修改,包括员工个人信息和密码等。
主要研究基于JAVA的界面设计完成,我们通过调查研究关于企业怎样管理人事资源,分析数据并总结所需要的功能,以便于我们成功构建数据库模型,为下一步概念设计做准备,对于数据库的创建,我们需要加入众多功能,优化数据库的查询效率,完善处理数据的功能,设计JAVA界面,并添加所有的功能部分代码,完成数据库于JAVA连接,形成企业人事资源管理系统。
本文所设计的数据库系统主要功能有:(1)用户登录功能;(2)员工基本信息管理;(3)部门信息管理;(4)签到签离;(5)员工签到管理;(6)人员调用管理等。
一、概述
近年来,由于计算机硬件、软件的飞速发展和广泛应用,对于企业管理而言,研发一个信息化自动化的员工人事管理系统至关重要。在本次数据库课设中,通过前期查阅企业员工工作流程等相关资料,根据开发设计系统时系统应该满足的可操作性、实用性、可靠性、安全性以及可维护性等原则,针对企业管理员工的主要数据以及功能需求,开发了一个基于MySql Server数据库,并且利用Java Swing书写windows前端界面实现该系统的相关功能的简要企业员工人事管理系统,该系统大概内容如下:
企业人事管理系统主要用于员工个人资料的录入、职务变动的记录和管理,使用人事管理 系统,便于公司领导掌握人员的动向,及时调整人才的分配。人事管理系统主要有以下几项功能要求:新员工资料的输入;自动分配员工号,并且设置初始的用户密码;人事变动的详细记录,包括岗位和部门的调整;员工信息的查询和修改,包括员工个人信息和密码等。
二、需求分析
(一)用户需求
1.企业员工:
上班签到和下班签离;
2.企业系统管理人员:
(1) 对员工基本信息如姓名、学历、所属部门等的查询与修改;
(2) 对员工职位或部门调整等信息的管理;
(3) 对企业各部门信息的添加修改等管理;
(4) 对员工工资的调整,奖金的发放金额的管理;
(5) 对员工入职离职等信息的管理,如新员工入职时在数据库相应表中
(6) 录入该员工基本信息,将员工设定为在职状态;当员工离职时,将员工改为离职状 态,并从数据库中删去该员工相关数据。
(二)功能需求(行为需求)
通过前期利用网络媒体等平台对企业管理员工流程等方面数据的调研结果,本系统应具有的功能有:
1.登录功能:
系统有两类用户,企业员工,企业系统管理员;
2.员工基本信息管理:
管理员拥有对入职员工基本信息的查询,因升职等客观原因而引起的职位变动、薪资增长等员工基本信息的修改,新员工信息的添加以及离职员工信息删除等功能;
3.部门信息管理:
部门信息查询,部门合并或削减时部门信息的修改或删除功能;
4.签到签离:
员工拥有上班签到和下班签离的功能;
5.工资信息管理:
管理员拥有对员工基本工资信息的查询,因升职或奖励等原因引起的工资的增加、修改及 离职等原因导致的员工基本工资信息的删除等功能;
6.员工签到管理:
管理员拥有对员工签到信息的查询功能;
7.人员调用管理:
人员调用信息的查询,当执行人员调动时人员调动信息的自动添加,当撤销人员调动时系统自动删除相关人员调动信息。
以上该系统的主要功能需求可如图所示:
(三)数据需求
1.员工基本信息管理
(1) DD(数据字典):
数据结构:员工基本信息(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、婚姻 状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工 基本工资、所在部门编号、状态)
对所有部分数据结构的数据项进行分析,并总结每一个数据项所表示的意思,主要分析如下:
编号:在添加新入职员工的基本信息时,系统会根据预先设定的某种规则,自动为每个员工分配一个唯一且有特殊意义的编号;
状态:状态有在职和离职两种形式;
入职时间:入职时间由系统确定,规定某员工转正时间为正式入职时间;
员工级别:员工级别有试用、正式、组长、部门经理、总经理;
员工基本工资:员工基本工资分为两类,基础底薪和奖金,员工初始工资应为职位所对应的具体薪资。
(2) DFD(数据流图):
2.员工信息修改
(1)DD(数据字典):
数据结构:员工信息修改(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、 婚姻 状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工基本 工资、所在部门编号、状态)
对所有部分数据结构的数据项进行分析,并总结每一个数据项所表示的意思,主要分析如下:
所在部门编号:由系统预先定义,部门编号与具体部门一一对应;
编号:在添加新入职员工的基本信息时,系统会根据预先设定的某种规则,自动为每个员工分配 一个唯一且有特殊意义的编号;
状态:状态有在职和离职两种形式;
入职时间:入职时间由系统确定,规定某员工转正时间为正式入职时间;
员工级别:员工级别有试用、正式、组长、部门经理、总经理。
(2)DFD(数据流图):
3.员工签到签离
(1)DD(数据字典):
数据结构:签到签离(签到编号、员工编号、所属部门、签到时间、签离时间)
对所有涉及的数据结构的数据项进行分析,并总结每一个数据项所表示的意思,主要分析如下:
签到编号:根据打卡时间,系统自动排序生成;
签到时间:系统根据当前时间自动生成;
签离时间:系统根据当前时间自动生成;
(2)DFD(数据流图):
4.部门管理
(1)DD(数据字典):
数据结构:部门管理(部门编号、部门名称、部门职能、上级部门编号)
数据项:
部门编号:系统预先为公司各部门分配一个编号;
上级部门编号:由输入部门信息时,管理员根据公司实际情况指定,一个部门只能有1个或0个上级部门。
(2)DFD(数据流图):
5.人员调动
(1)DD(数据字典):
数据结构:人员调动(调动编号、员工编号、调动时间、调动部门编号、调动原因、调动职位)
数据项:
调动编号:该编号无实际意义,由系统自动生成,作为调动信息的记录编号,根据调动时间进行排序;
调动职位:职位主要有:执行总裁、部门负责人、组长;
调动原因:调动原因处无固定选项,为字符串格式,可自行输入调动的原因,如升职任命、部门合并、降职及工作失误等;
调动时间:具体调动时间以执行调动命令时当前系统时间为准,由系统自动生成;
(2)DFD(数据流图):
6.员工工资管理
(1)DD(数据字典):
数据结构:员工工资管理(工资编号、员工编号、员工姓名、员工基本工资、员工奖金、发放时间)
数据项:
工资编号:该编号由系统自动生成,用来标识发放工资的记录;
发放时间:由系统根据薪资发放成功的时间自动生成;
员工奖金:员工奖金包括年终奖和平时奖励,年终奖由签到全勤的员工获得,平时奖励根据具体事例由管理员输入,在发工资时由系统统一计算;
(2)DFD(数据流图):
7.系统全局用例图如下图所示:
三、概念结构设计
采用E-R方法进行数据库的概念设计,分数据抽象、设计局部概念模式、设计全局概念模式三个过程,经过数据抽象、局部视图设计,最终集成的全局E-R图如下所示如下:
五、逻辑结构设计
1.关系模式
根据数据库概念结构设计,并按照一定的转换原则,根据范式规则,数据库概念结构转化的关系模式如下:
(1)部门(部门编号、名称、职能、上级部门编号);
(2)工资信息(工资编号、员工编号、基本工资、奖金,发放时间);
(3)员工基本信息(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、婚姻状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工基本工资、所在部门编号、状态,密码,身份);
(4)人员调动(调动编号、员工编号、调动时间、调动部门、调动原因、调动职位);
(5)员工签到(签到编号、员工编号、签到时间、签离时间)。
2.完整性要求
(1)工资信息—基本工资和奖金不能低于0,员工编号只能是数据库里面有的信息,不能随意添加;
(2)员工基本信息—入职时间为当前时间,由系统自动添加,不可随意更改;
(3)人员调动信息—调动时间为当前时间,由系统自动添加,不可随意更改;
(4)人员签到信息—签到时间和签离为当前时间,由系统自动添加,不可随意更改。
3.安全管理和用户角色设置
(1)管理员:可对部门信息,员工信息,工资信息,人员调动等进行增删改查的操作,对员工签到信息,可以进行查看
(2)普通用户:只能进行登陆后,进行签到,签离的操作
4.数据库备份和恢复方案
pmsystem database 企业人事管理系统
to disk = ‘F:工资人事管理系统.Bak’ with format,
name = ‘企业人事管理系统’;
六、物理结构设计
1.数据库的创建
create database 企业人事管理系统;
use 企业人事管理系统;
2.表的创建
(1)企业部门表的创建
create table 部门(
部门编号 varchar(40) not null primary key,
部门名称 varchar(40) not null,
部门职能 varchar(40) not null,
上级部门编号 varchar(40) not null
);
(2)员工工资信息表的创建
create table 工资信息(
工资编号 varchar(40) not null primary key,
员工编号 varchar(40) not null,
基本工资 float not null,
奖金 float not null
);
(3)企业人事调动表的创建
create table 人员调动(
调动编号 varchar(40) not null primary key,
员工编号 varchar(40) not null,
调动时间 date not null,
调动部门编号 varchar(40) not null,
调动原因 varchar(40) not null,
调动职位 varchar(40) not null
);
(4)员工基本信息表的创建
create table 员工基本信息 (
编号 varchar(40) not null primary key,
姓名 varchar(40) not null,
性别 varchar(40) not null,
生日 varchar(40) not null,
政治面貌 varchar(40) not null,
文化程度 varchar(40) not null,
婚姻状况 varchar(40) not null,
籍贯 varchar(40) not null,
身份证号 varchar(40) not null,
手机号码 varchar(40) not null,
档案存放地 varchar(40) not null,
户口所在地 varchar(40) not null,
入职时间 date not null,
员工级别 varchar(40) not null,
员工基本工资 float not null,
所在部门编号varchar(40) not null,
状态 varchar(40) not null,
身份 varchar(40) not null,
密码 varchar(40) not null
);
3.视图设计
(1)展示工资编号,员工名字,基本工资和奖金
create view 员工_工资
as
select gzxx.,ygjbxx.xm
from ygjbxx,gzxx
where ygjbxx.bh=gzxx.ygbh;
(2)展示调动信息和它对应的员工名字
create view 调动_员工
as
select rydd.,ygjbxx.xm
from ygjbxx,rydd
where rydd.ygbh=ygjbxx.bh;
(3)展示员工签到信息和它对应的员工名字4.存储过程设计
create view 签到_员工
as
select ygqd.*,ygjbxx.xm
from ygjbxx,ygqd
where ygqd.ygbh=ygjbxx.bh;
4.存储过程设计
(1)输入员工名字,得到他的工资信息
create procedure procedurea
Cm varchar(20)
begin
select *
from 工资信息
where 员工编号=(select 编号 from 员工基本信息 where xm=Cm);
end;
(2)输入员工名字,得到他的签到信息
create procedure procedureb
Zm varchar(20)
as
begin
select * from 员工签到 where 员工编号=(select 编号 from 员工基本信息 where 姓名=Zm);
end;
(3)输入员工名字,得到他的账号和密码
create procedure procedurec
Am varchar(20)
as
begin
select * from uuser where 员工编号=(select bh from 员工基本信息 where xm=Am);
end;
5.触发器设计
(1)删除员工时,删除对应的人员调动,员工签到以及工资信息
create trigger triggerb
on 员工基本信息 after delete
as
begin
delete from 人员调动 where ygbh=(select bh from deleted);
delete from 员工签到 where ygbh=(select bh from deleted);
delete from 工作信息 where ygbh=(select bh from deleted);
end;
(2)当员工职位调动时,其当月工资和奖金翻倍
create trigger triggerc
on 人员调动 after insert
as
begin
update 员工信息 set 基本工资=基本工资*2,奖金=奖金*2
where 员工编号=(select 员工编号 from inserted)
and 发放时间 like concat(’%’,concat(month(getdate()),’%’));
end;
6.索引设计
(1)编写索引,根据员工签到时间排序
create index indexa on 员工签到(签到时间 desc);
六、数据库设计实施
(1)企业员工人事管理系统主要功能布局:
(2)程序流程图:
七、团队成员负责模块
主要负责人 | 团队成员负责模块 |
流泪的飞 | 主要负责数据库的建立与JAVA界面部分设计,实现部分功能的操作 |
蘑菇头 | 主要实现数据库部分的功能,实现JAVA界面整体设计及功能的操作。 |
八、涉及到数据库与JAVA连接部分代码
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class DBhelper {
/**
* 绑定数据库的帮助类
*/
private final static String CNAME="com.microsoft.sqlserver.jdbc.SQLServerDriver";
private final static String URL="jdbc:sqlserver://localhost:1433;databasename=工资人事管理系统";
private final static String NAME="sa";
private final static String PWD="123";
static {
try {
Class.forName(CNAME);
}catch(Exception e) {
e.printStackTrace();
}
}
//连接数据库的方法
public static Connection getCon(){
Connection con=null;
try {
con=DriverManager.getConnection(URL,NAME ,PWD);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return con;
}
//关闭连接的方法
public static void myClose(Connection con,PreparedStatement ps,ResultSet rs){
try {
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(con!=null&&!con.isClosed()){
con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
九、完成界面设计主要涉及到JAVA的代码部分
public Login() {
this.setTitle("登录界面");
this.setSize(350, 250);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(3);
this.setResizable(false);// 设置窗体无法改变大小
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
jpa.setLayout(gbl);
jcb.addItem("员工");
jcb.addItem("管理员");
// 用户名以及其文本框的位置
gbc.gridx = 0;
gbc.gridy = 0;
gbl.setConstraints(jla, gbc);// 让约束对象来约束jla(坐标)
jpa.add(jla);// 将jla增加到容器中
gbc.gridx = 1;
gbc.gridy = 0;
gbl.setConstraints(jtf, gbc);
jpa.add(jtf);
// 密码以及其文本框的位置
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(20, 0, 0, 0);
gbl.setConstraints(jlb, gbc);
jpa.add(jlb);
gbc.gridx = 1;
gbc.gridy = 1;
gbl.setConstraints(jpf, gbc);
jpa.add(jpf);
// 身份以及其文本框的位置
gbc.gridx = 0;
gbc.gridy = 2;
gbc.insets = new Insets(20, 0, 0, 0);
gbl.setConstraints(jlc, gbc);
jpa.add(jlc);
gbc.gridx = 1;
gbc.gridy = 2;
gbl.setConstraints(jcb, gbc);
jpa.add(jcb);
// 按钮位置
gbc.gridx = 0;
gbc.gridy = 3;
gbl.setConstraints(jba, gbc);
jpa.add(jba);
// 标题
JLabel jlc = new JLabel("公司人力资源管理系统!");
jlc.setFont(new Font("宋体", Font.BOLD, 20));
jpn.add(jlc);
// 登陆方法
jba.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 获取对应文本框的值
String xm = jtf.getText();
// 获得密码框的值
String mm = jpf.getText();
String role = jcb.getSelectedItem() + "";
Ygjbxx user=new Ygjbxx();
user.setXm(xm);
user.setMm(mm);
user.setSf(role);
if (role.equals("管理员")) {
String n=ud.login(user);
if (n!="") {
JOptionPane.showMessageDialog(null, "登陆成功!");
Login.this.dispose();
new YgjbxxTable();
} else {
JOptionPane.showMessageDialog(null, "登陆失败!");
}
} else if (role.equals("员工")) {
String n=ud.login(user);
if (n!="") {
JOptionPane.showMessageDialog(null, "登陆成功!");
Login.this.dispose();
new YgqdTable(n);
} else {
JOptionPane.showMessageDialog(null, "登陆失败!");
}
}
}
});
// 绑定数据
myShow("");
// 员工签到
jbl.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
new YgqdTables();
}
});
// 部门
jbb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new BmTable();
}
});
// 调动
jbj.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int rt = jtb.getSelectedRow();// 选中的行号
if (rt >= 0) {// 如果选中了
String id = dtm.getValueAt(rt, 0).toString();
new addryDd(id);
} else {
JOptionPane.showMessageDialog(null, "请选择你要使用的数据!");
}
}
});
// 调动记录
jbk.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new RyddTable();
}
});
// 增加工资信息
jbh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int rt = jtb.getSelectedRow();// 选中的行号
if (rt >= 0) {// 如果选中了
String id = dtm.getValueAt(rt, 0).toString();
new addGzxx();
} else {
JOptionPane.showMessageDialog(null, "请选择你要使用的数据!");
}
}
});
// 查看工资信息
jbi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new GzxxTable();
}
});
// 增加事件
jbc.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
new AddYgjbxx(YgjbxxTable.this);
}
});
// 查询事件
jba.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String sa = jtfb.getText();
myShow(sa);
}
});
// 删除事件
jbe.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
del();
}
});
// 修改事件
jbd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int rt = jtb.getSelectedRow();// 选中的行号
if (rt >= 0) {// 如果选中了
int t = JOptionPane.showConfirmDialog(null, "确定修改吗?");
if (t == 0) {
String id = dtm.getValueAt(rt, 0).toString();
Ygjbxx hb = new YgjbxxDao().getOne(id);
new UpdateYgjbxx(YgjbxxTable.this, hb);
}
} else {
JOptionPane.showMessageDialog(null, "请选择你要修改的数据!");
}
}
});
十、企业人事资源管理系统功能的主要演示展示
(一)程序界面
该系统用户共分为两类,一为企业系统管理员,一为普通员工,因此从管理员与用户两个角度简要展示该数据库前台应用的功能。
1、企业系统管理员
(1)管理员操作界面
(2)主要功能演示
(3)部门管理界面
(4)员工离职操作
(5)员工人事调动操作
(6)调动员工信息:
(7)删除员工信息:
十一、总结课程设计所遇到的问题以及如何解决问题
最初,老师布置的十四个课设题目中,我们对那些课设系统都不感兴趣,我们决定着手完成企业人事管理系统,首先我们对该课设题目的难易程度不了解,在我们做出决定去完成这个课设,就要准备面临所有有可能遇见的问题,并合力去解决这些问题。
在数据库方面,主要是设计概念结构方面,E-R图属性总是设计不完全,触发器的设计语法太过时,只能通过参考资料,来解决这个问题。更多的问题是,Mysql的语法错误,通过我们团体合作实现完成了整个系统功能,对数据库方面,共有600-700行代码,有游标,触发器,函数,视图等功能,完善了整体架构。
在JAVA设计界面,大概在编写java程序时遇到了不少困难,首先是java程序与数据库的连接问题,在网上找了各种方法,结果都连接不成功,也不知道是哪里出现了问题,2个小时后才发现是因为实现java与数据库连接的jar包并没有添加到路径中,解决这个问题后,java程序就与数据库成功的连接了,然后是java程序运行结果出现中文乱码,同样又是在网上寻找各种解决方法的问题,用了大概1个小时解决了这个问题,接着用java程序实现对数据库的各种操作,包括插入、删除、修改、查询等各种操作,本质上还是要用到sql语句,有时会出现sql语句语法错误的提示,一番查找后发现,教材上的sql语句对应的版本太老了,需要做出相应的改变;有时又会出现莫名其妙的错误,比如找不到这个表,表中的某一列不存在等等,在网上找到各种原因,逐一排查后最后解决掉问题。
最后,我们共同完成了上述功能的数据库系统,并解决了所有可能出现的问题,使我们的团队之间更加信任,有良好的团队精神。