Java——简易图书管理系统

本文使用 Java 实现一个简易图书管理系统

一、思路

简易图书管理系统说白了其实就是 用户 与 图书 这两个对象之间的交互

书的属性有

书名

作者

类型

价格

借阅状态


而用户可以分为

普通用户

管理员

使用数组将书统一管理起来

用户对这个数组进行操作


普通用户可以进行

查看所有书籍

借阅书籍

归还书

退出系统


而管理员可以进行普通用户的所有操作,此外

增加书籍

删除书籍


大致如此

二、实现

2.1 创建对象

2.1.1 书

public class Book {private String name;//书名private String author;//作者private double price;//价格private String type;//类型boolean IsBorrowed;//借出状态  
}

书需要构造方法

以及重写 toString,方便输出

public class Book {private String name;//书名private String author;//作者private double price;//价格private String type;//类型boolean IsBorrowed;//借出状态//构造方法//书一开始的状态都是未借出//boolean类型在不赋值的情况下默认人为falsepublic Book(String name, String author, double price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((IsBorrowed == true)?"已接触":"未借出") +'}';}
}

为方便管理,将所有与书有关的类放到同一个包下面去

package book;public class Book {private String name;//书名private String author;//作者private double price;//价格private String type;//类型boolean IsBorrowed;//借出状态//构造方法//书一开始的状态都是未借出//boolean类型在不赋值的情况下默认人为falsepublic Book(String name, String author, double price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((IsBorrowed == true)?"已接触":"未借出") +'}';}
}

目前就是如此

其他方法在实现用户与图书交互时进行补充

2.1.2 用户

为方便管理,将用户相关类放到另一个包中

用户与管理员在属性上是相同的

那么就可以继承于一个抽象类

package user;abstract public class User {protected String name;public User(String name) {this.name = name;}
}
package user;public class NormalUser extends User {public NormalUser(String name) {super(name);}
}
package user;public class Administrator extends User{public Administrator(String name) {super(name);}
}

可能用到的方法依旧是在后文中进行补充


2.2 交互

2.2.1 操作界面

用户在登陆时会检测身份

public static  User  login(){System.out.println("欢迎使用图书管理系统!!!");Scanner scanner = new Scanner(System.in);System.out.println("请输入您的姓名");String name = scanner.nextLine();System.out.println("请选择你的身份");System.out.println("1.普通用户");System.out.println("2.管理员");int choice = scanner.nextInt();if(choice == 1){return new NormalUser (name);}else if(choice == 2){return new Administrator(name);}else {System.out.println("输入的值无效");}return null;}

无论是管理员还是普通用户都会有操作界面

那就可以将这个方法作为抽象方法放在 User 类

package user;
abstract public class User {protected String name;public User(String name) {this.name = name;}abstract  public void menu();
}

在子类中实现

package user;public class NormalUser extends User {public NormalUser(String name) {super(name);}@Overridepublic void menu() {System.out.println("请选择操作");System.out.println("1.显示图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("4.查找图书");System.out.println("0.退出系统!");}
}
package user;public class Administrator extends User{public Administrator(String name) {super(name);}@Overridepublic void menu() {System.out.println("请选择操作");System.out.println("1.显示图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("4.查找图书");System.out.println("5.增加图书");System.out.println("6.删除图书");System.out.println("0.退出系统!");}
}

测试

  public static void main(String[] args) {User user = login();user.menu();}

2.2.2 书架

将书放到一个数组中方便管理

定义一个书架类

这个书架中默认会有几本书

书架有默认容量和已存书本数量

package book;public class BookList {private final int defaultcapacity = 10;//默认容量protected Book[] booklist = new Book[defaultcapacity];private int usespace;//已存书本容量public BookList() {this.booklist[0] = new Book("三体", "刘慈欣", 18.88, "小说");this.booklist[1] = new Book("西游记", "吴承恩", 17.77, "小说");this.booklist[2] = new Book("红楼梦", "曹雪芹", 16.66, "小说");usespace = 3;}public int usesize(){return this.usespace;}public int size(){return this.booklist.length;}
}

所有操作实际上都是对 booklist 这个数组进行

2.2.3 对图书操作

无论是管理员还是普通用户的操作

都可以理解成一种行为的多态

那就可以用一个接口

package behavior;import book.BookList;public interface Behavior{void work();//各种操作BookList booklist = new BookList();
}

所有的操作都是实现了这个接口的类

public class AddBehavior implements Ibehavior{@Overridepublic void work() {System.out.println("添加图书");}
}
public class BorrowedBehavior implements Ibehavior{@Overridepublic void work() {System.out.println("借阅图书");}
}
public class ExitBehavior implements Ibehavior{@Overridepublic void work() {System.out.println("退出系统!");}
}
public class RemoveBehavior implements Ibehavior{@Overridepublic void work() {System.out.println("归还图书!");}
}
public class ReturnBehavior implements Ibehavior{@Overridepublic void work() {System.out.println("归还图书");}
}
public class ShowBehavior implements Ibehavior{@Overridepublic void work() {System.out.println("展示未借阅的图书!");}
}

public class FindBehavior implements Behavior{@Overridepublic void work() {System.out.println("查找图书!");}
}

2.2.4 具体实现对图书操作

普通用户与管理员有对应的操作

可以在普通用户类与管理员类中创建一个数组

public class Administrator extends User{public Administrator(String name) {super(name);}protected Behavior[] behaviors = {new ExitBehavior(),new ShowBehavior(),new BorrowedBehavior(),new ReturnBehavior(),new FindBehavior(),new AddBehavior(),new RemoveBehavior()};@Overridepublic void menu() {System.out.println("请选择操作");System.out.println("1.显示图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("4.查找图书");System.out.println("5.增加图书");System.out.println("6.删除图书");System.out.println("0.退出系统!");}
}
public class NormalUser extends User {public NormalUser(String name) {super(name);}
protected Behavior[] behaviors = {new ExitBehavior(),new ShowBehavior(),new BorrowedBehavior(),new ReturnBehavior(),new FindBehavior()};@Overridepublic void menu() {System.out.println("请选择操作");System.out.println("1.显示图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("4.查找图书");System.out.println("0.退出系统!");}
}

这里就需要对应的下标值来对数组进行操作

而对应下标值可以通过 menu 方法来返回

修改一下就可以了

public class Administrator extends User{public Administrator(String name) {super(name);}protected Behavior[] behaviors = {new ExitBehavior(),new ShowBehavior(),new BorrowedBehavior(),new ReturnBehavior(),new FindBehavior(),new AddBehavior(),new RemoveBehavior()};@Overridepublic int menu() {System.out.println("请选择操作");System.out.println("1.显示图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("4.查找图书");System.out.println("5.增加图书");System.out.println("6.删除图书");System.out.println("0.退出系统!");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}@Overridepublic void DoBehavior(int choice){this.behaviors[choice].work();}
}
public class NormalUser extends User {public NormalUser(String name) {super(name);}
protected Behavior[] behaviors = {new ExitBehavior(),new ShowBehavior(),new BorrowedBehavior(),new ReturnBehavior(),new FindBehavior()};@Overridepublic 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.退出系统!");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}@Overridepublic void DoBehavior(int choice){this.behaviors[choice].work();}
}

对各项操作进行实现

2.2.4.1 退出系统(即结束程序)

public class ExitBehavior implements Behavior{@Overridepublic void work() {System.out.println("退出系统!");System.exit(0);}
}

测试


2.2.4.2 查找图书

根据书名进行对应图书查找

需要拿到书名

BookBookList 中增加方法

public class Book {private String name;//书名private String author;//作者private double price;//价格private String type;//类型boolean IsBorrowed;//借出状态//构造方法//书一开始的状态都是未借出//boolean类型在不赋值的情况下默认人为falsepublic Book(String name, String author, double price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((IsBorrowed == true)?"已接触":"未借出") +'}';}public String getName(){return this.name;}
}
package book;public class BookList {private final int defaultcapacity = 10;//默认容量protected Book[] booklist = new Book[defaultcapacity];private int usespace;//已存书本容量public BookList() {this.booklist[0] = new Book("三体", "刘慈欣", 18.88, "小说");this.booklist[1] = new Book("西游记", "吴承恩", 17.77, "小说");this.booklist[2] = new Book("红楼梦", "曹雪芹", 16.66, "小说");usespace = 3;}public int usesize(){
//        存放书本数量return this.usespace;}public int size(){
//        书架总容量return this.booklist.length;}public String getBookName(int index){
//        返回对应位置的书名return this.booklist[index].getName();}public Book getBook(int index){
//        返回对应位置的书return this.booklist[index];}
}

package behavior;import java.util.Scanner;public class FindBehavior implements Behavior{@Overridepublic void work() {System.out.println("查找图书!");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要查找的书籍名称:");String name = scanner.nextLine();for (int i = 0; i < booklist.usesize(); i++) {if(name.equals(booklist.getBookName(i))){System.out.println("已找到您要查找的图书");System.out.println(booklist.getBook(i));return;}}System.out.println("没有您要查找的书籍");}
}

测试


2..2.4.3 打印图书

将书架上所有书打印出来

只展示没有被借出的图书

那就需要获得书的借出状态

public class Book {private String name;//书名private String author;//作者private double price;//价格private String type;//类型boolean IsBorrowed;//借出状态//构造方法//书一开始的状态都是未借出//boolean类型在不赋值的情况下默认人为falsepublic Book(String name, String author, double price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((IsBorrowed == true)?"已接触":"未借出") +'}';}public String getName(){return this.name;}public Boolean IsBorrowed(){return this.IsBorrowed;}
}
package behavior;public class ShowBehavior implements Behavior{@Overridepublic void work() {System.out.println("展示未借阅的图书!");for (int i = 0; i < booklist.usesize(); i++) {if(!booklist.getBook(i).IsBorrowed()){System.out.println(booklist.getBook(i));}}}
}

测试


2.2.4.4 借阅与归还图书

查找到对应图书

修改该书的 IsBorrowed 属性即可

需要在 Book 中增加 set 方法

package book;public class Book {private String name;//书名private String author;//作者private double price;//价格private String type;//类型boolean IsBorrowed;//借出状态//构造方法//书一开始的状态都是未借出//boolean类型在不赋值的情况下默认人为falsepublic Book(String name, String author, double price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((IsBorrowed == true)?"已接触":"未借出") +'}';}public void setBorrowed_borrow(){this.IsBorrowed = true;}public void setBorrowed_return(){this.IsBorrowed = false;}public String getName(){return this.name;}public Boolean IsBorrowed(){return this.IsBorrowed;}
}
package behavior;import java.util.Scanner;public class ReturnBehavior implements Behavior {@Overridepublic void work() {System.out.println("归还图书");System.out.println("请输入您要归还的图书名称:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();for (int i = 0; i < booklist.usesize(); i++) {if (name.equals(booklist.getBookName(i)) && !booklist.getBook(i).IsBorrowed()){System.out.println("本系统已录入该图书");return;}if (name.equals(booklist.getBookName(i))) {booklist.getBook(i).setBorrowed_return();System.out.println("归还成功!");return;}}System.out.println("这本书不属于本系统!");}
}
package behavior;import java.util.Scanner;public class BorrowedBehavior implements Behavior {@Overridepublic void work() {System.out.println("借阅图书");System.out.println("请输入您要借阅的图书名称:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();for (int i = 0; i < booklist.usesize(); i++) {if (name.equals(booklist.getBookName(i)) && booklist.getBook(i).IsBorrowed()){System.out.println("该图书已借出");return;}if (name.equals(booklist.getBookName(i))) {booklist.getBook(i).setBorrowed_borrow();System.out.println("借阅成功!");return;}}System.out.println("没有您要借阅的书籍");}
}

测试


2.2.4.5 增加图书 

先判断书架是否是满的

再判断是否存在同名书籍

增加后需要将 usespace++

需要一个 set 方法

package book;public class BookList {private final int defaultcapacity = 10;//默认容量protected Book[] booklist = new Book[defaultcapacity];private int usespace;//已存书本容量public BookList() {this.booklist[0] = new Book("三体", "刘慈欣", 18.88, "小说");this.booklist[1] = new Book("西游记", "吴承恩", 17.77, "小说");this.booklist[2] = new Book("红楼梦", "曹雪芹", 16.66, "小说");usespace = 3;}public int usesize(){
//        存放书本数量return this.usespace;}public int size(){
//        书架总容量return this.booklist.length;}public void setUsespace(int usespace) {//改变书架书的数量this.usespace = usespace;}public void setBooklist(Book book){
//        增加书籍this.booklist[usespace++] = book;}public String getBookName(int index){
//        返回对应位置的书名return this.booklist[index].getName();}public Book getBook(int index){
//        返回对应位置的书return this.booklist[index];}
}
public class AddBehavior implements Behavior{@Overridepublic void work() {System.out.println("添加图书");if (booklist.size() == booklist.usesize()) {System.out.println("书架已满!");return;}//判断书架是否已满Scanner scanner = new Scanner(System.in);System.out.println("请输入您要添加的书籍名称:");String name = scanner.nextLine();for (int i = 0; i < booklist.usesize(); i++) {
//            判断是否存在同名书籍if (name.equals(booklist.getBookName(i))) {System.out.println("系统已收录该图书");return;}}System.out.println("请输入该书的作者");String author = scanner.nextLine();System.out.println("请输入该书的价格");double price = scanner.nextDouble();String type = scanner.nextLine();//接受回车键System.out.println("请输入该书的类型");type = scanner.nextLine();Book book = new Book(name,author,price,type);booklist.setBooklist(book);System.out.println("新增图书成功!");}
}

测试

2.2.4.6 删除图书 

找到对应的图书

如果已经借出就不能删除

如果没有借出

将他所在空间置为 null

然后将他所在位置之后的图书向前移动

同样需要在 BookList 类中补充方法

package book;public class BookList {private final int defaultcapacity = 10;//默认容量protected Book[] booklist = new Book[defaultcapacity];private int usespace;//已存书本容量public BookList() {this.booklist[0] = new Book("三体", "刘慈欣", 18.88, "小说");this.booklist[1] = new Book("西游记", "吴承恩", 17.77, "小说");this.booklist[2] = new Book("红楼梦", "曹雪芹", 16.66, "小说");usespace = 3;}public int usesize(){
//        存放书本数量return this.usespace;}public int size(){
//        书架总容量return this.booklist.length;}public void setUsespace(int usespace) {//改变书架书的数量this.usespace = usespace;}public void setBooklist(Book book){
//        增加书籍(放在尾部)this.booklist[usespace++] = book;}public void setBooklist(Book book,int index){
//        增加书籍(指定位置)this.booklist[index] = book;}public void removeBook(int index){//删除对应下标位置的书this.booklist[index] = null;}public String getBookName(int index){
//        返回对应位置的书名return this.booklist[index].getName();}public Book getBook(int index){
//        返回对应位置的书return this.booklist[index];}
}
package behavior;import java.util.Scanner;public class RemoveBehavior implements Behavior {@Overridepublic void work() {System.out.println("删除图书!");Scanner scanner = new Scanner(System.in);System.out.println("请输入您要删除的书籍名称:");String name = scanner.nextLine();for (int i = 0; i < booklist.usesize(); i++) {if (name.equals(booklist.getBookName(i)) && booklist.getBook(i).IsBorrowed()) {
//                已借出不能删除System.out.println("该图书已借出");return;}if (name.equals(booklist.getBookName(i)) && !booklist.getBook(i).IsBorrowed()) {booklist.removeBook(i);//指定位置置空for (int j = i; j < booklist.usesize() - 1; j++) {//指定位置处的书向前移动booklist.setBooklist(booklist.getBook(j + 1), j);}System.out.println("删除成功!");int newspace = booklist.usesize();booklist.setUsespace(--newspace);//删除后 书架中的存储的书的数量减少return;}}System.out.println("没有您要删除的书籍");return;}
}

测试


感谢观看

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

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

相关文章

Python简介

Python简介 1. Python定义 Python 是一种简单易学并且结合了解释性、编译性、互动性和面向对象的脚本语言。Python提供了高级数据结构&#xff0c;它的语法和动态类型以及解释性使它成为广大开发者的首选编程语言。 Python 是解释型语言&#xff1a; 开发过程中没有了编译这个环…

Android Gradle开发、应用、插件发布(六)—实现打包自动复制文件插件

1. 前言 项目中遇到了一个问题 : 其中一个模块MyLibrary的assets文件夹中&#xff0c;需要存放很多文件(每个文件对应一个功能)。 这样导致的问题是MyLibrary打出的这个aar包体积特别大。 如果把MyLibrary严谨地拆解成若干个Module又比较费时&#xff0c;对于现在业务现状来…

Vue3实战笔记(42)—Vue + ECharts:流量数据可视化的强大组合

文章目录 前言vue3使用echarts标准demo&#xff1a;总结 前言 在前端开发中&#xff0c;数据可视化已经成为了一个不可或缺的部分。Vue.js作为一个轻量级且易于上手的渐进式JavaScript框架&#xff0c;与ECharts这个强大的数据可视化库的结合&#xff0c;使得在Vue应用中构建交…

Mysql插入中文内容报错解决及其Mysql常用的存储引擎说明

一、问题描述 我们在Mysql数据库的表中插入带有中文内容时报错,提示【1366 - Incorrect string value: \xE5\x8C\x97\xE4\xBA\xAC... for column UserDealer at row 1】,如下图所示: 二、问题分析 一般来说插入中文内容有问题我们首先想到的就是编码问题;我们可以查看该表使…

文科论文,使用AI写作时能够提供实证数据吗?

人工智能时代&#xff0c;为了撰写论文提供思路及高效&#xff0c;利用AI撰写论文已是常态&#xff0c;可撰写文科论文通常研究中都需要实证数据&#xff0c;而AI撰写论文时能够提供这样的数据吗&#xff1f; 一、什么是实证数据 实证数据是指从研究报告、财务报表、新闻报道…

栈和队列的经典例题,LeetCode 括号匹配问题;栈实现队列;队列实现栈;队列带环问题

1.前序 又有很久没有更新文章了&#xff0c;这次带你们手撕几道基础题&#xff1b;真的就和康纳吃饭一样简单&#xff01;&#xff01;&#xff01; 如果还不会队列和栈的可以去看看之前写的博客&#xff1b; 栈的实现 队列概念以及实现 <- 快速传送 目录 1.前序 …

Jmeter例题分析-作业一

作业 作业1概要 本文档是关于执行软件性能测试的详细指南&#xff0c;包括使用JMeter工具进行测试的步骤和要求。 文档分为两个主要部分&#xff1a;性能测试的执行和性能测试报告的编写。 在第一部分中&#xff0c;详细描述了如何使用 JMeter进行性能测试。这包括设置测试环…

【机器学习】大模型在机器学习中的应用:从深度学习到生成式人工智能的演进

&#x1f512;文章目录&#xff1a; &#x1f4a5;1.引言 ☔2.大模型概述 &#x1f6b2;3.大模型在深度学习中的应用 &#x1f6f4;4.大模型在生成式人工智能中的应用 &#x1f44a;5.大模型的挑战与未来展望 &#x1f4a5;1.引言 随着数据量的爆炸性增长和计算能力的提…

LeetCode //C - 119. Pascal‘s Triangle II

119. Pascal’s Triangle II Given an integer rowIndex, return the rowIndexth (0-indexed) row of the Pascal’s triangle. In Pascal’s triangle, each number is the sum of the two numbers directly above it as shown: Example 1: Input: rowIndex 3 Output: …

Autodesk 3DS Max v2025 解锁版安装教程 (3D 建模软件)

前言 Autodesk 3ds Max 是一款功能强大的 3D 建模和动画解决方案&#xff0c;游戏开发人员、视觉效果艺术家和平面设计师使用它来创建庞大的世界、令人惊叹的场景和引人入胜的虚拟现实 (VR) 体验。 Autodesk 3DS MAX是业界使用最广泛的3D建模和动画软件程序之一&#xff0c;它…

6.小程序页面布局 - 账单明细

文章目录 1. 6.小程序页面布局 - 账单明细1.1. 竞品1.2. 布局分析1.3. 布局demo1.4. 页面实现-头部1.5. 账单明细1.5.1. 账单明细-竞品分析1.5.2. 账单明细-实现1.5.2.1. 账单明细-实现-mock数据1.5.2.2. 每日收支数据的聚合整理1.5.2.3. 页面scroll-view 1.6. TODO 1. 6.小程序…

力扣HOT100 - 72. 编辑距离

解题思路&#xff1a; 动态规划 class Solution {public int minDistance(String word1, String word2) {int n1 word1.length();int n2 word2.length();int[][] dp new int[n1 1][n2 1];for (int j 1; j < n2; j) dp[0][j] dp[0][j - 1] 1;for (int i 1; i < …

OA界面这么香吗?总有老铁私信,让我多发点,他好参考。

OA的确是B端系统应用最为广泛的一种&#xff0c;这次再给大家分享十来个页面&#xff0c;希望对他们的界面提升有所帮助。 举报 评论 3

【数据结构与算法】之堆的应用——堆排序及Top_K问题!

目录 1、堆排序 2、Top_K问题 3、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 1、堆排序 对一个无序的数组…

焦化超低排平台选哪家好?(已解答)

在环保政策日益严格的背景下&#xff0c;焦化行业的超低排放改造成为企业转型升级的必经之路。朗观视觉小编建议&#xff0c;选择合适的焦化超低排平台对于确保改造效果和实现可持续发展具有重要意义。本文将从多个维度为您提供一份全面的评估与选择指南&#xff0c;帮助您在众…

【计算机毕业设计】030英语学习交流平台微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Volatile的内存语义

1、volatile的特性 可见性&#xff1a;对一个volatile变量的读&#xff0c;总能够看到任意一个线程对这个volatile变量的写入。 原子性&#xff1a;对任意单个volatile变量的读/写具有原子性&#xff0c;但类似于volatile这种复合操作不具有原子性。 接下来我们用程序验证。…

Spring Cloud 系列之Gateway:(9)初识网关

传送门 Spring Cloud Alibaba系列之nacos&#xff1a;(1)安装 Spring Cloud Alibaba系列之nacos&#xff1a;(2)单机模式支持mysql Spring Cloud Alibaba系列之nacos&#xff1a;(3)服务注册发现 Spring Cloud 系列之OpenFeign&#xff1a;(4)集成OpenFeign Spring Cloud …

【2024软考】史上最全!软考刷题+解析大合集(9万字全手工打,货真价实)

计算机基础知识 1.中断向量表用来保存各个中断源的中断服务程序的入口地址。当外设发出中断请求信号&#xff08;INTR&#xff09;以后&#xff0c;由中断控制器&#xff08;INTC&#xff09;确定其中断号&#xff0c;并根据中断号查找中断向量表来取得其中断服务程序的入口地…

89.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-游戏中使用的哈希算法逆向分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…