用Java实现简单的图书管理系统(Java系列7)

news2025/1/11 11:13:09

目录

前言:

1.基础框架的搭建

1.1图书

1.1.1书

1.1.2书架

1.2用户

1.2.1抽象类

1.2.2普通用户

 1.2.3管理员

1.3操作

1.3.1新增图书

1.3.2借阅图书

1.3.3删除图书

1.3.4退出图书

1.3.5查找图书

1.3.6归还图书

1.3.7显示图书

2.具体内容的实现

2.1Main:主代码展示

2.3user:使用者代码展示

3.结果展示

3.1管理员用户展示

3.2普通用户展示

结束语:


前言:

之前我们学习了Java的一些基础知识,我们从数据类型-》变量-》运算符-》循环选择-》方法-》数组-》类和对象-》封装-》继承-》多态-》抽象类-》接口,那么下面我们就运用这些知识来实现一个简单版的图书管理系统。

1.基础框架的搭建

1.1图书

图书我们主要分为两大模块书和书架。

1.1.1书

我们要实现的目的是下面的这种:

 

主要要有五个属性:name、author、price、type、isBorrowed。

具体代码如下所示:

package book;
//书
public class Book {
    private String name;//书名
    private String author;//作者
    private int price;//价格
    private String type;//书的类型
    private boolean isBorrowed;//是否被借出

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

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

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

 

1.1.2书架

在书架上我们需要先给书架上面默认放上几本书:

具体代码如下所示:

package book;
//书架
public class BookList {
    private static final int DEFAULT_SIZE = 10;
    private Book[] books = new Book[DEFAULT_SIZE];//开辟书架的空间。
    private int usedSize;//记录当前books数组中有多少本书
    public BookList() {
        books[0] = new Book("三国演义","罗贯中",89,"小说");
        books[1] = new Book("西游记","吴承恩",78,"小说");
        books[2] = new Book("红楼梦","曹雪芹",49,"小说");
        this.usedSize = 3;//记录当前的数的数目为3
    }

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

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

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }
}

1.2用户

我们主要分为普通用户和管理员。

下面我们具体实现一下两类。

1.2.1抽象类

我们在设计的时候注意到管理员和普通用户有一些属性是一样的所以我们可以对其共性进行抽取。

此时我们还需要实现一个操作的接口。

代码如下所示:

package opear;

import book.BookList;

public interface IOperation {
    void work(BookList bookList);//操作是对书架上的书进行操作的
}

代码如下所示:

package user;

import opear.IOperation;

public class User {
    protected String name;
    protected IOperation[] iOperations;//管理员和普通用户都会有一些具体的操作方法那么此时我们就可以实现成一个接口

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

1.2.2普通用户

对于普通用户来说主要实现四个功能就行:查找图书、借阅图书、归还图书、退出系统。

具体代码如下所示:

package user;

import opear.*;

import java.util.Scanner;

public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        //管理员所对应的操作
        this.iOperations = new IOperation[] {
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
        };
    }
    public int menu() {
        System.out.println("***************************");
        System.out.println("hello" + name + " 欢迎来到简易版图书管理系统!");
        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;
    }

}

 1.2.3管理员

对于管理员来说主要实现五个功能就行:查找图书、新增图书、删除图书、显示图书、退出系统。 

具体代码如下所示:

package user;

import opear.*;

import java.util.Scanner;

public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        //管理员所对应的操作
        this.iOperations = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation(),
        };
    }
    public int menu() {
        System.out.println("***************************");
        System.out.println("hello" + name + " 欢迎来到简易版图书管理系统!");
        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;
    }

}

1.3操作

对于操作我们基于上面管理员和普通用户的操作可以得治我们主要实现一下的操作就可以啦!下面我们来分别具体实现一下。

1.3.1新增图书

具体代码如下所示:

package opear;

import book.Book;
import book.BookList;

import java.util.Scanner;

//新增图书
public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        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("输入类型:");
        String type = scanner.nextLine();
        System.out.println("输入价格:");
        int price = scanner.nextInt();
        Book book = new Book(name,author,price,type);
        //记录当前书架上书的数目
        int currentSize = bookList.getUsedSize();
        //查询这本书是否存在
        for (int i = 0; i < currentSize; i++) {
            Book tmp = bookList.getBooks(i);
            if(tmp.getName().equals(name)) {
                System.out.println("已经存在这本书了,不能再放入了!");
                return;
            }
        }
        //修改书架上的数目
        bookList.setBook(book);
        bookList.setUsedSize(currentSize - 1);
    }
}

1.3.2借阅图书

具体代码如下所示:

package opear;

import book.Book;
import book.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 currentSize = bookList.getUsedSize();//记录当前的图书数目
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name) && !book.isBorrowed()) {
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                return;
            }
        }
    }
}

1.3.3删除图书

具体代码如下所示:

package opear;

import book.Book;
import book.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();
        int currentSize = bookList.getUsedSize();
        int index = -1;//要删除图书的下标
        //遍历一遍数组找到要删除的元素
        for (int i = 0; i < currentSize; i++) {
            Book tmp = bookList.getBooks(i);
            if (tmp.getName().equals(name)) {
                index = i;
                break;
            }
        }
        //挪动数据
        for (int j = index; j < currentSize - 1; j++) {
            Book book = bookList.getBooks(j + 1);
            bookList.setBook(j,book);
        }
        //修改size
        bookList.setUsedSize(currentSize - 1);
        //因为删除的是对象,所以把最后一个位置置为null
        bookList.setBook(currentSize - 1,null);
        System.out.println("删除成功!");
    }
}

1.3.4退出图书

具体代码如下所示:

package opear;

import book.BookList;

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统!");
        System.exit(0);
    }
}

1.3.5查找图书

具体代码如下所示:

package opear;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书!");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要查找的图书:");
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);
            if (book.getName().equals(name)) {
                System.out.println("找到这本书了!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("书架上没有这本书!");
    }
}

1.3.6归还图书

具体代码如下所示:

package opear;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation 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 currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);
            if (book.getName().equals(name) && book.isBorrowed()) {
                book.setBorrowed(false);
                System.out.println("归还成功!");
                return;
            }
        }
    }
}

1.3.7显示图书

具体代码如下所示:

package opear;

import book.Book;
import book.BookList;

public class ShowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示所有图书!");
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);
            System.out.println(book);
        }
    }
}

2.具体内容的实现

2.1Main:主代码展示

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import javax.jws.soap.SOAPBinding;
import java.util.Scanner;

public class Main {
    public static User login() {
        System.out.println("请输入你的姓名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入你的身份:1—>管理员  0->普通用户");
        int choice = scanner.nextInt();
        if (choice == 1) {
            return new AdminUser(name);
        } else {
            return new NormalUser(name);
        }
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
        //int choice = user.menu();
        //根据choice和user来确定我们到底调用的是哪一个对象进行操作的。
        while (true) {
            int choice = user.menu();
            //根据choice和user来确定我们到底调用对象哪一个操作。
            user.doWork(choice,bookList);
        }
    }
}

2.2oper:操作代码展示。

①新增图书。

package opear;

import book.Book;
import book.BookList;

import java.util.Scanner;

//新增图书
public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        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("输入类型:");
        String type = scanner.nextLine();
        System.out.println("输入价格:");
        int price = scanner.nextInt();
        Book book = new Book(name,author,price,type);
        //记录当前书架上书的数目
        int currentSize = bookList.getUsedSize();
        //查询这本书是否存在
        for (int i = 0; i < currentSize; i++) {
            Book tmp = bookList.getBooks(i);
            if(tmp.getName().equals(name)) {
                System.out.println("已经存在这本书了,不能再放入了!");
                return;
            }
        }
        //修改书架上的数目
        bookList.setBook(book);
        bookList.setUsedSize(currentSize + 1);
    }
}

 ②借阅图书。

package opear;

import book.Book;
import book.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 currentSize = bookList.getUsedSize();//记录当前的图书数目
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name) && !book.isBorrowed()) {
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                return;
            }
        }
    }
}

package opear;

import book.Book;
import book.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();
        int currentSize = bookList.getUsedSize();
        int index = -1;//要删除图书的下标
        //遍历一遍数组找到要删除的元素
        for (int i = 0; i < currentSize; i++) {
            Book tmp = bookList.getBooks(i);
            if (tmp.getName().equals(name)) {
                index = i;
                break;
            }
        }
        //挪动数据
        for (int j = index; j < currentSize - 1; j++) {
            Book book = bookList.getBooks(j + 1);
            bookList.setBook(j,book);
        }
        //修改size
        bookList.setUsedSize(currentSize - 1);
        //因为删除的是对象,所以把最后一个位置置为null
        bookList.setBook(currentSize - 1,null);
        System.out.println("删除成功!");
    }
}

④退出系统。

package opear;

import book.BookList;

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统!");
        System.exit(0);
    }
}

 ⑤查找图书。

package opear;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书!");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要查找的图书:");
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);
            if (book.getName().equals(name)) {
                System.out.println("找到这本书了!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("书架上没有这本书!");
    }
}

 ⑥归还图书。

package opear;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation 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 currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);
            if (book.getName().equals(name) && book.isBorrowed()) {
                book.setBorrowed(false);
                System.out.println("归还成功!");
                return;
            }
        }
    }
}

⑦显示图书。

package opear;

import book.Book;
import book.BookList;

public class ShowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示所有图书!");
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);
            System.out.println(book);
        }
    }
}

 ⑧接口代码。

package opear;

import book.BookList;

public interface IOperation {
    void work(BookList bookList);//操作是对书架上的书进行操作的
}

2.3user:使用者代码展示

①管理员代码。

package user;

import opear.*;

import java.util.Scanner;

public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        //管理员所对应的操作
        this.iOperations = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation(),
        };
    }
    public int menu() {
        System.out.println("***************************");
        System.out.println("hello" + name + " 欢迎来到简易版图书管理系统!");
        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;
    }

}

②普通用户代码。

package user;

import opear.*;

import java.util.Scanner;

public class NormalUser extends User{

    public NormalUser(String name) {
        super(name);
        this.iOperations = new IOperation[] {
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
        };
    }
    public int menu() {
        System.out.println("***************************");
        System.out.println("hello" + name + " 欢迎来到简易版图书管理系统!");
        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;
    }
}

③用户抽象类代码。

package user;

import book.BookList;
import opear.IOperation;

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) {
        this.iOperations[choice].work(bookList);
    }
}

3.结果展示

3.1管理员用户展示

3.2普通用户展示

 

结束语:

好啦这次小编主要基于之前学习的一些Java基础语法知识带着大家一起实现了一个简易版的图书代码,这次小编就给大家分享到这里啦!希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!) 

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

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

相关文章

<flutter>跨平台开发新手入坑指南 dart dio pubspec.yaml json_annotation 打包 小坑指南

1.资源文件和依赖三方包&#xff08;pubspec.yaml&#xff09;&#xff1a; pubspec.yaml文件可以说是和安卓的gradle文件差不多&#xff0c;它用来描述版本号、sdk、依赖等的。 在资源导入方面同安卓不一样的是&#xff0c;flutter需要在pubspec.yaml中声名&#xff0c;不然…

【PCB专题】Allegro元件库路径设置方法

正常Layout拉线前,需要将原理图导出的网表导入到Allegro里,Allegro就会自动将元件导入。如果库路径没有设置或都软件找不到器件,将会非常的卡顿,并且报Completed with warnings/errors。如下图所示: 在弹出的错误报告View of file:netrev.lst中会提示很多器件找不到封装。…

js知识点

js有预解析阶段&#xff0c;变量声明提升只提升定义&#xff0c;不提升值 console.log(a);//undefined var a10; 基本数据类型 Number、String、Boolean、Undefined和Null 复杂数据类型 Object、Array、Function、RegExp、Date、Map、Set等 使用typeof运算符可以检测值或…

刷爆力扣之验证回文串 II

刷爆力扣之验证回文串 II HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&#xff…

第六章 作业【数据库原理】

第六章 作业【数据库原理】前言推荐第六章 作业第6章第1题&#xff08;简答题&#xff09;第6章第2题&#xff08;简答题&#xff09;第6章第3题&#xff08;设计题&#xff09;第6章第4题&#xff08;设计题&#xff09;最后前言 2022-12-27 16:05:55 以下内容源自数据库原理…

最大连续子序列的和问题(算法)

问题描述 给定一个有n&#xff08;n≥1&#xff09;个整数的序列&#xff0c;要求求出其中最大连续子序列的和。 蛮力法 暴力枚举 /*** 时间复杂度&#xff1a;O(n^3)* param arr 序列[数组]* param n 数组大小* return int */ int maxSubSum1(int arr[], int n) {int thi…

美团餐饮SaaS基于StarRocks构建商家数据中台的探索

作者&#xff1a;何启航&#xff0c;美团餐饮SaaS数据专家&#xff08;文章整理自作者在 StarRocks Summit Asia 2022 的分享&#xff09; 随着社会经济的发展&#xff0c;餐饮连锁商家越来越大&#xff0c;“万店时代”来临。对于美团餐饮 SaaS 来说&#xff0c;传统的 OLTP …

LeetCode 324 周赛

2506. 统计相似字符串对的数目 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成&#xff0c;则认为这两个字符串 相似 。 例如&#xff0c;"abca" 和 "cba" 相似&#xff0c;因为它们都由字符 a、b、c 组成。然而&#xff…

HQChart实战教程54-renko砖形K线图

HQChart实战教程54-renko砖形K线图 Renko砖形图效果图使用HQChart创建Renko初始化创建Renko配置参数说明ClassNameOption动态修改Renko配置参数完成demo代码Renko砖形图 Renko砖形图是仅测量价格变动的图表类型。 “ renko”一词源自日语单词“ renga”,意为“砖”。并非巧合…

day30【代码随想录】分割回文串、复原IP地址、子集

文章目录前言一、分割回文串&#xff08;力扣131&#xff09;二、复原IP地址&#xff08;力扣93&#xff09;三、子集&#xff08;力扣78&#xff09;总结前言 1、分割回文串 2、复原IP地址 3、子集 一、分割回文串&#xff08;力扣131&#xff09; 给你一个字符串 s&#xf…

前端开发:关于鉴权的使用总结

前言 前端开发过程中&#xff0c;关于鉴权&#xff08;权限的控制&#xff09;是非常重要的内容&#xff0c;尤其是前端和后端之间数据传递时候的请求鉴权校验。前端鉴权的本质就是控制前端视图层的显示和前端向后台所发送的请求&#xff0c;但是只有前端鉴权&#xff0c;没有后…

MyGDI+

文章目录[toc]界面设计Form窗口MenuStrip画笔其他选项界面美化整体框架设计DataStructureCPointPolylinePolygonSingletonGraphicFunctionForm事件处理成员变量事件处理总结界面设计 Form窗口 首先添加MenuStrip控件&#xff0c;随后在Form窗口属性界面根据个人爱好修改其图标…

请收下这份数字IC面试超强攻略!(内附大厂面试题目)

2022年马上就要结束了&#xff0c;想必今年有很多同学也已经感受到IC行业的门槛在不断提升&#xff0c;这一点尤其在面试的过程中感受明显。 前两年的时候&#xff0c;面试官有可能问一些比较简单的问题就能通过&#xff0c;今年可就没那么简单了&#xff0c;必须提前做好相关…

SQL的模型类

在Qt的数据库中&#xff0c;除了QSqlQuery访问数据库&#xff0c;还可以使用QSqlQueryModel&#xff0c;QSqlTableModel和QSqlRelationalTableModel&#xff0c;这三个类是从QAbstractTableModel派生下来的&#xff0c;可以很直观的查看数据库的数据 QSqlQueryModel 提供一个…

Educational Codeforces Round 98 (Rated for Div. 2) D. Radio Towers

翻译&#xff1a; 坐标线上有&#x1d45b;2个城镇&#xff0c;编号从0到&#x1d45b;1。&#x1d456;-th镇位于&#x1d456;点。 你在城镇1、2、…、&#x1d45b;以12的概率建造一个无线电塔(这些事件是独立的)。之后&#xff0c;您希望将每个塔上的信号功率设置为从1到…

C/C++开发工具CLion v2022.3全新发布——支持C++ 20

CLion是一款专为开发C及C所设计的跨平台IDE。它是以IntelliJ为基础设计的&#xff0c;包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OS X和Windows上来开发C/C&#xff0c;同时它还使用智能编辑器来提高代码质量、自动代码重构并且深度整合CM…

C++ 当基类为抽象类时如何析构派生类

前言&#xff1a;本教程不涉及基础&#xff0c;稍微了解一下Cvirtual多态的知识就可以了&#xff0c;不了解的话可以先去看一下菜鸟教程&#xff0c;也可以看我往期的文章《virtual》、《虚函数表》 多态分为静态多态和动态多态 静态多态&#xff1a;也成为编译时的多态&#…

使用Word模板导出Word后,表格后面产生空白页

目录 背景 解决 参考 背景 项目中有导出Word功能,其实现逻辑是先整理一个Word文档,里面使用占位符;代码读取Word文档,然后替换占位符。 但出现这样的问题:填充某个表格后,表格后面出现了空白页。 解决 调查发现是段落标记导致的,如何显示段落标记?File -> Op…

生成对抗:DCGAN

DCGAN简介 Generative Adversarial Networks(GANs),GANs有两个模型组成,一个是生成器,用于训练生成假的数据,另一个是判别器,用于预测生成器的输出结果。其中生成器提供训练数据给判别器&#xff0c;提高判别器的准确率。判别器提供生成样本的预测结果&#xff0c;给生成器提供…

【Java系列】小小练习——带你回顾Java基本运算符

返回主篇章         &#x1f447; 【Java】才疏学浅小石Java问道之路 Java小练习1. 练习一1.1 题目1.2 题解(附解析)2. 练习二2.1 题目2.2 题解(附解析)3. 练习三3.1 题目3.2 题解(附解析)小结1. 练习一 1.1 题目 一个三位数&#xff0c;将其拆分为个位、十位、百位后…