Java——简易图书管理系统

news2024/11/25 7:33:30

本文使用 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类型在不赋值的情况下默认人为false
    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    @Override
    public 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类型在不赋值的情况下默认人为false
    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    @Override
    public 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);
    }

    @Override
  public 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);
    }

    @Override
  public 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{
    @Override
    public void work() {
        System.out.println("添加图书");
    }
}
public class BorrowedBehavior implements Ibehavior{
    @Override
    public void work() {
        System.out.println("借阅图书");
    }
}
public class ExitBehavior implements Ibehavior{
    @Override
    public void work() {
        System.out.println("退出系统!");
    }
}
public class RemoveBehavior implements Ibehavior{
    @Override
    public void work() {
        System.out.println("归还图书!");
    }
}
public class ReturnBehavior implements Ibehavior{
    @Override
    public void work() {
        System.out.println("归还图书");
    }
}
public class ShowBehavior implements Ibehavior{
    @Override
    public void work() {
        System.out.println("展示未借阅的图书!");
    }
}

public class FindBehavior implements Behavior{
    @Override
    public 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()};

    @Override
    public 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()};
    @Override
    public 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()};

    @Override
    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("5.增加图书");
        System.out.println("6.删除图书");
        System.out.println("0.退出系统!");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
    @Override
    public 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()};
    @Override
    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.退出系统!");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
    @Override
    public void DoBehavior(int choice){
        this.behaviors[choice].work();
    }
}

对各项操作进行实现

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

public class ExitBehavior implements Behavior{
    @Override
    public 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类型在不赋值的情况下默认人为false
    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    @Override
    public 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{
    @Override
    public 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类型在不赋值的情况下默认人为false
    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    @Override
    public 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{
    @Override
    public 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类型在不赋值的情况下默认人为false
    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    @Override
    public 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 {
    @Override
    public 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 {
    @Override
    public 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{
    @Override
    public 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 {
    @Override
    public 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.coloradmin.cn/o/1694253.html

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

相关文章

BUUCTF靶场[Web] [极客大挑战 2019]Havefun1、[HCTF 2018]WarmUp1、[ACTF2020 新生赛]Include

[web][极客大挑战 2019]Havefun1 考点&#xff1a;前端、GET传参 点开网址&#xff0c;发现是这个界面 点击界面没有回显&#xff0c;老规矩查看源代码&#xff0c;看到以下代码 代码主要意思为&#xff1a; 用get传参&#xff0c;将所传的参数给cat&#xff0c;如果catdog…

c++中的命名空间与缺省参数

一、命名空间 1、概念&#xff1a;在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存 在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c; 以避免命名冲突或…

【介绍下Pwn,什么是Pwn?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

汽车R155法规中,汽车获取到的VTA证书,E后面的数字表示什么意思?

标签&#xff1a; 汽车R155法规中&#xff0c;汽车获取到的VTA证书&#xff0c;E后面的数字表示什么意思&#xff1f;&#xff1b; 汽车&#xff1b;VTA认证; 有些厂商汽车拿到的VTA证书上面写着E9&#xff0c; 有些厂商汽车拿到的VTA证书上面写着E5&#xff0c;E9与E5有什么差…

华为机考入门python3--(29)牛客29-字符串加解密

分类&#xff1a;字符变换 知识点&#xff1a; 字符是字母 char.isalpha() 字符是小写字母 char.islower() 字符是数字 char.isdigit() b变C chr((ord(b) - ord(a) 1) % 26 ord(A)) 题目来自【牛客】 # 加密 def encrypt_string(s):result ""for ch…

OWASP top10--SQL注入(一)

SQL注入式攻击技术&#xff0c;一般针对基于Web平台的应用程序.造成SQL注入攻击漏洞的原因&#xff0c;是由于程序员在编写Web程序时&#xff0c;没有对浏览器端提交的参数进行严格的过滤和判断。用户可以修改构造参数&#xff0c;提交SQL查询语句&#xff0c;并传递至服务器端…

【408精华知识】主存相关解题套路大揭秘!

讲完了Cache&#xff0c;再来讲讲主存是怎么考察的&#xff0c;我始终认为&#xff0c;一图胜千言&#xff0c;所以对于很多部件&#xff0c;我都是通过画图进行形象的记忆&#xff0c;那么接下来我们对主存也画个图&#xff0c;然后再来详细解读其考察套路~ 文章目录 零、主存…

Linux驱动学习之模块化,参数传递,符号导出

1.模块化 1.1.模块化的基本概念&#xff1a; 模块化是指将特定的功能或组件独立出来&#xff0c;以便于开发、测试和维护。在Linux设备驱动中&#xff0c;模块化允许将驱动程序作为内核模块动态加载到系统中&#xff0c;从而提高了系统的灵活性和可扩展性。 1.2.Linux内核模…

Kata Containers零基础学习从零到一

文章目录 docker和Kata Containers的区别Docker容器共享宿主机内核每个容器实例运行在轻量级虚拟机&#xff08;MicroVM&#xff09;总结 通俗例子Kata Containers架构实际Kata Containers架构图解容器技术栈总结 agent和shim家长&#xff08;shim进程&#xff09;的角色保姆&a…

OpenHarmony 实战开发——一文总结ACE代码框架

一、前言 ACE_Engine框架是OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;的UI开发框架&#xff0c;为开发者提供在进行应用UI开发时所必需的各种组件&#xff0c;以及定义这些组件的属性、样式、事件及方法&#xff0c;通过这些组件可以方便进行OpenHarmo…

java基础-JVM日志、参数、内存结构、垃圾回收器

一、基础基础 1.1 数据类型 Java的数据类型分为原始数据类型和引用数据类型。 原始数据类型又分为数字型和布尔型。 数字型又有byte、short、int、long、char、float、double。注意&#xff0c;在这里char被定义为整数型&#xff0c;并且在规范中明确定义&#xff1a;byte、…

primeflex样式库笔记 Display相关的案例

回顾 宽度设置的基本总结 w-full&#xff1a;表示widtdh&#xff1a;100%&#xff1b;占满父容器的宽度。 w-screen&#xff1a;表示占满整个屏幕的宽度。 w-1到w-12&#xff0c;是按百分比划分宽度&#xff0c;数字越大&#xff0c;占据的比例就越大。 w-1rem到w-30rem&…

推特热帖:大语言模型自荐能够替代的20种人类工作!快来看你是否需要转行!

最近推特上有一个例子引起了广泛的讨论&#xff0c;事情的起因是这样的&#xff1a;网友让 GPT-4o 预测一下自己未来将会替代人类哪些工作&#xff1f; 这听起来很有趣&#xff01;GPT-4o会给出什么样的预测呢&#xff1f; 3.5研究测试&#xff1a;hujiaoai.cn 4研究测试&…

动物合并消除休闲游戏源码 Animal Merge 益智游戏

一款动物合并消除休闲游戏源码&#xff0c;Animal Merge是一款引人入胜的益智游戏&#xff0c;玩家的任务是合并方块&#xff0c;创造出可爱的动物&#xff0c;这些动物的体型会逐渐变大。游戏玩法包括将方块放到网格上&#xff0c;并战略性地将它们合并以形成更大的动物形状。…

数据库--数据库基础(一)

目录 第一章 绪论 一.数据库的基本概念 1. 数据库的4个基本概念 2、数据库系统的特点 二.数据库和文件 三.数据模型 1.概念模型 2.逻辑模型(物理模型) 2.1关系模型 四.数据库系统的三级模式结构&#xff1a; 五数据库的二级映像功能与数据独立性 第二章 关系数据库…

ffpmeg windows WSl 编译so

1.NDK 环境变量配置 2.git clone ffpmeg 3.创建脚本&#xff08;需先下载gcc编译器&#xff09; 64位脚本如下 #!/bin/bashexport NDK/home/test/ndk20 #这里配置先你的 NDK 路径 TOOLCHAIN$NDK/toolchains/llvm/prebuilt/linux-x86_64function build_android {./configure \ …

javas-core VS java-object-diff

对照工具选择 javas-core 和 java-object-diff ,对比demo https://github.com/kofgame/objectdiff-vs-javers&#xff0c;都为同源对比&#xff0c;都支持嵌套对象。 使用JMH测试方法进行性能测试&#xff0c;使用题库的QuestionResponseVO对象来进行对照对比&#xff0c;进行…

若依nodejs版本过高问题解决方案

由于nodejs版本过高,可能会导致vue-cli项目运行报错。 目录 方法1:每次启动项目前,输入配置命令 方法2:修改package.js

aws msk加密方式和问控制连接方式

msk加密方式 msk提供了两种加密方式 静态加密传输中加密 创建集群时可以指定加密方式&#xff0c;参数如下 aws kafka create-cluster --cluster-name "ExampleClusterName" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file:/…

结构体(位段)内存分配

结构体由多个数据类型的成员组成。那编译器分配的内存是不是所有成员的字节数总和呢&#xff1f; 首先&#xff0c;stu的内存大小并不为29个字节&#xff0c;即证明结构体内存不是所有成员的字节数和。   其次&#xff0c;stu成员中sex的内存位置不在21&#xff0c;即可推测…