基于 java+springboot 工资管理系统设计和实现

2023-05-16

博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域
作者主页 超级帅帅吴
Java项目精品实战案例《500套》
欢迎点赞 收藏 ⭐留言
文末获取源码联系方式

目录

  • 主要功能模块设计
    • 主要技术:
    • 主要功能实现前端:
      • 工资平台首页:
      • 登录注册管理:
      • 支出管理:
      • 收入管理:
      • 报表统计:
    • 部分关键代码展示:
      • 登录模块:
      • 配置模块:
      • 主要表设计:
      • 用户表:
      • 权限表:
      • 收支信息表:

主要功能模块设计

登录注册、用户管理、支出管理、收入管理、统计报表、系统管理、角色管理等

主要技术:

Java、springboot、mybatis、mysql、jquery、layui、JavaScript、html、css、jsp、log4j等一些常见的基本技术。

主要功能实现前端:

运行项目后 输入http://localhost:8080/boot_famcwmanage 访问系统 页面
登录页面

首页
在这里插入图片描述

工资平台首页:

首页

登录注册管理:

登录页面
在这里插入图片描述

支出管理:

在这里插入图片描述

收入管理:

在这里插入图片描述

报表统计:

在这里插入图片描述

部分关键代码展示:

登录模块:

package com.example.cwgl.controller;


import com.example.cwgl.entity.Privilege;
import com.example.cwgl.entity.Role;
import com.example.cwgl.entity.UserInfo;
import com.example.cwgl.service.PrivilegeService;
import com.example.cwgl.service.UserInfoService;
import com.example.cwgl.utils.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

/**
* description: TODO
* @author zhangsihai
* @date 2020/3/24 15:24
*/
@Controller
public class UserInfoController {

    @Resource
    private UserInfoService userInfoService;
    @Resource
    private PrivilegeService privilegeService;

    @RequestMapping(value = {"/", "login.html"})
    public String toLogin(HttpServletRequest request, HttpServletResponse response){
        HttpSession session = request.getSession();
        if(session.getAttribute(Config.CURRENT_USERNAME)==null){
            return "login";
        }else {
            try {
                response.sendRedirect("/boot_famcwmanage/pages/index");
            } catch (IOException e) {
                e.printStackTrace();
                return "login";
            }
            return null;
        }

    }

//    @RequestMapping(value = "/login.do",method = RequestMethod.POST)
    @RequestMapping(value = "/login.do")
    @ResponseBody
    public Result getUserInfo(UserInfo userInfo, HttpServletRequest request, HttpServletResponse response){
        boolean userIsExisted = userInfoService.userIsExisted(userInfo);
        System.out.println(userIsExisted + " - " + request.getHeader("token"));
        userInfo = getUserInfo(userInfo);
        if("client".equals(request.getHeader("token")) && !userIsExisted){
            //用户不存在
            return  ResultUtil.success(-1);
        }
        if (userIsExisted && userInfo == null){
            return  ResultUtil.unSuccess("用户名或密码错误!");
        }else {
            //将用户信息存入session
            userInfo = setSessionUserInfo(userInfo,request.getSession());
            //将当前用户信息存入cookie
            setCookieUser(request,response);
            return ResultUtil.success("登录成功", userInfo);
        }
    }

    @RequestMapping("/users/getUsersByWhere/{pageNo}/{pageSize}")
    public @ResponseBody Result getUsersByWhere(UserInfo userInfo, @PathVariable int pageNo, @PathVariable int pageSize, HttpSession session){
        if ("".equals(userInfo.getHouseid())){
            userInfo.setHouseid(null);
        }
        if (userInfo.getRoleid() == -1){
            userInfo.setRoleid(Config.getSessionUser(session).getRoleid());
        }
        Utils.log(userInfo.toString());
        PageModel model = new PageModel<>(pageNo,userInfo);
        model.setPageSize(pageSize);
        return userInfoService.getUsersByWhere(model);
    }

    @RequestMapping("/user/add")
    public @ResponseBody Result addUser(UserInfo userInfo){
        System.out.println(userInfo);
        try {
            int num = userInfoService.add(userInfo);
            if(num>0){
                return ResultUtil.success();
            }else {
                return ResultUtil.unSuccess();
            }
        }catch (Exception e){
            return ResultUtil.error(e);
        }
    }

    @RequestMapping("/user/update")
    public @ResponseBody Result updateUser(UserInfo userInfo){
        try {
            int num = userInfoService.update(userInfo);
            if(num>0){
                return ResultUtil.success();
            }else {
                return ResultUtil.unSuccess();
            }
        }catch (Exception e){
            return ResultUtil.error(e);
        }
    }

    @RequestMapping("/user/del/{id}")
    public @ResponseBody Result deleteUser(@PathVariable String id){
        try {
            int num = userInfoService.delete(id);
            if(num>0){
                return ResultUtil.success();
            }else {
                return ResultUtil.unSuccess();
            }
        }catch (Exception e){
            return ResultUtil.error(e);
        }
    }

    @RequestMapping("/getSessionUser")
    @ResponseBody
    public UserInfo getSessionUser(HttpSession session){
        UserInfo sessionUser = (UserInfo) session.getAttribute(Config.CURRENT_USERNAME);
        sessionUser.setPassword(null);
        return sessionUser;
    }

    @RequestMapping("/logout")
    public String logout(HttpServletRequest request, HttpServletResponse response){
        delCookieUser(request, response);
        request.getSession().removeAttribute(Config.CURRENT_USERNAME);
        return "login";
    }

    @RequestMapping("/getAllRoles")
    public @ResponseBody Result<Role> getAllRoles(){
        try {
            List<Role> roles = userInfoService.getAllRoles();
            if (roles.size()>0){
                return ResultUtil.success(roles);
            }else {
                return ResultUtil.unSuccess();
            }
        }catch (Exception e){
            return ResultUtil.error(e);
        }
    }

    @RequestMapping("/role/add")
    public @ResponseBody Result addRole(Role role){
        try {
            int num = userInfoService.addRole(role);
            if(num>0){
                privilegeService.addDefaultPrivilegesWhenAddRole(role.getRoleid().toString());
                return ResultUtil.success();
            }else {
                return ResultUtil.unSuccess();
            }
        }catch (Exception e){
            return ResultUtil.error(e);
        }
    }

    @RequestMapping("/role/update")
    public @ResponseBody Result updateRole(Role role){
        try {
            int num = userInfoService.updateRole(role);
            if(num>0){
                return ResultUtil.success();
            }else {
                return ResultUtil.unSuccess();
            }
        }catch (Exception e){
            return ResultUtil.error(e);
        }
    }

    @RequestMapping("/role/del/{roleid}")
    public @ResponseBody Result deleteRole(@PathVariable String roleid){
        try {
            privilegeService.delPrivilegesWenDelRole(roleid);
            int num = userInfoService.deleteRole(roleid);
            if(num>0){
                return ResultUtil.success();
            }else {
                privilegeService.addDefaultPrivilegesWhenAddRole(roleid);
                return ResultUtil.unSuccess();
            }
        }catch (Exception e){
            return ResultUtil.error(e);
        }
    }

    @RequestMapping("/getRole/{id}")
    public @ResponseBody Result getRoleById(@PathVariable String id){
        try {
            Role role = userInfoService.getRoleById(id);
            if(role != null){
                return ResultUtil.success(role);
            }else {
                return ResultUtil.unSuccess();
            }
        }catch (Exception e){
            return ResultUtil.error(e);
        }
    }

    /**
     * 登录时将用户信息加入cookie中
     * @param response
     */
    private void setCookieUser(HttpServletRequest request, HttpServletResponse response){
        UserInfo user = getSessionUser(request.getSession());
        Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
        //cookie 保存7天
        cookie.setMaxAge(60*60*24*7);
        response.addCookie(cookie);
    }

    /**
     * 注销时删除cookie信息
     * @param request
     * @param response
     */
    private void delCookieUser(HttpServletRequest request, HttpServletResponse response){
        UserInfo user = getSessionUser(request.getSession());
        Cookie cookie = new Cookie(Config.CURRENT_USERNAME,user.getUsername()+"_"+user.getId());
        cookie.setMaxAge(-1);
        response.addCookie(cookie);
    }

    /**
     * 通过用户信息获取用户权限信息,并存入session中
     * @param userInfo
     * @param session
     * @return
     */
    public UserInfo setSessionUserInfo(UserInfo userInfo, HttpSession session){
        List<Privilege> privileges = privilegeService.getPrivilegeByRoleid(userInfo.getRoleid());
        userInfo.setPrivileges(privileges);
        session.setAttribute(Config.CURRENT_USERNAME,userInfo);
        return userInfo;

    }

    public UserInfo getUserInfo(UserInfo userInfo){
       return userInfoService.getUserInfo(userInfo);
    }
}

配置模块:

server:
  port: 8080
  servlet:
    context-path: /boot_famcwmanage

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3307/boot_famcwmanage?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
  jpa:
    database: mysql
  mvc:
    static-path-pattern: /static/**
    throw-exception-if-no-handler-found: true
  thymeleaf:
    cache: false
mybatis:
  mapper-locations: classpath:mappers/*.xml
  type-aliases-package: com.example.cwgl.entity

logging:
  level:
    root: info
    org:
      springframework:
        web: info
    com.example.cwgl.dao: debug


主要表设计:

用户表:

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(255) DEFAULT NULL COMMENT '账号',
  `password` varchar(255) DEFAULT NULL COMMENT '密码',
  `realname` varchar(255) DEFAULT NULL COMMENT '真实姓名',
  `roleid` int NOT NULL DEFAULT '3' COMMENT '角色编号',
  `houseid` int DEFAULT NULL COMMENT '所属家庭编号',
  `photo` varchar(255) DEFAULT NULL COMMENT '用户头像',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `houseid` (`houseid`) USING BTREE,
  KEY `roleid` (`roleid`) USING BTREE,
  CONSTRAINT `user_ibfk_2` FOREIGN KEY (`houseid`) REFERENCES `house` (`id`),
  CONSTRAINT `user_ibfk_3` FOREIGN KEY (`roleid`) REFERENCES `role` (`roleid`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;

权限表:

CREATE TABLE `privilege` (
  `ID` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `privilegeNumber` varchar(80) DEFAULT NULL COMMENT '权限编号',
  `privilegeName` varchar(80) DEFAULT NULL COMMENT '权限名称',
  `privilegeTipflag` char(4) DEFAULT NULL COMMENT '菜单级别',
  `privilegeTypeflag` char(4) DEFAULT NULL COMMENT '1启用 0禁用',
  `privilegeUrl` varchar(255) DEFAULT NULL COMMENT '权限URL',
  `icon` varchar(20) DEFAULT NULL COMMENT '图标',
  PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;

收支信息表:

CREATE TABLE `bill` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(255) DEFAULT NULL,
  `userid` int DEFAULT NULL COMMENT '用户id',
  `money` float(10,2) DEFAULT NULL COMMENT '金额',
  `typeid` int NOT NULL COMMENT '类型 1 收入 2 支出',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  `paywayid` int DEFAULT NULL COMMENT '支付方式',
  `time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '交易时间',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `userid` (`userid`) USING BTREE,
  KEY `type` (`typeid`) USING BTREE,
  KEY `payway` (`paywayid`) USING BTREE,
  CONSTRAINT `bill_ibfk_2` FOREIGN KEY (`typeid`) REFERENCES `type` (`id`),
  CONSTRAINT `bill_ibfk_3` FOREIGN KEY (`paywayid`) REFERENCES `payway` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=195 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;

获取源码
总体来说这个项目功能相对还是比较简单优秀的、适合初学者作为课程设计和毕业设计参考
🍅 查看下方微信号获取联系方式 📝
🚀🚀🚀精彩系列推荐
Java毕设项目精品实战案例《500套》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 java+springboot 工资管理系统设计和实现 的相关文章

随机推荐

  • VSCode插件Remote-SSH连接远程服务器错误 “could not establish connection *****“

    VSCode插件Remote SSH连接远程服务器错误 could not establish connection 解决方案 到目录C Users User Name ssh下 xff0c 其中User Name是电脑用户名 xff0c
  • VSCode插件 优雅地使用Jupyter Notebook

    VSCode插件 优雅地使用Jupyter Notebook 环境 Python 3 7 4 conda 4 7 12 jupyter notebook 6 0 1 要求需要有Python环境和Anaconda环境 安装了jupyter n
  • pymssql连接mssql错误:pymssql.OperationalError: (20009, b‘DB-Lib error message 20009, severity 9:\

    pymssql连接mssql错误 xff1a pymssql OperationalError 20009 b DB Lib error message 20009 severity 9 打开SQL Server Configuration
  • 基于有道翻译的英翻中微信小程序

    基于有道翻译的英翻中微信小程序 环境 微信开发者工具 微信小程序云开发 node js v12 16 3 axios 64 0 20 0 cheerio 64 1 0 0 rc 3 相关内容 Node js有道翻译爬虫 客户端 创建新的微信
  • PaddleHub OCR实现文字识别

    PaddleHub OCR实现文字识别 环境 paddlehub 61 61 1 8 3 paddleocr 61 61 1 0 1 paddlepaddle 61 61 1 8 5 Shapely 61 61 1 7 1 pip安装 pi
  • IDEA连接远程MongoDB数据库

    IDEA连接远程MongoDB数据库 环境 IntelliJ IDEA 2020 2 3 Ultimate Edition MongDB 4 2 1 阿里云MongoDB控制台 进入阿里云控制台 xff0c 选择MongDB实例列表 xff
  • 开发常用网站

    开发常用网站 开发工具 JetBrains VSCode SublimeText Web开发 微信小程序开发者文档 Node js boostrap HTML HTTP服务器 Nginx Tomcat Apache HTTP Server
  • 使用Idea创建项目的一种清晰思路

    1 打开Idea后 xff0c 选择File gt new gt project 2 选择空项目 3 将project命名为任意名称 xff0c 这里命名为Java Exercise xff0c 点Finish 4 弹出对话框 xff0c
  • Spring Boot搭建Web项目(MongoDB)

    Spring Boot搭建Web项目 环境 JDK 1 8 IntelliJ IDEA 2020 3 2 Ultimate Edition PyCharm 2020 2 4 Professional Edition Maven 3 6 bs
  • 银行家算法 C++描述

    银行家算法 C 43 43 描述 银行家算法 操作系统 银行家算法 实现代码 main cpp span class token macro property span class token directive keyword inclu
  • 三种修改windows系统MAC地址方法

    方法一 xff1a 使用windows控制面板修改 第一步 按win键 gt 输入 控制面板 并打开 第二步 打开 网络和共享中心 第三步 打开 更改适配器设置 第四步 右击 WLAN2 后点击属性 第五步 修改网络地址属性 点击配置 xf
  • 【操作系统实验】Linux环境下用进程实现生产者消费者问题——C语言完整代码+详细实验报告

    注意 代码在文末 xff0c 以下为详细实验报告 实验目的 以生产者和消费者问题为例 xff0c 学习并熟悉Linux下进程通信 同步机制的具体实现方法 xff0c 主要是了解并掌握信号量机制和共享内存的使用方法 xff0c 进一步熟悉Li
  • mariadb的源码安装

    xff08 1 xff09 登上mariadb的官方网站 2 选择下载mariadb server 3 下载10 2版本 4 找到源码安装方式 xff08 5 xff09 下载传输到主机上 6 准备编译环境 yum span class t
  • HTTP协议以及Apache的httpd配置

    HTTP协议 前言HTTP简介HTTP诞生HTTP版本历史HTTP 0 9HTTP 1 0HTTP 1 1HTTP 2 0 web资源HTTP工作流程HTTP报文报文语法格式method xff08 方法 xff09 status xff0
  • 狂神说Redis笔记,Redis【入门】就这一篇就够了!

    Redis学习笔记 视频链接 xff1a 狂神说Redis链接 1 Nosql概述 1 1 为什么要使用Nosql 1 单片机Mysql时代 90年代 xff0c 一个网站的访问量太大 xff0c 单个数据库完全够用 随着用户的增多 xff
  • manjaro一些常用软件,指令(持续更新中)

    manjaro使用很久了 xff0c 由于对linux的陌生和迷惑 xff0c 重装了很多很多很多次 xff0c 最近的系统大概是使用最久的一次 xff0c 也解决了很多以前的问题在此记录下 系统如下 xff1a 软件安装 换源 烂大街的教
  • 在开发板上安装gdb

    网上对于在开发板上安装gdb的教程大多都是将开发板的文件系统放在虚拟机主机上 xff0c 从而通过nfs挂载上去的 xff0c 主要是针对性能较差开发板 xff0c 本教程讲解的是如何在开发板上直接安装gdb 为什么不能直接将pc上交叉编译
  • Idea Intellij 远程开发调试

    一 背景 在构建MiniOB开发环境时需要Linux环境 xff0c 另外结合分布式系统 xff0c 利用较好的通信 xff0c 萌发了远程开发的想法 xff1b 实际上远程部署 开发在很久之前有过想法 xff08 大约刚开始学Spring
  • Java笔记(4)——方法重载和this关键字

    1 方法的重载 不能通过参数名去区分两个方法 不能通过返回值类型来区分两个方法 可以通过参数列表 xff1a 参数个数 xff0c 参数类型来区分 span class token keyword public span span clas
  • 基于 java+springboot 工资管理系统设计和实现

    博主介绍 xff1a 5年java开发经验 xff0c 专注Java开发 定制 远程 指导等 csdn特邀作者 专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例 500套 欢迎点赞 收藏 留言 文末获取源码联系方式 目