数据库课程设计——企业员工人事管理系统
(刚结束数据库的课设上机,因为最近特别特别忙,所以数据库课设也没有特别认真在做,前后只用了几天,发表在这里只是为了记录成长历程,不用作任何商业用途,大家有需要可以参考一下,但建议大家看看就好,如果时间充裕的话,大家自己写出来的一定会比我的更好,毕竟本人也是菜鸟一枚,正蓄力成长中。
废话不多说,数据库前端应用界面是用Java Swing写的,数据库是Sql Server,一些代码资源啥的可见如下百度网盘链接:https://pan.baidu.com/s/1S8pGr8CvC1dq5nGwi4FxNg
提取码:n08u
)
近年来,由于计算机硬件、软件的飞速发展和广泛应用,对于企业管理而言,研发一个信息化自动化的员工人事管理系统至关重要。在本次数据库课设中,通过前期查阅企业员工工作流程等相关资料,根据开发设计系统时系统应该满足的可操作性、实用性、可靠性、安全性以及可维护性等原则,针对企业管理员工的主要数据以及功能需求,开发了一个基于Sql Server数据库且利用Java Swing书写windows前端界面实现该系统的相关功能的简要企业员工人事管理系统,该系统大概内容如下:
企业人事管理系统主要用于员工个人资料的录入、职务变动的记录和管理,使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配。人事管理系统主要以下几项功能要求:新员工资料的输入;自动分配员工号,并且设置初始的用户密码;人事变动的详细记录,包括岗位和部门的调整;员工信息的查询和修改,包括员工个人信息和密码等。
上班签到和下班签离;
(1) 对员工基本信息如姓名、学历、所属部门等的查询与修改;
(2) 对员工职位或部门调整等信息的管理;
(3) 对企业各部门信息的添加修改等管理;
(4) 对员工工资的调整,奖金的发放金额的管理;
(5) 对员工入职离职等信息的管理,如新员工入职时在数据库相应表中
(6) 录入该员工基本信息,将员工设定为在职状态;当员工离职时,将员工改为离职状态,并从数据库中删去该员工相关数据。
通过前期利用网络媒体等平台对企业管理员工流程等方面数据的调研结果,本系统应具有的功能有:
系统有两类用户,企业员工,企业系统管理员;
管理员拥有对入职员工基本信息的查询,因升职等客观原因而引起的职位变动、薪资增长等员工基本信息的修改,新员工信息的添加以及离职员工信息删除等功能;
部门信息查询,部门合并或削减时部门信息的修改或删除功能;
员工拥有上班签到和下班签离的功能;
管理员拥有对员工基本工资信息的查询,因升职或奖励等原因引起的工资的增加、修改及离职等原因导致的员工基本工资信息的删除等功能;
管理员拥有对员工签到信息的查询功能;
人员调用信息的查询,当执行人员调动时人员调动信息的自动添加,当撤销人员调动时系统自动删除相关人员调动信息。
以上该系统的主要功能需求可如下图1所示:
(1) DD(数据字典):
数据结构:员工基本信息(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、婚姻状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工基本工资、所在部门编号、状态)
数据项:
编号:在添加新入职员工的基本信息时,系统会根据预先设定的某种规则,自动为每个员工分配一个唯一且有特殊意义的编号;
状态:状态有在职和离职两种形式;
入职时间:入职时间由系统确定,规定某员工转正时间为正式入职时间;
员工级别:员工级别有试用、正式、组长、部门经理、总经理;
员工基本工资:员工基本工资分为两类,基础底薪和奖金,员工初始工资应为职位所对应的具体薪资。
(2) DFD(数据流图):
(1)DD(数据字典):
数据结构:员工信息修改(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、婚姻状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工基本工资、所在部门编号、状态)
数据项:
所在部门编号:由系统预先定义,部门编号与具体部门一一对应;
编号:在添加新入职员工的基本信息时,系统会根据预先设定的某种规则,自动为每个员工分配一个唯一且有特殊意义的编号;
状态:状态有在职和离职两种形式;
入职时间:入职时间由系统确定,规定某员工转正时间为正式入职时间;
员工级别:员工级别有试用、正式、组长、部门经理、总经理。
(2)DFD(数据流图):
(1)DD(数据字典):
数据结构:签到签离(签到编号、员工编号、所属部门、签到时间、签离时间)
数据项:
签到编号:根据打卡时间,系统自动排序生成;
签到时间:系统根据当前时间自动生成;
签离时间:系统根据当前时间自动生成;
(2)DFD(数据流图):
(1)DD(数据字典):
数据结构:部门管理(部门编号、部门名称、部门职能、上级部门编号)
数据项:
部门编号:系统预先为公司各部门分配一个编号;
上级部门编号:由输入部门信息时,管理员根据公司实际情况指定,一个部门只能有1个或0个上级部门。
(2)DFD(数据流图):
(1)DD(数据字典):
数据结构:人员调动(调动编号、员工编号、调动时间、调动部门编号、调动原因、调动职位)
数据项:
调动编号:该编号无实际意义,由系统自动生成,作为调动信息的记录编号,根据调动时间进行排序;
调动职位:职位主要有:执行总裁、部门负责人、组长;
调动原因:调动原因处无固定选项,为字符串格式,可自行输入调动的原因,如升职任命、部门合并、降职及工作失误等;
调动时间:具体调动时间以执行调动命令时当前系统时间为准,由系统自动生成;
(2)DFD(数据流图):
(1)DD(数据字典):
数据结构:员工工资管理(工资编号、员工编号、员工姓名、员工基本工资、员工奖金、发放时间)
数据项:
工资编号:该编号由系统自动生成,用来标识发放工资的记录;
发放时间:由系统根据薪资发放成功的时间自动生成;
员工奖金:员工奖金包括年终奖和平时奖励,年终奖由签到全勤的员工获得,平时奖励根据具体事例由管理员输入,在发工资时由系统统一计算;
(2)DFD(数据流图):
采用E-R方法进行数据库的概念设计,分数据抽象、设计局部概念模式、设计全局概念模式三个过程,经过数据抽象、局部视图设计,最终集成的全局E-R图如下所示如下:
根据数据库概念结构设计,并按照一定的转换原则,根据范式规则,数据库概念结构转化的关系模式如下:
(1)部门(部门编号、名称、职能、上级部门编号);
(2)工资信息(工资编号、员工编号、基本工资、奖金,发放时间);
(3)员工基本信息(编号、姓名、性别、照片、民族、生日、政治面貌、文化程度、婚姻状况、籍贯、身份证号、手机号码、档案存放地、户口所在地、入职时间、员工级别、员工基本工资、所在部门编号、状态,密码,身份);
(4)人员调动(调动编号、员工编号、调动时间、调动部门、调动原因、调动职位);
(5)员工签到(签到编号、员工编号、签到时间、签离时间)。
(1)工资信息—基本工资和奖金不能低于0,员工编号只能是数据库里面有的信息,不能随意添加;
(2)员工基本信息—入职时间为当前时间,由系统自动添加,不可随意更改;
(3)人员调动信息—调动时间为当前时间,由系统自动添加,不可随意更改;
(4)人员签到信息—签到时间和签离为当前时间,由系统自动添加,不可随意更改。
(1)管理员:可对部门信息,员工信息,工资信息,人员调动等进行增删改查的操作,对员工签到信息,可以进行查看
(2)普通用户:只能进行登陆后,进行签到,签离的操作
backup database 工资人事管理系统
to disk = ‘F:\工资人事管理系统.Bak’ with format,
name = ‘工资人事管理系统’;
create database 工资人事管理系统;
use 工资人事管理系统;
(1)企业部门表的创建
create table BM(
bmbh varchar(40) not null primary key,
bmmc varchar(40) not null,
bmzn varchar(40) not null,
sjbmbh varchar(40) not null
);
(2)员工工资信息表的创建
create table Gzxx(
gzbh varchar(40) not null primary key,
ygbh varchar(40) not null,
jbgz float not null,
jj float not null
);
create table Rydd(
ddbh varchar(40) not null primary key,
ygbh varchar(40) not null,
ddsj date not null,
ddbm varchar(40) not null,
ddyy varchar(40) not null,
ddzw varchar(40) not null
);
create table Ygjbxx (
bh varchar(40) not null primary key,
xm varchar(40) not null,
xb varchar(40) not null,
zp varchar(40) not null,
mz varchar(40) not null,
sr varchar(40) not null,
zzmm varchar(40) not null,
whcd varchar(40) not null,
hyzk varchar(40) not null,
jg varchar(40) not null,
sfzh varchar(40) not null,
sjhm varchar(40) not null,
dacfd varchar(40) not null,
hkszd varchar(40) not null,
rzsj date not null,
ygjb varchar(40) not null,
ygjbgz float not null,
szbmbh varchar(40) not null,
zt varchar(40) not null,
mm varchar(40) not null,
sf varchar(40) not null
);
(5)员工签到表的创建
create table Ygqd (
qdbh varchar(40) not null primary key,
ygbh varchar(40) not null,
qdsj date not null,
qlsj date
);
(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)展示员工签到信息和它对应的员工名字
create view 签到_员工
as
select ygqd.*,ygjbxx.xm
from ygjbxx,ygqd
where ygqd.ygbh=ygjbxx.bh;
(1)输入员工名字,得到他的工资信息
create procedure procedurea
@mc varchar(20)
as
begin
select *
from gzxx
where ygbh=
(select bh
from Ygjbxx
where xm=@mc);
end;
(2)输入员工名字,得到他的签到信息
create procedure procedureb
@mc varchar(20)
as
begin
select * from Ygqd where ygbh=(select bh from Ygjbxx where xm=@mc);
end;
(3)输入员工名字,得到他的账号和密码
create procedure procedurec
@mc varchar(20)
as
begin
select * from uuser where ygbh=(select bh from Ygjbxx where xm=@mc);
end;
(1)删除员工时,删除对应的人员调动,员工签到以及工资信息
create trigger triggerb
on ygjbxx after delete
as
begin
delete from rydd where ygbh=(select bh from deleted);
delete from ygqd where ygbh=(select bh from deleted);
delete from gzxx where ygbh=(select bh from deleted);
end;
(2)当员工职位调动时,其当月工资和奖金翻倍
create trigger triggerc
on rydd after insert
as
begin
update gzxx set jbgz=jbgz2,jj=jj2
where ygbh=(select ygbh from inserted)
and ffsj like concat(’%’,concat(month(getdate()),’%’));
end;
编写索引,根据员工签到时间排序
create index indexa on ygqd(qdsj desc);
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();
}
}
}
(三)程序界面
该系统用户共分为两类,一为企业系统管理员,一为普通员工,因此从管理员与用户两个角度简要展示该数据库前台应用的功能。
d)员工工资基本操作
图14 主要功能演示
管理员进入主界面后,可进行员工基本信息的查询,为新入职的员工录入信息,对离职的员工进行离职操作,对部门信息进行管理,对员工的工资信息进行查询记录,对员工进行职位或部门之间的调动管理,查看员工签到情况等。
其中,部门功能操作截图可见图14,因为篇幅有限,故此不一一展示。
(3)图14所示主要功能的核心代码展示如下:
图16 普通员工操作界面及签到签离功能
普通用户登录进取只有上班签到打卡以及下班签离打卡操作,界面简洁,其中部分操作可见图16所示。
六、附录1A
工资信息
列名 数据类型 是否允许为空 是否为主键 备注
Gzbh varchar(40) 否 是 工资编号
Ygbh varchar(40) 否 员工编号
Jbgz Float 否 基本工资
Jj Float 否 奖金
Ffsj varchar(40) 否 发放时间
员工基本信息
列名 数据类型 是否允许为空 是否为主键 备注
Bh varchar(40) 否 是 员工编号
Xm varchar(40) 否 姓名
Xb varchar(40) 否 性别
Zp varchar(40) 否 照片
Mz varchar(40) 否 名字
Sr varchar(40) 否 生日
Zzmm varchar(40) 否 政治面貌
Whcd varchar(40) 否 文化程度
Hyzk varchar(40) 否 婚姻状况
Jg varchar(40) 否 籍贯
Sfzh varchar(40) 否 身份证号
Sjhm varchar(40) 否 手机号码
Dacfd varchar(40) 否 档案存放地
Hkszd varchar(40) 否 户口所在地
Rzsj date 否 入职时间
Ygjb varchar(40) 否 员工级别
Ygjbgz float 否 基本工资
Szbmbh varchar(40) 否 所在部门编号
Zt varchar(40) 否 状态(离职,实习,正式等)
Sf varchar(40) 否 身份(管理员,普通员工)
Mm varchar(40) 否 密码
人员调动
列名 数据类型 是否允许为空 是否为主键 备注
Ddbh varchar(40) 否 是 调动编号
Ygbh varchar(40) 否 员工编号
Ddsj date 否 调动时间
Ddbm varchar(40) 否 调动部门编号
Ddyy varchar(40) 否 调动原因
Ddzw varchar(40) 否 调动职位
员工签到
列名 数据类型 是否允许为空 是否为主键 备注
Qdbh varchar(40) 否 是 签到编号
Ygbh varchar(40) 否 员工编号
Qdsj date 否 签到时间
Qlsj date 否 签离时间
部门
列名 数据类型 是否允许为空 是否为主键 备注
Bmbh varchar(40) 否 是 部门编号
Bmmc varchar(40) 否 部门名称
Bmzn varchar(40) 否 部门职能
Sjbmbh varchar(40) 否 上级部门编号