一、前言
教师人事档案管理系统理工作是一种繁琐的,务求准确迅速的信息检索工作。随着计算机信息技术的飞速发展,人类进入信息时代,社会的竞争越来越激烈,教师人事档案就越显示出其不可或缺性,成为学校一个非常重要的模块。教师人事档案系统主要是用于对所有教师的基本资料进行录入、个人档案信息、奖惩信息信息、档案变动信息、培训学校信息、培训报名信息、课程信息变更等等管理。使用教师人事管理系统便于学校领导更全面的掌握每个教师的基本信息。本系统以eclipse为开发工具,mysql作为后台数据库。主要功能权限包括管理员、教师基本信息管理模块,数据管理模块、框架管理功能模块等。本系统还设置了二中不同的用户类型,实现了二级用户权限管理体制,提高了系统的安全性以及可用行性。
教师人事档案管理系统采用B/S结构、java开发语言、以及Mysql数据库、Spring Boot框架等技术。系统主要分为管理员和教师两部分,管理员主要功能包括:首页、个人中心、教师管理、个人档案管理、奖惩信息管理、档案变动管理、培训学校管理、培训报名管理、课程信息管理、论坛管理、系统管理等。教师个人后台管理主要包括:首页、个人中心、个人档案管理、奖惩信息管理、档案变动管理、培训报名管理、课程信息管理、我的收藏管理,前台管理主要包括:首页、培训信息、系统公告、个人中心、后台管理、客服等功能,基本上实现了整个,教师人事档案管理系统信息管理的过程。本系统在一般教师人事档案管理系统的基础上增加了首页培训信息最新信息的功能方便教师快速浏览,是一个高效的、动态的、交互友好的教师人事档案管理系统。
二、技术介绍
B/S架构
B/S结构的特点也非常多,例如在很多浏览器中都可以做出信号请求。并且可以适当的减轻教师的工作量,通过对教师端安装或者是配置少量的运行软件就能够逐步减少教师的工作量,这些功能的操作主要是由服务器来进行控制的,由于该软件的技术不断成熟,最主要的特点就是与浏览器相互配合为软件开发带来了极大的便利,不仅能够减少开发成本,还能够不断加强系统的软件功能,层层相互独立和展现层是该B/S结构完成相互连接的主要特性。
Java语言
Java语言擅长开发互联网类应用和学校级应用,现在已经相当的成熟,而且也是目前使用最多的编程语言之一。Java语言具有很好的面向对象性,可以符合人的思维模式进行设计,封装是将对象的属性和方法尽可能地隐藏起来,使得外界并不知道是如何实现的,外界能通过接口进行访问,继承是指每个类都会有一个父类,所有的子类都有父类的方法,可以进行继承,但是只有final修饰的类不能被继承,通过继承可以使得代码得到重新利用,能够提高软件的开发效率,也是多态的前提。
Java就像C语言、C#语言等,也是一种程序开发语言,而它的特点就是面向对象。作为一种程序开发与设计的语言,它有很多特性,主要特性就是面向对象、夸平台以及可以分布式运行。Java语言项目不但安全性高、稳定性强,而且可以并发运行。
为了提高开发的速度及效率,必须做到代码的重复使用和简化程序的复杂度,要达到上述的要求java语言通过封装、继承与多态等方式实现,这样可以很大程度上达到信息的封装,提高代码复用率,减少冗余度,提高效率。在Java中难能可贵的一点就是它的垃圾回收机制,它使得以往程序中大量存在的内存泄漏的问题得到了较好的缓解。所谓的内存泄漏就是程序向操作系统申请了一块存储空间,比如定义了一个变量,但是由于某种原因,这个变量一直没有使用,但是仍然占用着系统的内存空间,可能一两个这样的变量对程序和操作系统造不成什么大的影响,但是试想如果这样的变量定义的多了系统的内存空间就会一步步减少,从而造成机器的性能降低甚至宕机。但是在Java中有垃圾回收机制的存在,这种机制极大地避免了内存泄漏的出现,在Java虚拟机中,垃圾回收机制会对长时间没有引用变量指向的对象实施垃圾回收,简单的说就是将这个对象销毁,以避免内存泄漏的情况出现。
Spring Boot框架
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。
三、系统功能效果
四、系统关键代码
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.DiscusspeixunxinxiEntity;
import com.entity.view.DiscusspeixunxinxiView;
import com.service.DiscusspeixunxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 培训信息评论表
* 后端接口
* @author
* @email
* @date 2021-01-14 15:15:24
*/
@RestController
@RequestMapping("/discusspeixunxinxi")
public class DiscusspeixunxinxiController {
@Autowired
private DiscusspeixunxinxiService discusspeixunxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,DiscusspeixunxinxiEntity discusspeixunxinxi, HttpServletRequest request){
EntityWrapper<DiscusspeixunxinxiEntity> ew = new EntityWrapper<DiscusspeixunxinxiEntity>();
PageUtils page = discusspeixunxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discusspeixunxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,DiscusspeixunxinxiEntity discusspeixunxinxi, HttpServletRequest request){
EntityWrapper<DiscusspeixunxinxiEntity> ew = new EntityWrapper<DiscusspeixunxinxiEntity>();
PageUtils page = discusspeixunxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discusspeixunxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( DiscusspeixunxinxiEntity discusspeixunxinxi){
EntityWrapper<DiscusspeixunxinxiEntity> ew = new EntityWrapper<DiscusspeixunxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discusspeixunxinxi, "discusspeixunxinxi"));
return R.ok().put("data", discusspeixunxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(DiscusspeixunxinxiEntity discusspeixunxinxi){
EntityWrapper< DiscusspeixunxinxiEntity> ew = new EntityWrapper< DiscusspeixunxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discusspeixunxinxi, "discusspeixunxinxi"));
DiscusspeixunxinxiView discusspeixunxinxiView = discusspeixunxinxiService.selectView(ew);
return R.ok("查询培训信息评论表成功").put("data", discusspeixunxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
DiscusspeixunxinxiEntity discusspeixunxinxi = discusspeixunxinxiService.selectById(id);
return R.ok().put("data", discusspeixunxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
DiscusspeixunxinxiEntity discusspeixunxinxi = discusspeixunxinxiService.selectById(id);
return R.ok().put("data", discusspeixunxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody DiscusspeixunxinxiEntity discusspeixunxinxi, HttpServletRequest request){
discusspeixunxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discusspeixunxinxi);
discusspeixunxinxiService.insert(discusspeixunxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody DiscusspeixunxinxiEntity discusspeixunxinxi, HttpServletRequest request){
discusspeixunxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discusspeixunxinxi);
discusspeixunxinxiService.insert(discusspeixunxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody DiscusspeixunxinxiEntity discusspeixunxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(discusspeixunxinxi);
discusspeixunxinxiService.updateById(discusspeixunxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
discusspeixunxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<DiscusspeixunxinxiEntity> wrapper = new EntityWrapper<DiscusspeixunxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = discusspeixunxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
五、总结
系统的开发环境和配置都是可以自行安装的,系统使用Java开发工具,使用比较成熟的Mysql数据库进行对系统前台及后台的数据交互,根据技术语言结合需求对数据库进行修改维护,可以使得系统运行更具有稳定性和安全性,从而完成实现系统的开发。
在设计教师人事档案管理系统的过程中还遇到了一个棘手的问题,那就是自己的英语水平还有待提高,很多关于网站技术开发的资料文献都是英文版的,关键词语以及技术性词汇不能很好的理解。只有在借助翻译软件的实时性翻译功能的辅助下才勉强看懂。显然英语水平的高低直接影响到系统的开发过程。