基于 Spring Boot 框架的人事管理系统的设计与实现
内容摘要 : 人事管理在政府机关和企事业单位中占有极其重要的地位,各部门岗位之间协作和工效的提高,是人事管理的基本要求.本设计旨在实现微型人事管理信息系统,功能主要由人事在线通信、员工资料、人事信息管理、薪资调整分配、统计分析管理和系统设置管理系统构成.系统实现了员工信息编辑、人事信息入库展示分析、工资套帐处理及系统的设置、点对点在线讯息等功能.本设计在技术方面采用了较前沿的技术,应用端基于 Java EE 体系中开源应用框架 Spring Boot(集成 IOC, MVC, ORM),Spring Security (安全框架),内嵌 Tomcat 服务器;前端基于 JavaScript 的渐进式框架 Vue.js;页面设计基于 Element UI 库;路由处理基于 vue-router.数据库端使用 MySQL 数据库;系统架构基于当前主流的 MVVM(Model-View-View Model)模式,前后端分离的 SPA(single page Web application),即单页富应用程序.
关键词 :人事管理; MVVM; Spring Boot; Vue.js; RBAC;
一、引言
1.1 研发背景
目前,人事管理的系统大都是 CS 架构的大型系统,很少有面向机关,事业单位内部的基于 BS 架构的微型人事系统,因此.开发一个基于 BS 架构的人事信息管理系统是非常必要的.但是基于 BS 架构的人事系统对于安全是一个大的考验点.在人事信息系统中,功能需简单清晰,可操作性强,其次安全和权限是关键点.对人事信息的保密涉及到安全处理,对不同的操作员角色根据保密级别给予不同权限,是当前信息系统的基本需求.
1.2 研发的目的及意义
基于 Spring Boot 的人事管理系统符合当下的生产实际需求,对于一般的机关和事业单位来讲,对人事系统在功能方面没有复杂的需求,满足基本需求即可,同时,要求软件的经济成本较低,界面相对好看,实施部署容易,即不需要通过 SaaS 平台供应商耗费大量金钱,由内部人员实施维护.所以本设计的实现是很有意义的.
1.3 国内外研发现状
人事管理的系统软件的研发在多年来不断发展.不断革新.在公共管理学科领域中对"E-HR 成功实施"的不断探索为 E-HR 的研发提供了理论和前提.国外的发展相较于国内早 30 多年.成熟的产品有 SPA,Oracle 等.国内而言.术业有专攻.不同的业务场景有不用的强势产品.制造行业的有汇通科技.国有企业的有宏景软件.互联网行业的有欢雀 HR.综合性较强的有用友,金蝶等等.
二、项目概述
人事管理系统功能包括人事通讯,员工信息,人事考评,奖惩,培训管理,薪资管理,统计分析,和系统管理六大模块,对应人事工作基本流程:新员工入职档案建立,调动,辞职,员工信息的查询及工资管理等方面.系统管理可以根据不同的角色分配菜单权限设置,不同的用户授予不同角色,对人事结构,单位结构进行整体调配设置.在线聊天可以实现操作员之间讯息的及时通讯.
项目基于 MVVM 的前后端分离开发模式进行开发.MVVM 即模型(Model)-视图(View)-视图模型(View Model),实现了数据视图的双向绑定.相对于 MVC 模式和 MVP 来说,MVVM 是一个比较新的开发架构,它是一种将 MVP 模式与 WPF 相结合应用方式发展演变而成的新型开发架.[1]
前后端分离是指将前端和后端从之前的全部由后端负责中分离开来,不再共用一个 Server,前端作为一个独立 Serve 存在.[2]前后端通过接口使用 HTTP 协议交互,本项目使用 vu 实体属性 outer 做前端路由处理.页面跳转不在由后端处理,前后端只是数据的交互.前后端分离的好处在于降低了前后端的耦合性.当面对不同的硬件场景时,需要构建不同的界面,前后端分离之后,只需要扩展前端项目即可,不需要修改后端服务.
在动态权限处理方面,使用安全框架 Spring Security,基于 RBAC(Role-Based Access Control )角色的访问控制模型,由该模型主要由鉴权和授权构成,鉴权基于 Servlet 中 Filter 原理处理,授权由系统管理员操作.RBAC 的主要思想是:权限是和角色相关的,而用户则被分配相应的角色作为其成员,这样就大大简化了权限的管理.[3]
三、系统分析
3.1 系统可行性分析
3.1.1 运营可行
本系统在打包之后整体大小只有 38MB,硬件内存需求相当于一个移动端的普通 App 大小,运行内存基本上普通的单核 CPU,2G RAM 的 ESC 就可以满足需求,系统硬件需求低.访问兼容大部分浏览器(IE8/9/10/11,Chrome,Firefox),用户体验处理上,由前端视图操作通知,结合后端逻辑处理消息构成.响应用户的每一步操作.构建了良好的用户体验.
3.1.2 技术可行性
本系统中技术使用,后端技术涉及到 Spring Boot,Spring Security, MyBatis, MySQL 等,前端技术设计到 Vue, ElementUI, axios,Web Socket 等.系统架构基于 B/S 架构.
Spring Boot 是当前流行的 Java EE 体系框架,Spring Boot 提供了一种新的编程范式,能在小的阻力下开发 Spring 应用程序,可以更加敏捷地开发 Spring 应用程序,专注于应用程序的功能,不用在 Spring 的配置上多花功夫,甚至完全不用配置.Spring Boot 遵循约定大于配置的理念,在父子工程理念上极大程度上解决了依赖冲突的问题.
Spring Security 是 Spring 家族中的安全框架,Spring Boot 对于 Spring Security 提供了自动化配置方案,可以零配置使用 Spring Security .Spring Security 借助过滤器技术对 Web 应用进行保护,包括认证和授权两个过程.
Mybatis,MySQL 是持久化技术,都是开源轻量,Mybatis 是 ORM 解决方案,MySQL 是数据库系统.
Vue 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用,Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.
axios 是基于 Promise 用于浏览器和 node.js 的 HTTP 客户端的异步编程解决方案,可以从浏览器中创建 XMLHttpRequests,从 node.js 中创建 http 请求,支持 Promise API,拦截请求和响应,转换请求数据和响应数据,客户端支持防御 XSRF 等.
vu 实体属性 outer 在项目中用于前端动态加载路由管理.SPA 应用来讲,其实就是在前后端分离的基础上,加一层前端路由,即是由前端来维护路由规则,实现有两种,一种是利用 url 的 hash,另一种就是 HTML5 的 History 模式.[8]这里我们使用 vu 实体属性 outer 的 hash 方式.
B/S 架构是对 C/S 架构的一种改进,软件应用的业务逻辑完全由服务端实现[9],依托于浏览器,相对于 C/S 更轻量,用户体验要差一些,但是基于 B/S 的 SPA 和 AJAX 技术完美的解决了这个问题.
3.1.3 经济可行性
实现人事管理的自动化,HR 在减少失误的同时精简许多费用开支,在硬件消耗上依托于互联网.同时开发使用技术工具基本为开源产品技术.
3.2 系统流程分析
本系统所有管理员或操作员经由自定义验证,表单验证通过之后,会进行请求路径分析,Spring Security 会进行鉴权处理,确认当前登录用户的角色,匹配放行响应的资源.之后进行的业务,都是经过鉴权处理的,管理员对系统的操作都将被记录在日志里.前端会对所有请求拦截进行统一处理.分析需要返回数据还是消息.
3.2.1 系统访问控制流程图
访问控制基于 RBAC0 模型.由于之相对应的数据实体构成.由用户表,角色映射表,角色表,权限表,权限映射表构成.用户登录之后首先进行身份验证,成功之后获取当前用户的所有角色,之后根据角色加载对应的权限菜单, 前端为了良好的用户体验,这里默认不加载没有权限的菜单.当存在直接输入 URL 路径的情况时,对于登录用户的每一个请求,都会通过鉴权处理,分析角色.最后通过权限的判断分析是否可以访问菜单资源.
3.3 图 1 RBAC0 模型图
3.4 图 2 系统访问控制流程图
用户登录成功之后.选中不同的菜单.进行具体的业务处理.
3.4.1 系统业务操作流图
3.5 图 3 顶级数据流图
四、系统设计
4.1 系统功能模块设计
4.2 图 4 系统功能模块图
4.3 系统概念模型设计
系统实体部分 ER 图
图 5 员工实体属性图
图 6 员工奖惩实体属性图
图 7 操作日志实体属性图
图 8 操作员实体属性图
4.4 物理数据模型设计
在物理模型设计中,即将实体属性图的属性映射为具体的数据表中对应的列,在设计表中,除了要满足一些基本的建表规约,范式,还要根据具体的业务操作,考虑索引,表结构优化,以及在之后的系统业务需求迭代中的数据存储等问题.对于模式中的其他的结构,视图存储过程等,结合数据库事务特性合理创建.
表 1 appraise 表
列名 | 数值类型 | 是否为空 | 备注 |
---|---|---|---|
id | int(11) | NOT NULL | 主键 id |
eid | int(11) | NULL | 编号 |
appDate | date | NULL | 考评日期 |
appResult | varchar(255) | NULL | 考评结果 |
appContent | varchar(255) | NULL | 考评内容 |
remark | varchar(255) | NULL | 备注 |
表 2 employeeec 表
列名 | 数值类型 | 是否为空 | 备注 |
---|---|---|---|
id | int(11) | NOT NULL | 主键 id |
eid | int(11) | NULL | 员工编号 |
ecDate | date | NULL | 奖罚日期 |
ecReason | varchar(255) | NULL | 奖罚原因 |
ecPoint | int(11) | NULL | 奖罚分 |
ecType | int(11) | NULL | 奖罚类别 |
remark | varchar(255) | NULL | 备注 |
表 3 salary 工资表
列名 | 数值类型 | 是否为空 | 备注 |
---|---|---|---|
id | int(11) | NOT NULL | 主键 id |
basicSalary | int(11) | NULL | 基本工资 |
bonus | int(11) | NULL | 奖金 |
lunchSalary | int(11) | NULL | 午餐补助 |
trafficSalary | int(11) | NULL | 交通补助 |
allSalary | int(11) | NULL | 应发工资 |
pensionBase | int(11) | NULL | 养老金基数 |
pensionPer | float | NULL | 养老金比率 |
createDate | timestamp | NULL | 启用时间 |
medicalBase | int(11) | NULL | 医疗基数 |
medicalPer | float | NULL | 医疗保险比率 |
accumulationFundBase | int(11) | NULL | 公积金基数 |
accumulationFundPer | float | NULL | 公积金比率 |
name | varchar(255) | NULL | 名称 |
表 4 employee 表
列名 | 数值类型 | 是否为空 | 备注 |
---|---|---|---|
id | int(11) | NOT NULL | 员工编号 |
name | varchar(10) | NULL | 员工姓名 |
gender | char(4) | NULL | 性别 |
birthday | date | NULL | 出生日期 |
idCard | char(18) | NULL | 身份证号 |
wedlock | enum('已婚','未婚','离异') | NULL | 婚姻状况 |
nationId | int(8) | NULL | 民族 |
nativePlace | varchar(20) | NULL | 籍贯 |
politicId | int(8) | NULL | 政治面貌 |
varchar(20) | NULL | 邮箱 | |
phone | varchar(11) | NULL | 电话号码 |
address | varchar(64) | NULL | 联系地址 |
departmentId | int(11) | NULL | 所属部门 |
jobLevelId | int(11) | NULL | 职称 ID |
posId | int(11) | NULL | 职位 ID |
engageForm | varchar(8) | NULL | 聘用形式 |
tiptopDegree | enum('博士','硕士…… | NULL | 最高学历 |
specialty | varchar(32) | NULL | 所属专业 |
school | varchar(32) | NULL | 毕业院校 |
beginDate | date | NULL | 入职日期 |
workState | enum('在职','离职') | NULL | 在职状态 |
workID | char(8) | NULL | 工号 |
contractTerm | double | NULL | 合同期限 |
conversionTime | date | NULL | 转正日期 |
notWorkDate | date | NULL | 离职日期 |
beginContract | date | NULL | 合同起始日期 |
endContract | date | NULL | 合同终止日期 |
workAge | int(11) | NULL | 工龄 |
表 5 oplog 表
列名 | 数值类型 | 是否为空 | 备注 |
---|---|---|---|
id | int(11) | NOT NULL | 主键 id |
addDate | date | NULL | 添加日期 |
operate | varchar(255) | NULL | 操作内容 |
hrid | int(11) | NULL | 操作员 ID |
五、系统实现
用户登录访问后由 Spring Security 的 WebSecurityConfigurerAdapter 类实现认证和授权校验.登录成功后跳转主页,之后的每一次访问都会通过校验用户,角色,基于 Ant 格式的 URL 权限的匹配.
图 9 Spring Security 授权流程图
5.1 公共模块
5.1.1 主页
主页由日志和系统公告构成.逻辑处理上默认加载最新的操作日志及公告信息,数据展示通过 Spring 定时任务方式.服务端定时执行 SQL.以排序和截取方式获取最新入库数据,动态更新数据.
图 10 系统主页
5.1.2 在线聊天
在线聊天实现点对点的在线通讯.前端基于全双工通信 WebSocket 实现, WebSocket 由 HTTP 建立连接,由 TCP 进行会话,Web 服务器与客户端之间建立起 WebSocket 协议的连接,之后的协议都依靠专用协议进行,通信过程中可以互发送 JSON,XML,HTML 或图片等任意格式的数据,由于是建立在 HTTP 基础的协议上,即发起方仍是客户端,一旦确立 WebSocket 通信连接,不论服务器还是客户端,任意一方都可以直接向对方发送报文.[10] 在处理逻辑上.由键值对构建消息对象.
后端基于 Spring 框架提供的 WebSocket 的 STOMP 支持, STOMP 是一个简单的可互操作的协议, 通常被用于通过中间服务器在客户端之间进行异步消息传递.
图 11 在线聊天
5.2 员工资料
5.2.1 基本资料
实现对员工基本资料的增删改查.实现员工基本资料表 Excel 导入导出,多条件搜索.添加员工由数据库自动生成工号,其他信息为必填项.修改根据 id 进行数据更新.
图 12 基本资料
5.2.2 高级资料
高级资料主要实现查询功能,由以下三部分信息构成:
- 培训资料:培训日期,培训内容.
- 考评资料:考评日期,考评内容,考评结果.
- 工资信息:账套名称,基本工资.
5.3 人事管理
5.3.1 员工奖惩.
人事管理主要用于对员工奖惩,培训,考评,调动信息的管理.员工奖惩主要对员工奖惩模块的增删改查的实现.在 UI 设计上使用穿梭框和 tab 标签,逻辑处理上员工实体和奖惩信息是一对多的关系,即对同一员工在相同或者不同时间都可以添加多个奖惩,奖惩管理页面显示有奖惩信息的全部员工,可以查看奖惩详情.
图 13 员工奖惩管理
5.3.2 员工培训
员工培训模块主要是对员工培训业务的增删改查的实现.员工培训由添加培训和培训管理两个子模块构成.在 UI 设计上加了进度条.逻辑处理上是一对一的关系,即同一员工在一个时间段只能参加一个培训,培训完成删除当前培训后可以添加新的培训,支持批量添加培训,培训进度修改.
5.3.3 员工好评
员工好评模块即对员工评价业务的增删改查的实现.UI 设计上结合评分条步骤条,支持批量添加评价.逻辑处理上是一对一的关系.
5.3.4 员工调动
员工调动模块即对员工调用的增删改查的实现.UI 设计上由 table 内嵌 table 构成,逻辑处理上是一对多的关系.
图 14 员工调动
5.4 工资管理
5.4.1 工资账套管理
实现对员工工资账套管理,员工账套设置,工资表管理,查询一系列对员工工资管理的功能.工资账套管理主要对员工奖金,基本工资,提成等各项的增刪改查. 设置当前套账信息.
5.4.2 员工账套设置
员工讨账设置主要根据公司账套查看相应的员工的工资信息,并实现员工套账的其增删功能.
5.4.3 工资表管理
工资表管理集中对员工工资,进行搜索查看的功能.添加筛选过滤功能,可以根据不同的职称部门进行表内筛选,工资套账详情查看.
图 15 员工工资管理
5.5 统计管理
统计管理主要对员工资料的动态分析统计,包括员工积分统计,人事信息统计,人事记录统计.在设计方面结合图表处理 VeCharts,由服务端对数据进行了整合,由 VeCharts 展示.代码方面,结合 java8 的 Stream API 及数据库端聚合函数实现.数据动态展示基于 Spring 定时任务.
5.5.1 员工积分统计
根据工号查找员工的积分情况.以条形图显示当前有积分员工的积分分布情况.积分分值由员工奖惩产生.
5.5.2 人事信息统计
人事信息统计主要对员工人数信息进行的分析统计,饼图的方式展示.以高校.职称.职位.党派.民族.学历.部门为维度的人员分布图,用于人事统计.
5.5.3 人事记录统计
人事记录统计主要对员工离职信息的统计,以部门.职称.职位为维度,对员工离职率,离职工龄,离职年龄进行分析.以柱状图结合折线图的方式统计.
图 16 人事记录统计
部分代码:
c++
public List<DataModel> dataViewschool() {
List<Employee> employeeList = employeeMapper.selectByPrimaryKey();
Map<String, Integer> map = new HashMap<>();
List<DataModel> dataModels = new ArrayList<>();
employeeList.stream().forEach(o -> {
if (!map.containsKey(o.getSchool())) {
map.put(o.getSchool(), 1);
} else {
map.put(o.getSchool(), map.get(o.getSchool()) + 1);
}
});
map.forEach((o1, o2) -> { dataModels.add(new DataModel(o1, o2));
});
return dataModels;
}
public List<DataModelT> dataViewWorkAge() {
List<DataModelT> dataModelTS = new ArrayList<>();
dataViewPosition().stream().forEach(o -> {
dataModelTS.add(new DataModelT(o.getSum(), o.getName()));
});
List<EmployeeRecycle> employeeRecycleList = employeeRecycleService.getAllEmployeeRecycle();
employeeRecycleService.dataViewPosition().stream()
.forEach(o -> { dataModelTS.stream()
.filter(o1 -> o.getName().equals(o1.getName()))
.forEach(o1 -> {
o1.setDimission(o.getSum());
o1.setSum(o.getWorkage());
o1.setaDouble((double) Math.round((o.getSum() / new Double(employeeRecycleList.size())) * 100) / 100);
});
});
return dataModelTS;
}
5.6 系统管理
5.6.1 基础信设置
系统管理主要对系统,管理员等一些操作,包括基础设置,系统管理,操作员管理,授权处理.基础信息设置主要对部门,职位,职称,奖惩规则和权限组的设置增删查改功能管理,实现部门树,权限树预览.职称等级设置.奖惩描述自定义及使用模糊提示等.
部门管理主要以多叉树的方式实现部门信息展示.及添加删除部门的操作.展示的实现由在 Server 端基于递归 SQL 的方式遍历部门树.删除操作当存在子部门.不能删除父部门.只能从叶子部门进行删除操作.添加不受限制.
员工职位管理即对企业职位的管理.由职位展示查询及自定义职位添加删除更改职位状态构成.员工奖惩管理主要用于自定义员工奖惩.由添加奖惩类型.分值.描述及删除修改编辑构成.自定义奖惩描述可以使用以有描述.也可以自己定义.员工职称管理于职位管理类似.由职称展示查询及自定义职称添加删除,更改职称状态构成.不同在于职称有对应等级.添加时需要选择职称等级.
用户权限管理由权限树预览.角色添加.角色权限设置构成.权限树在数据处理上以二叉树的结构展示.因为只有两级菜单.对于不同角色通过权限树的设置.赋予不同菜单权限.权限树预览是基于 VeCharts 树形图表的展示.在 UI 设计上.以折叠面板和 Tree 树型组件方式实现.
图 17 用户权限管理
5.6.2 系统管理
系统管理主要由公告管理和公告编辑构成.公告编辑主要结合 VueQuillEditor 富文本第三方扩展实现,有标题和具体公告内容构成.公告管理包括公告修改,公告预览,公告删除.可以动态修改所有公告信息并实现预览.
图 18 公告编辑
5.6.3 操作日志管理
操作日志管理主要展示登录用户对系统的操作信息.记录具体人事操作,便于以后的信息检索,功能上实现由日志类型,日期间隔的日志查询.
5.6.4 操作员管理
操作员管理在 UI 设计上使用卡片组件,弹性布局处理.功能包括基本信息展示,刪改功能.具体由管理员角色权限的设置,是否启用的修改,删除管理员操作构成,在权限修改上以相互赋予的方式实现,即登录用户不能自己给自己赋值.只能通过其他用户赋予权限.
图 19 操作员管理
六、系统测试
软件在设计后必须进行测试,主要从系统性能测试,功能测试和测试结果分析进行描述.
6.1 软件测试的目的
- 确认软件的质量,即软件是否满足了所有功能或性能需求.
- 将测试信息提供给开发,运维或项目经理,为之后的风险评估等做准备.
- 确保整个软件开发过程的质量,如果一个软件产品开发完成之后,发现了很多问题,这说明此软件开发过程很可能是有缺陷的.
6.2 功能测试
功能测试主要是基于黑盒测试的方法,也就是不管某个功能后台代码的业务 实现逻辑是怎样,只需要根据开发人员提供的接口相关的测试数据,从前端界面或使用第三方工具如 Postman 等对各模块功能中的主要操作进行了功能测试.
表 6 系统功能测试表
功能测试 | 员工基本信息管理 | 员工基本信息管理 | 员工基本信息管理 | 员工基本信息管理 | 员工基本信息管理 |
---|---|---|---|---|---|
测试目的 | 操作是否得到响应 | 操作是否得到响应 | 操作是否得到响应 | 操作是否得到响应 | 操作是否得到响应 |
测试内容 | 操作描述 | 数据 | 期望结果 | 实际结果 | 测试状态 |
删除员工 | 单机删除;按钮 | -- | 员工列消失,数据数据库没有;数据 | 员工列消失,数据数据库没有;数据 | 与预期;结果相同 |
修改员工;信息 | 单机员工列;修改按钮,输;入修改数据 | 姓名:小明 106;改为:小明 107 | 员工列数据;变成小明;107 | 员工列数据;变成小明;107 | 与预期;结果相同 |
搜索员工;信息 | 输入员工信;息,单机搜索 | 搜索框输入:;小明 107 | 小明 107;列显示 | 小明 107;列显示 | 与预期;结果相同 |
添加员工 | 单机添加,输入数据 | 小明 108….. | 小明 108;列显示 | 小明 108;列显示 | 与预期;结果相同 |
6.3 测试结论
在开发中,开发流程是先设计界面,然后写接口,之后使用 Postman 进行接口测试,确认返回的 JSON 没有问题之后,写前端逻辑.最后会进行数据测试,项目中 Spring Boot 集成 Juntil 框架提拱了很好的测试手段,可以快速构建测试案例,同时基于断言策略很好的提供了对功能逻辑的正确性检查,在测试过程中,我发现对于异常的处理,不能在项目开始就定义全局异常处理器,即使定义,也不能直接定义父类异常,如果直接定义父类异常,Spring Boot 会直接处理异常返回白页(空白页),这样的话,不利于溯源异常点.
七、结束语
通过对基于 Spring Boot 框架的人事系统的开发,我对系统开发有一个更清楚的了解,系统的开发过程中,不但熟悉了人事系统业务需求,同时,也拓宽了我对 Spring Boot,Linux 的认知.对前后端分离的 SPA 有了新的认识,尤其是前后端分离的权限控制,前端更多的是为了良好的用户体验,正真处理权限的是后端的处理.同时对于 RBAC 权限管理模型有了新的认识.
相比于其他的大型的 e-HR 系统,比如钉钉之类商业软件,本系统显得相形见绌,但是我们面向的需求不同,相对于钉钉而言,功能众多,操作略显复杂,面向企业办公,而本系统功能简单轻量,属于 BS 架构 Web 版,面向基本的人事需求,即主要的使用人员是企业单位的 HR.
在人事管理的业务方面,本系统涉及业务逻辑较浅,与人事关联的考勤,工资,日常审批的业务,本系统都没有涉及到.在系统架构方面,本系统使用基本单模块,单服务,功能之间耦合性强.在此基础上,可以随着业务的深入进行模块服务解耦,实现多服务,接口交互架构.在多服务的基础上还可以进行云原生微服务架构.在使用场景方面,除了 PC 端,还可以开发面向微信的流应用,即微信小程序.所以,本系统的有很大的迭代升级空间.
参考文献
- 基于Struts+Hibernate的人力资源管理系统(吉林大学·金勇杰)
- 置信培训学校人力资源信息管理系统的设计与实现(电子科技大学·程敬)
- 某认证中心HR系统的设计与实现(山东大学·周庆华)
- 人事管理系统设计与开发(石家庄铁道大学·陈美伊)
- 基于Spring Cloud的企业人事管理系统的设计与实现(吉林大学·王佳越)
- 基于J2EE架构的企业人事管理系统的研究与开发(电子科技大学·张勇)
- 基于Hibernate的人事管理系统(华东师范大学·赵炳森)
- 基于SSH框架的人力资源管理系统的设计与开发(电子科技大学·唐伟)
- 基于Spring Cloud的企业人事管理系统的设计与实现(吉林大学·王佳越)
- 基于J2EE架构的人力资源管理系统的设计与实现(复旦大学·吴庆杰)
- 人力资源管理系统设计(山东大学·郑重)
- 基于J2EE架构的人力资源管理系统的设计与实现(复旦大学·吴庆杰)
- 长春市水务集团人力资源管理系统的设计及实现(吉林大学·尤博楠)
- 基于SSH框架的人力资源管理系统的设计与实现(吉林大学·陆贯中)
- 基于.NET的企业智能人事管理系统的设计与实现(西安科技大学·娄荣荣)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码工厂 ,原文地址:https://bishedaima.com/yuanma/35806.html