• 基于jsp+Spring boot+mybatis的图书管理系统设计和实现


    基于jsp+Spring boot+mybatis的图书管理系统设计和实现

    博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域
    作者主页 央顺技术团队
    Java毕设项目精品实战案例《1000套》
    欢迎点赞 收藏 ⭐留言
    文末获取源码联系方式

    前言

    随着网络技术的发展、计算机应用水平广泛提高,原来系统的时效性、数据的正确性、操作的方便性上都存在不足,已影响到系统的正常使用。经过考察比较,决定自己对图书管理系统重新设计,使系统能利用软件开发技术的成果,方便图书的管理。图书管理系统是典型的信息管理系统。系统介绍了图书系统的开发过程,设计中遇到的问题及解决方法以及提高当前应用程序或系统开发进度和改善工作性能。利用其提供的各种面向对象的开发工具首先在短时间内建立系统应用原型然后对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。
    本次课程设计利用JAVA开发工具和Mysql数据库来开发这个图书管理系统。该系统要解决图书管理所要解决的问题,可以满足图书管理基本要求,包括添加、管理等功能。该系统能根据用户的需求,快捷方便的为读者提供借阅服务。
    在这里插入图片描述

    背景意义

    随着计算机的广泛应用,其逐步成为现代化的标志。图书馆或者一些企业内部,甚至是书店,在正常运行过程中总是面对大量的读者信息,书籍信息以及两者相互作用产生的借书信息、还书信息。因此需要对读者资源、书籍资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,要对因此而产生的单据进行及时的处理,为了提高图书馆或者企业内部对图书存销的自动化的管理,能够更快速的满足读者的要求,提高各种工作的效率,现对其设计相应的系统。图书管理系统的主要功能是实现图书馆图书借阅和归还的管理的自动化。围绕这一主要功能,本系统涉及到以下核心功能:借阅管理,归还管理。除了这些核心功能外,还包括一些基本和辅助功能,它们是:用户管理、图书管理、图书查询。
    在这里插入图片描述

    数据库设计

    用户表

    CREATE TABLE `NewTable` (
    `admin_id`  int(11) NOT NULL AUTO_INCREMENT ,
    `admin_name`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    `admin_pwd`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    `admin_email`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    PRIMARY KEY (`admin_id`)
    )
    ENGINE=InnoDB
    DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
    AUTO_INCREMENT=2
    ROW_FORMAT=DYNAMIC
    ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    图书表

    CREATE TABLE `NewTable` (
    `book_id`  int(11) NOT NULL AUTO_INCREMENT ,
    `book_name`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
    `book_author`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    `book_publish`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    `book_category`  int(11) NULL DEFAULT NULL ,
    `book_price`  double NULL DEFAULT NULL ,
    `book_introduction`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    PRIMARY KEY (`book_id`),
    FOREIGN KEY (`book_category`) REFERENCES `book_category` (`category_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
    INDEX `book_category` (`book_category`) USING BTREE 
    )
    ENGINE=InnoDB
    DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
    AUTO_INCREMENT=72
    ROW_FORMAT=DYNAMIC
    ;
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    图书类型

    CREATE TABLE `NewTable` (
    `category_id`  int(11) NOT NULL AUTO_INCREMENT ,
    `category_name`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
    PRIMARY KEY (`category_id`)
    )
    ENGINE=InnoDB
    DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
    AUTO_INCREMENT=51
    ROW_FORMAT=DYNAMIC
    ;
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    图书借阅

    CREATE TABLE `NewTable` (
    `id`  int(11) NOT NULL AUTO_INCREMENT ,
    `user_id`  int(11) NULL DEFAULT NULL ,
    `book_id`  int(11) NULL DEFAULT NULL ,
    `date`  date NULL DEFAULT NULL ,
    PRIMARY KEY (`id`),
    FOREIGN KEY (`book_id`) REFERENCES `book` (`book_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
    FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
    INDEX `user_id` (`user_id`) USING BTREE ,
    INDEX `book_id` (`book_id`) USING BTREE 
    )
    ENGINE=InnoDB
    DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
    AUTO_INCREMENT=67
    ROW_FORMAT=DYNAMIC
    ;
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    功能截图

    登录:

    用户选择角色输入账号密码进行登录
    在这里插入图片描述

    管理员首页:

    登录后的主要模块有

    系统管理《用户管理、角色管理、应用数据 》

    图书管理《图书分类、图书信息、借书管理、还书管理》

    个人信息查看以及修改退出等
    在这里插入图片描述
    在这里插入图片描述

    用户管理:

    点击查看用户的信息、可根据推荐搜索用户信息、可以添加和修改删除用户信息
    在这里插入图片描述
    在这里插入图片描述

    角色管理:

    点击查看角色信息、以及模糊搜索和重置信息、添加修改角色信息、根据角色分配权限信息
    在这里插入图片描述

    添加角色:

    在这里插入图片描述

    分配权限:

    在这里插入图片描述

    应用管理:

    在这里插入图片描述

    图书信息管理:

    图书分类:

    在这里插入图片描述

    图书信息:

    在这里插入图片描述

    借书管理:

    在这里插入图片描述

    还书管理:

    在这里插入图片描述

    用户端:

    用户登录后可以查看自己的借阅记录、以及去借书和归还书籍等操作

    借书管理:

    在这里插入图片描述

    还书管理:

    在这里插入图片描述

    图书检索:

    在这里插入图片描述

    借还记录:

    在这里插入图片描述

    代码实现

    这个项目功能比较简单、用的技术也是大家非常熟悉的技术、主要是springboot、springmvc、mybatis以前端的jquery、layui、html和css等基本样式。就拿登录来举一个完整例子吧、首先是前端静态页面的编写以及发送登录请求

    DOCTYPE html>
    <html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
     
     
        <link rel="stylesheet" th:href="@{/layui/css/layui.css}">
        <style>
     
            body {
                /*width: 100%;*/
                /*height: 100%;*/
                background: url("/images/background.png") no-repeat;
                /*background: url("static/images/a.png") no-repeat;*/
                background-size: cover;
            }
     
            #login_form {
                width: 400px;
                height: 300px;
                margin: 80px auto;
                padding: 30px;
                background-color: #f2f2f2;
                opacity: 0.9;
            }
     
        style>
    head>
    <body>
     
    <div id="wrapper" style="margin-top: 260px">
        <div class="layui-container" id="login_form">
     
            <div>
                <h1 style="color: red;text-align: center">图书管理系统h1>
                <br>
            div>
     
            <form class="layui-form" id="my_form" method="post" action="/userLogin">
     
                <div class="layui-form-item">
                    <label class="layui-form-label">用户名:label>
                    <div class="layui-input-block">
                        <input type="text" name="userName" id="username" autofocus
                               placeholder="请输入用户名" autocomplete="off" class="layui-input">
                    div>
                div>
     
                <div class="layui-form-item">
                    <label class="layui-form-label">密 码:label>
                    <div class="layui-input-block">
                        <input type="password" name="password" id="password"
                               placeholder="请输入密码" autocomplete="off" class="layui-input">
                    div>
                div>
     
     
                <div class="layui-form-item">
                    <label class="layui-form-label">用户身份label>
                    <div class="layui-input-block">
                        <input class="form-check-input" type="radio" name="role" value="1" title="学生" checked>
                        <input class="form-check-input" type="radio" name="role" value="0" title="管理员">
                    div>
                div>
     
                <div class="layui-form-item layui-col-md4 layui-col-md-offset4">
                    <button id="sub_btn" class="layui-btn layui-btn-normal">登录button>
                div>
     
            form>
     
        div>
    div>
     
     
    <script th:src="@{/scripts/jquery.min.js}">script>
    <script th:src="@{/layui/layui.js}">script>
     
     
    <script th:inline="javascript">
        layui.use(['layer', 'form'], function () {
            let layer = layui.layer;
            let form = layui.form;
            form.render();
     
            $(function () {
                let flag = [[${session.flag}]];
                if (flag) {
                    layer.msg("用户名或密码错误", {
                        icon: 2,
                        time: 2000 //2秒关闭(如果不配置,默认是3秒)
                    });
                }
            });
        });
     
     
        $("#sub_btn").click(function () {
            let username = $("#username").val();
            let user_judge = check(username);
     
            // 首先判断用户名是否为空
            if (user_judge) {
                let password = $("#password").val();
                let pwd_judge = check(password);
     
                // 用户名不为空  , 判断密码是否为空
                if (pwd_judge) {
                    let role_id = $('input[name="role"]:checked').val();
     
                    // 如果role_id ==1 ,则是普通用户 , 直接提交表单
                    if (role_id == 1) {
                        $("#my_form").submit();
                    } else {
     
                        //如果是管理员 , 则将action 进行更改
                        $("#my_form").attr("action", "/adminLogin")
                        $("#my_form").submit();
                    }
     
                } else {
                    layer.alert("密码不能为空", {icon: 5});
                    return false;
                }
            } else {
     
                layer.alert("用户名不能为空", {icon: 5});
                return false;
            }
        });
     
        // 校验表单中用户名 与 密码是否输入,  如果有值 -> 返回 true , 如果未输入 返回 false;
        function check(val) {
            val = val.toString().trim();
            return !(val == '');
        }
     
    script>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141

    后台Controller接收到前端的登录请求之后执行参数校验、将前端传递过来的用户名密码以及用户角色进行判断验证、调用userService.userLogin方法执行用户登录验证、查询数据库当前账号密码是否正确、返回状态码给前端、前端根据状态码进行相对的页面跳转以及数据效应。

    /**
         * 用户登录
         *
         * @param userName
         * @return
         */
        @PostMapping("/userLogin")
        public String userLogin(@Param("userName") String userName,
                                @Param("password") String password, HttpServletRequest request) {
            User user = userService.userLogin(userName, password);
            if (null != user) {
                // flag = 0 表示用户名密码校验成功  【用于前端校验】
                request.getSession().setAttribute("flag", 0);
     
                request.getSession().setAttribute("user", user);
                return "user/index";
            }
     
            // flag 为 1 表示 登录失败 【用于前端校验】
            request.getSession().setAttribute("flag", 1);
            return "index";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    总体来说这个项目功能相对还是比较简单优秀的、适合初学者作为课程设计和毕业设计参考

    获取源码:

    大家点赞、收藏、关注、评论啦
    🍅查看下方微信号获取联系方式 📝
    🚀🚀🚀精彩系列推荐
    Java毕设项目精品实战案例《1000套》
    精彩专栏推荐订阅:在下方专栏

  • 相关阅读:
    面向对象设计原则
    PHP实现微信小程序状态检测(违规、暂停服务、维护中、正在修复)
    Debian12配置NTP时间同步
    第三方支付功能测试点【杭州多测师_王sir】【杭州多测师】
    HTML+CSS:移动端分辨率、视口、Flex布局、文字溢出显示省略号、溢出两行显示省略号
    行情分析——加密货币市场大盘走势(10.20)
    第六章 应用层 | 计算机网络(谢希仁 第八版)
    【教学类-16-01】20221121《数字卡片9*2》(中班)
    【VS Code+Qt6】拖放操作
    《Kubernetes部署篇:Ubuntu20.04基于外部etcd+部署kubernetes1.25.14集群(多主多从)》
  • 原文地址:https://blog.csdn.net/qq_44664329/article/details/137230021