博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐进主页热门专栏推荐订阅⭐ 订阅收藏起来,防止下次找不到
🔎千套Java / PHP / nod.js / asp.net/ Python等项目实战更新中~
🔎百套小程序APP项目实战更新中~
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,帮你完成文档⚠️文末联系方式获取完整资料⚠️
4 系统设计
根据上文中对员工需求的一系列综合细致的分析,针对本文基于springboot的工资管理系统,得到一个如图4-1所示的宏观的功能模块结构图。
4.2 E-R图设计
通过对工资管理系统的分析和设计得出一个系统E-R图所有实体和属性的定义如下所示。
留言实体属性图,如图4-2所示。
图4-2 留言实体属性图
员工信息实体属性图,如图4-3所示:
图4-3员工信息实体属性图
员工工资实体属性图,如图4-4所示:
图4-4员工工资实体属性图
考勤信息实体属性图,如图4-5所示:
图4-5考勤信息实体属性图
4.3数据库的表的设计与开发
在现有的软件工程运行环境中,数据库与数据表的设计都是为了构建最适合最优秀的数据存储框架。建立一个优秀的数据库,必须保证数据的完整、准确,并尽量满足用户对数据存储的需求。那么,数据库中的信息和网络应用程序之间的链接就必须得到保障。在已有的条件下,尽可能地降低占用的数据库的空间资源消耗,使得整个工资管理系统能够迅速地做出反应。根据上述原则并结合实际需要,本文采用MySql进行设计。
表4-1:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表4-2:留言
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
biaoti | varchar | 200 | 标题 | ||
liuyanneirong | longtext | 4294967295 | 留言内容 | ||
liuyanshijian | datetime | 留言时间 | |||
gonghao | varchar | 200 | 工号 | ||
xingming | varchar | 200 | 姓名 | ||
bumen | varchar | 200 | 部门 | ||
shhf | longtext | 4294967295 | 回复内容 |
表4-3:考勤信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kaoqinbianhao | varchar | 200 | 考勤编号 | ||
gonghao | varchar | 200 | 工号 | ||
xingming | varchar | 200 | 姓名 | ||
bumen | varchar | 200 | 部门 | ||
yuefen | varchar | 200 | 月份 | ||
chidaocishu | int | 迟到次数 | |||
zaotuicishu | int | 早退次数 | |||
queqintianshu | int | 缺勤天数 | |||
xiujiatianshu | int | 休假天数 | |||
qita | varchar | 200 | 其他 | ||
yingchuqintianshu | int | 应出勤天数 | |||
shichuqintianshu | int | 实出勤天数 | |||
beizhu | longtext | 4294967295 | 备注 | ||
dengjishijian | date | 登记时间 |
表4-4:配置文件
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
name | varchar | 100 | 配置参数名称 | ||
value | varchar | 100 | 配置参数值 |
表4-5:部门
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
bumen | varchar | 200 | 部门 |
表4-6:员工工资
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yuefen | varchar | 200 | 月份 | ||
gonghao | varchar | 200 | 工号 | ||
xingming | varchar | 200 | 姓名 | ||
bumen | varchar | 200 | 部门 | ||
jibengongzi | float | 基本工资 | |||
jiabangongzi | float | 加班工资 | |||
jixiaojiangjin | float | 绩效奖金 | |||
qitabuzhu | float | 其他补助 | |||
koukuanjine | float | 扣款金额 | |||
koukuanyuanyin | longtext | 4294967295 | 扣款原因 | ||
shifagongzi | float | 实发工资 | |||
dengjiriqi | date | 登记日期 |
表4-7:员工
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
gonghao | varchar | 200 | 工号 | ||
mima | varchar | 200 | 密码 | ||
touxiang | longtext | 4294967295 | 头像 | ||
xingming | varchar | 200 | 姓名 | ||
xingbie | varchar | 200 | 性别 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
shenfenzhenghao | varchar | 200 | 身份证号 | ||
bumen | varchar | 200 | 部门 | ||
ruzhiriqi | date | 入职日期 |
表4-8:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
5.1管理员功能模块
管理员登录系统,管理员登录页面通过输入用户名、密码,选择角色并点击登录操作,如图5-1所示。
图5-1管理员登录界面图
管理员登录系统后,可以对系统首页、个人中心、员工管理、部门管理、考勤信息管理、员工工资管理、留言管理等功能模块进行相应操作,如图5-2所示。
图5-2管理员功能界图面
管理员点击员工管理;在员工管理页面输入工号、头像、姓名、性别、联系方式、身份证号、部门、入职日期等信息,进行查询,新增或删除员工信息等操作;如图5-3所示。
图5-3员工管理界面图
管理员点击部门管理;在部门管理页面输入部门等信息,进行查询,新增或删除部门等操作;如图5-4所示。
图5-4部门管理界面图
管理员点击考勤信息管理;在考勤信息管理页面输入考勤编号、工号、姓名、部门、月份、迟到次数、早退次数、缺勤天数、休假天数、其他、应出勤天数、实出勤天数、登记时间等信息,进行查询或新增、删除考勤信息等操作;如图5-5所示。
图5-5考勤信息管理界面图
管理员点击员工工资管理;在员工工资管理页面输入月份、工号、姓名、部门、基本工资、加班工资、绩效奖金、其他补助、扣款金额、实发工资、登记日期等信息,进行查询、新增或删除员工工资等操作;如图5-6所示。
图5-6员工工资管理界面图
JAVA后端代码实现
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
源码获取
大家点赞、收藏、关注 ,让更多需要的同学看到
⭐进主页热门专栏推荐订阅⭐ 订阅收藏起来,防止下次找不到
🔎千套Java / PHP / nod.js / asp.net/ Python等项目实战更新中~
🔎百套小程序APP项目实战更新中~👇下方有我的微信名片👇