项目四-图书管理系统

news/2024/4/28 18:16:25/文章来源:https://blog.csdn.net/m0_47017197/article/details/137061174

1.创建项目

流程与之前的项目一致,不再进行赘述。

2.需求定义

需求:
1. 登录: ⽤⼾输⼊账号,密码完成登录功能
2. 列表展⽰: 展⽰图书

3.前端界面测试

无法启动!!!--->记得加入mysql相关操作记得在yml进行配置

配置后启动成功!!

我们在测试前端的时候同时可以对用户的需求进行分析。

3.1 需求分析

3.1.1 用户登录

3.1.2 图书列表 

根据需求可以得知, 后端需要提供两个接口
1. 账号密码校验接口: 根据输入用户名和密码校验登录是否通过
获取参数:用户名和密码
返回:true或者false
2. 图书列表: 提供图书列表信息
直接返回所有的图书数据

4.接口定义

4.1 登录接口

[URL]
POST /user/login
[ 请求参数 ]
name=admin&password=admin
[ 响应 ]
true // 账号密码验证成功
false// 账号密码验证失败

4.2 图书列表展示

[URL]
POST /book/getList
[ 请求参数 ]
[ 响应 ]
返回图书列表
[
{
"id": 1,
"bookName": " 活着 ",
"author": " 余华 ",
"count": 270,
"price": 20,
"publish": " 北京⽂艺出版社 ",
"status": 1,
"statusCN": " 可借阅 "
},
...
]

5.服务器代码

5.1 建包

目前我们先建立四个包,

由于现在还没有引入数据库,

dao是mock的数据。

controller是表现层,

model是图书类,

逻辑是controller调用service(写一些逻辑代码),service调用controller。

5.2 建立数据类

5.2.1 图书添加接口

5.2.1.1 图书类(model)

//@Data 注解会帮助我们⾃动⼀些⽅法, 包含getter/setter, equals, toString等

package com.example.demo.model;
import lombok.Data;
import org.springframework.stereotype.Component;import java.math.BigDecimal;
import java.util.Date;
@Data
@Component
public class BookInfo {//图书IDprivate Integer id;//书名private String bookName;//作者private String author;//数量private Integer count;//定价private BigDecimal price;//出版社private String publish;//状态 0-⽆效 1-允许借阅 2-不允许借阅private Integer status;private String statusCN;//创建时间private Date createTime;//更新时间private Date updateTime;
}
5.2.1.2 数据层(dao/mapper)

//数据访问层: 负责数据访问操作,包括数据的增、删、改、查

//mock了一些假信息

package com.example.demo.dao;import com.example.demo.model.BookInfo;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class BookDao {public List<BookInfo> mockData(){List<BookInfo> books = new ArrayList<>();for (int i=0;i<5;i++){BookInfo book = new BookInfo();book.setId(i);book.setBookName("书籍"+i);book.setAuthor("作者"+i);book.setCount(i*5+3);book.setPrice(new BigDecimal(new Random().nextInt(100)));book.setPublish("出版社"+i);book.setStatus(1);books.add(book);}return books;}
}
5.2.1.3 业务逻辑层(service

业务逻辑层: 处理具体的业务逻辑

package com.example.demo.service;import com.example.demo.dao.BookDao;
import com.example.demo.model.BookInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.awt.print.Book;
import java.util.List;@Service
public class BookService {BookDao bookDao=new BookDao();public List<BookInfo> getBookList(){List<BookInfo> bookInfos=bookDao.mockData();for(BookInfo bookInfo:bookInfos){if(bookInfo.getStatus()==1){bookInfo.setStatusCN("可借阅");}else{bookInfo.setStatusCN("不可借阅");}}return bookInfos;}
}
5.2.1.4 控制层(controller)
@RestController
@RequestMapping("/book")
public class BookController {@RequestMapping("/getList")public List<BookInfo> getList(){BookService bookService=new BookService();return bookService.getBookList();}
}
5.2.1.5 测试前端接口 

上面完成了图书页面展示,我们先来测试以下前端接口

成功!!!

5.2.1.6 前后端交互 

我们想要页面加载时就显示图书信息,可以直接写ajax相关语句

为了美观,我们定义一个函数,在函数内部写相关语句,在进行调用。

            getBookList();function getBookList() {$.ajax({type: "post",url: "/book/getList",//我们想把相关语句,存入<tbody>内,循环success: function(result){console.log(result);//控制台进行打印,方便我们进行检查,看我们是否从服务器拿到信息,可以定位错误if(result!=null){var finalHtml="";for(var book of result){finalHtml += '<tr>';finalHtml += '<td><input type="checkbox" name="selectBook" value="1" id="selectBook" class="book-select"></td>';finalHtml += '<td>' + book.id + '</td>';finalHtml += '<td>' + book.bookName + '</td>';finalHtml += '<td>' + book.author + '</td>';finalHtml += '<td>' + book.count + '</td>';finalHtml += '<td>' + book.price + '</td>';finalHtml += '<td>' + book.publish + '</td>';finalHtml += '<td>' + book.statusCN + '</td>';finalHtml += '<td><div class="op">';finalHtml += '<a href="book_update.html?bookId=' + book.id +'">修改</a>';finalHtml += '<a href="javascript:void(0)" onclick="deleteBook('+book.id+')">删除</a>';finalHtml += '</div></td>';finalHtml += "</tr>";}}$("tbody").html(finalHtml);}});}

正确!!!

 5.2.2 用户登录接口

5.2.2.1 控制层
    @RequestMapping("/login")public Boolean login(String password, String admin, HttpSession session){//账号为空,错误if(!StringUtils.hasLength(password)||!StringUtils.hasLength(admin)){return false;}if("admin".equals(admin)&&"password".equals(password)){session.setAttribute("admin",admin);return true;}return false;}
5.2.2.2 测试

 成功!!!

5.2.2.3 前后端交互
 function login() {$.ajax({type: "post",url: "/user/login",data:{admin: $("#userName").val(),password: $("#password").val()},success: function(result){if(result==true){location.href = "book_list.html";}else{alert("账号或密码不正确!!!");}}});}

输入密码正确,成功!!! 

未完!!!

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

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

相关文章

java常用IO流功能——转换流,打印流,数据流,序列化流概述

前言&#xff1a; 整理下IO流的相关知识点笔记&#xff0c;打好基础&#xff0c;daydayup!!! 之前整理了下 字节流&#xff0c;字符流和缓冲流&#xff0c;有需要的可以看这里 java常用应用程序编程接口&#xff08;API&#xff09;——IO流概述及字节流的使用 java常用IO流功…

Spring:面试八股

文章目录 参考Spring模块CoreContainerAOP 参考 JavaGuide Spring模块 CoreContainer Spring框架的核心模块&#xff0c;主要提供IoC依赖注入功能的支持。内含四个子模块&#xff1a; Core&#xff1a;基本的核心工具类。Beans&#xff1a;提供对bean的创建、配置、管理功能…

❤ leetCode简易题1-两数之和、简易2--回文数判断、简易14-最长公共前缀

❤ leetCode简易题1-两数之和、简易题14- 最长公共前缀 1、简易1-两数之和 ① 题目要求 数字A B target&#xff0c;以target为求和结果&#xff0c;找出数组中符合的A、B数字下标。 第一次做的时候完全脑子一片蒙&#xff0c;随后认真看了看题目发现是发现找符合target和…

论文导读 | 漫谈编辑问题

摘要 本文着眼于深度学习模型在各个领域中的编辑问题&#xff0c;从通用的分类器编辑算法切入&#xff0c;展开介绍针对扩散模型的图像编辑问题和针对大语言模型的知识编辑问题&#xff0c;希望能为读者关于“修改模型的行为”这一话题提供一些启发。 引言 当我们训练好一个…

【问题分析】InputDispatcher无焦点窗口ANR问题【Android 14】

1 问题描述 Monkey跑出的无焦点窗口的ANR问题。 特点&#xff1a; 1&#xff09;、上层WMS有焦点窗口&#xff0c;为Launcher。 2&#xff09;、native层InputDispacher无焦点窗口&#xff0c;上层为”recents_animation_input_consumer“请求了焦点&#xff0c;但是”rece…

高防DNS和高防IP一样吗?

高防DNS和高防IP在功能和目标上有所不同&#xff0c;因此它们并不完全相同。 高防DNS是一种针对DNS服务的防护措施&#xff0c;旨在保护域名解析免受DDoS攻击等网络威胁的影响。它利用高防服务器和高防机房的资源&#xff0c;对无效流量进行清洗&#xff0c;保障DNS服务器的安…

零基础学习挖掘PHP网站漏洞

教程介绍 本套课程&#xff0c;分为三个阶段&#xff1a;第一阶段&#xff1a;基础篇 学习PHP开发的基础知识&#xff0c;对PHP常见的漏洞进行分析&#xff0c;第二阶段&#xff1a;进阶篇 实战PHP漏洞靶场&#xff0c;了解市面上的PHP主流网站开发技术&#xff0c;并对市面上…

图解MySQL目录

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 一 .图解MySQL介绍 重点突击 MySQL 索引、事务、锁、日志等面试常问知识。 二 . 基础篇 执行一条 select 语句&#xff0c;期间发生了什么&#xff1f; : 执行一条 select 语句&#xff0c;期间发生了什…

SQL的事务及其ACID属性

目录 SQL中的事务简介事务和ACID属性SQL事务中的关键命令示例SQL事务的隔离层级1. 未提交读取2. 提交后读取3. 可重复读取4. 可序列化脏读、不可重复读或虚读脏读取不可重复读取(未提交读取)虚读取推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速…

使用express Vue+Node搭建的网上购物商城

前言 项目采用的技术栈: VueNodeMySQL 前端&#xff1a;用Vue-cli搭建&#xff0c;使用Vue全家桶element-ui 后端&#xff1a;express框架 数据库&#xff1a;MySQL 一、功能 普通用户 注册、登录&#xff08;图形验证码&#xff09;定位 &#xff08;腾讯地图定位功能&#…

查找中常见的树数据结构

查找中常见的树数据结构 一、排序二叉树二、平衡二叉树三、红黑树&#xff08;自平衡二叉树&#xff09;四、B树五、B树 在动态查找中常见的树相关的数据结构包括&#xff1a; 排序二叉树&#xff08;Binary Search Trees&#xff09;平衡二叉树&#xff08;AVL Trees&#xff…

ssh 公私钥

一、生成ssh公私钥 生成自定义名称的SSH公钥和私钥对&#xff0c;需要使用ssh-keygen命令&#xff0c;这是大多数Linux和Unix系统自带的标准工具。下面&#xff0c;简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对。 步骤 1: 打开终端 首先&#xff0c;打开我…

鸿蒙HarmonyOS应用开发之在NDK工程中使用预构建库

在NDK工程中&#xff0c;可以通过CMake语法规则引入并使用预构建库。在引用预构建库时&#xff0c;模块libs目录中的预构建库&#xff0c;以及在CMakeList.txt编译脚本中声明的预构建库都会被打包。 例如在项目中需要使用预构建库libavcodec_ffmpeg.so&#xff0c;其开发态存放…

【数据库管理操作】Mysql 创建学生数据库及对数据表进行修改

MySQL 创建学生成绩数据库 1.创建数据库 create database studentscore;创建完成之后&#xff0c;如果需要使用该数据&#xff0c;使用use命令 use studentscore;创建表前查看当前数据库中包含的表 show tables; 2.创建bclass表 create table bclass( class_id char(8) …

蓝桥杯刷题day09——霓虹【算法赛】

一、问题描述 晚上,小蓝正无聊的走在大路上,小蓝所在的街区是—个带有赛博朋克风格的街区。 他抬头—看,看到了很多霓虹灯牌。在其中的某一个店铺前,挂着一排的数字灯牌,每一个数字的显示都依靠7段LED管,亮着的灯管组成数字,具体来说如下图所示: 小蓝刚学过数字电路,他…

数据库系统概论-第3章 关系数据库标准语言SQL

3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.8 小结

Java_19 罗马数字转整数

罗马数字转整数 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1…

vue3+threejs新手从零开发卡牌游戏(十三):上场手牌添加攻击力文字

在utils/common.ts下新建渲染场上手牌文字方法&#xff1a; // 渲染场上手牌文字 const renderSiteCardText (mesh: any, font: any) > {return new Promise((resolve, reject) > {let pos mesh.positionconst geometry new TextGeometry( ATK ${mesh.userData._ATK}…

蓝桥杯2023省赛:矩阵总面积|模拟、数学(几何)

题目链接&#xff1a; 0矩形总面积 - 蓝桥云课 (lanqiao.cn) 说明&#xff1a; 参考文章&#xff1a;矩形总面积计算器&#xff1a;计算两个矩形的总面积&#xff0c;包括重叠区域_矩形r1的左下角坐标为x1, yl 、宽度为w1、高度为h1, 矩形r2的左下角坐标为x2,y2、宽-CSDN博客…

面试算法-93-交错字符串

题目 给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串 &#xff1a; s s1 s2 … sn t t1 t2 … tm |n - m| < 1 交错…