《Java》图书管理系统(已升级)

news2025/7/21 21:23:37

目录

前言

效果展示

 功能模块

书架

定义书的类

 创建书架

 用户

User用户类

AdminUser管理员

NormalUser普通用户 

 功能

接口

FindOperation 查找图书

 AddOperation添加图书

 DelOperation删除图书

BorrowOperation借阅图书 

DisOperation 打印图书 

 RetOperation归还图书

 ExitOperation退出系统

 整合

 总结

升级 

源码 (更新后的)

BookList

Book        

BookList

Main

Main

Operation

IOperation

AddOperation

BorrowOperation

DelOperation

DisOperation

ExitOperation

FindOperation

FindType

Notice

RetOperation

Finishing

user

User

Administratoruser

Ordinaryuser


 这是一个对于Java中知识点的类,抽象类,封装,继承,多态,接口等进行的一个简单的代码练习,对于实际的图书管理系统还需要一点的优化


前言

效果展示

我们先来看看效果

首先是我们的管理员端:

 再下是我们的普通用户端:

 功能模块

 我们先试着模块化出来功能合计

1.简单的登录

2.管理端

  ·查阅图书

  ·增加图书

  ·删除图书

  ·打印图书

  ·退出系统

3.用户端

  ·查阅图书

  ·借阅图书

  ·归还图书

  ·退出

 我们先将类中的功能创建好 

 IOperation为我们所有功能的接口 很多童鞋就疑惑为何要这么做,我们直接将其定义到一个类中不可以吗,答案是可以的!,但是我们为了链接知识点 所以将其进行分化!

书架

定义书的类

我们先来定义一个书的类,首先一本书有书名、作者、价格、类型以及是否已被借出

​
public class Book {
    private String name;//书名
    private String  author;//作者
    private int price;//价格
    private String type;//类型
    private boolean isBorrwed;//是否借出
}

​

因为这些都是private类型 所以我们还需要提供一个方法来提供给使用者来调用

教大家快捷方法为Alt+Insert

 

​
  public Book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    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 isBorrwed() {
        return isBorrwed;
    }

    public void setBorrwed(boolean borrwed) {
        isBorrwed = borrwed;
    }

    @Override
    public String toString() {
        return "book{" +
                "  书名='" + name + '\'' +
                ", 作者='" + author + '\'' +
                ", 价格=" + price +
                ", 类型='" + type + '\'' +
                ((isBorrwed==true)?", 已被借出":", 未被借出") +
                '}';
    }

​

 创建书架

 我们创建一个BookList类当做书架,用来存放我们的书籍

​
public class BookList {
    private Book[] books=new Book[10];
    private int BookSize;
    public  BookList(){
        books[0]=new Book("三国演义","罗贯中",17,"小说");
        books[1]=new Book("西游记","吴承恩",47,"小说");
        books[2]=new Book("水浒传","施耐庵",37,"小说");
        this.BookSize=3;
    }

    public int getBookSize() {
        return BookSize;
    }

    public void setBookSize(int bookSize) {
        BookSize = bookSize;
    }

    /**
     * 获取到pos位置的一本书
     * @param pos
     * @return
     */
    public Book getpos(int pos){
        return books[pos];
    }

    /**
     * 新加入一本书
     * @param pos
     * @param book
     */
    public void setBooks(int pos,Book book){
        this.books[pos]=book;
    }
}

​

 我们现在可以看到已经对书架进行了初始化,现在书架上的书有三国演义、西游记、水浒传

 用户

User用户类

我们要使用User来实现多态继承

public abstract class User {
    protected String name;
    protected IOperation[] iOperations;

    public User(String name){
        this.name=name;
    }
    public abstract int menu();

    public void dowork(int choice, BookList bookList){
        iOperations[choice].work(bookList);
    }
}

AdminUser管理员

管理员要实现的功能为查找、新增、删除、打印、退出系统

public class AdminUser extends User{
    public AdminUser(String name){
        super(name);
        this.iOperations =new IOperation[]{
                new Exitoperation(),
                new Findoperation(),
                new Addoperation(),
                new Deloperation(),
                new Displayoperation()
        };
    }

    public int menu(){
        System.out.println("=======管理员菜单=======");
        System.out.println("Hai!"+this.name+" 欢迎来到图书馆");
        System.out.println("1.查找图书");
        System.out.println("2.新增图书");
        System.out.println("3.删除图书");
        System.out.println("4.显示图书");
        System.out.println("0.退出系统");
        System.out.println("====================");
        Scanner scanner=new Scanner(System.in);
        return scanner.nextInt();
    }
}

 AdminUser类继承了User用户类,并且实现了管理员对应的功能

NormalUser普通用户 

 普通用户要实现的功能为查找、借阅、归还、退出系统

public class NormalUser extends User {
    public NormalUser(String name){
        super(name);
        this.iOperations =new IOperation[]{
                new Exitoperation(),
                new Findoperation(),
                new Borrowoperation(),
                new Retoperation()

        };
    }
    public int menu(){
        System.out.println("=======用户菜单=======");
        System.out.println("Hai!"+this.name+" 欢迎来到图书馆");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("====================");
        Scanner scanner=new Scanner(System.in);
        return scanner.nextInt();
        }
    }

 功能

接口

public interface IOperation {
    Scanner scanner=new Scanner(System.in);

    public void work(BookList bookList);
}

FindOperation 查找图书

 我们此功能实现是非常简单的,保存好用户要查找的图书并且使用类name.equals()来查找图书即可

public class Findoperation implements IOperation{
    public void work(BookList booklist) {
        System.out.println("查找图书");
        System.out.println("请输入你要查找的书名");
        String name=scanner.nextLine();
        int size=booklist.getBookSize();
        for (int i = 0; i < size; i++) {
            Book book= booklist.getpos(i);
            if(name.equals(book.getName())){
                System.out.println("找到了你要查找的书 信息如下");
                System.out.println(book);
                return ;
            }
        }
        System.out.println("没有找到你要查找的书");
    }
}

 AddOperation添加图书

我们要给已存在的书架加入一本书,将新书存放到顺序表之后即可

public class Addoperation implements IOperation{
    public void work(BookList booklist) {
        System.out.println("添加图书");
        System.out.println("请输入图书的名字");
        String name=scanner.nextLine();
        System.out.println("请输入图书的作者");
        String author=scanner.nextLine();
        System.out.println("请输入图书的类别");
        String type=scanner.nextLine();
        System.out.println("请输入图书的价格");
        int price=scanner.nextInt();
        Book book=new Book(name,author,price,type);
        int size=booklist.getBookSize();
        booklist.setBooks(size,book);
        booklist.setBookSize(++size);
        System.out.println("新增图书成功");
    }
}

 需要注意的地方是我们一定要切记添加图书后记得要改变bookSize的值

 DelOperation删除图书

此功能的实现与查找类似,在查找的基础上增加了删除,需要用到的知识点为顺序表的删除,删除需要将后续的书前移,并且将最后一个置为 空

public class Deloperation implements IOperation{
    public void work(BookList booklist) {
        System.out.println("删除图书");
        System.out.println("请输入要删除的图书的名字");
        String name=scanner.nextLine();
        int size= booklist.getBookSize();
        for (int i = 0; i < size; i++) {
            Book book= booklist.getpos(i);
            if(name.equals(book.getName())){
                while(i<size-1){
                    Book tmp=booklist.getpos(i+1);
                    booklist.setBooks(i,tmp);
                    i++;
                }
                booklist.setBooks(size,null);
                booklist.setBookSize(size-1);
                System.out.println("删除成功");
                return ;
            }
        }
        System.out.println("没有找到你要删除的图书");
    }
}

 切记将书架的最后一位置为空避免泄露,需要注意到的还是要将bookSize的值进行修改

BorrowOperation借阅图书 

首先利用查找的原理找到我们要寻找的书,找到后修改其状态即可

public class Borrowoperation implements IOperation {
    public void work(BookList booklist) {
        System.out.println("借阅图书");
        System.out.println("请输入你要借的书名");
        String name=scanner.nextLine();
        int size=booklist.getBookSize();
        for (int i = 0; i <size ; i++) {
             Book book=booklist.getpos(i);
            if(name.equals(book.getName())){
                book.setBorrwed(true);
                System.out.println("借阅成功!");
                System.out.println(book);
                return ;
            }
        }
        System.out.println("没有此书");
    }
}

需要注意的是记得将要借阅的书类型修改为true 

DisOperation 打印图书 

按照顺序表原理依次打印即可

public class Displayoperation implements IOperation{
    public void work(BookList booklist) {
        System.out.println("打印图书");
        int size= booklist.getBookSize();
        for (int i = 0; i < size; i++) {
            Book book= booklist.getpos(i);
            System.out.println(book);
        }
    }
}

 RetOperation归还图书

 首先要查找书库是否存在此书,如果存在将其类型修改为false

public class Retoperation implements IOperation{
    public void work(BookList booklist) {
        System.out.println("归还图书");
        System.out.println("请输入你要归还的书名");
        String name=scanner.nextLine();
        int size=booklist.getBookSize();
        for (int i = 0; i <size ; i++) {
            Book book=booklist.getpos(i);
            if(name.equals(book.getName())){
                book.setBorrwed(false);
                System.out.println("归还成功!");
                System.out.println(book);
                return ;
            }
        }
        System.out.println("没有此书");
    }

}

 ExitOperation退出系统

退出系统

public class Exitoperation implements IOperation{
    public void work(BookList booklist) {
        System.out.println("退出系统");
        System.exit(0);
    }
}

 整合

我们需要使用Main来将所有的功能进行串联

public class Main {
    public static User login(){
        System.out.println("请输入你的姓名");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.next();
        System.out.println("请输入你的身份 1--》管理员 0--》普通用户");
        int choice=scanner.nextInt();
        if(choice==1){
            return new AdminUser(name);
        }else if(choice==0) {
            return new NormalUser(name);
        }
        else {
            System.out.println("输入错误,退出系统");
            return null;
        }
    }
    public static void main(String[] args) {
        BookList bookList=new BookList();
        User user=login();//发生了向上转型
        while(true){
        int choice=user.menu();//发生了动态绑定 多态
        //根据choice调用合适的操作
        user.dowork(choice,bookList);
    }
    }
}

 我们来看一下代码写完之后的所有文件

 总结

我们现在实现的还是比较简易的,后期将结合MySQL来进行优化,并且在代码实现中也有很多业务上的处理没有实现,后期将会进行修正,感谢大家的支持

升级 

        我们对本图书馆进行了升级,升级内容如下

 管理员系统:

用户系统:

 

升级后的目录

对于其他的升级都是次要的 ,来重点讲解一下使用类型排序,首先我们分析到对于数据的排序是使用到方法Arrays.sort(),但是对于我们Book的排序呢,首先我深入研究了一下sort排序内部,发现 他是在依靠c来实现排序

以下代码为JDK内置排序原码 

    public static <T> void sort(T[] a, int fromIndex, int toIndex,
                                Comparator<? super T> c) {
        if (c == null) {
            sort(a, fromIndex, toIndex);
        } else {
            rangeCheck(a.length, fromIndex, toIndex);
            if (LegacyMergeSort.userRequested)
                legacyMergeSort(a, fromIndex, toIndex, c);
            else
                TimSort.sort(a, fromIndex, toIndex, c, null, 0, 0);
        }
    }

我们进入Comparator来观察一下

 

我们发现它是一个接口  我来给大家解读一下

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

比较它的两个参数的顺序。当第一个参数小于、等于或大于第二个参数时,返回一个负整数、零或正整数。

我们可以得到 这个接口为一个公共接口比较器<T>,所以我们可以得到,通过类接入接口我们就可以做一个属于自己的比较器!有了以上分析 开搞

class A implements Comparator<Book> {

    @Override
    public int compare(Book o1, Book o2) {
       int a= o1.getType().compareTo(o2.getType());
       return a;
    }
}

搞好这个比较器类型就可以实现一下我们的图书整理功能了(使用书的其他类型也可以实现,可以加入多个比较器)

public class Finishing implements IOperation{

    @Override
    public void work(BookList booklist) {
        A a=new A();
        System.out.println("整理图书(按照类型)");
        Arrays.sort(booklist.books,0,booklist.getBookSize(),a);
        System.out.println("整理完成!");
    }
}

这样便实现了我们的图书整理功能,再接入给管理员用户就可以使用啦

ps:其他功能实现起来非常简单,稍加分析即可写入 就不做讲解了,很多老铁想让我发一下所有源码,满足老铁们

源码 (更新后的)(绿色为包名,紫色为类,橙色为接口)

BookList

Book        

package BoolList;

public class Book {
    private String name;//书名
    private String author;//作者
    private String type;//类型
    private int price;//价格
    private boolean isBorrwed;//状态

    public Book(String name, String author, int price , String type ) {
        this.name = name;
        this.author = author;
        this.type = type;
        this.price = price;
    }

    public String getType() {
        return type;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isBorrwed() {
        return isBorrwed;
    }

    public void setBorrwed(boolean borrwed) {
        isBorrwed = borrwed;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", type='" + type + '\'' +
                ", price=" + price +
                (isBorrwed==true?"已被借出":"未被借出")+
                '}';
    }
}

BookList

package BoolList;

public class BookList {
    public Book[] books=new Book[10];
    private int BookSize=0;

    public BookList() {
        books[0]=new Book("三国演义","罗贯中",17,"小说");
        books[1]=new Book("西游记","吴承恩",47,"小说");
        books[2]=new Book("水浒传","施耐庵",37,"小说");
        BookSize=3;
    }

    public void setBooks(int pos,Book books) {
        this.books[pos]=books;
    }

    public Book getBooks(int pos) {
        return books[pos];
    }

    public int getBookSize() {
        return BookSize;
    }

    public void setBookSize(int bookSize) {
        BookSize = bookSize;
    }

}

Main

Main

package Main;

import BoolList.Book;
import BoolList.BookList;
import User.*;

import java.util.Scanner;


public class Main {

    public static User func(){
        System.out.println("欢迎来到冰激凌图书馆!");
        System.out.println("请问怎么称呼您?");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        System.out.println("请问您的身份为?  1-》管理员 0-》普通用户");
        int usersize=scanner.nextInt();
        if(usersize==1){
            return new Administratoruser(name);
        }else {
            return new Ordinaryuser(name);
        }
    }

    public static void main(String[] args) {
        Needtoknow();
        BookList bookList=new BookList();
        User user=func();
        while(true){
            int count=user.mune();
            user.dowork(count,bookList);
        }
    }
    public static void Needtoknow(){
        System.out.println("**************************");
        System.out.println("        入馆需知(新)");
        System.out.println("本图书馆开放时间为9.00-24.00");
        System.out.println("**************************");

    }
}

Operation

IOperation

import BoolList.BookList;

public interface IOperation {
    public void work(BookList booklist);
}

AddOperation

package Operation;

import BoolList.Book;
import BoolList.BookList;

import java.util.Scanner;

public class AddOperation implements IOperation {
    @Override
    public void work(BookList booklist) {
        System.out.println("新增图书");
        System.out.println("请输入图书的名字");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        System.out.println("请输入图书的作者");
        String author=scanner.nextLine();
        System.out.println("请输入图书的类别");
        String type=scanner.nextLine();
        System.out.println("请输入图书的价格");
        int price=scanner.nextInt();
        Book book=new Book(name,author,price,type);
        int size=booklist.getBookSize();
        booklist.setBooks(size,book);
        booklist.setBookSize(++size);
        System.out.println("新增图书成功");

    }
}

BorrowOperation

package Operation;

import BoolList.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("借阅图书");
        System.out.println("请输入你要借阅的书名  例如:三国演义");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        int siz=booklist.getBookSize();
        for (int i = 0; i < siz; i++) {
            if(name.equals(booklist.getBooks(i).getName())){
                booklist.getBooks(i).setBorrwed(true);
                System.out.println("成功借阅 ,现在图书信息如下:");
                System.out.println(booklist.getBooks(i));
                return ;
            }
        }
        System.out.println("未找到你要查找的书!!!");
    }
}

DelOperation

package Operation;

import BoolList.Book;
import BoolList.BookList;

import java.util.Scanner;

public class DelOperation implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("删除图书");
        System.out.println("请输入你要删除的书名  例如:三国演义");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        for (int i = 0; i < booklist.getBookSize();i++) {
            if(name.equals(booklist.getBooks(i).getName())){
                while(i<booklist.getBookSize()-1){
                    booklist.setBooks(i, booklist.getBooks(i+1));
                    i++;
                }
                booklist.setBooks(i,null);
                booklist.setBookSize(i);
                System.out.println("删除成功!");
                return ;
            }
        }
        System.out.println("未找到你要删除的书!");
    }
}

DisOperation

package Operation;

import BoolList.Book;
import BoolList.BookList;

public class DisOperation implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("打印图书");
        int ret= booklist.getBookSize();
        for (int i = 0; i <ret ; i++) {
            System.out.println(booklist.getBooks(i));
        }
    }
}

ExitOperation

package Operation;

import BoolList.Book;
import BoolList.BookList;

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("退出登录");
        System.exit(0);
    }
}

FindOperation

package Operation;

import BoolList.Book;
import BoolList.BookList;

import java.util.Scanner;

public class FindOperation implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("查询图书");
        System.out.println("请输入你要查找的书名  例如:三国演义");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        for (int i = 0; i <booklist.getBookSize() ; i++) {
            if(name.equals(booklist.getBooks(i).getName())){
                System.out.println("找到了你要查找的书,信息如下:");
                System.out.println(booklist.getBooks(i));
                return ;
            }
        }
        System.out.println("未找到你要查找的书!!!");
    }

}

FindType

package Operation;

import BoolList.BookList;

import java.util.Scanner;

public class FindType implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("查询图书(类型查找)");
        System.out.println("请输入你要查找的类型  例如:小说");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        int flg=0;
        System.out.println("查找信息如下:");
        for (int i = 0; i <booklist.getBookSize() ; i++) {
            if(name.equals(booklist.getBooks(i).getType())){
                flg++;
                System.out.println(booklist.getBooks(i));
            }
        }
        if(flg==0){
            System.out.println("暂无该类型的书!!!");
        }
    }
}

Notice

package Operation;

import BoolList.BookList;

import java.util.Scanner;

public class Notice implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("*****************************");
        System.out.println("图书馆通知栏:");
        System.out.println("热烈祝贺二十大的召开!");
        System.out.println("国家图书馆第十八届文津图书奖正式启动");
        System.out.println("本图书馆开放时间为9.00-24.00");
        System.out.println("*****************************");

    }
}

RetOperation

package Operation;

import BoolList.Book;
import BoolList.BookList;

import java.util.Scanner;

public class RetOperation implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("归还图书");
        System.out.println("请输入你要归还的书名  例如:三国演义");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        for (int i = 0; i <booklist.getBookSize() ; i++) {
            if(name.equals(booklist.getBooks(i).getName())){
                booklist.getBooks(i).setBorrwed(false);
                System.out.println("归还成功!信息如下:");
                System.out.println(booklist.getBooks(i));
                return ;
            }
        }
        System.out.println("本图书馆没有此书,归还失败");
    }
}

Finishing

package Operation;

import BoolList.Book;
import BoolList.BookList;

import java.util.Arrays;
import java.util.Comparator;

class A implements Comparator<Book> {

    @Override
    public int compare(Book o1, Book o2) {
       int a= o1.getType().compareTo(o2.getType());
       return a;
    }
}
public class Finishing implements IOperation{

    @Override
    public void work(BookList booklist) {
        A a=new A();
        System.out.println("整理图书(按照类型)");
        Arrays.sort(booklist.books,0,booklist.getBookSize(),a);
        System.out.println("整理完成!");
    }
}

user

User

package User;


import BoolList.Book;
import BoolList.BookList;
import Operation.IOperation;

public abstract class User {
    protected String name;
    protected IOperation[] iOperations;
    public User(String name) {
        this.name = name;
    }

    public abstract int mune();

    public void dowork(int pos, BookList book){
        iOperations[pos].work(book);
    }
}

Administratoruser

package User;




import Operation.*;

import java.util.Scanner;

public class Administratoruser extends User{

    public Administratoruser(String name) {
        super(name);
        this.iOperations= new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new FindType(),
                new AddOperation(),
                new DelOperation(),
                new DisOperation(),
                new Finishing()
        };
    }



    @Override
    public int mune() {
        System.out.println("hello 尊敬的管理员:"+this.name+" 欢迎来到冰激凌图书馆");
        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.退出登录");
        System.out.println("======================");
        System.out.println("请输入您的操作");
        Scanner scanner=new Scanner(System.in);
        int input=scanner.nextInt();
        return input;
    }
}

Ordinaryuser

package User;

import Operation.*;

import java.util.Scanner;

public class Ordinaryuser extends User {

        public Ordinaryuser(String name){
            super(name);
            this.iOperations=new IOperation[]{
                    new ExitOperation(),
                    new FindType(),
                    new BorrowOperation(),
                    new RetOperation(),
                    new Notice(),
                    new DisOperation()
            };
        }

    @Override
    public int mune() {
        System.out.println("=======用户菜单=======");
        System.out.println("hello 尊敬用户:"+this.name+" 欢迎来到冰激凌图书馆");
        System.out.println("1.查找图书(类型)(新)");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("4.查看通知(新)");
        System.out.println("5.查看书架(新)");
        System.out.println("0.退出登录");
        System.out.println("====================");
        System.out.println("请输入您的操作:");
        Scanner scanner=new Scanner(System.in);
        return scanner.nextInt();
    }


}

好了 !再次感谢各位支持

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

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

相关文章

Spring Boot 3.0.0 GA版本正式发布,期待已久的SpringBoot3发布了

期待已久的SpringBoot3.0.0发布了发布说明新版本的亮点分析1. Java 17 baseline 和 Java 19 支持2. 支持 [GraalVM native images](https://docs.spring.io/spring-boot/docs/3.0.0/reference/html/native-image.html#native-image)&#xff0c;取代实验性的 Spring Native 项目…

linux篇【11】:linux下的线程<中序>

目录 一.线程互斥 1.三个概念 2.互斥 &#xff08;1&#xff09;在执行语句的任何地方&#xff0c;线程可能被切换走 &#xff08;3&#xff09;抢票场景中的问题 &#xff08;4&#xff09;解决方案 3.加锁 &#xff08;1&#xff09;加锁介绍 &#xff08;2&#xf…

STC 51单片机39——汇编语言 按钮流水灯

每按一下按钮&#xff0c;灯就移动一个 ORG 0000H LJMP MAIN ORG 0003H ;中断矢量 LJMP INT MAIN:SETB EA ;开总中断允许“开关” SETB EX0 ;开分中断允许“开关” SETB PX0 ;高优先级 SETB IT0 ;边沿触发 MOV A,#0FEH ;给…

Linux系统编程(二)——Linux系统IO函数

在第一篇的时候写到了系统环境的搭建以及各种调试的方法&#xff0c;接下来讲述关于系统函数的使用。 目录 0x01 标准C库IO函数和Linux系统IO函数对比 一、标准C库IO函数操作流程 二、标准C库IO和Linux系统IO的关系 三、虚拟地址空间 0x02 LinuxIO函数实例 一、open()、…

dubbo以xml方式操作和新版dubbo-admin安装

文章目录1 dubbo xml配置1.1 提供者1.1.1 提供者接口1.1.2 提供者实现类1.1.2.1 项目结构图示1.1.2.2 pom.xml1.1.2.3 实现类接口1.1.2.4 配置文件1.1.2.4.1 xml配置1.1.2.4.2 结合注解方式1.1.2.5 启动类1.1.2.5.1 直接读取配置文件1.1.2.5.2 Main.main启动1.1.3 其他方式配置…

最新持续更新Crack:LightningChart 行业使用大全

LightningChart .NET 和 JavaScript 解决方案旨在通过彻底的图表优化、最小的延迟和流畅的呈现来满足行业最苛刻的数据可视化要求。LightningChart .NET 和 JavaScript 直观的 API 使用户能够使用适用于任何桌面、移动和平板设备的鼠标和触摸屏交互功能轻松操作最复杂的图表。 …

JSP JAVA javaweb企业仓库库存管理系统(仓库进销存管理系统ssm库存管理系统仓库管理系统)

JSP 企业仓库库存管理系统&#xff08;仓库进销存管理系统ssm库存管理系统仓库管理系统&#xff09;

【附源码】计算机毕业设计JAVA疫情下的进出口食品安全信息管理系统

【附源码】计算机毕业设计JAVA疫情下的进出口食品安全信息管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

Django Cookie 与 Session 对比

文章目录原理比较语法比较Cookie 示例创建 Cookie更新 Cookie删除 CookieSession 示例创建 session查询 session删除一组键值对删除 session参考文档本文通过示例演示 Django 中如何创建、查询、删除 Cookie 与 Session。 原理比较 在Web开发中&#xff0c;使用 session 来完成…

无线监控摄像头使用什么样的物联网卡?

无线监控摄像头使用什么样的物联网卡&#xff1f; 随着安全行业的发展和进步&#xff0c;无线监控摄像头的种类越来越多&#xff0c;但主要的网络形式大致可以分为两种形式&#xff0c;一种是连接WiFi使用远程监控&#xff0c;另一种是插入物联网卡的远程监控。随着物联网的快…

初阶数据结构学习记录——열 二叉树(3)链式

链式二叉树是由指针形成的二叉树&#xff0c;之前写的二叉树是由数组组成的&#xff0c;链式由链表来做。链式二叉树每个节点有两个指针&#xff0c;指向两边。以往二叉树&#xff0c;栈&#xff0c;队列等等都需要增删查改&#xff0c;但链式二叉树则不是这样&#xff0c;是因…

深入理解java虚拟机:虚拟机字节码执行引擎(1)

文章目录1. 概述2. 运行时栈帧结构2.1 局部变量表2.2 操作数栈2.3 动态连接2.4 方法返回地址2.5 附加信息1. 概述 代码编译的结果是从 本地机器码 转变为 字节码 &#xff0c;是存储格式发展的一小步&#xff0c;却是编程语言发展的一大步。 执行引擎 是Java虚拟机最核心的组…

pmp是什么意思啊?

PMP是一个证书&#xff0c;项目管理类的专业认证考试&#xff0c;从国外引进大陆已经很多年了&#xff0c;反响也不错。 以前&#xff0c;大陆每年报考PMP的人很少&#xff0c;那时的思维观念&#xff0c;更多的认为有了这个PMP证书&#xff0c;代表着你很上进&#xff0c;学习…

Terraform 初始化慢~配置本地离线源

解决Terraform初始化慢~配置本地离线源 - 知乎 这里不再介绍Terraform是啥了&#xff0c;可以参考最近上线的课程。直奔主题&#xff0c;配置一个离线的源。需要手动或者terraform init一次下载&#xff0c; 然后缓存。后续直接使用缓存。 本次实践使用的是Linux/Mac 系统&am…

【App自动化测试】(十二)App异常弹框处理

目录1. app弹框异常处理——递归方式1.1 黑名单弹框异常处理逻辑1.2 实现代码1.3 方法缺点2. app弹框异常处理——装饰器版本2.1 装饰器的优势2.2 实现代码前言&#xff1a; 本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家&#xff0c;希望有志同道合的小伙伴…

计算机毕业设计之java+ssm交通信息网上查询系统

项目介绍 随着交通交通管理需求和在线交通管理渗透率的提升&#xff0c;中国交通管理在线市场将释放巨大潜力&#xff0c;交通管理系统的建设和发展成为业界广泛关注的重点&#xff0c;本文将对此进行分析&#xff0c;以期为我国交通管理电子商务的发展提供参考。交通管理业对…

石化能源行业工业互联网智能工厂解决方案

随着时代的发展&#xff0c;中国的工业企业逐渐进入了一个“新常态”&#xff1a;生产效率提升&#xff0c;非计划停运或检修造成的生产损失更为昂贵&#xff1b;高盈利的要求&#xff0c;需要更加关注能源使用效率&#xff1b;法律法规对于人员安全及环保合规要求更为严格&…

基于ffmpeg开发的多音频文件音量均衡程序

前言 audio_balance ✨ 基于ffmpeg开发的多音频文件音量均衡程序 ✨ 项目地址 GitHub&#xff1a;https://github.com/Ikaros-521/audio_balance gitee&#xff1a;https://gitee.com/ikaros-521/audio_balance 使用说明 Python&#xff1a;3.9 程序依赖 ffmpeg实现。请先安…

Centernet 生成高斯热图

写在前面的话 最近学校阳了&#xff0c;宿舍给封了&#xff0c;宿舍网络不好远程跑不了实验&#xff0c;随缘写一下对CenterNet源码的一个解读&#xff0c;之前写论文的那段时间留下来的工作&#xff0c;respect&#xff01; 这个文章主要是对CenterNet中生成高斯核的部分代码…

皕杰报表之语义层

1 语义层定义 语义层——是处于数据源与报表之间的一个概念&#xff0c;是用户和数据库之间的一个代码翻译层&#xff0c;通俗的讲是将数据库中的比较凌乱、复杂的数据对象&#xff08;例如&#xff1a;存储在table中的各个字段的记录&#xff09;按预先定义好的规则&#xff…