人事管理系统实验报告.docx
《人事管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《人事管理系统实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
人事管理系统实验报告
湖南科技大学计算机科学与工程学院
数据库系统课程设计报告
题目:
人事管理系统
年级专业:
计算机科学与技术
学号:
**********
姓名:
******
指导老师:
********
完成时间:
2014.01.03
第一章系统需求分析
1.1系统功能分析
人事管理系统主要有以下几项功能要求:
●新员工资料的输入
●自动分配员工,并且设置初始的用户密码
●人事变动的详细记录,包括岗位和部门的调整
●员工信息的查询和修改,包括员工个人信息和密码等
●查询人事变更记录
1.2系统功能模块设计
根据系统功能需求,可以将系统分解成几个模块来分别设计应用程序设计界面,如下图所示:
1.3与其它系统的关系
本系统是公司管理信息系统的基础部分。
为其他子系统,如考勤管理系统、工资管理系统和员工培训系统,提供员工的基本信息。
同时为其它的系统提供了员工登录的密码认定和权限分配功能。
1.4数据流程图
人事信息管理系统的数据流程如图所示,所有数据有人事科管理员输入。
1.5数据库需求分析
根据数据流程图,可以列出以下数据项和数据结构:
●员工信息:
员工号、密码、权限、姓名、性别、生日、所在部门、职务、受教育程度、专业、家庭住址、电话、电子邮箱、当前状态、备注
●人事变更记录:
记录号、员工号、变动、详细记录。
所需的外部数据支持:
●部门信息:
部门编号、名称、部门经理、简介
●受教育程度代码表:
代码、说明
●职务代码表:
职务编号、名称
●人事变动代码:
代码、描述
第二章概念结构设计
2.1概念结构设计的步骤
概念结构的设计可分为两步:
第一步是抽象数据并设计局部视图。
第二步是集成局部视图,得到全局的概念结构。
员工实体E-R图:
部门实体E-R图:
职务代码表E-R图:
教育程度代码表E-R图:
人事变动代码表E-R图
人事变更记录表E-R图:
实体E-R总图:
第三章逻辑结构设计
3.1E-R图向关系模型的转换
将总体关系的E-R图转换为关系模型:
员工(员工号、密码、用户权限、姓名、性别、生日、所在部门、职务、受教育程度、专业技能、家庭住址、联系电话、电子邮箱、当前状态、备注)
部门(部门号,部门名称,部门经理,简介)
职务(职务号、职务名称)
教育程度(代码,说明)
人事变更记录(记录编号,员工号,变更代码,详细记录)
人事变动代码(代码,描述)
第四章物理结构设计
4.1数据表的物理结构
根据系统E-R图,本系统需要有两个数据分别来存放工人个人信息和人事变动记录。
并且需要一个外部数据表(部门信息)的支持。
同时部分记录字段需要用代码来表示,因此需要3个代码来分别记录教育程度、职务和人事变更的代码。
这个6个数据表的结构如表1到表6所示。
表1PERSON员工个人信息表
字段名
数据类型
长度
是否为空
说明
ID
int
4
NOTNULL
员工号(主关键字)
PASSWD
varchar
50
NOTNULL
密码
AUTHORITY
varchar
50
NOTNULL
用户权限
NAME
varchar
50
NOTNULL
姓名
SEX
int
4
NOTNULL
性别
BIRTHDAY
varchar
50
NULL
生日
DEPARTMENT
int
4
NOTNULL
所在部门
JOB
int
4
NOTNULL
职务
EDU_LEVEL
int
4
NOTNULL
受教育程度
SPCIALTY
varchar
50
NULL
专业技能
ADDRESS
varchar
50
NULL
家庭住址
TEL
varchar
50
NULL
联系电话
EMAIL
varchar
50
NULL
电子邮箱
STATE
bit
1
NOTNULL
当前状态(T-员工、F-非员工)
REMARK
text
16
NULL
备注
表2PERSONNEL人事变更记录表
字段名
数据类型
长度
是否为空
说明
ID
int
4
NOTNULL
记录编号
PERSON
int
4
NOTNULL
员工号
CHANGE
int
4
NOTNULL
变更代码
DESCRIPTION
text
16
NULL
详细记录
表3EDU_LEVEL受教育程度代码表
字段名
数据类型
长度
是否为空
说明
CODE
int
4
NOTNULL
代码
DESCRIPTION
varchar
50
NULL
描述
表4JOB职务代码表
字段名
数据类型
长度
是否为空
说明
CODE
int
4
NOTNULL
代码
DESCRIPTION
varchar
50
NULL
描述
表5PERSONNEL_CHANGE人事变动代码表
字段名
数据类型
长度
是否为空
说明
CODE
int
4
NOTNULL
代码
DESCRIPTION
varchar
50
NULL
描述
表6DEPANTMENT部门信息表
字段名
数据类型
长度
是否为空
说明
ID
INT
4
NOTNULL
部门编号
NAME
VARCHAR
50
NOTNULL
部门名称
MANAGER
INT
4
NOTNULL
部门经理
INTRO
VARCHAR
50
NULL
简介
第五章界面设计,主要模块算法设计等
5.1登入界面的设计
如下图:
登入模块算法设计:
获取界面上的输入的用户名、密码和选择身份,连接数据库;把获得的数据与数据库员工表里面的数据进行比较,如果正确则登入进去,否则提示错误。
5.2管理员的主界面的设计
如下图:
5.3新员工档案输入界面
如下图:
新员工档案输入模块算法设计:
随机给员工分配员工编号,给定一个默认密码,然后获取界面上的数据写入数据库,并且弹出一个增加人事变更记录的界面,记录新员工加入一些描述信息并写入数据库的人事变更记录表。
5.4增加人事变更记录界面
如下图:
子界面如下图:
显示员工部门和职务信息:
显示员工的状态:
增加人事变更记录模块算法设计:
随机产生记录编号,获取界面上员工号数据。
然后根据选择的变更原因:
◆如果是新员工加入,与数据库员工表里面的数据判断该员工编号是否存在,如果没有,则弹出新员工档案输入界面输入员工信息,然后输入详细记录并存入数据库人事变更表中。
◆如果是职务变动,与数据库员工表里面的数据判断该员工编号是否存在,如果没有,提示没此员工,否则显示员工的部门和职务信息供修改,然后输入详细记录并存入数据库人事变更表中。
◆如果是辞退,与数据库员工表里面的数据判断该员工编号是否存在,如果没有,提示没此员工,否则显示员工的状态供修改,然后输入详细记录并存入数据库人事变更表中。
5.5员工档案查询界面
如下图:
员工档案查询模块算法设计:
根据选择的查询条件,例如员工编号、部门和所有人,连接数据库员工表查询数据,显示在表格中。
5.6查询人事记录界面:
如下图:
人事记录查询模块算法设计:
根据选择的查询条件,例如记录编号、员工编号和变更原因,连接数据库人事记录表查询数据,显示在表格中。
5.7显示员工信息界面
如下图:
显示员工个人信息算法设计:
根据普通员工在登入界面输入用户名,连接数据库员工信息表查询数据,显示在界面上。
并且提供给员工修改自己能修改的数据,并且保存到数据库员工信息表。
第6章主要程序模块代码的编写和调试
6.1登入模块
核心代码如下:
/**
*检查用户名和密码是否正确
*@paramid员工编号
*@parampassword员工编号
*@paramflagTRUE表示管理员登入FALSE表示普通员工登入
*@return如果正确返回TRUE否则FALSE
*/
publicbooleancheckOut(intid,Stringpassword,booleanflag){
booleanisTrue=false;
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrs=null;
try{
conn=DbUtil.getConn();
Stringsql=null;
if(flag){
sql="select*fromt_personwhereid=?
andpassword=?
anddepartment=0andstate=1";
}else{
sql="select*fromt_personwhereid=?
andpassword=?
andstate=1";
}
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1,id);
pstmt.setString(2,password);
rs=pstmt.executeQuery();
if(rs.next()){
isTrue=true;
}else{
isTrue=false;
}
}catch(SQLExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
DbUtil.close(rs,pstmt,conn);
}catch(Exceptione){
e.printStackTrace();
}
}
returnisTrue;
}
调试信息:
如果登入成功就会进入管理员主界面或普通员工个人信息显示界面,否则会提示如下图的错误。
6.2新员工档案输入模块
核心代码如下:
1.随机分配员工编号
/**
*随机产生员工的编号
*@return返回员工的编号
*/
publicintinitID(){
Randomr=newRandom();
intid=0;
Connectionconn=null;
PreparedStatementpstmt=null;
ResultSetrs=null;
try{
conn=DbUtil.getConn();
Stringsql