BS作业 基于springboot + Thymeleaf +mybatis 实现的书城管理系统

一:项目背景

项目描述
一个基本功能较为完整的后台管理项目。项目主要功能有:登录验证,登录功能还加入了随机验证码的验证;
用户注册,注册中密码基于srping 安全框架提供的加密(自动加盐)的密码储存方式,对注册重名进行了处理;
密码重置;修改用户信息;使用resultful风格实现了对图书CRUD,其中搜索功能是 可以模糊查询 以及可以根据一段时间的范围来进行查询,删除功能实现了单选与多选,编辑功能实现了数据回显;
项目扩展:
模拟用户购书的功能,即用户可以单选或者多选购买书籍;购物车功能,当我们点击购买后,我们的购物车会显示刚购买的物品
项目角色:
后端各个模块的开发,数据库表的设计。
项目收获:
熟悉了Spring Boot框架下开发项目的流程
熟悉了layui框架的基本使用

二:技术栈

SpringBoot + mybatis + Mysql5.7 + Thymeleaf + layui

该项目已经部署在 阿里云上了
项目地址
但是 有一个bug我放过他了 (用户登录所有功能正常 管理登录的 CRUD mei le) 我很菜 因为我是菜鸡杰

三:项目需求

1:首先完老师的需求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 陈老师布置的作业 也就是完成 登录验证
  • 注册 (如果已经注册了 需要有提示 并重新注册)
  • 错误跳转
  • 修改密码
  • 修改用户信息
  • 然后就是图书的CRUD了

2:扩展功能

  • 显然 陈老师布置的需求 只是 对于 图书管理员的 所以我自己添加了 关于用户 就是 可以实现用户的 购买功能
  • 当我们登录用户系统后 我们可以对书籍 进行购买 同时 还有购物车功能 在购物车实现了结算功能

四:项目模块

1:基本功能(两个模块均有的)

(1):登录

在这里插入图片描述

(2):注册:

在这里插入图片描述

(3):错误跳转

当我们输入的密码 或者 用户名 或则 验证码有误时 跳转错误页面 并在 5秒后返回
在这里插入图片描述

(4):进入登录页面后 修改密码

![!](https://img-blog.csdnimg.cn/eb5ed8a570be4e46a86d60b5cb7019a2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSp5aSp5ZCR5LiK55qE6I-c6bih5p2w77yB77yB,size_20,color_FFFFFF,t_70,g_se,x_16)

(5):展示用户的信息

在这里插入图片描述

2:图书管理系统(图书的CRUD)

(1):图书管理主页面

在这里插入图片描述

(2):图书的查询

  • 模糊查询
  • 根据出版日期查询范围内的书籍
    在这里插入图片描述

(3):增加书籍

在这里插入图片描述

(4):编辑书籍

这里实现数据的回显
在这里插入图片描述

(5):删除

多选和单选
在这里插入图片描述

3:图书购买系统

(1):主页面

在这里插入图片描述

(2):购买书单

在这里插入图片描述

(2):购物车

这里显示的就是我们购买的书籍,如果购物车未显示 请点击刷新
在这里插入图片描述
结算:结算
在这里插入图片描述

四:技术说明

1:用户注册的时候进行了对密码进行了加盐处理

  //增加一个用户@PostMapping("/addUser")@ResponseBodypublic Result<Object> addUser (User user) {if (user != null) {//对密码进行加密BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();String s3 = encoder.encode(user.getPassword());//进行加密user.setPassword(s3);//判断该用户是否存在User userIsNot = userServiceImp.login(user);if(userIsNot != null) {return Result.fail("您输入的用户名已经被注册了");}int i = userServiceImp.addUser(user);if (i > 0) {return Result.success();}}return Result.fail("添加用户失败");}

在这里插入图片描述

巴拉巴拉巴拉 。。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Istio Pilot 源码分析(二)

张海东&#xff0c; ‍多点生活&#xff08;成都&#xff09;云原生开发工程师。本篇主要介绍 Pilot 源码中的 ServiceEntryStore 及其推送 xDS 的流程。本文为 Istio Pilot 源码分析系列的第二篇文章。Istio Pilot 源码分析&#xff08;一&#xff09;了解了 Pilot 源码的基本…

Pytorch中的 torch.Tensor() 和 torch.tensor() 的区别

直接在搜索引擎里进行搜索&#xff0c;可以看到官方文档中两者对应的页面&#xff1a; 分别点击进去&#xff0c;第一个链接解释了什么是 torch.Tensor&#xff1a; torch.Tensor 是一个包含单一数据类型元素的多维矩阵&#xff08;数组&#xff09;。 正因为 torch.Tensor 只包…

leetcote34. 在排序数组中查找元素的第一个和最后一个位置

一:题目 二&#xff1a;上码&#xff08;暴力二分&#xff09; // class Solution { // public: // /** // 思路:1.首先这是一个升序的 那么相同的一定是会相连的// */// vector<int> searchRange(vector<int>& nums, int target) {// …

Git 图形化操作之合并提交记录

Git 图形化操作之合并提交记录独立观察员 2020 年 9 月 24 日目录1、显示日志2、合并提交记录3、推送合并的提交前言&#xff1a;当我们使用 Git 时&#xff0c;有时会遇到刚提交推送完一次修改&#xff0c;发现漏了该某处&#xff0c;只好又提交推送一次&#xff0c;这样在提交…

Pytorch中的 torch.as_tensor() 和 torch.from_numpy() 的区别

之前我写过一篇文章&#xff0c;比较了 torch.Tensor() 和 torch.tensor() 的区别&#xff0c;而这两者都是深拷贝的方法&#xff0c;返回张量的同时&#xff0c;会在内存中创建一个额外的数据副本&#xff0c;与原数据不共享内存&#xff0c;所以不受原数据改变的影响。 这里…

chrome禁止三方cookie,网站登录不了怎么办

背景新版chrome(80)浏览器默认屏蔽所有三方cookie已经不是什么新闻了&#xff0c;具体原因这里不去深究&#xff0c;有大量相关文章介绍&#xff0c;由于目前许多网站都依赖三方cookie&#xff0c;因此该特性的推出还是造成了一些的影响&#xff0c;比如收集用户信息的广告商&a…

leetcode69. x 的平方根

一:题目 二:上码 class Solution { public:/**思路:1.因为我们的 ans的平方 < x 那么我们就可以用二分法来做 不断缩小左右范围来确定 ans**/int mySqrt(int x) {int left 0; int right x;int ans 0;while (left < right) {long mid (right-left)/2 left;if (mid*…

初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob储存

点击上方蓝字"小黑在哪里"关注我吧聚合根仓储领域服务BLOB储存应用服务单元测试模块引用前言在前两节中介绍了ABP模块开发的基本步骤&#xff0c;试着实现了一个简单的文件管理模块&#xff1b;功能很简单&#xff0c;就是基于本地文件系统来完成文件的读写操作&…

leetcode367. 有效的完全平方数

一:题目 二:上码 class Solution { public:/**完全平方数:若一个数能表示成某个整数的平方的形式&#xff0c;则称这个数为完全平方数思路:1.我们将num先折半,因为它是某个整数的平方&#xff0c;而这个数的范围肯定不会超过num的一半2.那么这就相当于在[left,num/2]中查找某个…

跟我一起学.NetCore之文件系统应用及核心浅析

前言在开发过程中&#xff0c;肯定避免不了读取文件操作&#xff0c;比如读取配置文件、上传和下载文件、Web中html、js、css、图片等静态资源的访问&#xff1b;在配置文件读取章节中有说到&#xff0c;针对不同配置源数据读取由对应的IConfigurationProvider进行读取&#xf…

深度学习入门笔记(1)——导论部分

此笔记来源于 Sebastian Raschka 的 Introduction to Deep Learning 系列课程。 首先介绍的是传统的编程范式&#xff0c;假设我们想实现垃圾邮件识别的功能&#xff0c;传统的方法就是由程序员来找出垃圾邮件的规则并对其进行编程&#xff0c;得到一个垃圾邮件识别的程序。 机…

深度学习入门笔记(2)—— 感知器

最经典的神经元模型&#xff0c;从左到右依次是&#xff1a;输入、权重、加权和、阈值、输出。加权和又叫做 Net Input&#xff0c;符号为 z&#xff0c;当 z 的值大于阈值时输出 1&#xff0c;小于阈值时输出 0。 实现与门和或门&#xff0c;权重为 1&#xff0c;阈值分别为 1…

创建一个对象时,在一个类当中 静态代码块 和普通代码块构造方法 的顺序?

一:前言须知 普通代码块&#xff0c;在创建对象实例的时候&#xff0c;会被调用&#xff0c;每创建一次&#xff0c;就调用一次静态代码块&#xff0c;在类加载的时候执行&#xff0c;并且只会执行一次类加载的时机: 创建对象实例的时候&#xff08;new&#xff09;创建子类实…

ASP.NET Core 基于声明的访问控制到底是什么鬼?

从ASP.NET 4.x到ASP.NET Core&#xff0c;内置身份验证已从基于角色的访问控制(RBAC)转变为基于声明的访问控制(CBAC)。我们常用的HttpContext.User属性ASP.NET 4.0时代是IPrincipal类型&#xff0c;ASP.NETCore现在强化为ClaimsPrincipal类型。本文就一起来看看这难缠的、晦涩…

回溯的问题合集(Leetcode题解-Python语言)

78. 子集 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:ans []cur []def dfs(i):if i len(nums):ans.append(cur.copy())return# 包括 nums[i]cur.append(nums[i])dfs(i1)# 不包括 nums[i]cur.pop()dfs(i1)dfs(0)return ans要找出所有子集&a…

一个对象的创建流程

一:流程 加载Person类的信息,(也就是加载Person.class文件 只加载一次) 这个就是类加载的几个过程加载 ,将.class文件转化成二进制流加载到JVM的内存的方法区中&#xff0c;并在堆中生成一个Class对象验证准备解析初始化 该实例堆当中开辟空间 每个类的实例都会记得自己是由哪…

RabbitMq如何确保消息不丢失

上篇写了掌握Rabbitmq几个重要概念&#xff0c;从一条消息说起&#xff0c;这篇来总结关于消息丢失让人头痛的事情。网络故障、服务器重启、硬盘损坏等都会导致消息的丢失。消息从生产到消费主要结果以下几个阶段如下图。①生产阶段&#xff0c;生产者创建消息&#xff0c;经过…

LEETCODE PATTERNS Neetcode 刷题记录(Leetcode题解-Python语言)

LEETCODE PATTERNS 官网在这个链接&#xff0c;Neetcode 官网在这个链接 If input array is sorted then 遇到有序数组用二分或双指针 Binary searchTwo pointers If asked for all permutations/subsets then 求排列或子集用回溯 Backtracking If given a tree then 遇到树就用…

蓝桥杯-单词分析

一:题目 题目描述 小蓝正在学习一门神奇的语言&#xff0c;这门语言中的单词都是由小写英文字母组 成&#xff0c;有些单词很长&#xff0c;远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词&#xff0c;他准备不再完全记忆这些单词&#xff0c;而是根据单词中哪…