基于javaweb开发图书管理系统

book-management-system javaweb,图书管理系统,软件设计与分析,期末大作业 前言 本项目是一个基于 javaWeb 的图书管理系统

本文包含相关资料包-----> 点击直达获取<-------

book-management-system

javaweb,图书管理系统,软件设计与分析,期末大作业

前言

本项目是一个基于 javaWeb 的图书管理系统,实现了登录、注册和基本的 CRUD 操作

使用的技术是 Servlet,JSP,AJAX,bootstrap 等

项目没有进行数据库调优(主要还是自己太菜了),所以应该无法撑起大规模访问

之所以我能够在短时间内完成这个 javaWeb 项目,是因为之前的小组大作业,都是我一个人完成的,所以我有权利对之前的项目进行重构,进而改变成我的个人大作业。也正是因为是前一个项目重构完成的,所以,这个项目的界面设计,与我之前完成的学生管理系统(第一次大作业)比较相似。

项目介绍

数据库设计

因为项目比较轻量级,功能不是太复杂,所以设计的数据库表也不多

  • book:

存储书本的信息,分别是书本 ISBN 编号,书本名称,书本价格,书本数目以及作者

  • reader:

存储读者信息,包含读者的 id,密码,以及真实姓名

  • admin:

存储管理员信息,包含管理员的 id,密码,以及真实姓名

  • reader_book:

存储读者的借阅信息,包含自增长 id,读者 id,和图书的 ISBN 编号

前端界面一览

登录界面:

注册界面:

读者端首页:

借阅界面:

归还界面:

管理员首页:

图书管理界面:

用户管理界面:

项目内容描述

项目内容,我会分成前端和后端进行介绍,因为是 CRUD 项目,所以难免会出现很多重复的地方,我只会挑选重点来讲解

前端

前端的总体设计布局,是一个 header(导航栏),一个 footer(尾栏),和中间的内容

导航栏用来显示当前用户对象可以进行的操作

尾栏包含这个项目的版权信息(就是我的个人信息)

导航栏

因为读者的导航栏和管理员的导航栏布局类似,所以只介绍一个读者的

代码如下:

```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%--这里不包含taglib,因为重复包含,会导致500的错误--%>

首栏

```

登录界面

代码如下:

```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %>

登录 <%@include file="include/taglib.jsp"%> <%-- 登录界面的logo设计样式--%>

读者 管理员

```

在界面设计中,为了加快开发进度,我使用了 bootstrap 库,其中的登录、注册按钮,就是 bootstrap 中的样式

jsp <input type="button" id="btn_login" value="登录"/> <input type="button" id="btn_register" value="注册"/>

为了图省事,我没有为 js 代码额外开一个文件,而是直接和前端界面放在了一起(这不是一个好习惯),里面的主要功能,是获取输入框中的内容,然后使用 AJAX 异步访问,让服务端去访问持久层,然后再向登录端传回响应

```jsp

```

注册界面的设计思路和登录界面的差不多,这里就不再额外介绍了

图书借阅

代码如下:

```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %>

图书借阅 <%@include file="include/taglib.jsp"%> <%@include file="include/readerheader.jsp"%> <% BookDao bookDao = new BookDao(); List list = bookDao.list(); request.setAttribute("bookList",list); %>

所有书籍

序号 书籍名称 ISBN 作者 价格 剩余数量 操作
${st.count} ${book.name} ${book.ISBN} ${book.writer} ${book.price} ${book.num}
<%@include file="include/footer.jsp"%>

```

这里,我使用了 EL 表达式和 JSTL 标签库,为的是更方便我的开发

EL 表达式:

```jsp

${st.count}

```

JSTL 标签库:

jsp <c:forEach items="${bookList}" var="book" varStatus="st">

当读者点选借阅按钮后,AJAX 会将对应的图书的 ISBN 传回后台,并在后台进行数量、读者是否正在借阅等判断,如果都判断有效,会将该书的数目减 1,并在 reader_book 表中添加借阅数据(具体的后端代码,会在后面进行详细描述)

```jsp

```

表格,是借助 JSP 中的 Java 代码,和 JSTL 标签库实现的

JSP 中的 Java 代码:

```jsp <% BookDao bookDao = new BookDao(); List list = bookDao.list(); request.setAttribute("bookList",list);

%> ```

JSTL 表达式,实现循环:

jsp <c:forEach items="${bookList}" var="book" varStatus="st"> <tr> <td>${st.count}</td> <td>${book.name}</td> <td>${book.ISBN}</td> <td>${book.writer}</td> <td>${book.price}</td> <td>${book.num}</td> <td > <button class="Pbb_3fd3_d314a37 btn btn-primary" value="${book.ISBN}" id="borrow">借阅</button> </td> </tr> </c:forEach>

Bootstrap

Bootstrap 的使用,为我的开发带来了极大的便利,使得我一个人在两天内开发一个 JavaWeb 项目成为了可能

在使用 bootstrap 前,要导入对应的库:

这里为了图方便,我直接使用了 bootstrap 的在线库

```jsp <%--新 Bootstrap 核心 CSS 文件--%>

<%--jQuery文件。务必在bootstrap.min.js 之前引入--%>

<%--最新的 Bootstrap 核心 JavaScript 文件--%>

```

下面,我会展示 bootstrap 的便利

定制按钮:

这个之前在讲登录、注册的时候已经提过了

jsp <input type="button" id="btn_login" value="登录"/> <input type="button" id="btn_register" value="注册"/>

图形按钮:

比如编辑的笔的形状,删除的小垃圾桶形状

jsp <a href="/editbook.jsp?bookISBN=${book.ISBN}" ></a> <a href="/deletebook?bookISBN=${book.ISBN}" ></a>

表格:

项目里的斑马条纹表格,也是使用的 bootstrap

```jsp

``` 前端的剩余部分,无论是外观,还是功能上的,都大体类似,所以,我不再做过多的赘述,下面,我们进入后端部分的讲解 ### 后端 > 后端的主要编写,在于 Dao 层和 servlet 部分,前者,是用来固化数据的,后者,是用来处理前端传来的数据的(即我们常说的业务代码) #### Bean 层 > Bean,也称为 pojo,entity(个人习惯问题),是数据库中,每个表的对应类,其中每个成员变量,都对应数据库表中的一个属性 > > 一般的 bean,都包含带参构造函数,无参构造函数,get set 方法 和重写的 toString 方法(方便打印查看),为了保障通用性,我没有使用 lombok 简化 bean(我觉得用这玩意儿就是绑架) > > 编写 Bean 层,是为了保证数据库数据,和业务数据可以有一个良好的交互和完美的转换方案 **bean.Book:** ```java public class Book { private String name; private float price; private int num; private String writer; private int ISBN; public Book(String name, float price, int num, String writer, int ISBN) { this.name = name; this.price = price; this.num = num; this.writer = writer; this.ISBN = ISBN; } public Book() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getWriter() { return writer; } public void setWriter(String writer) { this.writer = writer; } public int getISBN() { return ISBN; } public void setISBN(int ISBN) { this.ISBN = ISBN; } @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", price=" + price + ", num=" + num + ", writer='" + writer + '\'' + ", ISBN=" + ISBN + '}'; } } ``` #### Dao 层 > Dao 层,是用来固化数据的,其中的业务代码,无非就是增删改查这四种,这里,我拿一个 BookDao 的部分来举例子 **BookDao.list():** 用来提取出 book 表中所有的数据 ```java public List list() { List list = new ArrayList<>(); String sql = "select * from book"; try (Connection conn = DBUtil.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)){ ResultSet rs = stmt.executeQuery(); while (rs.next()) { int ISBN = rs.getInt(1); String name = rs.getString(2); float price = rs.getFloat(3); int num = rs.getInt(4); String writer = rs.getString(5); Book book = new Book(name, price, num, writer, ISBN); list.add(book); } } catch (SQLException throwables) { throwables.printStackTrace(); } return list; } ``` **BookDao.add(Book bean):** 用来向 book 表中添加数据 ```java public void add(Book bean) { String sql = "insert into book values(?,?,?,?,?)"; try(Connection conn = DBUtil.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setInt(1,bean.getISBN()); stmt.setString(2,bean.getName()); stmt.setFloat(3,bean.getPrice()); stmt.setInt(4,bean.getNum()); stmt.setString(5,bean.getWriter()); stmt.execute(); } catch (SQLException throwables) { throwables.printStackTrace(); } } ``` 因为 JDBC 中很多内容,都是挺重复的,所以剩下的我就不展示了 #### Servlet > 这里,我先来分享一下 servlet 的事件处理流程 > > ![](https://www.writebug.com/myres/static/uploads/2021/11/3/371adfe9ffce3d4d06c65668e90b3ccd.writebug) > > 下面,我就以一个 BorrowBookServlet 来举例,并展示一下整个由前端到后端,再到前端的流程 **servlet.BookBookServlet:** * **AJAX 异步传输数据:** > 这里传输的,是书本的 ISBN 编号,并且指定使用 post 方法 > > 如果传输失败,会弹出提交错误的提示 > > 请求访问的是/borrowbook,这会在.xml 中进行匹配 ```jsp ``` * **XML 配置文件:** > AJAX 中,要求访问的地址,是/borrowbook,这要在.xml 中匹配,转移到对应的 servlet 中 ```xml BorrowBookServlet top.faroz.servlet.BorrowBookServlet BorrowBookServlet /borrowbook ``` * **Servlet:** > 这里到了我们的重头戏,servlet > > 这里,会根据传来的 ISBN 编号,和当前登录的用户的 ID,向 reader_book 表中存储图书借阅的信息。如果在判断中出现错误,会返回错误代码,以让前端的 AJAX 接收到,从而更具错误代码,对用户进行提示。 ```java @WebServlet(name = "BorrowBookServlet") public class BorrowBookServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String bookISBN = request.getParameter("bookISBN"); Reader reader = (Reader) request.getSession().getAttribute("user");//登录的读者信息 PrintWriter writer = response.getWriter(); BookDao bookDao = new BookDao(); ReaderBookDao readerBookDao = new ReaderBookDao(); ReaderBookService readerBookService = new ReaderBookService(); Book book = bookDao.get(Integer.parseInt(bookISBN)); //对借阅进行判断 if (book==null) { writer.print(-1);//-1 没有该图书 return; } if (book.getNum()<=0) { writer.print(-2);//-2 图书不足 return; } if (readerBookService.getByReaderAndBook(reader.getId(),Integer.parseInt(bookISBN))!=null) { writer.print(-3);//-3 读者正在借阅该书 return; } //将借阅的书籍个数-1 book.setNum(book.getNum()-1); bookDao.update(book); //将读者信息和书本信息存入reader_book ReaderBook readerBook = new ReaderBook(); readerBook.setReader_id(reader.getId()); readerBook.setBook_ISBN(Integer.parseInt(bookISBN)); readerBookDao.add(readerBook); request.getRequestDispatcher("/borrowbook.jsp").forward(request,response); } ``` 上面,就是用户选择借阅以后,整个的运行流程。 其他的功能,因为和上面是实现方式差不多,所以不再过多的进行赘述

参考文献

  • 基于JSP技术网上书店的设计与实现(吉林大学·佟彤)
  • 基于SSH框架的图书馆管理系统分析与设计(云南大学·郑晨)
  • 基于JSP的网上书店系统的设计与实现(吉林大学·马新)
  • 基于ASP.NET技术的中山图书Web管理系统的设计与实现(江西财经大学·陈宇)
  • 网上书店的设计与实现(同济大学·徐爱鸣)
  • 基于SSH框架的图书馆管理系统分析与设计(云南大学·郑晨)
  • 图书交易网站的设计与实现(吉林大学·刘静言)
  • 基于B/S架构的图书管理系统的设计与实现(山东大学·蒲琼)
  • 基于JSP的网上书店系统的设计与实现(吉林大学·马新)
  • 基于.NET技术的高校图书管理系统的设计与实现(吉林大学·李敏琪)
  • 基于Android平台的图书管理系统手机客户端开发(电子科技大学·赵鲲)
  • 复旦大学数字图书馆个人图书管理系统的设计与实现(电子科技大学·陆卫国)
  • 图书综合管理系统(吉林大学·王宇)
  • 图书管理系统设计与开发(电子科技大学·刘晓清)
  • Android环境下的沈阳工学院移动图书馆的研究(沈阳理工大学·张波)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设工厂 ,原文地址:https://m.bishedaima.com/yuanma/35727.html

相关推荐

发表回复

登录后才能评论