图书管理系统(增删改查,附源码,包含数据库交互以及图形化界面)

news2026/4/6 6:31:09
前言本文旨在用面向对象的思想编程实现图书管理系统功能包括增删改查完整源码放在文末大家有需自取一共3个版本1.0版本基础的Java单机程序2.0版本提供了web图形化页面与数据库可以交互3.0版本在2.0的基础上采用了前后端分离的架构UI更美观功能也更多每个版本都免费给出了源码大家可以在文末按需自取。目录一.效果示例▐ LibrarySystem1.0▐ LibrarySystem2.0▐ LibrarySystem3.0二.LibrarySystem1.0分享▐ 设计与分析▐ 完整代码三.LibrarySystem2.0分享▐ 项目结构及使用注意事项▐ 完整代码三.LibrarySystem3.0分享一.效果示例▐LibrarySystem1.0因为是简单的单击程序所以是通过终端窗口进行增删改查的操作这里给出一些运行截图▐LibrarySystem2.0首先是登录界面在程序运行起来后我们访问浏览器的8080端口的login.html界面即localhost:8080/login.html默认用户名和密码都是adminhttp://localhost:8080/login.html登录完成后自动跳转到图书列表界面在这个界面我们可以进行书籍的增删改查当我们选择添加添加图书即可跳转到相对应的页面然后通过表单的提交我们就可以完成书籍的新增▐LibrarySystem3.0前端后端都启动后浏览器输入下面的网址即可进入系统http://localhost:5173/login登陆界面主要参考腾讯QQ的风格采用圆角阴影和渐变等元素先展示管理员端的页面吧这是管理员登录后首页显示包含图书管理借阅管理用户管理等功能借阅管理用户管理普通用户这方面包含最基础的借阅和查看图书等功能还有双端都有的个人信息的修改这是对应的前后端项目链接点击即可免费下载使用library-system3.0: library-system3.0前端后端项目 --整合介绍文档二.LibrarySystem1.0分享▐设计与分析这部分内容是面向于没有什么开发经验的小白如果你是有一定开发基础的完全跳过这部分即可我们采取面向对象的编程思想将整个图书管理系统抽象出多个对象然后通过各个对象之间的交互来完成我们的整体设计需求我们整体的设计框架如下图我们通过抽取他们的共性做出以下设计我们的书籍放在书架上因此他们处于同一个包内我们的增删查改的操作都是属于用户对图书的操作因此他们处于同一个包内这样也更方便不同用户来调用这些操作用户分为普通用户和管理员用户他们都是对于图书管理系统的直接操作者因此他们处于同一个包中对应我们上述结构图我们如下设计▐书籍和书架书籍(Book)我们应该提供书籍的相关信息书名作者价格书籍类型借阅状态为了体现面向对象的封装特性我们将这些字段信息设为private然后再设置一些public的方法以供给其他对象访问package BookRack; //书籍 public class Book { private String name;//书名 private String author;//作者名 private int price;//价格 private String type;//书的类型 private boolean isBorrowed;//是否已经被借出 public String getName() { return name; } public void setName(String name) { this.name name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author author; } public int getPrice() { return price; } public void setPrice(int price) { this.price price; } public String getType() { return type; } public void setType(String type) { this.type type; } public boolean isBorrowed() { return isBorrowed; } public void setBorrowed(boolean borrowed) { isBorrowed borrowed; } //构造方法初始化 public Book(String name, String author, int price, String type) { //图书默认没有借出所以isBorrowed默认false不需要初始化 this.name name; this.author author; this.price price; this.type type; } //方便我们打印整个书籍的全部信息 Override public String toString() { return Book.Book{ name name \ , author author \ , price price , type type \ }; } }书架(BookRack)书架主要是用来存放书籍的因此我们只需要提供以下俩个信息就可以已经存放的书籍也就是一个书籍数组数组中每一个元素都是一本书籍对象已经存放的书籍的数量为了体现面向对象的封装性我们还是将这些字段信息设为private然后再设置一些public的方法以供给其他对象访问在这里我们实现再书架上存放三本书因此在构造方法中做出相应的初始化package BookRack; //书架 public class BookRack { private Book[] books;//存放的所有的书 private int uesdSize;//书架上已经放的书的数量 public BookRack() { this.books new Book[10];//默认书架可以放10本书 this.books[0] new Book(三国演义,罗贯中,20,小说); this.books[1] new Book(西游记,吴承恩,9,小说); this.books[2] new Book(红楼梦,曹雪芹,19,小说); this.uesdSize 3;//默认书架上有3本书 } //拿到某个位置的书籍 public Book getBooks(int pos) { return books[pos]; } //设置某个位置的书籍 public void setBooks(Book book,int pos) { books[pos] book; } public int getUesdSize() { return uesdSize; } public void setUesdSize(int uesdSize) { this.uesdSize uesdSize; } }▐对书籍的相关操作操作接口(IOperation)所有的操作都是要对于书架进行操作的所以我们在这里提供一个接口供不同操作来实现并且给他们传入书架类的参数package Operation; import BookRack.BookRack; //操作接口 public interface IOperation { //我们的任何增删查改的操作都是对于书架进行操作的所以传入的参数是书架类 void work(BookRack bookRack); }新增图书(AddOperation)首先我们需要让用户输入想要添加的图书的相关信息然后我们为用户输入的图书新建一个对象接下来就是合法性判断我们拿刚才新建的图书对象和书架上的每一个图书对象进行遍历对比如果没有重复的图书就可以存入这本书要存入这本书就调用刚才书架类中提供的方法setBooks在新加一本书籍后对应的书籍数量也得增加也就是调用setUesdSize方法来增加书籍的数量package Operation; import BookRack.BookRack; import BookRack.Book; import java.util.Scanner; public class AddOperation implements IOperation{ Override public void work(BookRack bookRack) { System.out.println(新增图书操作进行中......); Scanner scanner new Scanner(System.in); System.out.println(请输入您要添加的图书的书名); String name scanner.nextLine(); System.out.println(请输入您要添加的图书的作者名); String author scanner.nextLine(); System.out.println(请输入您要添加的图书的价格); int price scanner.nextInt(); System.out.println(请输入您要添加的图书的类型); String type scanner.nextLine(); //因为我们的每一个书都是一个对象书架是一个对象数组我们新加图书的时候就应该新实例化一个对象 Book book new Book(name,author,price,type); //合法性判断 int usedSize bookRack.getUesdSize();//拿到当前书架内放了书的数量 for (int i 0; i usedSize; i) { //遍历书架中的图书挨个对比名字是否相同 Book tempbook bookRack.getBooks(i); if (tempbook.getName().equals(name)) { System.out.println(不能重复添加同一本书请重试); return; } } //可以添加新的图书 bookRack.setBooks(book,usedSize); bookRack.setUesdSize(usedSize1); } }借阅图书(BorrowOperation)首先我们需要让用户输入想要添加的图书的相关信息然后我们为用户输入的图书新建一个对象然后我们挨个遍历书架上的书如果有那就可以借将书籍的借阅状态改为true就可以如果没有就告诉用户没有此书无法借阅package Operation; import BookRack.BookRack; import BookRack.Book; import java.util.Scanner; public class BorrowOperation implements IOperation{ Override public void work(BookRack bookRack) { System.out.println(借阅图书操作进行中......); System.out.println(请输入您想借阅的书名); Scanner scanner new Scanner(System.in); String name scanner.nextLine(); //遍历整个书架 for (int i 0; i bookRack.getUesdSize(); i) { Book temp bookRack.getBooks(i); if (name.equals(temp.getName())) { temp.setBorrowed(true); System.out.println(借阅成功!); return; } } System.out.println(没有查询到您想要借阅的图书请重新尝试); } }删除图书(DeleteOperation)首先要删除图书的第一步应该是先找到这本书因此我们像刚才借阅图书一样先遍历整个书架找到这本书然后记录这本书的位置之后再利用书架提供的setBooks方法来存放这本书如果没有找到那就告诉用户并且退出这个操作package Operation; import BookRack.BookRack; import BookRack.Book; import java.util.Scanner; public class DeleteOperation implements IOperation{ Override public void work(BookRack bookRack) { System.out.println(删除图书操作进行中......); System.out.println(请输入您想删除的书名); Scanner scanner new Scanner(System.in); String name scanner.nextLine(); //要删除的前提是先找到这本书 int uesdSize bookRack.getUesdSize(); int flag -1; int i 0; for (; i uesdSize; i) { Book tempbook bookRack.getBooks(i); if (tempbook.getName().equals(name)) { //找到这本书 flag i; break; } } if (i uesdSize) { System.out.println(查无此书无法删除); return; } //存在这本书进行删除也就是将书架中的书从后向前依次覆盖 for (int j flag; j uesdSize; j) { Book tempbook bookRack.getBooks(j1);//拿到 j1 位置的书 bookRack.setBooks(tempbook,j);//和 j 位置的书交换 } bookRack.setBooks(null,uesdSize-1);//将最后一个位置的图书置为空 bookRack.setUesdSize(uesdSize-1);//图书数量减一 System.out.println(删除成功); } }查找图书(FindOperation)查找图书就非常简单了我们在刚才的删除图书操作中相当于已经完成了这部分操作了package Operation; import BookRack.BookRack; import BookRack.Book; import java.util.Scanner; public class FindOperation implements IOperation{ Override public void work(BookRack bookRack) { System.out.println(查找图书操作进行中......); System.out.println(请输入您想查找的书名); Scanner scanner new Scanner(System.in); String name scanner.nextLine(); int usedSize bookRack.getUesdSize(); for (int i 0; i bookRack.getUesdSize(); i) { Book temp bookRack.getBooks(i); if (name.equals(temp.getName())) { System.out.println(存在这本书信息如下); System.out.println(temp); return; } } System.out.println(没有你要找的这本书书名为 name); } }归还图书(ReturnOperation)和我们的借阅图书操作相同唯一不同的就是这里是将图书的借阅状态改为falsepackage Operation; import BookRack.BookRack; import BookRack.Book; import java.util.Scanner; public class ReturnOperation implements IOperation{ Override public void work(BookRack bookRack) { System.out.println(借阅图书操作进行中......); System.out.println(请输入您想借阅的书名); Scanner scanner new Scanner(System.in); String name scanner.nextLine(); //遍历整个书架 for (int i 0; i bookRack.getUesdSize(); i) { Book tempbook bookRack.getBooks(i); if (name.equals(tempbook.getName())) { tempbook.setBorrowed(false); System.out.println(归还成功!); return; } } System.out.println(没有你要归还的图书name); } }展示图书(ShowOperation)遍历整个书架然后挨个打印输出图书信息就可以了package Operation; import BookRack.Book; import BookRack.BookRack; public class ShowOperation implements IOperation{ Override public void work(BookRack bookRack) { System.out.println(图书列表如下); for (int i 0; i bookRack.getUesdSize(); i) { Book tempbook bookRack.getBooks(i); System.out.println(tempbook); } } }退出系统(ExitOperation)我们这里直接使用exit来结束整个程序就可以package Operation; import BookRack.BookRack; public class ExitOperation implements IOperation{ Override public void work(BookRack bookRack) { System.out.println(退出系统...); System.exit(0); } }▐用户部分用户抽象类(User)在普通用户和管理员用户中存在许多共性因此我们这里设置一个抽象类供普通用户和管理员用户来继承使用package Person; import BookRack.BookRack; import Operation.IOperation; public abstract class User { protected String name;//姓名 protected IOperation[] iOperations;//操作接口数组 public abstract int menu();//菜单 public User(String name) { this.name name; } //供用户来选择操作调用操作接口 public void doOperation(int choice, BookRack bookRack) { IOperation ioperation iOperations[choice]; ioperation.work(bookRack); } }管理员类(Administrator)我们设置管理用户的菜单再对应着菜单设置接口类型的数组的具体操作package Person; import Operation.*; import java.util.Scanner; public class Administrator extends User { public Administrator(String name) { super(name); iOperations new IOperation[]{ new ExitOperation(), new FindOperation(), new AddOperation(), new DeleteOperation(), new ShowOperation() }; } public int menu() { System.out.println(********管理员菜单********); System.out.println(1.查找图书); System.out.println(2.新增图书); System.out.println(3.删除图书); System.out.println(4.显示图书); System.out.println(0.退出系统); System.out.println(************************); System.out.println(请输入你的操作); //通过输入来调用对用的功能 Scanner scanner new Scanner(System.in); int choice scanner.nextInt(); return choice; } }普通用户(NormalUser)和管理员用户的设置一样我们对应的存放接口数组中的操作就可以package Person; import Operation.*; import Person.User; import java.util.Scanner; public class NormalUser extends User { public NormalUser(String name) { super(name); iOperations new IOperation[]{ new ExitOperation(), new FindOperation(), new BorrowOperation(), new ReturnOperation() }; } public int menu() { System.out.println(********普通用户菜单********); System.out.println(1.查找图书); System.out.println(2.借阅图书); System.out.println(3.归还图书); System.out.println(0.退出系统); System.out.println(***************************); System.out.println(请输入你的操作); //通过输入来调用对用的功能 Scanner scanner new Scanner(System.in); int choice scanner.nextInt(); return choice; } }▐main方法(Test)我们再这里设置一个登录程序登录管理员我们就新建一个管理员对象登录普通用户我们就新建一个普通用户对象然后我们根据用户的输入来调用我们菜单中的选项也就是我们刚才设置的接口操作数组中的操作import BookRack.BookRack; import Person.Administrator; import Person.NormalUser; import Person.User; import java.util.Scanner; public class Test { public static User login() { System.out.println(请输入您的名字); Scanner scanner new Scanner(System.in); String name scanner.nextLine(); System.out.println(请确认您的身份); System.out.println(1.管理员); System.out.println(2.普通用户); int choice scanner.nextInt(); if (choice 1) { return new Administrator(name); }else{ return new NormalUser(name); } } public static void main(String[] args) { BookRack bookRack new BookRack(); User user login();//向上转型 while (true) { int choice user.menu(); user.doOperation(choice, bookRack); } } }▐完整代码按照笔者这里对应的包和类的设置进行操作就可以每一个类和包在上文中都完整给出来了如果觉得麻烦的话笔者这里给出对应的源码大家有需要点击链接自取直接下载即可LibrarySystem1.0: 图书管理系统三.LibrarySystem2.0分享该部分内容是因许多粉丝后台私信想要可以和数据库交互并且有一个图形化界面为了满足这样的需求2.0版本应运而生。▐项目结构及使用注意事项该项目采用了SpringBoot MyBatis HTML CSS JavaScript的技术栈。HTML CSS JavaScript三者用来保证给用户提供一个图形化界面整个项目通过SpringBoot来进行搭建通过MyBatis来完成对数据库的增删改查。由于是一个Web项目因此在这里没法进行大篇幅的分析具体的业务逻辑实现故而只能简单的阐述一下基本业务逻辑controller层用来接收用户的信息并且调用service层进行具体的业务逻辑处理再通过调用mapper层进行对数据库的操作为了防止用户非法访问页面通过拦截器来对用户身份进行校验如果用户没有登录就直接操作图书馆则会直接跳转至用户登录界面进行登录操作。项目结构如下该项目是属于Maven的结构因此在使用前需要确保自己本地的Maven没有问题创建数据库表在运行项目之前需要将数据库表创建好笔者这里已经提供了对应的SQL语句只需要执行即可不管是在IDEA还是在Navicat里面运行这段SQL脚本都是可以的项目源码里面也有这个sql脚本直接执行就可以-- 1. 切换到 mysql 系统库 USE mysql; -- 2. 删除并重建数据库 DROP DATABASE IF EXISTS book_test; CREATE DATABASE book_test DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci; -- 3. 切换到新建的数据库 USE book_test; -- 4. 创建用户表优化字段注释、数据类型长度 DROP TABLE IF EXISTS user_info; CREATE TABLE user_info ( id INT NOT NULL AUTO_INCREMENT COMMENT 用户主键ID, user_name VARCHAR(128) NOT NULL COMMENT 用户名唯一, password VARCHAR(128) NOT NULL COMMENT 用户密码, delete_flag TINYINT(4) NULL DEFAULT 0 COMMENT 删除标记0-未删除 1-已删除, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (id), UNIQUE INDEX idx_user_name (user_name ASC) COMMENT 用户名唯一索引 ) ENGINE INNODB DEFAULT CHARACTER SET utf8mb4 COMMENT 用户信息表; -- 5. 创建图书表优化字段注释、索引 DROP TABLE IF EXISTS book_info; CREATE TABLE book_info ( id INT(11) NOT NULL AUTO_INCREMENT COMMENT 图书主键ID, book_name VARCHAR(127) NOT NULL COMMENT 图书名称, author VARCHAR(127) NOT NULL COMMENT 作者, count INT(11) NOT NULL COMMENT 库存数量, price DECIMAL(7,2) NOT NULL COMMENT 图书价格精确到分, publish VARCHAR(256) NOT NULL COMMENT 出版社, status TINYINT(4) DEFAULT 1 COMMENT 状态0-无效 1-正常 2-不允许借阅, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, PRIMARY KEY (id), INDEX idx_book_name (book_name) COMMENT 图书名称索引优化查询 ) ENGINE INNODB DEFAULT CHARSET utf8mb4 COMMENT 图书信息表; -- 6. 插入用户初始化数据 INSERT INTO user_info (user_name, password) VALUES (admin, admin), (zhangsan, 123456); -- 7. 插入图书初始化数据批量插入更高效 INSERT INTO book_info (book_name, author, count, price, publish) VALUES (活着, 余华, 29, 22.00, 北京文艺出版社), (平凡的世界, 路遥, 5, 98.56, 北京十月文艺出版社), (三体, 刘慈欣, 9, 102.67, 重庆出版社), (金字塔原理, 麦肯锡, 16, 178.00, 民主与建设出版社); -- 8. 提示执行完成 SELECT 数据库、表创建及初始化数据插入完成 AS 执行结果;修改配置文件为了正确的连接到用户本地的数据库需要确认application.yml配置文件中的数据库连接信息正确即数据库名、数据库用户名以及数据库密码与你本地的一直其他的不需要进行修改补充一下之前很多同学反馈说报错“内部错误”原因就是项目没有连接上数据库基本都是自己这里的配置文件有问题项目环境javajdk17mysql8.3.0▐完整代码源代码在下发连接中给出需要的直接点击进行下载即可LibrarySystem2.0: 图书管理系统2025年12月19日补充很长一段时间没怎么关注过CSDN写过的文章和小项目了今天突然发现很多同学都提出了项目有bug诸如 “内部错误” 这样的今天抽空修改了一下之前会有报错内部错误是因为MySQL 8.0 版本的一个安全机制导致的连接问题核心原因是客户端在认证过程中无法获取服务器的公钥导致项目连接不上本地的数据库其实改一下配置文件 application.yml 中的连接信息就好了三.LibrarySystem3.0分享如果你不知道什么是前后端那就点击这个链接即可整合版本的下载链接library-system3.0: library-system3.0前端后端项目 --整合介绍文档当然如果想要分开下载前后端的应用的话也可以下面是对应的链接使用方法在俩个项目各自的readme.md文档里面都有说明这里就不再赘述了后端项目地址https://gitee.com/luming-02/library-system3.0前端项目地址https://gitee.com/luming-02/library-system-vue本次的分享就到此为止了希望我的分享能给您带来帮助创作不易也欢迎大家三连支持你们的点赞就是博主更新最大的动力如有不同意见欢迎评论区积极讨论交流让我们一起学习进步有相关问题也可以私信博主评论区和私信都会认真查看的我们下次再见

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…