大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦。
💞当前专栏:Java毕业设计
精彩专栏推荐👇🏻👇🏻👇🏻
目录
一、项目简介
本论文首先对基于SpringBoot的人事管理系统进行了需求分析,从系统开发环境、系统目标、设计流程、功能设计等几个方面进行系统的总体设计,使用Java语言设计了基于SpringBoot的人事管理系统,主要完成了档案管理、员工考勤、考核管理、培训管理等各项功能的设计,实现对人事管理系统展示。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。通过对系统的功能进行测试,测试结果证明该系统界面友好、功能完善,有着较高的使用价值,具有庞大的潜在用户群体和较广阔的应用前景。
二、系统设计
2.1系统体系结构
设计的系统的结构图4-1所示:
登录系统结构图,如图4-2所示:
2.2数据库设计原则
学习编程,我们都知道数据库设计是基于需要设计的系统功能,我们需要建立一个数据库关系模型,用于存储数据信息,这样当我们在程序中时,就没有必要为程序页面添加数据,从而提高系统的效率。数据库存储了很多信息,可以说是信息管理系统的核心和基础,数据库还提供了添加、删除、修改和检查,使系统能够快速找到自己想要的信息,而不是在程序代码中找到。数据库中信息表的每个部分根据一定的关系精确地组合,排列和组合成数据表。
通过系统的功能进行规划分成管理员和用户,随后根据功能模块分成几个相应的实体信息。
三、系统项目部分截图
3.1系统主界面
主界面采用盒状布局形式,如图5-1,通过对应主页面上方动态链接来实现选项的功能选项的排列。主界面顶部有公告信息、考勤信息、加班申请信息、请假申请信息、员工考核信息、员工培训信息以及登录注册等多个功能的快速链接。
3.2员工考勤功能模块
在员工考勤模块中,员工可以提交考勤打卡信息,管理员在后台系统进行考勤的审核,如图5-2所示。
加班申请功能模块
加班申请模块功能主要是员工在系统中提交加班申请,管理员在后台可以进行审核,如图5-3所示。
3.3系统后台功能模块
在后台系统中,可以进行管理员信息、用户信息、员工培训信息、公告信息的编辑以及考勤信息、加班申请信息、请假申请信息、员工考核信息、离职员工信息的审核,如图5-7所示。
四、论文目录
摘 要 I
ABSTRACT II
目 录 III
第1章 绪论 1
1.1背景及意义 1
1.2 国内外研究概况 1
1.3 研究的内容 2
第2章 相关技术 4
2.1 JAVA简介 4
2.2 B/S结构简介 4
2.3 B/S与C/S结构特点 5
2.4 MySQL数据库 5
2.5 SpringBoot框架 6
第3章 系统分析 8
3.1 功能需求 8
3.2 开发运行环境需求 8
3.3 性能需求 9
3.4 系统可行性分析 9
3.4.1技术可行性:技术背景 9
3.4.2经济可行性 10
3.4.3操作可行性: 10
3.5系统流程分析 10
3.5.1操作流程 10
3.5.2添加信息流程 11
3.5.3删除信息流程 12
第4章 系统设计 13
4.1 设计原则 13
4.2 系统体系结构 13
4.2开发流程设计 14
4.3 数据库设计原则 15
第5章 系统详细设计 16
5.1系统主界面 16
5.2系统功能模块 16
5.2.1员工考勤功能模块 16
5.2.2加班申请功能模块 17
5.2.3员工请假功能模块 18
5.2.4员工考核功能模块 19
5.2.5员工培训功能模块 20
5.3系统后台功能模块 20
第6章 系统测试 22
6.1系统测试的目的 22
6.2系统测试方法 22
6.3功能测试 22
结 论 24
致 谢 25
参考文献 26
五、部分核心代码
4.1 用户部分
package com.example.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.UserInfo;
import com.example.service.UserInfoService;
import com.example.exception.CustomException;
import com.example.common.ResultCode;
import com.example.vo.UserInfoVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.example.service.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Value;
import cn.hutool.core.util.StrUtil;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
@RequestMapping(value = "/userInfo")
public class UserInfoController {
@Resource
private UserInfoService userInfoService;
@PostMapping
public Result<UserInfo> add(@RequestBody UserInfoVo userInfo) {
userInfoService.add(userInfo);
return Result.success(userInfo);
}
@DeleteMapping("/{id}")
public Result delete(@PathVariable Long id) {
userInfoService.delete(id);
return Result.success();
}
@PutMapping
public Result update(@RequestBody UserInfoVo userInfo) {
userInfoService.update(userInfo);
return Result.success();
}
@GetMapping("/{id}")
public Result<UserInfo> detail(@PathVariable Long id) {
UserInfo userInfo = userInfoService.findById(id);
return Result.success(userInfo);
}
@GetMapping
public Result<List<UserInfoVo>> all() {
return Result.success(userInfoService.findAll());
}
@GetMapping("/page/{name}")
public Result<PageInfo<UserInfoVo>> page(@PathVariable String name,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
HttpServletRequest request) {
return Result.success(userInfoService.findPage(name, pageNum, pageSize, request));
}
@PostMapping("/register")
public Result<UserInfo> register(@RequestBody UserInfo userInfo) {
if (StrUtil.isBlank(userInfo.getName()) || StrUtil.isBlank(userInfo.getPassword())) {
throw new CustomException(ResultCode.PARAM_ERROR);
}
return Result.success(userInfoService.add(userInfo));
}
/**
* 批量通过excel添加信息
* @param file excel文件
* @throws IOException
*/
@PostMapping("/upload")
public Result upload(MultipartFile file) throws IOException {
List<UserInfo> infoList = ExcelUtil.getReader(file.getInputStream()).readAll(UserInfo.class);
if (!CollectionUtil.isEmpty(infoList)) {
// 处理一下空数据
List<UserInfo> resultList = infoList.stream().filter(x -> ObjectUtil.isNotEmpty(x.getName())).collect(Collectors.toList());
for (UserInfo info : resultList) {
userInfoService.add(info);
}
}
return Result.success();
}
@GetMapping("/getExcelModel")
public void getExcelModel(HttpServletResponse response) throws IOException {
// 1. 生成excel
Map<String, Object> row = new LinkedHashMap<>();
row.put("name", "张天志");
row.put("password", "123456");
row.put("nickName", "老张");
row.put("sex", "男");
row.put("age", 22);
row.put("birthday", "TIME");
row.put("phone", "18843232356");
row.put("address", "上海市");
row.put("hukou", "");
row.put("zhengzhi", "");
row.put("level", 2);
List<Map<String, Object>> list = CollUtil.newArrayList(row);
// 2. 写excel
ExcelWriter writer = ExcelUtil.getWriter(true);
writer.write(list, true);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setHeader("Content-Disposition","attachment;filename=userInfoModel.xlsx");
ServletOutputStream out = response.getOutputStream();
writer.flush(out, true);
writer.close();
IoUtil.close(System.out);
}
}
4.2菜单部分
package com.example.controller;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.common.Result;
import com.example.entity.Account;
import com.example.service.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@RestController
public class MenuController {
@Resource
private AdminInfoService adminInfoService;
@Resource
private UserInfoService userInfoService;
@Resource
private LizhiInfoService lizhiInfoService;
@Resource
private AdvertiserInfoService advertiserInfoService;
@GetMapping(value = "/getMenu", produces="application/json;charset=UTF-8")
public String getMenu(HttpServletRequest request) {
Account account = (Account) request.getSession().getAttribute("user");
Integer level;
if (account == null) {
level = 1;
} else {
level = account.getLevel();
}
JSONObject obj = new JSONObject();
obj.putOpt("code", 0);
obj.putOpt("msg", "");
JSONArray dataArray = new JSONArray();
dataArray.add(getJsonObject("/", "系统首页", "layui-icon-home", "/"));
JSONObject tableObj = new JSONObject();
tableObj.putOpt("title", "信息管理");
tableObj.putOpt("icon", "layui-icon-table");
if (1 == level) {
JSONArray array = new JSONArray();
array.add(getJsonObject("adminInfo", "管理员信息", "layui-icon-table", "adminInfo"));
array.add(getJsonObject("userInfo", "用户信息", "layui-icon-table", "userInfo"));
array.add(getJsonObject("submitInfo", "考勤信息", "layui-icon-table", "submitInfo"));
array.add(getJsonObject("jiabanInfo", "加班申请信息", "layui-icon-table", "jiabanInfo"));
array.add(getJsonObject("qingjiaInfo", "请假申请信息", "layui-icon-table", "qingjiaInfo"));
array.add(getJsonObject("lizhiInfo", "离职员工信息", "layui-icon-table", "lizhiInfo"));
array.add(getJsonObject("kaoheInfo", "员工考核信息", "layui-icon-table", "kaoheInfo"));
array.add(getJsonObject("fileInfo", "员工培训信息", "layui-icon-table", "fileInfo"));
array.add(getJsonObject("advertiserInfo", "公告信息", "layui-icon-table", "advertiserInfo"));
array.add(getJsonObject("accountAdminInfo", "个人信息", "layui-icon-user", "accountAdminInfo"));
tableObj.putOpt("list", array);
}
if (2 == level) {
JSONArray array = new JSONArray();
array.add(getJsonObject("submitInfo", "考勤信息", "layui-icon-table", "submitInfo"));
array.add(getJsonObject("jiabanInfo", "加班申请信息", "layui-icon-table", "jiabanInfo"));
array.add(getJsonObject("qingjiaInfo", "请假申请信息", "layui-icon-table", "qingjiaInfo"));
array.add(getJsonObject("lizhiInfo", "离职员工信息", "layui-icon-table", "lizhiInfo"));
array.add(getJsonObject("kaoheInfo", "员工考核信息", "layui-icon-table", "kaoheInfo"));
array.add(getJsonObject("fileInfo", "员工培训信息", "layui-icon-table", "fileInfo"));
array.add(getJsonObject("advertiserInfo", "公告信息", "layui-icon-table", "advertiserInfo"));
array.add(getJsonObject("accountUserInfo", "个人信息", "layui-icon-user", "accountUserInfo"));
tableObj.putOpt("list", array);
}
dataArray.add(tableObj);
dataArray.add(getJsonObject("updatePassword", "修改密码", "layui-icon-password", "updatePassword"));
dataArray.add(getJsonObject("login", "退出登录", "layui-icon-logout", "login"));
obj.putOpt("data", dataArray);
return obj.toString();
}
private JSONObject getJsonObject(String name, String title, String icon, String jump) {
JSONObject object = new JSONObject();
object.putOpt("name", name);
object.putOpt("title", title);
object.putOpt("icon", icon);
object.putOpt("jump", jump);
return object;
}
@GetMapping(value = "/getTotal", produces="application/json;charset=UTF-8")
public Result<Map<String, Integer>> getTotle() {
Map<String, Integer> resultMap = new HashMap<>();
resultMap.put("adminInfo", adminInfoService.findAll().size());
resultMap.put("userInfo", userInfoService.findAll().size());
resultMap.put("lizhiInfo", lizhiInfoService.findAll().size());
resultMap.put("advertiserInfo", advertiserInfoService.findAll().size());
return Result.success(resultMap);
}
}
获取源码或论文
如嘘对应的源码,可以私wo。