基于Web的人力资源管理系统。该系统包括9个模块:人事信息管理,考勤管理,职业规划及接任计划,培训管理,休假管理,考核评估管理,薪资福利计算和管理,网上招聘管理,图表功能。该项目使用框架为SSM(MYECLIPSE),选用开发工具为MYECLIPSE。人力资源管理系统为一个 后台项目。
为了完成该系统,我们首先需要对该系统进行需求分析。一个人力资源管理系统应包含用户角色有管理员、用户。为了能让用户顺利登陆系统完成相关操作,需要为每种登陆角色设置账户和密码字段。
总结得出该系统所有数据为:管理员(admin)、用户(yonghu)、人事信息(renshixinxi)、考勤(kaoqin)、培训(peixun)
管理员表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 管理员id username | VARCHAR(255) | | 账号 password | VARCHAR(255) | | 密码
用户表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 用户id username | VARCHAR(255) | | 账号 password | VARCHAR(255) | | 密码 xingming | VARCHAR(255) | | 姓名 nianling | VARCHAR(255) | | 年龄 xingbie | VARCHAR(255) | | 性别
人事信息表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 人事信息id xingming | VARCHAR(255) | | 姓名 nianling | VARCHAR(255) | | 年龄 xingbie | VARCHAR(255) | | 性别 zhiwei | VARCHAR(255) | | 职位 gongzi | VARCHAR(255) | | 工资 xuexijingli | VARCHAR(255) | | 学习经历
考勤表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 考勤id chidaorenshu | VARCHAR(255) | | 迟到人数 shijiarenshu | VARCHAR(255) | | 事假人数 bingjiarenshu | VARCHAR(255) | | 病假人数 quanqinrenshu | VARCHAR(255) | | 全勤人数 chuchairenshu | VARCHAR(255) | | 出差人数
培训表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 培训id shenqing | VARCHAR(255) | | 申请 weicanjia | VARCHAR(255) | | 未参加 zhiwei | VARCHAR(255) | | 职位
package org.mypro.front; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; import javax.jms.Session; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.mypro.dao.AdminMapper; import org.mypro.entity.Admin; import org.mypro.entity.AdminExample; import org.mypro.dao.YonghuMapper; import org.mypro.entity.Yonghu; import org.mypro.entity.YonghuExample;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; @Controller @RequestMapping(VALUE = "/") public class loginAndRegistController { private static final Log logger = LogFactory.getLog(loginAndRegistController.class); @Autowired private AdminMapper admindao; @Autowired private YonghuMapper yonghudao; //定义login方法,跳转到login页面 @RequestMapping(VALUE = "login") public String login(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION) { logger.debug("loginAndRegistController.login ......"); RETURN "login"; } //定义regist方法,跳转到regist页面 @RequestMapping(VALUE = "regist") public String regist(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION) { logger.debug("loginAndRegistController.regist ......"); RETURN "regist"; } //定义loginact,处理登录 @RequestMapping(VALUE = "loginact") public String loginact(HttpServletRequest request, HttpServletResponse response,Admin admin,String shenfen,HttpSession SESSION) { logger.debug("loginAndRegistController.loginact ......"); // 判断管理员是否与 shenfen一致 IF("管理员".equals(shenfen)){ AdminExample example = NEW AdminExample(); AdminExample.Criteria criteria = example.createCriteria(); criteria.andUsernameEqualTo(admin.getUsername()); criteria.andPasswordEqualTo(admin.getPassword()); List<Admin> admins = admindao.selectByExample(example); IF(admins.isEmpty()){ request.setAttribute("message", "账号或密码错误"); RETURN "login"; }ELSE{ SESSION.setAttribute("mingzi", admins.get(0).getUsername()); // 登录成功,将登录用户id保存到SESSION中 SESSION.setAttribute("id", admins.get(0).getId()); SESSION.setAttribute("userinfo", admins.get(0)); SESSION.setAttribute("shenfen", shenfen); RETURN "adminindex"; } } // 判断用户是否与 shenfen一致 IF("用户".equals(shenfen)){ YonghuExample example = NEW YonghuExample(); YonghuExample.Criteria criteria = example.createCriteria(); criteria.andUsernameEqualTo(admin.getUsername()); criteria.andPasswordEqualTo(admin.getPassword()); List<Yonghu> admins = yonghudao.selectByExample(example); IF(admins.isEmpty()){ request.setAttribute("message", "账号或密码错误"); RETURN "login"; }ELSE{ SESSION.setAttribute("mingzi", admins.get(0).getUsername()); // 登录成功,将登录用户id保存到SESSION中 SESSION.setAttribute("id", admins.get(0).getId()); SESSION.setAttribute("userinfo", admins.get(0)); SESSION.setAttribute("shenfen", shenfen); RETURN "yonghuindex"; } } //将请选择登录身份保存到request的message中 request.setAttribute("message", "请选择登录身份"); RETURN "login"; } //定义registact,处理注册 @RequestMapping(VALUE = "registact") public String registact(HttpServletRequest request, HttpServletResponse response,Admin admin,String shenfen,HttpSession SESSION,String repassword) { logger.debug("loginAndRegistController.registact ......"); IF( !repassword.equals(admin.getPassword())){ request.setAttribute("message", "两次密码不一致"); RETURN "regist"; } // 判断管理员和shenfen是否一致 IF("管理员".equals(shenfen)){ AdminExample example = NEW AdminExample(); AdminExample.Criteria criteria = example.createCriteria(); criteria.andUsernameEqualTo(admin.getUsername()); List admins = admindao.selectByExample(example); IF(!admins.isEmpty()){ request.setAttribute("message", "该账号已存在"); RETURN "regist"; }ELSE{ admindao.insert(admin); request.setAttribute("message", "注册成功,请登录"); RETURN "login"; } } // 判断用户和shenfen是否一致 IF("用户".equals(shenfen)){ YonghuExample example = NEW YonghuExample(); YonghuExample.Criteria criteria = example.createCriteria(); criteria.andUsernameEqualTo(admin.getUsername()); List admins = yonghudao.selectByExample(example); // 实例化Yonghu Yonghu yonghu = NEW Yonghu(); yonghu.setUsername(admin.getUsername()); yonghu.setPassword(admin.getPassword()); IF(!admins.isEmpty()){ request.setAttribute("message", "该账号已存在"); RETURN "regist"; }ELSE{yonghudao .insert(yonghu);request .setAttribute("message", "注册成功,请登录"); RETURN "login"; } }request .setAttribute("message", "请选择登录身份"); RETURN "login"; } //定义tuichuxitong方法,清除系统中的SESSION数据@RequestMapping (VALUE = "tuichuxitong")public String tuichuxitong (HttpServletRequest request, HttpServletResponse response,Admin admin,HttpSession SESSION) {logger .debug("loginAndRegistController.tuichuxitong ......"); SESSION.invalidate(); RETURN "login"; } // 定义adminindex方法@RequestMapping (VALUE = "adminindex")public String adminindex (HttpServletRequest request,HttpSession SESSION, HttpServletResponse response) {logger .debug("loginAndRegistController.adminindex ......"); RETURN "adminindex"; } // 定义yonghuindex方法@RequestMapping (VALUE = "yonghuindex")public String yonghuindex (HttpServletRequest request,HttpSession SESSION, HttpServletResponse response) {logger .debug("loginAndRegistController.yonghuindex ......"); RETURN "yonghuindex"; } //定义adminxiugaigerenxinxiact方法@RequestMapping (VALUE = "adminxiugaigerenxinxiact")public String adminxiugaigerenxinxiact (HttpServletRequest request, HttpServletResponse response,Admin admin,HttpSession SESSION ) throws IOException {logger .debug("loginAndRegistController.adminxiugaigerenxinxiact ......");admindao .updateByPrimaryKey(admin); SESSION.setAttribute("mingzi", admin.getUsername()); SESSION.setAttribute("id", admin.getId()); SESSION.setAttribute("userinfo", admin);request .setAttribute("message", "修改个人信息成功"); RETURN "adminindex"; } //定义yonghuxiugaigerenxinxiact方法@RequestMapping (VALUE = "yonghuxiugaigerenxinxiact")public String yonghuxiugaigerenxinxiact (HttpServletRequest request, HttpServletResponse response,Yonghu yonghu,HttpSession SESSION ) throws IOException {logger .debug("loginAndRegistController.yonghuxiugaigerenxinxiact ......");yonghudao .updateByPrimaryKey(yonghu); SESSION.setAttribute("mingzi", yonghu.getUsername()); SESSION.setAttribute("id", yonghu.getId()); SESSION.setAttribute("userinfo", yonghu);request .setAttribute("message", "修改个人信息成功"); RETURN "yonghuindex"; } // 上传文件图片等public String uploadUtile (MultipartFile file, HttpServletRequest request) throws IOException {SimpleDateFormat sdf = NEW SimpleDateFormat("yyyyMMddHHmmssSS");String res = sdf.format(NEW DATE()); // uploads文件夹位置String rootPath = request.getSession().getServletContext().getRealPath("resource/uploads/"); // 原始名称String originalFileName = file.getOriginalFilename(); // 新文件名String newFileName = "sliver" + res + originalFileName.substring(originalFileName.lastIndexOf(".")); // 创建年月文件夹Calendar DATE = Calendar.getInstance();File dateDirs = NEW File(DATE.get(Calendar.YEAR) + File.separator + (DATE.get(Calendar.MONTH)+1)); // 新文件File newFile = NEW File(rootPath + File.separator + dateDirs + File.separator + newFileName); // 判断目标文件所在目录是否存在 IF( !newFile.getParentFile().exists()) { // 如果目标文件所在的目录不存在,则创建父目录newFile .getParentFile().mkdirs(); }System .out.println(newFile); // 将内存中的数据写入磁盘file .transferTo(newFile); // 完整的urlString fileUrl = DATE.get(Calendar.YEAR) + "/" + (DATE.get(Calendar.MONTH)+1) + "/" + newFileName; RETURN fileUrl; }}
添加培训模块:
通过添加培训模块,可以完成培训的添加操作。在页面中跳转到添加培训页面,输入培训的所有信息,点击添加操作,可以将培训数据以post提交到peixunController中。培训所包含的字段信息包括申请,未参加,职位。在peixunController中通过定义peixun接受所有的培训参数。使用peixundao的insert方法将peixun实体插入到数据库中。完成数据的添加操作,在peixunMapper中匹配对应的peixunxml完成插入sql语句的执行操作。该部分核心代码如下:
通过peixundao的insert方法将页面传输的培训添加到数据库中 peixundao.insert(peixun);
将添加培训成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "添加培训成功");
返回培训管理界面
return "forward:/tianjiapeixun.action";
删除培训模块:
在管理页面中,点击删除。页面将通过a标签的href属性,使用get方法将该培训
的id上传到服务器中,在服务器中通过peixunController类中的shanchupeixun进行接收,之后调用peixunMapper中的deleteByPrimaryKey方法根据ID进行删除。将删除信息保存到request的message中,在页面给出用户删除成功的提示信息,该部分核心代码如下:
通过peixundao的删除方法根据id删除对应的培训 peixundao.deleteByPrimaryKey(id);
将删除培训成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "删除培训成功");
返回培训管理界面
return "forward:/peixunguanli.action";