springboot小项目,设备管理系统,适合练手(源码+SQL)

本文完整项目的代码:

github:https://github.com/caohanzong/springboot-device-management.git
gitee:https://gitee.com/caohanzong/springboot-device-management.git

1、项目页面

1、登录页面:
请添加图片描述
注:用户名密码登录,登录完成之后才可进入页面。中英文切换功能。

2、设备管理系统首页:
请添加图片描述
3、实现简单的增删改查的功能:请添加图片描述
4、对借设备的人的处理:请添加图片描述

2、数据库方面

1、user表:
在这里插入图片描述
2、equip设备表:
在这里插入图片描述
3、borrower表:
在这里插入图片描述

3、代码目录

在这里插入图片描述

4、关键代码

1、sql语言

CREATE DATABASE `easy`
USE `easy`

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`(
    `username` VARCHAR(32) NOT NULL,
    `password` VARCHAR(32) NOT NULL
)DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `borrower`;
CREATE TABLE `borrower`(
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `borrowerName` VARCHAR(32) NOT NULL,
    PRIMARY KEY(`id`)
)DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `equip`;
CREATE TABLE `equip`(
    `id` INT(6) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(32) NOT NULL,
    `serial` INT(6) NOT NULL,
    `state` INT(6) NOT NULL,
    `borrower` VARCHAR(32) NOT NULL,
    `date`  VARCHAR(32) NOT NULL,
    PRIMARY KEY(`id`)
)DEFAULT CHARSET=utf8;


INSERT  INTO `user`(`username`,`password`) VALUES ('admin','123456');

INSERT INTO `borrower`(`id`,`borrowerName`) VALUES (001,'uzi');
INSERT INTO `borrower`(`id`,`borrowerName`) VALUES (002,'lwx');
INSERT INTO `borrower`(`id`,`borrowerName`) VALUES (003,'灯红酒绿');

INSERT INTO `easy`.`equip` (`id`, `name`, `serial`, `state`, `borrower`, `date`) VALUES ('1', '设备1', '195778', '0', 'uzi', '2001-01-01');
INSERT INTO `easy`.`equip` (`id`, `name`, `serial`, `state`, `borrower`, `date`) VALUES ('2', 'y7000p', '000001', '1', '灯红酒绿', '2020-02-02');
INSERT INTO `easy`.`equip` (`id`, `name`, `serial`, `state`, `borrower`, `date`) VALUES ('3', '飞机', '345345', '1', 'lwx', '1999-07-21');
INSERT INTO `easy`.`equip` (`id`, `name`, `serial`, `state`, `borrower`, `date`) VALUES ('4', '打印机', '55', '1', 'lwx', '2011-05-11');
INSERT INTO `easy`.`equip` (`id`, `name`, `serial`, `state`, `borrower`, `date`) VALUES ('5', '飞行堡垒', '45235', '0', 'uzi', '2021-10-17');
INSERT INTO `easy`.`equip` (`id`, `name`, `serial`, `state`, `borrower`, `date`) VALUES ('6', '罗技', '89769', '0', '灯红酒绿', '2019-01-01');

2、EquipController层

package com.chz.controller;


import com.chz.mapper.BorrowerMapper;
import com.chz.mapper.EquipMapper;
import com.chz.pojo.Borrower;
import com.chz.pojo.Equip;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
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.RequestMapping;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @author snicker
 * @date 2021/10/17 15:57
 * @Describe
 */
@Controller
public class EquipController {
    @Autowired
    EquipMapper equipMapper;
    @Autowired
    BorrowerMapper borrowerMapper;

    @RequestMapping("/emps")
    public String list(Model model){
        List<Equip> equips=equipMapper.queryEquipList();
        model.addAttribute("emps",equips);
        return "emp/list";
    }
    @GetMapping("/delete/{id}")
    public String delete(@PathVariable("id") int id){
        equipMapper.deleteEquip(id);
        return "redirect:/emps";
    }
    @GetMapping("/emp")
    public String toAddPage(Model model){
        List<Borrower> borrowers=borrowerMapper.queryBorrowerList();
        model.addAttribute("borrowers",borrowers);
        return "emp/add";
    }
    @PostMapping("/emp")
    public String addEmp(Equip equip){
        equipMapper.addEquip(equip);
        return "redirect:/emps";
    }
    @GetMapping("/update/{id}")
    public String toUpdatePage(Model model,@PathVariable("id") int id){
        Equip equip=equipMapper.queryEquipById(id);
        model.addAttribute("equip",equip);
        List<Borrower> borrowers=borrowerMapper.queryBorrowerList();
        model.addAttribute("borrowers",borrowers);
        return "emp/update";
    }
    @PostMapping("/update")
    public String update(Equip equip){
        equipMapper.updateEquip(equip);
        return "redirect:emps";
    }
    @RequestMapping("/user/logout")
    public String logout(HttpSession session){
        session.invalidate();
        return "index";
    }
}

2、EquipMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="com.chz.mapper.EquipMapper">
    <select id="queryEquipList" resultType="Equip">
        select * from easy.equip;
    </select>

    <select id="queryEquipById" resultType="Equip">
        select * from easy.equip where id = #{id};
    </select>
    
    <insert id="addEquip" parameterType="Equip">
        insert into easy.equip(name,serial,state,borrower,date)
        values (#{name},#{serial},#{state},#{borrower},#{date})
    </insert>

    <update id="updateEquip" parameterType="Equip">
        update easy.equip set name=#{name},serial=#{serial},state=#{state},borrower=#{borrower},date=#{date}
        where id=#{id}
    </update>

    <delete id="deleteEquip" parameterType="Equip">
        delete from easy.equip where id = #{id}
    </delete>
</mapper>

给出部分核心代码,剩余代码没有一一列举,如果感兴趣可以到github上面下载

5、补充功能

1、谷歌验证码的实现

1、导入maven在这里插入图片描述
2、在config层中添加KaptchaConfig(即 kaptcha 的配置文件):

package com.chz.config;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

@Configuration
public class KaptchaConfig {
    @Bean
    public DefaultKaptcha getDefaultKaptcha(){
        DefaultKaptcha captchaProducer = new DefaultKaptcha();
        Properties properties = new Properties();
        properties.setProperty("kaptcha.border", "yes");
        properties.setProperty("kaptcha.border.color", "105,179,90");
        properties.setProperty("kaptcha.textproducer.font.color", "blue");
        properties.setProperty("kaptcha.image.width", "110");
        properties.setProperty("kaptcha.image.height", "40");
        properties.setProperty("kaptcha.textproducer.font.size", "30");
        properties.setProperty("kaptcha.session.key", "code");
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        captchaProducer.setConfig(config);
        return captchaProducer;

    }
}

3、在controller层中添加CodeController(验证码控制层,生成验证码):

package com.chz.controller;

import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Properties;

/**
 * @author snicker
 * @date 2021/10/17 15:14
 * @Describe
 */
@Controller
public class CodeController {
    @Autowired
    private Producer captchaProducer=null;
    @RequestMapping("/kaptcha")
    public void getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws IOException {
        HttpSession session = request.getSession();
        response.setDateHeader("Expires", 0);
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        response.setHeader("Pragma", "no-cache");
        response.setContentType("image/jpeg");
        //生成验证码
        String capText=captchaProducer.createText();
        session.setAttribute(Constants.KAPTCHA_SESSION_KEY,capText);
        //向客户端写出
        BufferedImage bi = captchaProducer.createImage(capText);
        ServletOutputStream out = response.getOutputStream();
        ImageIO.write(bi, "jpg", out);
        try {
            out.flush();
        } finally {
            out.close();
        }
    }
}

4、在controller层中添加CodeUtil(验证码控制层,校对验证码):

package com.chz.controller;

import javax.servlet.http.HttpServletRequest;

/**
 * @author snicker
 * @date 2021/10/17 15:21
 * @Describe
 */

public class CodeUtil {

    //将获取到的前端参数转为string类型
    public static String getString(HttpServletRequest request, String key) {
        try {
            String result = request.getParameter(key);
            if(result != null) {
                result = result.trim();
            }
            if("".equals(result)) {
                result = null;
            }
            return result;
        }catch(Exception e) {
            return null;
        }
    }

    //验证码校验
    public static boolean checkVerifyCode(HttpServletRequest request) {
        //获取生成的验证码
        String verifyCodeExpected = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
        //获取用户输入的验证码
        String verifyCodeActual = CodeUtil.getString(request, "verifyCodeActual");
        if(verifyCodeActual == null ||!verifyCodeActual.equals(verifyCodeExpected)) {
            return false;
        }
        return true;
    }
}

5、在controller层中添加LoginController(登录时判断用户名、密码、和验证码是否正确):

package com.chz.controller;

import com.chz.mapper.UserMapper;
import com.chz.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @author snicker
 * @date 2021/10/16 19:14
 * @Describe
 */
@Controller
public class LoginController {

    @Autowired
    UserMapper userMapper;

    @RequestMapping("/user/login")
    public String login(@RequestParam("username") String username, @RequestParam("password") String password, Model model, HttpSession session, HttpServletRequest request){
        List<User>users=userMapper.UserList();
        for(User user:users){
            String username1=user.getUsername();
            String password1=user.getPassword();
            if(username1.equals(username) && password1.equals(password) && CodeUtil.checkVerifyCode(request)){
                session.setAttribute("loginUser",username);
                return "redirect:/main.html";
            }else if(!CodeUtil.checkVerifyCode(request)){
                model.addAttribute("msg","验证码错误");
            } else{
                model.addAttribute("msg","用户名或者密码错误");
                continue;
            }
        }
        return "index";
    }
}

6、前端代码中验证码的显示

<input type="text" name="verifyCodeActual" class="form-control" th:placeholder="#{login.verify}" style=" width: 289px;position: relative;left: -55px;margin: auto">

<div class="item-input" style="width: 120px;height: 50px;margin: auto;position: relative;top:-39px;right: -145px">
	<img id="captcha_img" alt="点击更换" title="点击更换"
		 onclick="refresh()" src="/kaptcha" />
</div>
2、i18n国际化的实现

1、i18n的文件内容
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、前端代码显示设置在这里插入图片描述
3、config层的配置文件MyLocaleResolver:

package com.chz.config;


import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;

public class MyLocaleResolver implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        //获取请求中的语言参数
        String language = request.getParameter("l");
        Locale locale = Locale.getDefault();
        if(!StringUtils.isEmpty(language)){
            String[] split = language.split("_");
            locale = new Locale(split[0],split[1]);
        }

        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }
}
  • 24
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
随着计算机技术的迅猛发展以及Internet进入商业和社会应用阶段,设备的种类、数量越来越多,如何利用先进的网络技术和日新月异的计算机设备来有效地收集、处理这些设备,建立以信息化为核心的管理体制,减轻管理人员和业务人员的数据处理负担,极大地提高设备管理效率和管理手段,己经成为当今社会的潮流。在现代化大型研究所信息化管理体系建设中,设备管理系统被看作是重中之重。因为设备是工厂生产中的主体,随着科学技术的不断发展,生产设备日益机械化、自动化、大型化、高速化和复杂化,设备在现代工业生产中的作用和影响也随之增大,在整个工业生产过程中对设备的依赖程度也越来越高。设备管理的各项制度、流程涉及的点多面广。  本课程就是基于设备实现的后端管理系统,包含几大模块:设备管理、巡检管理、报修管理、采购管理、系统管理(用户管理、角色管理、菜单管理、日志管理、字典管理等)基于SpringBoot+Vue技术栈实现,包含了SpringBoot、MyBatis、MySQL、Spring Secutury、验证码技术、Vue技术等,课程会讲解整个部署过程,有需要的伙伴可以使用。 本课程不涉及细节讲解,主要是从项目环境搭建和代码启动和效果演示进行讲解,适合直接需要代码的学员。课程会讲解整个部署过程,有需要的伙伴可以直接使用或进行二次开发
课程介绍 仓库管理系统主要功能有采购入库,采购退货,销售出库,销售退货,仓库盘点,库存报表,Excel导入导出,按钮级权限控制及系统日志等功能,系统采用SpringBoot ,mybatis,easyui,ajax,mssql数据库等技术开发。提供所有源代码下载,系统功能完善,可直接运行。开发环境项目开发语言:SpringBoot ,mybatis,easyui,ajax,mssql数据库项目运行环境:jdk1.8及以上版本,tomcat8.0及以上版本,sql server2005及以上版本项目开发工具: 本项目开发工具是Intellij Idea课程目标掌握SpringBoot等技术,熟悉仓库管理系统主要功能,采购入库,采购退货,销售出库,销售退货,仓库盘点,系统报表,权限控制及日志等50多门JAVA系列全套课程,包括大一新生到大四毕业的所有JAVA系列技术专业课程,项目实战,商业项目等;基础课程:JAVA初级工程师: 1、计算机基础 2、HTML语言基础 3、C语言从入门到精通+贪吃蛇游戏 4、贪吃蛇游戏 5、SQL SERVER数据库基础 6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件 7、推箱子游戏; 8、仿QQ即时通讯软件;JAVA中级工程师: 9、SQLSERVER数据库高级 10、SQLSERVER从入门到精通(基础+高级) 11、JavaScript从入门到精通, 12、JSP从入门到精通+点餐系统, 13、JSP从入门到精通+在线视频学习教育平台, 14、JSP从入门到精通+大型电商平台; 15、XML从入门到精通, 16、数据结构(JAVA版),JAVA高级工程师: 17、Oracle数据库从入门到精通, 18、ajax+jquery从入门到精通, 19、EasyUI从入门到精通,SSH框架: 20、Struts2从入门到精通课程, 21、Hibernate从入门到精通课程, 22、Spring从入门到精通课程; 23、Echarts从入门到精通, 24、Excel基于POI的导入导出工作流框架: 25、Activiti流程框架从入门到精通 26、JBPM流程框架从入门到精通SSM框架: 27、MyBatis从入门到精通 28、Spring MVC从入门到精通 29、Spring Boot入门到精通 30、Spring Cloud入门到精通面试题: 31、职业生涯规划及面试题集锦商业项目: 32、微信公众号在线支付系统 33、微信生活缴费在线支付系统 34、支付宝生活缴费在线支付系统 35、在线考试系统 36、人脸识别智能考试系统(人工智能AI) 37、仓库管理及质量追溯系统 38、房屋出租管理系统APP(身份证识别) 39、手机订餐管理系统, 40、CRM客户关系管理系统 41、大型房地产CRM销售管理系统 42、CMPP2,CMPP3移动网关系统 43、仓库管理系统SpringBoot) 44、影院在线售票系统(仿猫眼电影)人工智能: 45、人脸识别在线考试系统 46、人脸识别系统项目实战 47、车牌识别停车场管理系统 48、身份证识别系统项目实战 49、营业执照识别系统项目实战 50、名片识别管理系统
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值