Spring Boot:图书管理系统(一)

 

 

 

 

1.编写用户登录接口

代码:

package com.example.demo;import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/user")
public class UserController {@RequestMapping("/login")public String login(String userName, String password, HttpSession session){//1.校验参数if(!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)){return "用户名或密码为空";}//2.验证密码正确,理论是从数据库获取,但是未学习,先模拟校验if(!"lhy".equals(userName)||!"0407".equals(password)){return "密码错误";}session.setAttribute("userName", userName);return "ok";}
}

 2.编写图书列表接口

先创建图书对象(用来接收前端的参数)

代码:

package com.example.demo;import lombok.Data;import java.math.BigDecimal;@Data
public class BookInfo{// 图书的唯一标识符private Integer id;// 图书的名称private String bookName;// 图书的作者private String author;// 图书的某种编号或库存数量(这里假设为编号)private Integer num;// 图书的价格private BigDecimal price;// 出版图书的出版社名称private String publishName;// 图书的借阅状态。1表示图书可借阅,2表示图书不可借阅private Integer status;// 图书借阅状态的中文描述,用于更直观地展示图书的借阅情况private String statusCN;}

3.编写图书列表接口

代码:

package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;// 使用@RestController注解将类标记为Spring MVC的控制器,并且该类中所有方法的返回值都会自动转换为JSON或XML格式
@RestController
// 使用@RequestMapping注解定义该控制器中所有请求的基础URL路径
@RequestMapping("book")
public class BookController {@RequestMapping("/getBookList")public List<BookInfo> getBookList(){List<BookInfo> bookInfos = new ArrayList<>(); // 创建一个空的图书信息列表// 使用for循环生成15条图书信息for (int i = 1; i <= 15 ; i++) {BookInfo bookInfo = new BookInfo(); // 创建一个新的图书信息对象bookInfo.setId(i); // 设置图书IDbookInfo.setBookName("图书"+i); // 设置图书名称bookInfo.setAuthor("作者"+i); // 设置图书作者bookInfo.setNum(i*2+1); // 假设这是图书的某个编号或者数量,这里简单设置为2*i+1bookInfo.setPrice(new BigDecimal(i*3)); // 设置图书价格,假设为3*ibookInfo.setPublishName("出版设"+i); // 设置出版社名称// 根据图书ID是否为5的倍数来设置图书的借阅状态if(i % 5 == 0){bookInfo.setStatus(2); // 设置不可借阅状态bookInfo.setStatusCN("不可借阅"); // 设置中文状态描述}else {bookInfo.setStatus(1); // 设置可借阅状态bookInfo.setStatusCN("可借阅"); // 设置中文状态描述}bookInfos.add(bookInfo); // 将图书信息添加到列表中}return bookInfos; // 返回包含所有图书信息的列表}}

4.打开postman测试后端接口

用户验证成功

返回图书列表成功

5. 编写用户登录的前端代码(主要看AJAX)

代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="css/bootstrap.min.css"><link rel="stylesheet" href="css/login.css"><script type="text/javascript" src="js/jquery.min.js"></script>
</head><body><div class="container-login"><div class="container-pic"><img src="pic/computer.png" width="350px"></div><div class="login-dialog"><h3>登陆</h3><div class="row"><span>用户名</span><input type="text" name="userName" id="userName" class="form-control"></div><div class="row"><span>密码</span><input type="password" name="password" id="password" class="form-control"></div><div class="row"><button type="button" class="btn btn-info btn-lg" onclick="login()">登录</button></div></div></div><script src="js/jquery.min.js"></script><script>function login() {$.ajax({url: "/user/login",type: "post",data:{userName: $("#userName").val(),password: $("#password").val()},success:function(result){if( result =="ok"){//密码正确location.href = "book_list.html";}else{alert(result);}}});}</script>
</body></html>

6.前端测试

 

7.编写图书列表的前端代码

(有点错误,下面的那个多行换页没有显示出来):

代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>图书列表展示</title><link rel="stylesheet" href="css/bootstrap.min.css"><link rel="stylesheet" href="css/list.css"><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/bootstrap.min.js"></script><script src="js/jq-paginator.js"></script></head><body>
<div class="bookContainer"><h2>图书列表展示</h2><div class="navbar-justify-between"><div><button class="btn btn-outline-info" type="button" onclick="location.href='book_add.html'">添加图书</button><button class="btn btn-outline-info" type="button" onclick="batchDelete()">批量删除</button></div></div><table><thead><tr><td>选择</td><td class="width100">图书ID</td><td>书名</td><td>作者</td><td>数量</td><td>定价</td><td>出版社</td><td>状态</td><td class="width200">操作</td></tr></thead><tbody></tbody></table><div class="demo"><ul id="pageContainer" class="pagination justify-content-center"></ul></div><script>getBookList();function getBookList() {$.ajax({url: "/book/getBookList",type: "get",success: function (books) {var finnalHtml = "";for (var book of books) {finnalHtml += '<tr>';finnalHtml += '<td><input type="checkbox" name="selectBook" value="' + book.id + '" id="selectBook" class="book-select"></td>';finnalHtml += '<td>' + book.id + '</td>';finnalHtml += '<td>' + book.bookName + '</td>';finnalHtml += '<td>' + book.author + '</td>';finnalHtml += '<td>' + book.num + '</td>';finnalHtml += '<td>' + book.price + '</td>';finnalHtml += '<td>' + book.publishName + '</td>';finnalHtml += '<td>' + book.statusCN + '</td>';finnalHtml += '<td>';finnalHtml += '<div class="op">';finnalHtml += '<a href="book_update.html?bookId=' + book.id + '">修改</a>';finnalHtml += '<a href="javascript:void(0)" onclick="deleteBook(' + book.id + ')">删除</a>';finnalHtml += '</div></td></tr>';}$("tbody").html(finnalHtml);}});}var data = book.data;//翻页信息$("#pageContainer").jqPaginator({totalCounts: data.count, //总记录数pageSize: 10,    //每页的个数visiblePages: 5, //可视页数currentPage: data.pageRequest.pageNum,  //当前页码first: '<li class="page-item"><a class="page-link">首页</a></li>',prev: '<li class="page-item"><a class="page-link" href="javascript:void(0);">上一页<\/a><\/li>',next: '<li class="page-item"><a class="page-link" href="javascript:void(0);">下一页<\/a><\/li>',last: '<li class="page-item"><a class="page-link" href="javascript:void(0);">最后一页<\/a><\/li>',page: '<li class="page-item"><a class="page-link" href="javascript:void(0);">{{page}}<\/a><\/li>',//页面初始化和页码点击时都会执行onPageChange: function (page, type) {console.log("第" + page + "页, 类型:" + type);if (type == "change") {location.href = "book_list.html?pageNum=" + page;}}});function deleteBook(id) {var isDelete = confirm("确认删除?");if (isDelete) {//删除图书$.ajax({url: "/book/deleteBook",type: "post",data: {bookId: id},success: function (result) {console.log(result);if (result.code == "SUCCESS" && result.data == true) {// location.href = "book_list.html"+location.search;location.href = "book_list.html";} else {alert("删除失败, 请联系管理员");}},error: function (error) {//用户未登录if (error != null && error.status == 401) {location.href = "login.html";}}});// alert("删除成功");}}function batchDelete() {var isDelete = confirm("确认批量删除?");if (isDelete) {//获取复选框的idvar ids = [];//已经选中的元素$("input:checkbox[name='selectBook']:checked").each(function () {ids.push($(this).val());});console.log(ids);$.ajax({url: "/book/batchDeleteBook?ids=" + ids,type: "post",success: function (result) {if (result.code == "SUCCESS" && result.data == "") {//删除成功location.href = "book_list.html";} else {alert(result.data);}},error: function (error) {//用户未登录if (error != null && error.status == 401) {location.href = "login.html";}}});// alert("批量删除成功");}}</script>
</div>
</body></html>

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基环树简介

【基环树简介】 ● 众所周知&#xff0c;树上没有环。一棵树由 n 个结点及 n−1 条边构成。 ● 基环树是由 n 个结点及 n 条边组成的连通图。 显然&#xff0c;基环树上存在环。因此&#xff0c;基环树本质上不是树&#xff0c;而是图。基环树又称章鱼图。 基环树的的特别之处就…

qtscrcpy 环境搭建 基于qt5.14.2 vs2017

下载软件 qt5.14.2Visual Studio 2017 Community 安装文件链接参考文末 安装说明 Visual Studio 2017 Community&#xff0c; 一键安装&#xff0c;只需要 c 模块即可 qt5.14.2 安装需要选择msvc 2017 32bit, 因为 ffmpeg 编译的是 32bit 代码下载 https://gitee.com/…

1.ESP32-CAM 下使用 ESP-IDF 打开摄像头

主要资料&#xff1a; 乐鑫官方编程指南 ESP-IDF 编程指南安信可官方模块页 安信可-ESP32-CAM摄像头开发板官方使用教程 安信可ESP32-CAM摄像头开发demo–局域网拍照、实时视频、人脸识别 &#xff08;开发环境是Linux&#xff09; 本文目标是在 Windows 下跑通摄像头 hello …

大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

苍穹外卖01

0. 配置maven (仅一次的操作 1.项目导入idea 2. 保证nginx服务器运行 &#xff08;nginx.exe要在非中文的目录下&#xff09; 开启服务&#xff1a; start nginx 查看任务进程是否存在&#xff1a; tasklist /fi "imagename eq nginx.exe" 关闭ngi…

【优秀python web系统毕设】基于python的全国招聘数据分析可视化系统,包括随机森林算法

1.1 研究背景 自1997年互联网开始在国内的招聘行业发展至今已有二十几年的历史&#xff0c;互联网招聘进入了蓬勃发展的“黄金时代”。根据智研咨询发布的《2023年中国互联网招聘行业发展现状》报告显示&#xff0c;截至2023年5月&#xff0c;中国互联网招聘平台中&#xff0c…

Navicat 17 新特性 | Navicat BI 功能革新升级,助力企业深度挖掘数据潜能

随着 Navicat 17 的发布&#xff0c;在业界引起了广泛的共鸣与热议。我们曾深入剖析其众多革新特性&#xff0c;包括模型设计创新与优化、高效的查询与配置、用户界面交互体验再升级&#xff0c;原生适配国产平台和操作系统和数据字典提升数据结构清晰度&#xff0c;这些新特性…

MySQL查询优化 limit 100000,10加载很慢该怎么优化

需求&#xff1a;查询19年以后发布的商品 数据库表结构如下&#xff1a; 目前数据量&#xff1a;264751 优化前执行时间&#xff1a;0.790s 优化后执行时间&#xff1a;0.467s select id,no,title,cart_title,cid_name from tb_item where id > (select id from tb_item …

Gitlab以及分支管理

一、概述 Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的变化&#xff0c;尤其是源代码的变化。它由 Linus Torvalds 于 2005 年开发&#xff0c;旨在帮助管理大型软件项目的开发过程。 二、Git 的功能特性 Git 是关注于文件数据整体的变化&#xff0c;直接会将文件…

【Beyond Compare】Beyond Compare下载、安装与使用详细教程

目录 &#x1f33a;1 概述 &#x1f384;2 Beyond Compare 安装包下载 &#x1f33c;3 安装详细教程 &#x1f342;4 免费注册 &#x1f30d;5 使用详情 &#x1f33a;1 概述 Beyond Compare 是一款强大的文件和文件夹比较工具&#xff0c;广泛应用于软件开发、文档管理和…

论文中的流程图参考图片

写论文的时候&#xff0c;在绘制流程图时&#xff0c;一直纠结n是大写还是小写&#xff0c;用不用斜体&#xff0c;号两边要不要空格。今天找到了一张标准的流程图来参考。图片来自 Zhi-Chang Ba et al, Combination of DCE-MRI and NME-DWI via Deep Neural Network for Predi…

[Unity] ShaderGraph实现镜头加速线/残血效果 URP

效果如下所示&#xff1a;残血状态时&#xff0c;画面会压暗角&#xff0c;并出现速度线营造紧迫感。 使用到的素材如下&#xff0c;换别的当然也可以。[这是张白色的png放射图&#xff0c;并非皇帝的新图hhh] 这个效果的实现逻辑&#xff0c;其实就是利用time向圆心做透明度的…

【全国大学生电子设计竞赛】2023年G题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

Windows11安装WSL2 笔记240726

以管理员身份打开控制台输入 wsl --status wsl --status如果什么也没有,说明系统还未安装WSL , 执行 wsl --install 进行安装 wsl --install安装完成后, 再次执行 wsl --status 可看到 wsl --status 默认版本: 2 当前计算机配置不支持 WSL1。 若要使用 WSL1&#xff0c;请启用…

CentOS配置NTP服务

更改配置文件 [rootController ~]# vim /etc/chrony.conf 重启服务并设置为开机自启动 [rootController ~]# systemctl restart chronyd.service [rootController ~]# systemctl enable chronyd.service 在另一台CentOS测试 更改配置文件 [rootCompute ~]# vim /etc/chron…

idea 自动生成pojo类

找到这个View>Tool Windows>Database配置数据库 配置好后刷新&#xff0c;查看是否连接上表 然后找到 点击后选择你将要生成的pojo需要保存到哪个文件&#xff0c;然后再次点击&#xff0c;就生成好了&#xff0c;然后自己稍作修改即可使用该pojo类了

AI绘画,100w+播放封神!1分钟教你制作AI视频!各地的守护神终于出现了

前言 神兽教程 这种视频怎么做&#xff0c;Lison也是熬夜很快写了拆解教程~ 一、获取提示词 首先在 Kimi 或者 GPT 上可以查询各个省份的特色动物是什么&#xff0c;用各个省份的特色动物去做这样的图会更有归属感一些。 例如四川是大熊猫&#xff0c;甘肃是马&#xff0c…

深度学习目标检测入门实战

深度学习目标检测入门实战 一、什么是目标检测二、目标检测常用的数据集&#xff08;开源&#xff09;&#xff08;一&#xff09;VOC数据集&#xff08;1&#xff09;背景知识&#xff08;2&#xff09;数据集的下载&#xff08;3&#xff09;VOC2007 数据集的标注&#xff08…

C++初学(4)

4.1、const限定符 如果程序在多个地方使用同一个常量&#xff0c;则需要修改该常量时&#xff0c;只需修改一个符号定义即可。前面介绍#define语句时说明过&#xff0c;C有更好的处理符号常量的方法&#xff0c;就是使用const关键字来修改变量声明和初始化。假设需要一个表示一…

【Python机器学习】朴素贝叶斯——基于贝叶斯决策理论的分类方法

k-近邻算法和决策树分类器有时会产生错误结果&#xff0c;这是可以要求分类器给出一个最优的类别猜测结果&#xff0c;同时给出这个猜测的概率估计值 概率论是许多机器学习算法的基础&#xff0c;所以深刻理解这一主题就非常重要。有一些使用概率论进行分类的方法。首先是从一…