「MyBatis」图书管理系统 v1.0

news2024/11/15 10:29:03

🎇个人主页:Ice_Sugar_7
🎇所属专栏:JavaEE
🎇欢迎点赞收藏加关注哦!

图书管理系统 v1.0

  • 🍉登录
  • 🍉图书操作
    • 🍌图书类
    • 🍌页面信息
    • 🍌操作
  • 🍉前端页面
    • 🍌展示图书
    • 🍌添加图书
    • 🍌更新图书

🍉登录

首先需要准备个登录页面,前端代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/login.css">
    <script type="text/javascript" src="js/jquery.min.js"></script>
</head>

<body>
<div class="container-login">
    <div class="container-pic">
        <img src="pic/computer.png" width="350px">
    </div>
    <div class="login-dialog">
        <h3>登陆</h3>
        <div class="row">
            <span>用户名</span>
            <input type="text" name="userName" id="username" class="form-control">
        </div>
        <div class="row">
            <span>密码</span>
            <input type="password" name="password" id="password" class="form-control">
        </div>
        <div class="row">
            <button type="button" class="btn btn-info btn-lg" onclick="login()">登录</button>
        </div>
    </div>
</div>
<script src="js/jquery.min.js"></script>
<script>
    function login() {
        $.ajax({
            url: "/UserController/login",
            type: "post",
            data: {
                username: $("#username").val(),
                password: $("#password").val()
            },
            success: function (result) {
                if (result == "") {
                    //密码正确
                    location.href = "book_list.html";
                } else {
                    alert(result);
                }
            }
        });
    }
</script>
</body>

</html>

页面如下:

在这里插入图片描述

登录的逻辑为:前端输入用户名和密码,传给后端,后端根据用户名,到数据库查找用户信息(是否有这名用户),然后将输入的 password 和数据库中的用户密码进行匹配,看是否正确
后端准备个用户信息的类:

@Data
public class UserInfo {
    private Integer id;
    private String userName;
    private String password;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

接下来是验证登录信息,根据 Spring MVC 的框架完成代码:

@RestController
@RequestMapping("/UserController")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/login")
    public String login(String username, String password, HttpSession session) {
        //用户名或密码为空
        if(!StringUtils.hasLength(username) || !StringUtils.hasLength(password))
            return "用户名和密码不能为空";
        //先从数据库中找找有没有这个用户名
        UserInfo userInfo = userService.queryByName(username);
        if(userInfo == null) return "用户不存在";
        if(!userInfo.getPassword().equals(password)) return "密码错误"; //账号和密码不一致
        session.setAttribute(Constants.USER_SESSION_KEY,userInfo); //成功登录后保存用户信息
        return "";
    }
}
public class Constants {
    public static final String USER_SESSION_KEY = "user_session_key";
}
public class UserService {
    @Autowired
    private UserInfoMapper userInfoMapper;

    public UserInfo queryByName(String userName) {
        return userInfoMapper.queryByName(userName);
    }
}
@Mapper
public interface UserInfoMapper {
    @Select("select id,user_name,password,delete_flag,create_time,update_time" +
            " from user_info where user_name = #{userName} and delete_flag = 0")
    public UserInfo queryByName(String userName);

}

🍉图书操作

🍌图书类

先准备个图书的类:

@Data
public class BookInfo {
    private Integer id; //图书编号
    private String bookName; //书名
    private String author; //作者
    private Integer count; //数量
    private BigDecimal price; //定价
    private String publish; //出版社
    private Integer status; //状态  1表示可以借阅;2表示不可借阅
    private String statusCN; //到时页面呈现书的借阅状态要用中文
    private Date createTime; //创建时间
    private Date updateTime; //更新时间
}

使用枚举表示图书状态:

public enum BookStatus {
    DELETE(0,"删除"), //采用逻辑删除
    NORMAL(1,"可借阅"),
    FORBIDDEN(2,"不可借阅"),
    ;

    BookStatus(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    private Integer code;
    private String desc;

    /**
     * 根据 code 返回描述信息
     * @return
     */
    public static BookStatus getDescByCode(Integer code) {
        switch (code) {
            case 0: return DELETE;
            case 1: return NORMAL;
            case 2: return FORBIDDEN;
        }
        return FORBIDDEN;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

🍌页面信息

需要实现翻页功能,每页展示若干本图书(这里默认每页 10 本书)
用一个 PageRequest 的类表示页面信息:当前页数和当前页第一本书的下标;PageResult 记录总的信息:页面数、每一页的信息等

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageRequest {
    private Integer offset; //当前页起始位置的元素下标
    private Integer pageNum = 1; //当前页数 默认在第一页
    private Integer pageSize = 10; //每页展示的记录数 默认为 10 条

    public Integer getOffset() {
        return (pageNum - 1) * pageSize;
    }
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageResult<T> {
    private List<T> records;
    private Integer count;
    private PageRequest pageRequest;
}

🍌操作

这个系统我们需要实现这几个功能:添加图书、删除单本图书、批量删除图书、修改图书信息

Controller 类:

@Slf4j
@RestController
@RequestMapping("BookController")
public class BookController {
    @Autowired
    private BookService bookService;

    @RequestMapping("addBook")
    public String addBook(BookInfo bookInfo) {
        //打日志
        log.info("添加图书,bookInfo:{}",bookInfo);
        //检验参数是否为空
        if(!StringUtils.hasLength(bookInfo.getBookName())
        || !StringUtils.hasLength(bookInfo.getAuthor())
        || bookInfo.getCount() == null
        || bookInfo.getPrice() == null
        || !StringUtils.hasLength(bookInfo.getPublish())
        || bookInfo.getStatus() == null) {
            return "添加的图书信息不能为空";
        }
        //添加图书
        try {
            Integer res = bookService.insertBook(bookInfo);
            if(res > 0) return "";
        } catch (Exception e) {
            log.error("添加图书异常,e:",e);
        }
        return "添加失败";
    }

    @RequestMapping("getBookListByPage")
    public PageResult<BookInfo> getBookListByPage(PageRequest pageRequest, HttpSession httpSession) {
        //return bookService.queryBookByPage(pageRequest.getPageSize(),pageRequest.getOffset());
        log.info("查询图书列表,请求参数pageRequest:{}",pageRequest);
        PageResult<BookInfo> bookList = bookService.queryBookByPage(pageRequest);
        return bookList;
    }

    @RequestMapping("queryBookById")
    public BookInfo queryBookById(Integer bookId) {
        if(bookId == null || bookId <= 0) return new BookInfo();
        BookInfo bookInfo = bookService.queryBookById(bookId);
        return bookInfo;
    }

    @RequestMapping("updateBook")
    public String updateBook(BookInfo bookInfo) {
        log.info("修改图书,bookInfo:{}",bookInfo);
        try {
            Integer res = bookService.updateBook(bookInfo);
            if(res > 0) return "";
        } catch (Exception e) {
            log.error("修改图书异常,e:",e);
        }
        return "修改失败";
    }

    @RequestMapping("batchDeleteBookByIds")
    public boolean batchDeleteBookByIds(@RequestParam List<Integer> ids) {
        log.info("批量删除图书,books:{}",ids);
        try{
            bookService.batchDeleteBookByIds(ids);
        } catch (Exception e) {
            log.error("删除异常,e:",e);
            return false;
        }
        return true;
    }
}

Service 类:

@Service
public class BookService {
    @Autowired
    private BookInfoMapper bookInfoMapper;

    public Integer insertBook(BookInfo bookInfo) {
        return bookInfoMapper.insertBook(bookInfo);
    }

    public PageResult<BookInfo> queryBookByPage(PageRequest pageRequest) {
        //获取总记录数
        Integer count = bookInfoMapper.count();
        //获取当前页的记录
        List<BookInfo> bookInfos = bookInfoMapper.queryBookByPage(pageRequest.getPageSize(),pageRequest.getOffset());
        //处理状态  将状态码转为状态——可借阅/不可借阅
        for(BookInfo bookInfo : bookInfos) {
            bookInfo.setStatusCN(BookStatus.getDescByCode(bookInfo.getStatus()).getDesc());
        }

        return new PageResult<>(bookInfos,count,pageRequest);
    }

    public BookInfo queryBookById(Integer bookId) {
        return bookInfoMapper.queryBookById(bookId);
    }

    public Integer updateBook(BookInfo bookInfo) {
        return bookInfoMapper.updateBook(bookInfo);
    }

    public void batchDeleteBookByIds(List<Integer> ids) {
        bookInfoMapper.batchDeleteBookByIds(ids);
    }

}

Mapper 接口

@Mapper
public interface BookInfoMapper {
    @Select("select * from book_info where status != 0 order by id limit #{limit},#{offset}")
    public List<BookInfo> queryBookByPage(Integer offset,Integer limit); //offset 当前页第一本书的下标  limit 一页最多展示多少本书

    @Select("select count(1) from book_info where status != 0")
    public Integer count();

    @Insert("insert into book_info(book_name,author,count,price,publish,status) values " +
            "(#{bookName},#{author},#{count},#{price},#{publish},#{status})")
    public Integer insertBook(BookInfo bookInfo);

    @Select("select id,book_name,author,count,price,publish,status,create_time,update_time " +
    "from book_info where id = #{bookId} and status != 0")
    public BookInfo queryBookById(Integer bookId);

    public Integer updateBook(BookInfo bookInfo);

    public void batchDeleteBookByIds(List<Integer> ids);
}

更新图书和批量删除采用 xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yj.librarymanagement.mapper.BookInfoMapper">
    <update id="updateBook">
        update book_info
        <set>
            <if test="bookName != null">
                book_name = #{bookName},
            </if>
            <if test="author != null">
                author = #{author},
            </if>
            <if test="count != null">
                count = #{count},
            </if>
            <if test="price != null">
                price = #{price},
            </if>
            <if test="publish != null">
                publish = #{publish},
            </if>
            <if test="status != null">
                status = #{status}
            </if>
        </set>
        where id = #{id}
    </update>

    <update id="batchDeleteBookByIds">
        update book_info set status = 0
        where id in
        <foreach collection="ids" open="(" close=")" item="id" separator=",">
            #{id}
        </foreach>
    </update>
</mapper>

🍉前端页面

🍌展示图书

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图书列表展示</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">

    <link rel="stylesheet" href="css/list.css">
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <script src="js/jq-paginator.js"></script>

</head>

<body>
<div class="bookContainer">
    <h2>图书列表展示</h2>
    <div class="navbar-justify-between">
        <div>
            <button class="btn btn-outline-info" type="button" onclick="location.href='book_add.html'">添加图书</button>
            <button class="btn btn-outline-info" type="button" onclick="batchDelete()">批量删除</button>
        </div>
    </div>

    <table>
        <thead>
        <tr>
            <td>选择</td>
            <td class="width100">图书ID</td>
            <td>书名</td>
            <td>作者</td>
            <td>数量</td>
            <td>定价</td>
            <td>出版社</td>
            <td>状态</td>
            <td class="width200">操作</td>
        </tr>
        </thead>
        <tbody>

        </tbody>
    </table>

    <div class="demo">
        <ul id="pageContainer" class="pagination justify-content-center"></ul>
    </div>
    <script>
        getBookListByPage();
        function getBookListByPage() {
            $.ajax({
                url:"BookController/getBookListByPage" + location.search,
                type:"get",
                success: function (result) {
                    console.log(result.records);
                    if(result.records == null) {  //判断相等是== 不是=
                        alert("没有图书");
                        return;
                    }
                    var finnalHtml = "";
                    for (var book of result.records) {
                        finnalHtml += '<tr>';
                        finnalHtml += '<td><input type="checkbox" name="selectBook" value="' + book.id + '" id="selectBook" class="book-select"></td>';
                        finnalHtml += '<td>' + book.id + '</td>';
                        finnalHtml += '<td>' + book.bookName + '</td>';
                        finnalHtml += '<td>' + book.author + '</td>';
                        finnalHtml += '<td>' + book.count + '</td>';
                        finnalHtml += '<td>' + book.price + '</td>';
                        finnalHtml += '<td>' + book.publish + '</td>';
                        finnalHtml += '<td>' + book.statusCN + '</td>';
                        finnalHtml += '<td>';
                        finnalHtml += '<div class="op">';
                        finnalHtml += '<a href="book_update.html?bookId=' + book.id + '">修改</a>';
                        finnalHtml += '<a href="javascript:void(0)" onclick="deleteBook(' + book.id + ')">删除</a>';
                        finnalHtml += '</div></td></tr>';
                    }
                    $("tbody").html(finnalHtml);

                    //翻页信息
                    $("#pageContainer").jqPaginator({
                        totalCounts: result.count, //总记录数
                        pageSize: 10,    //每页的个数
                        visiblePages: 5, //可视页数
                        currentPage: result.pageRequest.pageNum,  //当前页码
                        first: '<li class="page-item"><a class="page-link">首页</a></li>',
                        prev: '<li class="page-item"><a class="page-link" href="javascript:void(0);">上一页<\/a><\/li>',
                        next: '<li class="page-item"><a class="page-link" href="javascript:void(0);">下一页<\/a><\/li>',
                        last: '<li class="page-item"><a class="page-link" href="javascript:void(0);">最后一页<\/a><\/li>',
                        page: '<li class="page-item"><a class="page-link" href="javascript:void(0);">{{page}}<\/a><\/li>',
                        //页面初始化和页码点击时都会执行
                        onPageChange: function (page, type) {
                            console.log("第"+page+"页, 类型:"+type);
                            if(type == "change") {
                                location.href = "book_list.html?pageNum="+page;
                            }
                        }
                    });

                }
            });
        }

        function deleteBook(id) {
            var isDelete = confirm("确认删除?");
            if (isDelete) {
                //删除图书(逻辑删除)
                $.ajax({
                    url: "/BookController/updateBook",
                    type: "post",
                    data: {
                        id: id,
                        status: 0
                    },
                    success: function () {
                        //刷新页面
                        location.href = "book_list.html"
                    }
                });
            }
        }
        function batchDelete() {
            var isDelete = confirm("确认批量删除?");
            if (isDelete) {
                //获取复选框的id
                var ids = [];
                $("input:checkbox[name='selectBook']:checked").each(function () {
                    ids.push($(this).val());
                });
                console.log(ids);
                //批量删除
                $.ajax({
                    url: "/BookController/batchDeleteBookByIds?ids=" + ids,
                    type: "post",
                    success: function (result) {
                        if (result) {
                            alert("批量删除成功");
                            location.href = "book_list.html"
                        }
                    }
                });
            }
        }

    </script>
</div>
</body>
</html>

🍌添加图书

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图书列表展示</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">

    <link rel="stylesheet" href="css/list.css">
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <script src="js/jq-paginator.js"></script>

</head>

<body>
<div class="bookContainer">
    <h2>图书列表展示</h2>
    <div class="navbar-justify-between">
        <div>
            <button class="btn btn-outline-info" type="button" onclick="location.href='book_add.html'">添加图书</button>
            <button class="btn btn-outline-info" type="button" onclick="batchDelete()">批量删除</button>
        </div>
    </div>

    <table>
        <thead>
        <tr>
            <td>选择</td>
            <td class="width100">图书ID</td>
            <td>书名</td>
            <td>作者</td>
            <td>数量</td>
            <td>定价</td>
            <td>出版社</td>
            <td>状态</td>
            <td class="width200">操作</td>
        </tr>
        </thead>
        <tbody>

        </tbody>
    </table>

    <div class="demo">
        <ul id="pageContainer" class="pagination justify-content-center"></ul>
    </div>
    <script>
        getBookListByPage();
        function getBookListByPage() {
            $.ajax({
                url:"BookController/getBookListByPage" + location.search,
                type:"get",
                success: function (result) {
                    console.log(result.records);
                    if(result.records == null) {  //判断相等是== 不是=
                        alert("没有图书");
                        return;
                    }
                    var finnalHtml = "";
                    for (var book of result.records) {
                        finnalHtml += '<tr>';
                        finnalHtml += '<td><input type="checkbox" name="selectBook" value="' + book.id + '" id="selectBook" class="book-select"></td>';
                        finnalHtml += '<td>' + book.id + '</td>';
                        finnalHtml += '<td>' + book.bookName + '</td>';
                        finnalHtml += '<td>' + book.author + '</td>';
                        finnalHtml += '<td>' + book.count + '</td>';
                        finnalHtml += '<td>' + book.price + '</td>';
                        finnalHtml += '<td>' + book.publish + '</td>';
                        finnalHtml += '<td>' + book.statusCN + '</td>';
                        finnalHtml += '<td>';
                        finnalHtml += '<div class="op">';
                        finnalHtml += '<a href="book_update.html?bookId=' + book.id + '">修改</a>';
                        finnalHtml += '<a href="javascript:void(0)" onclick="deleteBook(' + book.id + ')">删除</a>';
                        finnalHtml += '</div></td></tr>';
                    }
                    $("tbody").html(finnalHtml);

                    //翻页信息
                    $("#pageContainer").jqPaginator({
                        totalCounts: result.count, //总记录数
                        pageSize: 10,    //每页的个数
                        visiblePages: 5, //可视页数
                        currentPage: result.pageRequest.pageNum,  //当前页码
                        first: '<li class="page-item"><a class="page-link">首页</a></li>',
                        prev: '<li class="page-item"><a class="page-link" href="javascript:void(0);">上一页<\/a><\/li>',
                        next: '<li class="page-item"><a class="page-link" href="javascript:void(0);">下一页<\/a><\/li>',
                        last: '<li class="page-item"><a class="page-link" href="javascript:void(0);">最后一页<\/a><\/li>',
                        page: '<li class="page-item"><a class="page-link" href="javascript:void(0);">{{page}}<\/a><\/li>',
                        //页面初始化和页码点击时都会执行
                        onPageChange: function (page, type) {
                            console.log("第"+page+"页, 类型:"+type);
                            if(type == "change") {
                                location.href = "book_list.html?pageNum="+page;
                            }
                        }
                    });

                }
            });
        }



        function deleteBook(id) {
            var isDelete = confirm("确认删除?");
            if (isDelete) {
                //删除图书(逻辑删除)
                $.ajax({
                    url: "/BookController/updateBook",
                    type: "post",
                    data: {
                        id: id,
                        status: 0
                    },
                    success: function () {
                        //刷新页面
                        location.href = "book_list.html"
                    }
                });
            }
        }
        function batchDelete() {
            var isDelete = confirm("确认批量删除?");
            if (isDelete) {
                //获取复选框的id
                var ids = [];
                $("input:checkbox[name='selectBook']:checked").each(function () {
                    ids.push($(this).val());
                });
                console.log(ids);
                //批量删除
                $.ajax({
                    url: "/BookController/batchDeleteBookByIds?ids=" + ids,
                    type: "post",
                    success: function (result) {
                        if (result) {
                            alert("批量删除成功");
                            location.href = "book_list.html"
                        }
                    }
                });
            }
        }

    </script>
</div>
</body>

</html>

🍌更新图书

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>修改图书</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/add.css">
</head>

<body>
    <div class="container">
        <div class="form-inline">
            <h2 style="text-align: left; margin-left: 10px;"><svg xmlns="http://www.w3.org/2000/svg" width="40"
                                                                  fill="#17a2b8" class="bi bi-book-half" viewBox="0 0 16 16">
                <path
                        d="M8.5 2.687c.654-.689 1.782-.886 3.112-.752 1.234.124 2.503.523 3.388.893v9.923c-.918-.35-2.107-.692-3.287-.81-1.094-.111-2.278-.039-3.213.492V2.687zM8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783z" />
            </svg>
                <span>修改图书</span>
            </h2>
        </div>

        <form id="updateBook">
            <input type="hidden" class="form-control" id="bookId" name="id">
            <div class="form-group">
                <label for="bookName">图书名称:</label>
                <input type="text" class="form-control" id="bookName" name="bookName"/>
            </div>
            <div class="form-group">
                <label for="bookAuthor">图书作者</label>
                <input type="text" class="form-control" id="bookAuthor" name="author"/>
            </div>
            <div class="form-group">
                <label for="bookStock">图书库存</label>
                <input type="text" class="form-control" id="bookStock" name="count"/>
            </div>
            <div class="form-group">
                <label for="bookPrice">图书定价:</label>
                <input type="number" class="form-control" id="bookPrice" name="price">
            </div>
            <div class="form-group">
                <label for="bookPublisher">出版社</label>
                <input type="text" id="bookPublisher" class="form-control" name="publish"/>
            </div>
            <div class="form-group">
                <label for="bookStatus">图书状态</label>
                <select class="custom-select" id="bookStatus" name="status">
                    <option value="1" selected>可借阅</option>
                    <option value="2">不可借阅</option>
                </select>
            </div>
            <div class="form-group" style="text-align: right">
                <button type="button" class="btn btn-info btn-lg" onclick="update()">确定</button>
                <button type="button" class="btn btn-secondary btn-lg" onclick="javascript:history.back()">返回</button>
            </div>
        </form>
    </div>
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script>
        $.ajax({
            url: "/BookController/queryBookById" + location.search,
            type: "get",
            success: function (book) {
                if(book != null) {
                    $("#bookId").val(book.id);
                    $("#bookName").val(book.bookName);
                    $("#bookAuthor").val(book.author);
                    $("#bookStock").val(book.count);
                    $("#bookPrice").val(book.price);
                    $("#bookPublisher").val(book.publish);
                    $("#bookStatus").val(book.status);
                }
            }
        })
        function update() {
            $.ajax({
                url:"/BookController/updateBook",
                type:"post",
                data:$("#updateBook").serialize(),
                success: function (result) {
                    if(result == "") {
                        //更新成功,跳转到展示页面
                        location.href = "book_list.html";
                    } else {
                        alert("修改失败:"+result);
                    }
                },
                error: function (error) {
                    console.log(error);
                }
            });
        }
    </script>
</body>
</html>

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

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

相关文章

Java中的经典排序算法:快速排序、归并排序和计数排序详解(如果想知道Java中有关快速排序、归并排序和计数排序的知识点,那么只看这一篇就足够了!)

前言&#xff1a;排序算法在计算机科学中占有重要地位&#xff0c;不同的算法适用于不同的场景。本文将深入探讨快速排序、归并排序和计数排序。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本文大致的讲解内…

新生在线分班查询,用这个小程序制作仅需一分钟!

今天许多学校已陆续开学&#xff0c;老师们又开始忙碌起来。他们需要将新生的分班信息逐一通知给每位家长&#xff0c;这不仅是一项繁琐的工作&#xff0c;而且效率也不高。传统的方法是通过电话、短信或邮件一一通知&#xff0c;这不仅耗时耗力&#xff0c;还容易出现信息传递…

百度文库文章-暂存下-------题 目: 链式简单选择排序

题 目: 链式简单选择排序 初始条件&#xff1a; 理论&#xff1a;学习了《数据结构》课程&#xff0c;掌握了基本的数据结构和常用的算法&#xff1b; 实践&#xff1a;计算机技术系实验室提供计算机及软件开发环境。 要求完成的主要任务: &#xff08;包括课程设计工作量…

如何用pytorch进行图像分类

如何用pytorch进行图像分类 使用PyTorch进行图像分类是深度学习中的一个常见任务&#xff0c;涉及一系列步骤&#xff0c;从数据预处理到模型训练和评估。下面将详细描述每个步骤&#xff0c;从零开始构建一个图像分类器。 1. 安装必要的库 在开始之前&#xff0c;首先需要确…

驱动(RK3588S)第四课时:模块化编程

目录 一、什么是模块化编程二、怎么把自己编译代码给加载到开发板上运行三、驱动编程的框架四、驱动编程具体实例1、编写单模块化驱动代码2、编写多模块化驱动代码3、编写向模块传参驱动代码4、编写多模块化驱动代码另一种方式 一、什么是模块化编程 在嵌入式里所谓的模块化编…

Vue——day07之条件渲染、列表渲染以及监测数据

目录 1.template标签 2.条件渲染 3.列表渲染 4.v-for中的key的作用以及原理 5.列表过滤 placeholder 前端空字符串 使用数据监视watch实现 使用计算属性实现 6.列表排序 7.Vue更新数据检测失败 原因 总结 1.template标签 template标签是Vue.js中的一个特殊元素&am…

kube-scheduler调度策略之预选策略(三)

一、概述 摘要&#xff1a;本文我们继续分析源码&#xff0c;并聚焦在预选策略的调度过程的执行。 二、正文 说明&#xff1a;基于 kubernetes v1.12.0 源码分析 上文我们说的(g *genericScheduler) Schedule()函数调用了findNodesThatFit()执行预选策略。 2.1 findNodesTha…

Truncated incorrect max_connections value: ‘999999‘

MySQL 的最大连接数&#xff08;max_connections&#xff09;可以设置的上限值在不同的资料中有所不同。以下是一些关键信息&#xff1a; 默认值和默认范围&#xff1a; MySQL 的默认最大连接数通常为 100 。一些资料提到默认值为 151 。 最大允许值&#xff1a; MySQL 的最大…

ant-design-vue:a-table表格中插入自定义按钮

本文将介绍如何使用ant-design-vue在a-table表格中加入自定义按钮和图标的代码。 结果如下图所示&#xff0c; 一、简单示例 <template><a-table:columns"columns":data-source"data":row-selection"rowSelection":ellipsis"tru…

对称密码学

1. 使用OpenSSL 命令行 在 Ubuntu Linux Distribution (发行版&#xff09;中&#xff0c; OpenSSL 通常可用。当然&#xff0c;如果不可用的话&#xff0c;也可以使用下以下命令安装 OpenSSL: $ sudo apt-get install openssl 安装完后可以使用以下命令检查 OpenSSL 版本&am…

深度学习基础案例4--构建CNN卷积神经网络实现对猴痘病的识别(测试集准确率86.5%)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 下一周会很忙&#xff0c;更新可能不及时&#xff0c;请大家见谅这个项目我感觉是一个很好的入门案例&#xff0c;但是自己测试的时候测试集准确率只比较…

mcu loader升级固件原理与实现

1 mcu loader升级固件原理 mcu 固件有两部分&#xff0c;如下图所示&#xff0c;一部分是 loader.bin&#xff0c;一部分是 app.bin&#xff0c;将两部分的固件合并在一起烧录进 mcu 的 flash 当中。mcu 上电进入loader 模式执行 loader.bin 部分的程序&#xff0c;然后读取 fl…

前端踩坑记录:javaScript复制对象和数组,不能简单地使用赋值运算

问题 如图&#xff0c;编辑table中某行的信息&#xff0c;发现在编辑框中修改名称的时候&#xff0c;表格中的信息同步更新。。。 检查原因 编辑页面打开时&#xff0c;需要读取选中行的信息&#xff0c;并在页面中回显。代码中直接将当前行的数据对象赋值给编辑框中的表单对…

51单片机——I2C总线

1、I2C总线简介 I2C总线&#xff08;Inter IC BUS&#xff09;是由Philips公司开发的一种通用数据总线 两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff09; 同步、半双工&#xff0c;带数据应答 通用的I2C总线&#…

Linux基础(包括centos7安装、linux基础命令、vi编辑器)

一、安装CentOS7 需要&#xff1a;1、VMware Workstation&#xff1b;2、CentOS7镜像 1、安装镜像 2、虚拟机配置 开启虚拟机&#xff0c;鼠标从vm中移出来用快捷键ctrlalt 点击开始安装&#xff0c;设置密码&#xff0c;等待安装完成,&#xff0c;重启。 3、注意事项 如果没…

通往RAG之路(二):版面结构检测方法介绍

一、基于yolov5的版面结构检测 AG系统搭建过程中&#xff0c;版面分析是不可缺少的一个步骤&#xff0c;本文介绍用yolov5进行版面结构信息识别&#xff0c;后续再搭配表格识别、公式识别、文字识别等模块进行版面还原&#xff0c;完成PDF结构化输出。 1.1、环境搭建 conda c…

解决方案:在autodl环境下为什么已安装torch打印出来版本号对应不上

文章目录 一、现象二、解决方案 一、现象 平台&#xff1a;autodl 镜像&#xff1a;PyTorch 2.0.0 Python 3.8(ubuntu20.04) Cuda 11.8 GPU&#xff1a;A40(48GB) * 1 CPU&#xff1a;15 vCPU AMD EPYC 7543 32-Core Processor 内存&#xff1a;80GB 安装torch:1.13.0环境&a…

深入理解指针(6)

目录&#xff1a; 1.字符指针变量 2.数组指针变量 3.二维数组传参本质 4.函数指针变量 5.函数指针的应用 1.字符指针变量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {char a w;char* p &a;printf("%p ", p);} 当我们想取出…

UE 【材质编辑】自定义材质节点

使用UE的材质编辑器&#xff0c;蓝图提供了大量的节点函数&#xff1a; 实际上&#xff0c;这是一段封装好的包含一串HLSL代码的容器。打开“Source/Runtime/Engine/Classes/Material”&#xff0c;可以看到很多不同节点的头文件&#xff1a; 照葫芦画瓢 以UMaterialExpressi…

ORM 编程思想

一、ORM简介 对象关系映射&#xff08;英语&#xff1a;Object Relational Mapping&#xff0c;简称ORM&#xff0c;或 O/R mapping&#xff09;是一种为了解决面向对象语言与关系数据库存在的 互不匹配的现象。 二、实体类 实体类就是一个定义了属性&#xff0c;拥有getter、…