设计并实现一个多线程图书馆管理系统,涉及数据库操作

没有实现全部功能,希望路过的大佬,可以实现全部功能,在评论区聊聊

在这里插入图片描述
创建数据库library-demo

CREATE DATABASE `library-demo`

创建图书表book

CREATE TABLE `book` (
  `bookId` int(11) NOT NULL AUTO_INCREMENT COMMENT '图书ID',
  `bookName` varchar(15) DEFAULT NULL COMMENT '书名',
  `author` varchar(10) DEFAULT NULL COMMENT '作者',
  `publish` varchar(100) DEFAULT NULL COMMENT '出版社',
  `isbn` varchar(30) DEFAULT NULL COMMENT 'ISBN',
  `introduction` varchar(50) DEFAULT NULL COMMENT '简介',
  `language` varchar(10) DEFAULT NULL COMMENT '语言',
  `price` varchar(10) DEFAULT NULL COMMENT '价格',
  `bookStatus` tinyint(4) DEFAULT NULL COMMENT '图书状态',
  `bookImage` varchar(30) DEFAULT NULL COMMENT '封面',
  `bookCount` int(11) DEFAULT NULL COMMENT '存有量',
  `borrowDate` date DEFAULT NULL COMMENT '借阅日期',
  `returnDate` date DEFAULT NULL COMMENT '返还日期',
  `borrowTime` int(11) DEFAULT NULL COMMENT '借阅时长',
  PRIMARY KEY (`bookId`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8 COMMENT='图书表';

创建用户表user

CREATE TABLE `user` (
  `userId` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `userName` varchar(10) DEFAULT NULL COMMENT '用户名字',
  `password` varchar(10) DEFAULT NULL COMMENT '密码',
  `email` varchar(10) DEFAULT NULL COMMENT '邮箱',
  `phone` varchar(15) DEFAULT NULL COMMENT '电话',
  `address` varchar(20) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='用户表';

创建用户图书关联表bookuser

CREATE TABLE `bookuser` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '关系id',
  `book_id` int(11) DEFAULT NULL COMMENT '图书id',
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户图书关系表';

创建借阅记录表borrowslog

CREATE TABLE `borrowslog` (
  `logId` int(11) NOT NULL AUTO_INCREMENT COMMENT '日志id',
  `borrowsFlag` varchar(10) DEFAULT NULL COMMENT '借阅标志',
  `bookId` varchar(10) DEFAULT NULL COMMENT '书籍Id',
  `userId` varchar(10) DEFAULT NULL COMMENT '用户Id',
  `borrowsDate` date DEFAULT NULL COMMENT '借阅日期',
  `returnFlag` varchar(10) DEFAULT NULL COMMENT '归还标志',
  `returnDate` date DEFAULT NULL COMMENT '归还日期',
  `borrowsTime` int(11) DEFAULT NULL COMMENT '借阅时长',
  `realityBorrowsTime` int(11) DEFAULT NULL COMMENT '实际借阅时长',
  `borrowNumber` varchar(20) DEFAULT NULL COMMENT '借阅单号',
  PRIMARY KEY (`logId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='借阅记录表';

到此数据库创建完成
下边是Demo的结构
在这里插入图片描述
book.java

package com.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @program: LibraryDemo
 * @description: 图书实体
 * @author: Casey Hu
 * @create: 2023-12-06 11:52
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {

    private Integer BookId;

    private String BookName;

    private String Author;

    private String Publish;

    private String ISBN;

    private String Introduction;

    private String Language;

    private String Price;

    private Integer bookStatus;

    private String bookImage;

    private Integer bookCount;

    private Date borrowDate;

    private Date returnDate;

    private Integer borrowTime;
}

BorrowsLog.java

package com.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @program: LibraryDemo
 * @description:
 * @author: Casey Hu
 * @create: 2023-12-07 14:15
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BorrowsLog {
    private Integer logId;
    private String borrowsFlag;
    private String bookId;
    private String userId;
    private Date borrowsDate;
    private String returnFlag;
    private Date returnDate;
    private String borrowsTime;
    private String realityBorrowsTime;
    private String borrowNumber;

}

User.java

package com.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @program: LibraryDemo
 * @description: 用户
 * @author: Casey Hu
 * @create: 2023-12-06 14:17
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private Integer UserId;

    private String UserName;

    private String Password;

    private String Email;

    private String Phone;

    private String Address;

}

LibraryService.java

package com.service;

import com.domain.Book;
import com.domain.BorrowsLog;
import com.domain.User;
import com.util.JDBCUtil;

import java.sql.ResultSet;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @program: LibraryDemo
 * @description:
 * @author: Casey Hu
 * @create: 2023-12-06 16:25
 **/

public class LibraryService {
    //添加图书
    public synchronized void addBook(Book book) {
        JDBCUtil jdbcUtil = new JDBCUtil();
        int i = jdbcUtil.executeUpdate("INSERT INTO book (bookName, author, publish, isbn, introduction, `language`, price, bookStatus, bookImage, bookCount)" +
                " VALUES('" + book.getBookName() + "', '" + book.getAuthor() + "', '" + book.getPublish() + "', '" + book.getISBN() + "', '" + book.getIntroduction() + "', '" + book.getLanguage() + "', '" + book.getPrice() + "', " + book.getBookStatus() + ", '" + book.getBookImage() + "', " + book.getBookCount() + ");");
        if (i==1) {
            System.out.println("插入成功");
        }else {
            System.out.println("插入失败");
        }
        jdbcUtil.closeConnection();
    }
    //删除图书
    public synchronized void deleteBook(Book book) {
        JDBCUtil jdbcUtil = new JDBCUtil();
        jdbcUtil.executeUpdate("update book set bookStatus = 0 where bookName = " + book.getBookName() + ";");
        jdbcUtil.closeConnection();
    }
    //搜索图书
    public synchronized List<Book> queryBookList(Book book) {
        List<Book> bookList =new ArrayList<>();
        JDBCUtil jdbcUtil = new JDBCUtil();
        ResultSet resultSet=jdbcUtil.executeQuery("select * from book where bookName = " + book.getBookName() + " and bookStatus = 1;");
        try {
            while (resultSet.next()) {
                Book bookRes=new Book();
                bookRes.setBookName(resultSet.getString("bookName"));
                bookRes.setAuthor(resultSet.getString("author"));
                bookRes.setPublish(resultSet.getString("publish"));
                bookRes.setISBN(resultSet.getString("isbn"));
                bookRes.setIntroduction(resultSet.getString("introduction"));
                bookRes.setLanguage(resultSet.getString("language"));
                bookRes.setPrice(resultSet.getString("price"));
                bookRes.setBookStatus(resultSet.getInt("bookStatus"));
                bookRes.setBookImage(resultSet.getString("bookImage"));
                bookRes.setBookCount(resultSet.getInt("bookCount"));
                bookRes.setBorrowDate(resultSet.getDate("borrowDate"));
                bookRes.setReturnDate(resultSet.getDate("returnDate"));
                bookRes.setBorrowTime(resultSet.getInt("borrowTime"));
                bookList.add(bookRes);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        jdbcUtil.closeConnection();
        return bookList;
    }

    public synchronized Book queryBook(Book book) {
        JDBCUtil jdbcUtil = new JDBCUtil();
        Book bookRes=new Book();
        ResultSet resultSet=jdbcUtil.executeQuery("select * from book where isbn = '" + book.getISBN() + "' and bookStatus = 1;");
        try {
            while (resultSet.next()) {
                bookRes.setBookName(resultSet.getString("bookName"));
                bookRes.setAuthor(resultSet.getString("author"));
                bookRes.setPublish(resultSet.getString("publish"));
                bookRes.setISBN(resultSet.getString("isbn"));
                bookRes.setIntroduction(resultSet.getString("introduction"));
                bookRes.setLanguage(resultSet.getString("language"));
                bookRes.setPrice(resultSet.getString("price"));
                bookRes.setBookStatus(resultSet.getInt("bookStatus"));
                bookRes.setBookImage(resultSet.getString("bookImage"));
                bookRes.setBookCount(resultSet.getInt("bookCount"));
                bookRes.setBorrowDate(resultSet.getDate("borrowDate"));
                bookRes.setReturnDate(resultSet.getDate("returnDate"));
                bookRes.setBorrowTime(resultSet.getInt("borrowTime"));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        jdbcUtil.closeConnection();
        return bookRes;
    }

    //借阅图书
    public synchronized void borrowBook(Book book, User user,Integer days) {
        //根据图书ISBN查询 图书是否可以借阅,且查看库存量是否有,
        JDBCUtil jdbcUtil = new JDBCUtil();
        ResultSet resultSet = jdbcUtil.executeQuery("select bookStatus,bookCount,bookName,bookId from book where isbn='"+book.getISBN()+"' ;");
        Instant instant = Instant.now();
        long timestamp = instant.toEpochMilli();
        try {
            while (resultSet.next()) {
            Integer bookStatus = resultSet.getInt("bookStatus");
            if(bookStatus==1){
                Integer bookCount = resultSet.getInt("bookCount");
                if(bookCount>0){
                    //借阅 减少库存
                    int i = jdbcUtil.executeUpdate("update book set bookCount = bookCount - 1 where isbn='" + book.getISBN() + "' ;");
                    if(i==1){
                        //新增借阅日志
                        i = jdbcUtil.executeUpdate("INSERT INTO borrowslog (borrowsFlag, bookId, userId, borrowsDate,  borrowsTime, borrowNumber) " +
                                "VALUES('1', '" + resultSet.getInt("bookId") + "', '" + user.getUserId() + "', NOW(), '" + days + "', '" + timestamp + "');");
                        if(i==1){
                            System.out.println("借阅成功!借阅单号:"+timestamp);
                        }else {
                            System.out.println("借阅异常,请联系管理员");
                        }
                    }
                }else {
                    System.out.println("此书 "+resultSet.getInt("bookName")+"库存不足");
                }
            }else {
                System.out.println("此书 "+resultSet.getInt("bookName")+"已下架");
            }
            }
        }catch (Exception e){
            System.out.println("查不到此书");
            e.printStackTrace();
        }
        jdbcUtil.closeConnection();
    }

    public synchronized void returnBook(String borrowNumber) {
        JDBCUtil jdbcUtil = new JDBCUtil();
        //通过借阅单号, 更新借阅标志和时间
        ResultSet resultSet = jdbcUtil.executeQuery("SELECT logId, borrowsFlag, bookId, userId, borrowsDate, returnFlag, returnDate, \n" +
                "borrowsTime, realityBorrowsTime, borrowNumber FROM borrowslog where borrowNumber='"+borrowNumber+"';");
        BorrowsLog borrowsLog = new BorrowsLog();
        try {
            while (resultSet.next()) {
                borrowsLog.setLogId(resultSet.getInt("logId"));
                borrowsLog.setUserId(resultSet.getString("userId"));
                borrowsLog.setBookId(resultSet.getString("bookId"));
                //计算实际时间
                Date  borrowsDate= resultSet.getDate("borrowsDate");
                long differenceInMilliseconds = new Date().getTime() - borrowsDate.getTime();
                // 转换毫秒差值为天数
                Integer differenceInDays = (int) TimeUnit.MILLISECONDS.toDays(differenceInMilliseconds);
                //更新
                jdbcUtil.executeUpdate("UPDATE borrowslog SET  returnFlag='1', returnDate=NOW(), realityBorrowsTime="+differenceInDays+" WHERE logId="+borrowsLog.getLogId()+" and borrowNumber='"+borrowNumber+"';");
                int i = jdbcUtil.executeUpdate("update book set bookCount = bookCount + 1 where bookId=" + borrowsLog.getBookId() + " ;");
                if(i==1){
                    System.out.println("此书归还成功");
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        jdbcUtil.closeConnection();
    }




}

UserService.java(没有实现)

package com.service;

/**
 * @program: LibraryDemo
 * @description:
 * @author: Casey Hu
 * @create: 2023-12-06 16:49
 **/

public class UserService {
}

JDBCUtil.java

package com.util;

import javax.sql.DataSource;
import java.sql.*;

/**
 * @program: LibraryDemo
 * @description: JDBC工具类
 * @author: Casey Hu
 * @create: 2023-12-06 14:31
 **/

public class JDBCUtil {
    public static Connection connection;
    public static String url="jdbc:mysql://localhost:3306/library-demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";

    public static String user="root";

    public static String password="123456";


    public static Connection getConnection(){
        try {
            connection = DriverManager.getConnection(url,user,password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    //执行查询
    public static ResultSet executeQuery(String sql) {
        System.out.println("执行SQL:"+sql);
        Connection conn=getConnection();
        ResultSet resultSet=null;
        try {
            Statement stmt=conn.createStatement();
            resultSet=stmt.executeQuery(sql);
        }catch (Exception e){
            e.printStackTrace();
        }
        return resultSet;
    }

    // 执行更新操作(插入、更新、删除)
    public static int executeUpdate(String sql) {
        System.out.println("执行SQL:"+sql);
        Connection conn = getConnection();
        int result = 0;
        try {
            // 开始事务
            conn.setAutoCommit(false);
            Statement statement = conn.createStatement();
            result = statement.executeUpdate(sql);
            conn.commit();
        } catch (SQLException e) {
            // 回滚事务
            if (conn != null) {
                try {
                    conn.rollback();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
            e.printStackTrace();
        }
        return result;
    }


    // 关闭数据库连接
    public static void closeConnection() {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

StatementTest.java

package com.util;


import com.service.LibraryService;

import java.sql.*;

/**
 * @program: LibraryDemo
 * @description:
 * @author: Casey Hu
 * @create: 2023-12-06 14:45
 **/

public class StatementTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
//        //加载驱动
//        Class.forName("com.mysql.cj.jdbc.Driver");
//        //输入url、用户名、密码创建连接
//        //jdbc:mysql:是固定的写法,后面跟主机名localhost,3306是默认的MySQL端口号demo是数据库名称
//        //useUnicode=true是指是否使用Unicode字符集,赋值为true
//        //serverTimezone=UTC是指定时区时间为世界统一时间
//        //characterEncoding=utf-8是指定字符编码格式为UTF8
//        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/library-demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
//        //sql查询语句
//        String sql = "select * from user";
//        Statement statement = connection.createStatement();
//        //执行查询语句
//        ResultSet resultSet = statement.executeQuery(sql);
//        //结果遍历
//        while (resultSet.next()) {
//            Object id = resultSet.getObject("userId");
//            Object name = resultSet.getObject("userName");
//            Object password = resultSet.getObject("password");
//            Object phone = resultSet.getObject("phone");
//            System.out.println(id + "-" + name + "-" + password + "-" + phone);
//        }
//        //关闭资源
//        resultSet.close();
//        statement.close();
//        connection.close();
//        JDBCUtil jdbcUtil = new JDBCUtil();
//        User user=new User();
//        user.setUserName("李四");
//        user.setPassword("123456");
//        user.setEmail("XXXXXXXXXX");
//        user.setPhone("1235586865");
//        jdbcUtil.executeUpdate("INSERT INTO `user` (userName, password, email, phone, address) " +
//                "VALUES('"+user.getUserName()+"', '"+user.getPassword()+"', '"+user.getEmail()+"', '"+user.getPhone()+"', '"+user.getAddress()+"');");
//        ResultSet resultSet = jdbcUtil.executeQuery("select * from user");
//        //结果遍历
//        while (resultSet.next()) {
//            Object id = resultSet.getObject("userId");
//            Object name = resultSet.getObject("userName");
//            Object password = resultSet.getObject("password");
//            Object phone = resultSet.getObject("phone");
//            System.out.println(id + "-" + name + "-" + password + "-" + phone);
//        }
//        jdbcUtil.closeConnection();
//        Book book=new Book();
//        book.setBookName("晚熟的人");
//        book.setAuthor("莫言");
//        book.setPrice("100");
//        book.setBookImage("1111111");
//        book.setIntroduction("《晚熟的人》是中国当代作家莫言创作的中短篇小说集");
//        book.setISBN("978-7020-164-776");
//        book.setBookStatus(1);
//        book.setBookCount(10);
        LibraryService libraryService=new LibraryService();
//        libraryService.addBook(book);
//        Book book1 = libraryService.queryBook(book);
//        System.out.println(book1.toString());
//        User user=new User();
//        user.setUserId(1);
        //借阅图书
//        libraryService.borrowBook(book1,user,30);
        //归还
        libraryService.returnBook("1701968793273");
    }
}

结束

写个总结吧,有的功能,比如登录,多线程的那部分没有实现,因为不会啊。我整体做完最后特别大的感受就是,对于持久层的框架是非常有必要的,如果没有mybatis,这样一点一点的封装是非常麻烦的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

14.Java程序设计-基于Springboot的高校社团管理系统设计与实现

摘要 随着高校社团活动的不断丰富和社团数量的逐渐增加&#xff0c;高校社团管理面临着日益复杂的挑战。为了提高社团管理的效率和透明度&#xff0c;本研究基于Spring Boot框架设计并实现了一套高校社团管理系统。该系统旨在整合社团创建、成员管理、活动发布等多个功能&…

Pipenv环境配置+Pytest运行

环境配置 使用Pipenv进行虚拟环境管理&#xff0c;Pipfile为依赖模块管理文件。 安装pipenv&#xff1a;brew install pipenv根项目根目录下执行命令创建虚拟环境&#xff1a; pipenv install在Pycharm中指定项目运行的虚拟环境 &#xff1a;File->Settings->Project:-…

uniapp 使用 $emit和$on——$on中无法为data中的变量赋值

问题在于this的指向&#xff0c; 解决办法是使用变量保存$on&#xff0c;其次再为data中的值赋值 以下是具体代码&#xff1a; 1、html代码&#xff1a; <view class"form_picker" click"selePositionFun()"><view class""><inp…

python 使用 watchdog 实现类似 Linux 中 tail -f 的功能

一、代码实现 import logging import os import threading import timefrom watchdog.events import FileSystemEventHandler from watchdog.observers import Observerlogger logging.getLogger(__name__)class LogWatcher(FileSystemEventHandler):def __init__(self, log_…

嵌入式杂记 - MDK的Code, RO-data , RW-data, ZI-data意思

嵌入式杂记 - Keil的Code, RO-data , RW-data, ZI-data意思 MDK中的数据分类MCU中的内部存储分布MDK中数据类型存储Code代码段例子 RO-data 只读数据段例子 RW-data 可读写数据段例子 ZI-data 清零数据段例子 在嵌入式开发中&#xff0c;我们经常都会使用一些IDE&#xff0c;例…

《一念关山》热度破万,爱奇艺古装赛道出尽风头

​刘诗诗重回古装剧、新式武侠公路片、质感细腻的镜头美学......看点满满的《一念关山》频频登上热搜&#xff0c;俘获了大批观众的心。 开播首日热度就刷新了爱奇艺2023年站内纪录&#xff0c;《一念关山》作为2023年爱奇艺在古装赛道的收官之作&#xff0c;口碑和热度兼收。…

理解 GET、POST、PATCH 和 DELETE 请求的参数传递方式

理解 GET、POST、PATCH 和 DELETE 请求的参数传递方式 本文将向您介绍在使用 GET、POST、PATCH 和 DELETE 请求时如何传递参数。通过详细解释每种请求的参数传递方式和示例代码&#xff0c;您将了解如何正确地将数据发送到服务器并与之交互。 GET 请求的参数传递方式 在 GET…

0012Java程序设计-ssm医院预约挂号及排队叫号系统

文章目录 **摘** **要**目 录系统实现5.2后端功能模块5.2.1管理员功能模块5.2.2医生功能模块 开发环境 摘 要 网络的广泛应用给生活带来了十分的便利。所以把医院预约挂号及排队叫号管理与现在网络相结合&#xff0c;利用java技术建设医院预约挂号及排队叫号系统&#xff0c;实…

【LeetCode】692. 前K个高频单词

692. 前K个高频单词 描述示例解题思路及事项思路一思路二 描述 给定一个单词列表 words 和一个整数 k &#xff0c;返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率&#xff0c; 按字典顺序 排序 示例 示例1 输…

【Java 基础】25 比较器

文章目录 1.什么是比较器2.比较器的种类1&#xff09;Comparable2&#xff09;Comparator4&#xff09;组合比较器 总结 1.什么是比较器 比较器是用于对对象进行比较的工具 比较器允许开发者定义对象之间的顺序&#xff0c;使得排序和比较操作更加灵活。 还记得我们之前学的数…

如何为游戏角色3D模型设置纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

Hugging Face 给普通用户提供了一个 2 vCPU 16GB 的免费空间

Hugging Face 给普通用户提供了一个 2 vCPU 16GB 的免费空间&#xff0c;并且支持部署 Gradio 构建的应用程序&#xff0c;非常方便&#xff0c;下面我们进入 https://huggingface.co/spaces/ &#xff0c;点击创建空间。

HbuilderX使用Uniapp+Vue3安装uview-plus

如果你是vue2版本想使用uniapp去配置uviewui库可以参考之前的文章 小程序的第三方ui库推荐较多的还是uview的&#xff0c;看起来比较美观&#xff0c;功能也比较完善&#xff0c;下面将提一下Vue3安装uview-plus库的教程 创建项目 安装 首先进入官网 uView-Plus 直接下载并导…

Linux驱动开发一

一、Linux驱动开发与裸机开发的区别 1、开发思维区别 裸机驱动&#xff1a; &#xff08;1&#xff09;底层&#xff0c;跟寄存器打交道&#xff0c;有些MCU提供了库 Linux驱动&#xff1a; &#xff08;1&#xff09;Linux下驱动开发直接操作寄存器不现实 &#xff08;2…

LeetCode题:174. 地下城游戏

目录 一、题目要求 二、解题思路 &#xff08;1&#xff09;状态表示 &#xff08;2&#xff09;状态转移方程 &#xff08;3&#xff09;初始化dp表 &#xff08;4&#xff09;填表顺序 &#xff08;5&#xff09;返回值 三、代码 一、题目要求 174. 地下城游戏 恶魔们…

这是最后的战役了

不变因子 初等因子 行列式因子 smith标准型 酉矩阵 H-阵等等 A H A A^H A AHA 就是 H-阵 正定H阵的性质 若 A A A 为正定的H-阵. 存在可逆矩阵 Q Q Q&#xff0c; 使得 A Q H Q AQ^H Q AQHQ.存在 P P P, 使得 P H A P I P^HAPI PHAPI.A的特征值大于0. Q − 1 A Q Q^{…

根据java类名找出当前是哪个Excel中的sheet

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

word一键接受所有修订并保留修订痕迹

目的&#xff1a;让word修订插入的内容在接受修订后保留痕迹。 文章目录 目的&#xff1a;让word修订插入的内容在接受修订后保留痕迹。1. 打开批注的word文件2. 同时按住&#xff1a;*AltF11*&#xff0c;然后右键&#xff1a;Normal -->插入--> 模块3. 在出现的代码框中…

模块式雨水调蓄池由若干个模块组合成一个水池使用寿命达70年以上

模块式雨水调蓄池是一种先进的雨水收集和利用系统&#xff0c;它由若干个模块组合而成&#xff0c;每个模块都具有一定的储水能力和调蓄功能。这种调蓄池具有使用寿命长、适应性强、综合成本低等优点&#xff0c;因此在城市雨水管理和水资源利用方面具有广泛的应用前景。 模块…

CentOS服务自启权威指南:手动启动变为开机自启动(以Jenkins服务为例)

前言 CentOS系统提供了多种配置服务开机自启动的方式。本文将介绍其中两种常见的方式&#xff0c; 一种是使用Systemd服务管理器配置&#xff0c;不过&#xff0c;在实际中&#xff0c;如果你已经通过包管理工具安装的&#xff0c;那么服务通常已经被配置为Systemd服务&#…