web图书销售管理系统_Java Web实现简易的图书管理系统

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

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

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

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

运行效果:

fad031f91ed579a4f82f66407f2e290a.png

42ae3d9c5015b44e1f864afde0a2cfdf.png

c6e544dfabf7d2da6c071cceae5fe266.png

使用到的知识:

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项目这样的前端和后端都有的项目时,一定要保证自己已经熟悉了所学的知识,最好能跟着别人先做一个类似的项目,不然会面临自己没有见过的困难,而且开发效率也会很低。

一开始,我是准备使用我刚学的原生spring框架的ioc和jdbc template功能来辅助完成这个项目的,但后来因为使用jdbc模板操作数据库时程序始终会出现部署工件失败的问题,所以放弃了。对jdbc封装的类我是从另一位博主的文章上找的

https://blog.csdn.net/weixin_36380516/article/details/72904214,非常感谢这位博主。

代码:

下面放出部分代码,如果您想要查看该程序的完整代码,请私信我发给您


LoginServlet.java

package 

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>

----

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

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值