Java Web实现简易的图书管理系统

Java 专栏收录该内容
14 篇文章 2 订阅
Java Web实现简易的图书管理系统

这是一个使用Java Web相关的知识做出来的网页图书管理系统,使用的数据库为mysql。

程序中实现了登录功能和对图书表、图书类别表的增删查改功能。

因为我对Java Web相关的知识的了解还非常有限,所以这个程序的功能和实现上都还有着很多需要完善的地方。

运行效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


使用到的知识:
java、servlet、jsp、jdbc
html、css、js、jquery、bootstrap

运行环境:
Windows JDK9 IDEA2020 MySQL5.7.29

问题:
编写程序期间我遇到了很多问题,其中有两个大问题困扰了我很久,在此我将其记录下来:
第一个问题是,(idea)java web项目无法正常使用 项目/lib路径下的项目依赖,需要将其添加到web/WEB-INF/lib路径下才可以。因为这个问题我耽误了很久的时间,因为这个问题在搜索引擎上搜不到答案,而且它也不是一个逻辑上的问题,让别人看别人也看不出来。最终我还是在csdn上胡乱搜索的时候,碰巧看到了这个问题的答案。在此我非常感谢提供了该问题答案的那一位博主。

第二个问题是,在jsp页面上,我始终不知道怎么用jstl标签和el表达式获取从servlet传来的信息,这个问题是我对相关知识不熟悉导致的。最终我选择了使用<%%>最原始的方式实现了相关功能。

其他:
以后在开始动手写一个项目之前,尤其是以后的web项目这样的前端和后端都有的项目时,一定要保证自己已经熟悉了所学的知识,最好能跟着别人先做一个类似的项目,不然会面临自己没有见过的困难,而且开发效率也会很低。

对jdbc封装的类我是从另一位博主的文章上找的 链接,非常感谢这位博主。

代码:
下面放出部分代码,如果您想要查看该程序的完整代码,请前往我的个人网站http://150.158.165.239/#/resource以免费获取完整代码资源

LoginServlet.java

package main.java.controler;

import main.java.entity.User;
import main.java.service.UserService;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/public/login")
public class LoginServlet extends HttpServlet {

    // 处理登录jsp提交的表单
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("登录servlet post");

        // 获取提交来的数据
        String userName = request.getParameter("username");
        String password = request.getParameter("password");

        UserService service = new UserService();

        User user = new User();
        user.setUserName(userName);
        user.setUserPassword(password);

        // 判断用户是否存在
        if(service.isUserInfo(user)) {
            // 设置该用户的session
            HttpSession session = request.getSession();
            session.setAttribute("username", userName);
            session.setMaxInactiveInterval(60 * 60);
            // 存在登录成功 跳转到首页
//            request.getRequestDispatcher("/").forward(request, response);
            response.sendRedirect(request.getContextPath() + "/");  //重定向
        }
        else {
            // 不存在则重新跳转到登录界面
            request.getRequestDispatcher("/webapps/Login.jsp").forward(request, response);
        }
    }

    // 跳转到登录jsp界面
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("登录界面");

        //请求转发的路径的默认路径为web/,且在路径最前边要加上/
        request.getRequestDispatcher("/webapps/Login.jsp").forward(request, response);
    }
}

BookDaoImpl.java

package main.java.dao;

import main.java.entity.Book;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class BookDaoImpl implements BookDao {

    @Override
    public void add(Book book) {
        String sql = "insert into `book` (book_name,book_author,book_price,book_desc,book_type_id) values(?,?,?,?,?)";
        MyJDBC.insert(sql, true, book.getBookName(), book.getBookAuthor(), book.getBookPrice(), book.getBookDesc(), book.getBookTypeId());
    }

    @Override
    public void update(Book book) {
        String sql = "update `book` set `book_name`=?, book_author=?, book_price=?, book_desc=?, book_type_id=? WHERE book_id=?";
        MyJDBC.execute(sql,book.getBookName(), book.getBookAuthor(), book.getBookPrice(), book.getBookDesc(), book.getBookTypeId(), book.getBookId());
    }

    @Override
    public List<Book> queryAll() {
        return whereQuery("select * from `book`");
    }

    @Override
    public void delete(String id) {
        String SQL = "delete from `book` where book_id=?";
        MyJDBC.execute(SQL, id);
    }

    /**
     * 根据sql参数查找全部结果
     */
    @Override
    public List<Book> whereQuery(String sql) {
        ResultSet result = MyJDBC.query(sql);

        List<Book> bookList = new ArrayList<>();
        try {
            while (result.next()) {
                Book book = new Book();
                book.setBookId(result.getInt(1) + "");
                book.setBookName(result.getString(2));
                book.setBookAuthor(result.getString(3));
                book.setBookPrice(result.getString(4));
                book.setBookDesc(result.getString(5));
                book.setBookTypeId(result.getInt(6) + "");

                bookList.add(book);
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return bookList;
    }
}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: ASUS
  Date: 2020/9/18
  Time: 19:59
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ page import="main.java.entity.BookType" %>
<%@ page import="main.java.service.BookTypeService" %>
<%@ page import="main.java.service.BookService" %>
<%@ page import="main.java.entity.Book" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!-- 登录界面 -->

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>首页</title>

  <link rel="stylesheet" type="text/css" href="/webapps/css/bootstrap-theme.css"/>
  <link rel="stylesheet" type="text/css" href="/webapps/css/bootstrap.css"/>
  <link rel="stylesheet" type="text/css" href="/webapps/css/index.css"/>
</head>


<body>
  <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
   url="jdbc:mysql://localhost:3306/books_management?useUnicode=true&characterEncoding=utf-8"
   user="root"  password="123456"/>

  <div class="topbar">
    <div class="title col-lg-2 col-lg-offset-5">图书管理系统</div>
  </div>

  <div class="content">
    <div class="sidebar">
      <ul>
        <li style="background-color: #4c7bd2; box-shadow:0px 0px 6px black inset;"><span>图书管理</span></li>
        <li><span>图书类别管理</span></li>
      </ul>
    </div>

    <ul class="win-ul">
      <li style="display: block;" id="win-1">
        <div class="top" style="width: 860px;">
          <div class="top-content">
            <form action="" method="get">
              <input type="text" class="form-control" name="bookName" placeholder="图书名称"
                     style="width:260px;"/>
              <input type="text" class="form-control" name="bookAuthor" placeholder="图书作者"
                     style="width:260px; margin-left: 30px;"/>
              <sql:query dataSource="${snapshot}" var="result_bookTypeId">
                SELECT * from books_type;
              </sql:query>

              <select class="form-control" style="width: 100px; margin-left: 30px;" name="bookTypeId">
                <option>全部</option>
                <c:forEach var="row" items="${result_bookTypeId.rows}">
                  <option>${row.book_type_id}</option>
                </c:forEach>
              </select>
              <button type="submit" class="btn btn-primary query-but" style="margin-left: 60px;">&nbsp;&nbsp;&nbsp;查询&nbsp;&nbsp;&nbsp;</button>
            </form>
          </div>
        </div>

        <div class="win-table table-responsive">
          <!-- 添加界面 -->
          <div class="table-add-back"> <!-- 背景 -->
            <div class="table-add-content"> <!-- 内容 -->
              <div class="close-but btn btn-default">X</div>

              <label class="title">图书添加</label>

              <form class="input-box" action="/bookAddServlet" method="get">
                <input type="text" name="bookNameAdd" class="table-add-text form-control text-flag" placeholder="图书名称"/>
                <input type="text" name="bookAuthorAdd" class="table-add-text form-control text-flag" placeholder="图书作者"/>
                <input type="text" name="bookPriceNameAdd" class="table-add-text form-control text-flag" placeholder="图书价格"/>

                <sql:query dataSource="${snapshot}" var="result_bookTypeId">
                  SELECT * from books_type;
                </sql:query>

                <select class="form-control" style="width: 100px; margin-left: 22px;" name="bookTypeIdAdd">
                  <c:forEach var="row" items="${result_bookTypeId.rows}">
                    <option>${row.book_type_id}</option>
                  </c:forEach>
                </select>
                <textarea class="table-add-text form-control text-flag" rows="6" name="bookDesc" placeholder="图书描述"></textarea>
                <button type="submit" class="table-add-but btn btn-primary">添加</button>
              </form>
            </div>
          </div>

          <input type="button" name="table_add" value="&nbsp;&nbsp;添加&nbsp;&nbsp;" class="btn btn-success add-button" style="font-weight: bold;"/>

          <table class="table table-striped table-bordered table-hover" style="width: inherit;">
            <thead>
            <tr>
              <td>图书id</td>
              <td>图书名称</td>
              <td>图书作者</td>
              <td>图书价格</td>
              <td>图书描述</td>
              <td>图书类别id</td>
              <td class="oper-cell-book">操作</td>
            </tr>
            </thead>

            <%-- 图书表格内容 --%>
            <sql:query dataSource="${snapshot}" var="result_book">
              SELECT * from `book`;
            </sql:query>

            <tbody class="table-tbody">

                <%
                  String bookName = request.getParameter("bookName");;
                  String bookAuthor = request.getParameter("bookAuthor");
                  String bookTypeId = request.getParameter("bookTypeId");

                  //要执行的sql语句前部分
                  StringBuilder sqlBuilder = new StringBuilder("SELECT * FROM book");

                  boolean flag_WHERE = false; //是否添加WHERE标记

                  //图书名文本区不为空
                  if (!(bookName == null)) {
                    sqlBuilder.append(" WHERE " + "book_name LIKE '%"+ bookName +"%'");
                    flag_WHERE = true;
                  }

                  //图书作者文本区不为空
                  if (!(bookAuthor == null)) {
                    if(!flag_WHERE) {
                      sqlBuilder.append(" WHERE ");
                      flag_WHERE = true;
                    }
                    else
                      sqlBuilder.append(" AND ");

                    sqlBuilder.append("book_author LIKE '%"+ bookAuthor +"%'");
                  }

                  if(bookTypeId != null) {
                    //不为全部时
                    if (!bookTypeId.equals("全部")) {
                      if(!flag_WHERE) {
                        sqlBuilder.append(" WHERE ");
                        flag_WHERE = true;
                      }
                      else
                        sqlBuilder.append(" AND ");

                      sqlBuilder.append("book_type_id = '"+ bookTypeId +"'");
                    }
                  }

                  String bookSQL = sqlBuilder.toString();     //得到需要执行的sql语句

                  System.out.println(bookSQL);

                  BookService bookService = new BookService();
                  List<Book> bookList = bookService.whereQueryBook(bookSQL);

                  for(Book book : bookList) {
                    out.print("<tr>");
                    out.print("<td>" + book.getBookId() + "</td>");
                    out.print("<td>" + book.getBookName() + "</td>");
                    out.print("<td>" + book.getBookAuthor() + "</td>");
                    out.print("<td>" + book.getBookPrice() + "</td>");
                    out.print("<td>" + book.getBookDesc() + "</td>");
                    out.print("<td>" + book.getBookTypeId() + "</td>");
                    out.print("<td>" +
                            "<a  class=\"updent-but-book\" href=\"" + request.getContextPath() + "/webapps/bookUpdate.jsp?id=" + book.getBookId() + "\">修改</a>"+
                            "<a  class=\"updent-but-book\" href=\"" + request.getContextPath() + "/BookDeleteServlet?id=" + book.getBookId() + "\">删除</a>"+
                            "</td>");
                    out.print("</tr>");
                  }
                %>
            </tbody>
          </table>

<%--          暂时不做分页--%>
<%--          <div class="bottom-but">--%>
<%--            <ul class="bottom-but-ul">--%>
<%--              <li>1</li>--%>
<%--            </ul>--%>
<%--          </div>--%>
        </div>
      </li>

      <!-- 图书类别管理界面 -->
      <li id="win-2">
        <div class="top">
          <div class="top-content">
            <form action="" method="get">
              <input type="text" class="form-control query-text" name="bookTypeName" placeholder="图书类别名称"
                     style="width:400px;"/>
              <button type="submit" class="btn btn-primary query-but" style="margin-left: 50px;">&nbsp;&nbsp;&nbsp;查询&nbsp;&nbsp;&nbsp;</button>
            </form>
          </div>
        </div>

        <div class="win-table table-responsive">

          <!-- 添加界面 -->
          <div class="table-add-back"> <!-- 背景 -->
            <div class="table-add-content"> <!-- 内容 -->
              <div class="close-but btn btn-default">X</div>

              <label class="title">图书类别添加</label>

              <form class="input-box" action="/BookTypeAddServlet" method="get">
                <input type="text" name="bookTypeNameAdd" class="table-add-text form-control text-flag" placeholder="图书类别名称"/>
                <textarea class="table-add-text form-control text-flag" rows="6" name="bookTypeDesc" placeholder="图书类别描述"></textarea>
                <button type="submit" class="table-add-but btn btn-primary">添加</button>
              </form>
            </div>
          </div>

          <input type="button" name="table_add" value="&nbsp;&nbsp;添加&nbsp;&nbsp;" class="btn btn-success add-button" style="font-weight: bold;"/>

          <table class="table table-striped table-bordered table-hover" style="width: inherit;">
            <thead>
            <tr>
              <td>图书类别id</td>
              <td>图书类别名称</td>
              <td>图书类别描述</td>
              <td class="oper-cell">操作</td>
            </tr>
            </thead>

            <tbody class="table-tbody">

            <%
              String bookTypeName = request.getParameter("bookTypeName");

              String sql1 = "SELECT * FROM books_type WHERE book_type_name LIKE \"%"+ bookTypeName +"%\"";

              if(bookTypeName == null || bookTypeName.equals("")) {
                sql1 = null;
              }

              String sql = sql1;
              System.out.println(sql + "sql");
              if(sql == null) {
                sql = "select * from `books_type`";
              }

              System.out.println(sql + "sql");

              BookTypeService service = new BookTypeService();
              List<BookType> bookTypeList = service.whereQueryBookType(sql);

              for(BookType type : bookTypeList) {
                out.print("<tr>");
                out.print("<td>" + type.getTypeId() + "</td>");
                out.print("<td>" + type.getTypeName() + "</td>");
                out.print("<td>" + type.getTypeDesc() + "</td>");
                out.print("<td>" +
                        "<a  class=\"updent-but-book\" href=\"" + request.getContextPath() + "/webapps/bookTypeUpdate.jsp?id=" + type.getTypeId() + "\">修改</a>"+
                        "<a  class=\"updent-but-book\" href=\"" + request.getContextPath() + "/BookTypeDeleteServlet?id=" + type.getTypeId() + "\">删除</a>"+
                        "</td>");
                out.print("</tr>");
              }
            %>
            </tbody>
          </table>

<%--          暂时不做分页--%>
<%--          <div class="bottom-but">--%>
<%--            <ul class="bottom-but-ul">--%>
<%--              <li>1</li>--%>
<%--            </ul>--%>
<%--          </div>--%>
        </div>
      </li>
    </ul>
  </div>

  <script type="text/javascript" src="/webapps/javascript/jquery.js"></script>
  <script type="text/javascript" src="/webapps/javascript/index.js"></script>
</body>
</html>

如果您有什么问题,也欢迎提出,感谢支持。

2.1 可行性分析 采用现代化统一的计算机信息网站系统,能够有效优化图书管理系统,使其高效的发挥最大作用,能够迅捷的为读者提供相应的服务。开发本系统的可行性研究如下: 2.1.1 技术可行性 技术上的可行性分析主要分析技术条件能否顺利完成开发工作,软、硬件能否满足需要。本系统采用JSP开发出友好美观的人机界面,便于用户理解、操作。数据库管理系统采用MySQL,它能够处理大量数据,同时保持数据的完整性、安全性。因此本系统的开发平台已成熟可行。硬件方面,在科技飞速发展的今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越便宜,因此硬件平台也能够满足本系统所需。 2.1.2 经济可行性 鉴于计算机技术发展异常迅猛,在硬件软件配置以及开发技术均以可行的情况下开发这样一个管理系统成本不会很高,但其可以大大提高图书馆的工作效率,也是图书管理发展的必然趋势,其必将有比较宽阔的市场,因此改性统在经济可行性上时可行的。 2.2 图书借阅管理系统需求概述 2.2.1 系统目标 该系统主要建立一个基于B/S模式的图书馆借阅管理系统,面对当起很多小型图书管理仍是人工管理带来的检索速度慢,效率低,借阅归还图书量大,图书统计工作量大,藏书不能完成及时更新的问题,该系统可以对跟系统的三个用户类型的使用实现: (1)对于读者在本系统的应用下可实现按照各种方式(如:书名,编号,作者)查询图书馆的藏书请客,方便的借阅图书,续借图书,归还图书,能够查询自己的借阅图书情况。 (2)对于图书馆工作人员能够实现方便的对图书进行查询,方便的进行读者借阅情况查询,方便的进行借书还书处理等,便捷的对图书信息进行添加、修改、删除,分类管理等操作,对读者信息进行相关添加,修改,分类管理等操作。 (3)对于系统管理员可以对图书馆信息进行修改更新操作,对系统用户进行添加、修改、删除、权限设置等操作,对图书馆的办证参数进行修改维护等操作功能。 2.2.2 用户类和用户特性 图书借阅管理系统是一个基于B/S模式的对图书馆进行高效率管理的应用系统,它的用户主要是读者和图书管理员,图书管理员通过本系统实现图书及读者的高效管理,除此之外,还需要一个系统管理员对不同的用户进行权限的设置等操作。 三类用户的具体描述如表2.1所示。 表2.1用户具体描述
<p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; background-color: #ffffff;">随着网络时代的到来,电子信息化的飞速发展,图书馆作为一种信息资源的聚集地,图书种类的繁多,用户借阅的繁琐,包含很多的信息数据的管理,以及信息数据的交互。那么如果有一套具体的完善的图书管理系统就显得尤为重要,图书馆如果采用人工来管理书籍和借阅管理,由于资料繁多,手工处理的方式不仅工作量大,管理效率低下,也很容易因为疲劳而产生出错,更不方便读者对图书资料的查阅。为了提高图书管理的效率,本项目针对图书管理,设计了一个面向图书管理系统。&nbsp;</span></p> <p>&nbsp;</p> <p><strong style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; orphans: 4; background-color: #ffffff;">项目部分截图</strong></p> <p>&nbsp;</p> <p><strong style="font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; margin: 0px; padding: 0px; color: #313d54; font-size: 16px; orphans: 4; background-color: #ffffff;"><span style="font-weight: 400;">登录首页</span></strong></p> <p><img src="https://img-bss.csdnimg.cn/202104160932138751.jpg" alt="" /></p> <p>&nbsp;</p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;">图书管理</span></p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;"><img src="https://img-bss.csdnimg.cn/202104160934267218.jpg" alt="" /></span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;">图书新增</span></p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;"><img src="https://img-bss.csdnimg.cn/202104160934538162.jpg" alt="" /></span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;">图书详情</span></p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;"><img src="https://img-bss.csdnimg.cn/202104160935082342.jpg" alt="" /></span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>读者管理</p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;"><img src="https://img-bss.csdnimg.cn/202104160935358984.jpg" alt="" /></span></p> <p style="orphans: 4;">&nbsp;</p> <p style="orphans: 4;"><span style="color: #313d54; font-family: Helvetica Neue, Helvetica, Hiragino Sans GB, Arial, sans-serif;"><span style="background-color: #ffffff;">读者新增</span></span></p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;"><img src="https://img-bss.csdnimg.cn/202104160935547322.jpg" alt="" /></span></p> <p style="orphans: 4;">&nbsp;</p> <p style="orphans: 4;"><span style="color: #313d54; font-family: Helvetica Neue, Helvetica, Hiragino Sans GB, Arial, sans-serif;"><span style="background-color: #ffffff;">借阅管理</span></span></p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;"><img src="https://img-bss.csdnimg.cn/202104160936092226.jpg" alt="" /></span></p> <p style="orphans: 4;">&nbsp;</p> <p style="orphans: 4;"><span style="color: #313d54; font-family: Helvetica Neue, Helvetica, Hiragino Sans GB, Arial, sans-serif;"><span style="background-color: #ffffff;">读者中心</span></span></p> <p><span style="color: #313d54; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', Arial, sans-serif; font-size: 16px; orphans: 4; background-color: #ffffff;"><img src="https://img-bss.csdnimg.cn/202104160936263835.jpg" alt="" /></span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><img src="https://img-bss.csdnimg.cn/202104160936399362.jpg" alt="" /></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><img src="https://img-bss.csdnimg.cn/202104160936471519.jpg" alt="" /></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><img src="https://img-bss.csdnimg.cn/202104160936555856.jpg" alt="" /></p> <p>&nbsp;</p> <p>&nbsp;</p>
©️2022 CSDN 皮肤主题:创作都市 设计师:CSDN官方博客 返回首页

打赏作者

Bai jiaming

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值