基于Web和MySQL的简历信息管理系统
一、需 求 分 析
1.1 编写目的
该文档是关于用户对于简历信息管理系统的功能和性能的要求,重点描述了网上招聘系统的功能需求,是概要设计阶段的重要输入。
1.2项目背景
本项目是一个简历信息管理系统,考虑到使用该系统的公司可能规模比较大,需要管理的简历信息也很多,每次收集信息总能收到成千上万的简历,如何挑选合适的简历信息常常是公司比较棘手的事情,为人力资源部的工作人员带来很多的工作量。为此公司希望有一个自动化的简历信息管理系统能够给他们带来工作的便利,提高工作效率,同时能及时有效管理简历信息。
为实现企业与人才的有效联系,弥补工作中存在的种种不足,我们开发了简历信息管理系统。公司人力资源部的工作人员通过这个招聘系统维护知识题库,编制问卷,发布职位和与这个职位相应的问卷;被收集简历表的人可以通过网上提交自己的简历并同时回答相应的问卷。人力资源部的工作人员通过这个简历信息管理系统可以统计整理这些简历,并根据应聘者的简历和问卷分数提取出需要面试的人员,然后按照一定的方式通知面试人员参加面试,在面试过程中,记录相应的面试结果。人力资源部的工作可以随时浏览人员简历和面试的相关信息。
1.3 系统目标
-
系统能够提供友好的用户界面,使操作人员的工作量最大限度的减少
-
系统具有良好的运行效率,能够达到提高生产率的目的
-
系统应有良好的可扩充性,可以容易地加入其他系统的应用
-
平台的设计具有一定的超前性,灵活性,能够适应企业生产配置的变化
-
通过这个项目可以锻炼队伍,提高团队的开发能力和项目管理能力
1.4 功能需求分析
为了提升 HR 简历处理效率,薪人薪事人力资源系统将简历处理环节规范化、系统化,简历在 HR 和用人部门之间的流转一目了然,直接避免了因沟通不畅、流程繁琐造成的效率低下。 - 简历管理:直接、透明 管理员可删除、添加、更改简历: 简历处理更直接、快捷 - 招聘任务管理:系统、高效 - 简历自动处理:省时、省力。系统可按照 HR 自行设定的条件,自动处理简历,节省更多时间,效率翻倍 - 按条件筛选简历 新增招聘任务时可以设置简历通过标准,根据性别、年龄、工作经验和现居住地进行筛选,不符合通过标准的新简历将自动移入淘汰库 - 简历标注:查找、沟通更高效
1.5 界面设计
二、总 体 设 计
通过对功能的描述,本系统为两个部分:用户简历信息部分,管理员信息管理部分。 用户简历信息部分为两个模块:用户登陆与注册模块,用户简历信息的管理模块。 管理员信息管理部分为两个模块:管理员登陆模块,管理员对用户和会员信息的管理模块。本网站系统是“简历网”所以本网站系统的实现重点是个人简历的生成和管理。本系统的需求分析采用的是自顶向下的原则,将整个系统进行模块的划分,再将每个模块进行细分,分成更小的独立功能模块,然后再给出独立功能模块的功能描述和流程图,从而具体说明系统将要完成的最终功能。
2.1 以下是具体的模块的需求分析描述:
用户简历信息部分的主要作用是对系统的各种个人简历信息进行管理,包括用户的个人信息以及用户的简历信息。其中的用户个人信息管理模块提供用户的注册,登陆,找回密码等功能。用户的简历信息提供用户可以选择模板进行简历的填写,还可以对自己填写的简历进行查看,删除和修改。用户点击添加简历按钮的时候会进入选择简历模版的页面,其中有 3 大模版供选择,选择一个模版即可开始编辑自己的简历了。当通过本网站的验证后,简历就被写入本网站的数据库,方便用户的修改和删除。
管理员信息管理部分
该部分主要是管理员对用户和会员信息的管理,当管理员登录成功后可以进入管理员的首页,在其中可以对用户的信息进行查看和删除。
总体功能模块图:
2.2 用户信息管理
用户模块主要包括用户信息管理,简历信息管理。
2.2.1 用户注册
该功能的作用是用户提交个人注册信息到服务器,以获得用户身份。提交的信息包括用户名,密码以及有关的个人信息。
2.2.2 用户登录
该功能的作用是用户填写用户名和密码,然后提交,服务器通过数据库验证填写的信息,如果正确则进入用户首页。
2.2.3 找回密码
该功能是用户通过填写用户密码保护信息,通过验证后可以在页面内显示你的密码。
2.3 简历信息管理
简历信息管理主要包括选择模板填写简历,选择模板查看和修改简历,选择模板删除简历。简历信息管理的功能模块如下图所示:
2.3.1 填写简历
本网站提供了三个模板供用户选择,用户选择适合自己的简历模板进行填写,当通过验证后,建立就填写成功了。其示意图如下所示;
2.3.2 查看和修改简历
用户通过选择模板查看自己曾经填写的简历,如果曾经填写过就弹出信息,如果没有填写过就让用户重新填写这个模板信息,其示意图如下所示;
2.3.3 删除简历
进入选择简历模板,进行删除,其示意图如下所示;
2.4 管理员信息管理
该功能即管理员登陆,管理员输入用户密码进行验证,验证成功后进入管理员首页,其示意图如下所示;
管理员管理信息模块:
该功能是管理员专用的功能,其中是对普通用户信息的管理。其示意图如下所示:
管理员对普通用户信息的管理
管理员可以对用户信息进行查看和删除,其示意图如下所示;
2.5 系统的三层架构设计思想
系统主体架构采用界面—中间件—数据库这样的三层结构,使系统业务逻辑和数据库基础操作与用户应用界面分开,能够使程序员更专注于 Java 程序的开发,而界面设计者专注于用户界面的开发,在一定程度上明确了系统开发的分工。其示意图如下所示:
三、详 细 设 计
3.1 个人简历的增删改查与批量删除
- 增加新的个人简历通过 resumeService.insert(resume)依据 resume 进行插入
- 删除个人简历通过 resumeService.delete(id)依据 id 进行删除
- 更新个人简历(改)公国 resumeService.updateData(resume)依据 resume 进行更新
- 查询个人简历通过 resumeService.getList(dto)依据 list 里的数据(email、name、phone)进行查询
- 批量删除个人简历通过 resumeService.batchDelete(ids)基于删除操作对批量的 id 进行删除
- 上述操作都是调用 resumeserviceimpl.java 函数实现,这个文件里是个人简历服务,每个操作在 resumeserviceimpl.java 都有相对应的函数
java
package com.kilogod.code.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.kilogod.code.common.res.ResultData;
import com.kilogod.code.domain.Resume;
import com.kilogod.code.domain.dto.ResumeQueryDTO;
import com.kilogod.code.service.IResumeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.xml.bind.ValidationException;
import java.util.List;
@Slf4j
@Api(tags = {"个人简历"})
@RestController
@RequestMapping("/resume")
public class ResumeController {
@Autowired
private IResumeService resumeService;
@PostMapping("/insert")
@ApiOperation(value = "新增个人简历")
public ResultData insert(@RequestBody Resume resume) {
ResultData rc = new ResultData();
try {
rc.setData(resumeService.insert(resume));
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
@DeleteMapping("/delete")
@ApiOperation(value = "删除个人简历")
public ResultData delete(@RequestParam String id) {
ResultData rc = new ResultData();
try {
rc.setData(resumeService.delete(id));
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
@PutMapping("/update")
@ApiOperation(value = "更新个人简历")
public ResultData update(@RequestBody Resume resume) {
ResultData rc = new ResultData();
try {
rc.setData(resumeService.updateData(resume));
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
@GetMapping("/list")
@ApiOperation(value = "查询个人简历分页数据")
public ResultData<PageInfo<Resume>> getList(ResumeQueryDTO dto) {
ResultData rc = new ResultData();
try {
PageHelper.startPage(dto.getPage(), dto.getSize());
List<Resume> list = resumeService.getList(dto);
PageInfo<Resume> data = new PageInfo<>(list);
rc.setData(data);
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
@PostMapping("/batchDelete")
@ApiOperation(value = "批量删除个人简历")
public ResultData batchDelete(@RequestBody List<Integer> ids) {
ResultData rc = new ResultData();
try {
rc.setData(resumeService.batchDelete(ids));
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
}
3.2 个人简历服务类
个人简历的增删改查是 resumecontroller.java 中通过调用个人简历服务类的函数 public int insert(Resume resume) throws ValidationException
c++
public int delete(String id) throws ValidationException
public int batchDelete(List<Integer> ids) throws ValidationException
等实现具体的操作
java
package com.kilogod.code.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kilogod.code.common.res.ResultCode;
import com.kilogod.code.domain.Resume;
import com.kilogod.code.domain.dto.ResumeQueryDTO;
import com.kilogod.code.mapper.ResumeMapper;
import com.kilogod.code.service.IResumeService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.xml.bind.ValidationException;
import java.util.List;
@Service
public class ResumeServiceImpl extends ServiceImpl<ResumeMapper, Resume> implements IResumeService {
@Resource
private ResumeMapper mapper;
@Override
public int insert(Resume resume) throws ValidationException {
int insert = mapper.insert(resume);
if (insert < 1) {
throw new ValidationException(ResultCode.INSERT_FAIL);
}
return insert;
}
@Override
public int delete(String id) throws ValidationException {
int i = mapper.delete(new QueryWrapper<Resume>().eq("id", id));
if (i<1) {
throw new ValidationException(ResultCode.DELETE_FAIL);
}
return i;
}
@Override
public int updateData(Resume resume) throws ValidationException {
int i = mapper.updateById(resume);
if (i<1) {
throw new ValidationException(ResultCode.UPDATE_FAIL);
}
return i;
}
@Override
public IPage<Resume> findListByPage(Integer page, Integer pageCount) {
IPage<Resume> wherePage = new Page<>(page, pageCount);
Resume where = new Resume();
return baseMapper.selectPage(wherePage, Wrappers.query(where));
}
@Override
public int batchDelete(List<Integer> ids) throws ValidationException {
int i = mapper.deleteBatchIds(ids);
if (i<1) {
throw new ValidationException(ResultCode.DELETE_FAIL);
}
return i;
}
@Override
public List<Resume> getList(ResumeQueryDTO dto) throws ValidationException {
List<Resume> resumes = mapper.selectList(new QueryWrapper<Resume>()
.like(StringUtils.isNotBlank(dto.getPhone()),"phone",dto.getPhone())
.like(StringUtils.isNotBlank(dto.getEmail()),"email",dto.getEmail())
.like(StringUtils.isNotBlank(dto.getName()),"name",dto.getName()));
if (CollectionUtils.isEmpty(resumes)) {
throw new ValidationException(ResultCode.QUERY_FAIL);
}
return resumes;
}
}
- 管理员对此系统用户进行管理:增加用户、删除用户、更新用户、查询用户
- 增加用户通过 userService.insert(user) 依据用户的 user 进行用户插入
- 删除用户通过 userService.delete(id) 依据用户的 id 进行用户删除
- 更新用户通过 userService.updateData(user)依据用户的 user 进行用户更新
- 查询用户通过 userService.getList(dto)依据数据(id、email、name)进行用户的查询
- 批量删除用户通过 userService.batchDelete(ids)基于删除用户操作对批量的 id 进行删除
- 增删改查操作需要调用 userserviceimpl.java 里的函数进行实现
java
package com.kilogod.code.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.kilogod.code.common.res.ResultData;
import com.kilogod.code.domain.User;
import com.kilogod.code.domain.dto.UserQueryDTO;
import com.kilogod.code.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.xml.bind.ValidationException;
import java.util.List;
@Slf4j
@Api(tags = {"用户表"})
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@PostMapping("/insert")
@ApiOperation(value = "新增用户表")
public ResultData insert(@RequestBody User user) {
ResultData rc = new ResultData();
try {
rc.setData(userService.insert(user));
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
@DeleteMapping("/delete")
@ApiOperation(value = "删除用户表")
public ResultData delete(@RequestParam String id) {
ResultData rc = new ResultData();
try {
rc.setData(userService.delete(id));
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
@PutMapping("/update")
@ApiOperation(value = "更新用户表")
public ResultData update(@RequestBody User user) {
ResultData rc = new ResultData();
try {
rc.setData(userService.updateData(user));
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
@GetMapping("/list")
@ApiOperation(value = "查询用户表分页数据")
public ResultData<PageInfo<User>> getList(UserQueryDTO dto) {
ResultData rc = new ResultData();
try {
PageHelper.startPage(dto.getPage(), dto.getSize());
List<User> list = userService.getList(dto);
PageInfo<User> data = new PageInfo<>(list);
rc.setData(data);
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
@PostMapping("/batchDelete")
@ApiOperation(value = "批量删除用户表")
public ResultData batchDelete(@RequestBody List<Integer> ids) {
ResultData rc = new ResultData();
try {
rc.setData(userService.batchDelete(ids));
} catch (ValidationException e) {
rc.setError(e.getMessage());
printStackTrace();
} catch (Exception e) {
rc.setError();
printStackTrace();
}
return rc;
}
}
3.3 用户操作的服务
这是对用户操作进行具体服务执行的.java 文件,用户在 usercontroller.java 中调用 userserviceimpl.java 文件中的
public int updateData(User user) throws ValidationException、
c++
public int insert(User user) throws ValidationException
public List<User>getList(UserQueryDTO dto) throws ValidationException
等函数实现用户增删改查的操作
java
package com.kilogod.code.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.kilogod.code.common.res.ResultCode;
import com.kilogod.code.config.JWTToken;
import com.kilogod.code.domain.User;
import com.kilogod.code.domain.dto.UserDTO;
import com.kilogod.code.domain.dto.UserQueryDTO;
import com.kilogod.code.domain.vo.UserInfoVO;
import com.kilogod.code.domain.vo.UserVO;
import com.kilogod.code.mapper.UserMapper;
import com.kilogod.code.service.IUserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.xml.bind.ValidationException;
import java.util.List;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Resource
private UserMapper mapper;
@Override
public int insert(User user) throws ValidationException {
int insert = mapper.insert(user);
if (insert < 1) {
throw new ValidationException(ResultCode.INSERT_FAIL);
}
return insert;
}
@Override
public int delete(String id) throws ValidationException {
int i = mapper.delete(new QueryWrapper<User>().eq("id", id));
if (i<1) {
throw new ValidationException(ResultCode.DELETE_FAIL);
}
return i;
}
@Override
public int updateData(User user) throws ValidationException {
int i = mapper.updateById(user);
if (i<1) {
throw new ValidationException(ResultCode.UPDATE_FAIL);
}
return i;
}
@Override
public IPage<User> findListByPage(Integer page, Integer pageCount) {
IPage<User> wherePage = new Page<>(page, pageCount);
User where = new User();
return baseMapper.selectPage(wherePage, Wrappers.query(where));
}
@Override
public int batchDelete(List<Integer> ids) throws ValidationException {
int i = mapper.deleteBatchIds(ids);
if (i<1) {
throw new ValidationException(ResultCode.DELETE_FAIL);
}
return i;
}
@Override
public UserVO getLoginInfo(UserDTO userDTO) throws ValidationException {
if (StringUtils.isBlank(userDTO.getUsername())||StringUtils.isBlank(userDTO.getPassword())) {
throw new ValidationException(ResultCode.USER_NOT_NULL);
}
User user = mapper.selectOne(new QueryWrapper<User>().eq("username", userDTO.getUsername()));
if ("".equals(user)||user==null) {
throw new ValidationException(ResultCode.USERID_USERPASSWORD_FAIL);
}
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
boolean matches = encoder.matches(userDTO.getPassword(), user.getPassword());
if (!matches) {
throw new ValidationException(ResultCode.USERID_USERPASSWORD_FAIL);
}
UserInfoVO userInfo=new UserInfoVO();
userInfo.setId(user.getId());
userInfo.setName(user.getName());
userInfo.setEmail(user.getEmail());
userInfo.setUsername(user.getUsername());
String token = JWTToken.createToken(userInfo);
UserVO userVO=new UserVO();
userVO.setToken(token);
userVO.setDeadline(JWTToken.getDeadline(token));
userVO.setUserInfo(userInfo);
return userVO;
}
@Override
public boolean checkUserInfo(UserInfoVO userInfo) {
User user = mapper.selectOne(new QueryWrapper<User>().eq("id", userInfo.getId()).eq("username", userInfo.getUsername()));
if (user==null) {
return false;
}
return true;
}
@Override
public List<User> getList(UserQueryDTO dto) throws ValidationException {
List<User> list = mapper.selectList(new QueryWrapper<User>()
.like(StringUtils.isNotBlank(dto.getId()),"id",dto.getId())
.like(StringUtils.isNotBlank(dto.getEmail()),"email",dto.getEmail())
.like(StringUtils.isNotBlank(dto.getName()),"name",dto.getName()));
if (CollectionUtils.isEmpty(list)) {
throw new ValidationException(ResultCode.QUERY_IS_NULL);
}
return list;
}
}
四、结 果 展 示
按照 id 查询
五、体 会 总 结
本次 Web 应用开发设计的全部过程,使我们六个同学了解并且熟悉了采用 idea+Navicat for MySQL 的开发环境。对于 B/S 的简历信息管理系统有了更为深入的了解,最重要的是对于老师课堂上所介绍的 HTML,CSS,JS,Servlet 和 JSP 等技术的使用有了一个初步的认知,增删改查是一个管理系统最基本的操作要求,而对于 Web 前端的实现简历信息管理中的增删改查和展示功能这是我们组六位同学的第一次实践,虽然过程很曲折,但还好最后也算是有所收获。
就这次设计而言,相比之前对于 C 语言,Java 语言项目的设计,我们能深刻的认识到,网站的本质是数据的流动。网站的数据,那自然是要做数据库了。而数据的流动,一个是简历的录入;一个是后台管理员的管理后台,其中最重要的添加简历,甚至添加分类等等。经过考虑,我们还是选择了一步步来。还有前端的样式问题,确实的麻烦,要调很久。还好最后经过高人指点,了解了 ant design 的模板来制作管理页面,并且应用于本次设计。
总体来说,通过今次的对网页设计的学习,有收获也有遗憾、不足的地方,但我想,我们已经迈入了网页设计的大门,只要我们再认真努,力的去学习,去提高,凭借我们对网页设计的热情和执着,我们将来设计出的网页会更加专业,更完善。也希望老师在今后的日子里多指导。
参考文献
- 基于WEB的就业信息管理系统的设计与实现(华南理工大学·叶国伟)
- 基于Struts架构模式的人才招聘网站开发(大连交通大学·张春国)
- 大学生就业管理系统设计与实现(电子科技大学·李德培)
- 数字化就业指导系统(复旦大学·俞豪杰)
- 基于WEB的就业信息管理系统的设计与实现(华南理工大学·叶国伟)
- 求职招聘信息管理系统的设计与实现(电子科技大学·卢学全)
- 基于B/S架构的某零售企业片区人力资源管理系统设计与开发(电子科技大学·郑棉虹)
- 大学生就业信息网的设计与实现(吉林大学·牛佳)
- 基于Web构架的招聘系统的设计和实现(华东师范大学·孙正孟)
- 基于Web高校就业管理系统的设计与开发(吉林大学·唐焕春)
- 基于SSH的兼职招聘系统的分析与设计(江西财经大学·陶然)
- 基于Struts架构模式的人才招聘网站开发(大连交通大学·张春国)
- 数字化就业指导系统(复旦大学·俞豪杰)
- 基于Struts架构模式的人才招聘网站开发(大连交通大学·张春国)
- 部队干部管理系统的设计与实践(吉林大学·侯春山)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码客栈 ,原文地址:https://bishedaima.com/yuanma/35416.html