Java+JSP+Mysql+Tomcat实现Web图书管理系统(1)

9.管理员-图书管理主页


在这里插入图片描述

10.管理员-新增图书


在这里插入图片描述

11.管理员-修改图书


在这里插入图片描述

12.用户-主页


在这里插入图片描述

13.用户-图书明细查看


在这里插入图片描述

14.用户-新增留言


在这里插入图片描述

15.用户-借阅信息管理


在这里插入图片描述

16.用户-书架管理


在这里插入图片描述

三、代码实现

=====================================================================

Book


package com.sjsq.po;

import java.io.Serializable;

import java.util.Date;

/**

  • @author shuijianshiqing

  • @date 2020/5/19 22:40

*/

public class Book implements Serializable {

private static final long serialVersionUID = 1L;

private Integer bookid;

private String bookname;

private Double price;

private String author;

private String publish;

private Integer categoryid;

private String booklink;

private Date deadline;

public static long getSerialVersionUID() {

return serialVersionUID;

}

public Integer getBookid() {

return bookid;

}

public void setBookid(Integer bookid) {

this.bookid = bookid;

}

public String getBookname() {

return bookname;

}

public void setBookname(String bookname) {

this.bookname = bookname;

}

public Double getPrice() {

return price;

}

public void setPrice(Double price) {

this.price = price;

}

public String getAuthor() {

return author;

}

public void setAuthor(String author) {

this.author = author;

}

public String getPublish() {

return publish;

}

public void setPublish(String publish) {

this.publish = publish;

}

public Integer getCategoryid() {

return categoryid;

}

public void setCategoryid(Integer categoryid) {

this.categoryid = categoryid;

}

public String getBooklink() {

return booklink;

}

public void setBooklink(String booklink) {

this.booklink = booklink;

}

public Date getDeadline() {

return deadline;

}

public void setDeadline(Date deadline) {

this.deadline = deadline;

}

@Override

public String toString() {

return “Book{” +

“bookid=” + bookid +

“, bookname='” + bookname + ‘’’ +

“, price=” + price +

“, author='” + author + ‘’’ +

“, publish='” + publish + ‘’’ +

“, categoryid=” + categoryid +

“, booklink='” + booklink + ‘’’ +

“, deadline=” + deadline +

‘}’;

}

}

User


package com.sjsq.po;

import java.io.Serializable;

/**

  • @author shuijianshiqing

  • @date 2020/5/19 22:19

  • 用户的实体类

*/

public class User implements Serializable {

// 增加序列号,作用是反序列化的时候不会报错,切能进行IO的持久化

public static final long serialVersionUID = 1L;

private Integer userid;

private String username;

private String password;

private String email;

private String phone;

private Integer isadmin;

public static long getSerialVersionUID() {

return serialVersionUID;

}

public Integer getUserid() {

return userid;

}

public void setUserid(Integer userid) {

this.userid = userid;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getPhone() {

return phone;

}

public void setPhone(String phone) {

this.phone = phone;

}

public Integer getIsadmin() {

return isadmin;

}

public void setIsadmin(Integer isadmin) {

this.isadmin = isadmin;

}

@Override

public String toString() {

return “User{” +

“userid=” + userid +

“, username='” + username + ‘’’ +

“, password='” + password + ‘’’ +

“, email='” + email + ‘’’ +

“, phone='” + phone + ‘’’ +

“, isadmin=” + isadmin +

‘}’;

}

}

Record


package com.sjsq.po;

import java.util.Date;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 22:05

  • 借阅记录实体类

*/

public class Record {

private Integer borrowid;

private Integer userid;

private Integer bookid;

private String bookname;

private String booklink;

private Date borrowtime;

public Integer getBorrowid() {

return borrowid;

}

public void setBorrowid(Integer borrowid) {

this.borrowid = borrowid;

}

public Integer getUserid() {

return userid;

}

public void setUserid(Integer userid) {

this.userid = userid;

}

public Integer getBookid() {

return bookid;

}

public void setBookid(Integer bookid) {

this.bookid = bookid;

}

public String getBookname() {

return bookname;

}

public void setBookname(String bookname) {

this.bookname = bookname;

}

public String getBooklink() {

return booklink;

}

public void setBooklink(String booklink) {

this.booklink = booklink;

}

public Date getBorrowtime() {

return borrowtime;

}

public void setBorrowtime(Date borrowtime) {

this.borrowtime = borrowtime;

}

@Override

public String toString() {

return “Record{” +

“borrowid=” + borrowid +

“, userid=” + userid +

“, bookid=” + bookid +

“, bookname='” + bookname + ‘’’ +

“, booklink='” + booklink + ‘’’ +

“, borrowtime=” + borrowtime +

‘}’;

}

}

Comment


package com.sjsq.po;

import java.sql.Time;

import java.util.Date;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 17:18

  • 留言表

*/

public class Comment {

private Integer commentid;

private Integer userid;

private String username;

private Integer bookid;

private String bookname;

private String comment;

private Date time;

public Integer getCommentid() {

return commentid;

}

public void setCommentid(Integer commentid) {

this.commentid = commentid;

}

public Integer getUserid() {

return userid;

}

public void setUserid(Integer userid) {

this.userid = userid;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public Integer getBookid() {

return bookid;

}

public void setBookid(Integer bookid) {

this.bookid = bookid;

}

public String getBookname() {

return bookname;

}

public void setBookname(String bookname) {

this.bookname = bookname;

}

public String getComment() {

return comment;

}

public void setComment(String comment) {

this.comment = comment;

}

public Date getTime() {

return time;

}

public void setTime(Date time) {

this.time = time;

}

@Override

public String toString() {

return “Comment{” +

“commentid=” + commentid +

“, userid=” + userid +

“, username='” + username + ‘’’ +

“, bookid=” + bookid +

“, bookname='” + bookname + ‘’’ +

“, comment='” + comment + ‘’’ +

“, time=” + time +

‘}’;

}

}

BookShelf


package com.sjsq.po;

import java.util.Date;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 12:21

  • 书架类

*/

public class BookShelf {

private Integer id;

private Integer userid;

private Integer bookid;

private String bookname;

private String booklink;

private Date adddate;

private Date removedate;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public Integer getUserid() {

return userid;

}

public void setUserid(Integer userid) {

this.userid = userid;

}

public Integer getBookid() {

return bookid;

}

public void setBookid(Integer bookid) {

this.bookid = bookid;

}

public String getBookname() {

return bookname;

}

public void setBookname(String bookname) {

this.bookname = bookname;

}

public String getBooklink() {

return booklink;

}

public void setBooklink(String booklink) {

this.booklink = booklink;

}

public Date getAdddate() {

return adddate;

}

public void setAdddate(Date adddate) {

this.adddate = adddate;

}

public Date getRemovedate() {

return removedate;

}

public void setRemovedate(Date removedate) {

this.removedate = removedate;

}

@Override

public String toString() {

return “BookShelf{” +

“id=” + id +

“, userid=” + userid +

“, bookid=” + bookid +

“, bookname='” + bookname + ‘’’ +

“, booklink='” + booklink + ‘’’ +

“, adddate=” + adddate +

“, removedate=” + removedate +

‘}’;

}

}

BookDao


package com.sjsq.dao;

import com.sjsq.po.Book;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 23:13

  • 图书信息接口

*/

public interface BookDao {

/**

  • 查询图书信息

  • @param sql

  • @param arr

  • @return

*/

public List select(String sql, Object[] arr);

/**

  • 根据图书编号进行查询

  • @param bookid

  • @return

*/

public Book getBook(Integer bookid);

/**

  • 图书新增

  • @param book

  • @return

*/

public boolean addBook(Book book);

/**

  • 图书修改

  • @param book

  • @return

*/

public boolean updateBook(Book book);

/**

  • 删除图书

  • @param bookid

  • @return

*/

public boolean deleteBook(Integer bookid);

}

BookShelfDao


package com.sjsq.dao;

import com.sjsq.po.BookShelf;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 12:23

*/

public interface BookShelfDao {

/**

  • 按照用户名检索书架

  • @param userid

  • @return

*/

public List selectBookShelf(Integer userid);

/**

  • 加入书架

  • @param bookShelf

  • @return

*/

public boolean addBookShelf(BookShelf bookShelf);

/**

  • 移出书架

  • @param userid

  • @param bookid

  • @return

*/

public boolean removeBookShelf(Integer userid,Integer bookid);

}

CommentDao


package com.sjsq.dao;

import com.sjsq.po.Comment;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 17:21

*/

public interface CommentDao {

/**

  • 添加留言

  • @param comment

  • @return

*/

public boolean addComment(Comment comment);

/**

  • 展示留言

  • @param bookid

  • @return

*/

public List selectComment(Integer bookid);

}

RecordDao


package com.sjsq.dao;

import com.sjsq.po.Record;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 22:07

*/

public interface RecordDao {

/**

  • 查询所有借阅信息

  • @return

*/

public List selectRecords();

/**

  • 查询借阅信息

  • @return

*/

public List selectRecord(Integer userid);

/**

  • 新增借阅记录

  • @param record

  • @return

*/

public boolean addRecord(Record record);

/**

  • 删除借阅记录

  • @param borrowid

  • @return

*/

public boolean deleteRecord(Integer borrowid);

}

UserDao


package com.sjsq.dao;

import com.sjsq.po.User;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 22:10

  • 创建一个接口用于声明用户登录注册的方法

*/

public interface UserDao {

/**

  • 用户登录

  • @param user

  • @return

*/

public User login(User user);

/**

  • 用户注册

  • @param user

  • @return

*/

public boolean register(User user);

/**

  • 查询用户信息

  • @param sql

  • @param arr

  • @return

*/

public List selectUser(String sql, Object arr[]);

/**

  • 根据用户编号进行查询

  • @param userid

  • @return

*/

public User getUser(Integer userid);

/**

  • 新增用户

  • @param user

  • @return

*/

public boolean addUser(User user);

/**

  • 修改用户

  • @param user

  • @return

*/

public boolean updateUser(User user);

/**

  • 删除用户

  • @param userid

  • @return

*/

public boolean deleteUser(Integer userid);

}

BookService


package com.sjsq.service;

import com.sjsq.po.Book;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2020/5/20 23:37

  • Book的Service层

*/

public interface BookService {

/**

  • 查询图书信息

  • @param bookname

  • @return

*/

public List select(String bookname);

/**

  • 根据图书编号进行查询

  • @param id

  • @return

*/

public Book getBook(Integer id);

/**

  • 图书新增

  • @param book

  • @return

*/

public boolean addBook(Book book);

/**

  • 图书修改

  • @param book

  • @return

*/

public boolean updateBook(Book book);

/**

  • 删除图书

  • @param bookid

  • @return

*/

public boolean deleteBook(Integer bookid);

}

BookShelfService


package com.sjsq.service;

import com.sjsq.po.BookShelf;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 12:36

*/

public interface BookShelfService {

/**

  • 按照用户名检索书架

  • @param userid

  • @return

*/

public List selectBookShelf(Integer userid);

/**

  • 加入书架

  • @param bookShelf

  • @return

*/

public boolean addBookShelf(BookShelf bookShelf);

/**

  • 移出书架

  • @param userid

  • @param bookid

  • @return

*/

public boolean removeBookShelf(Integer userid,Integer bookid);

}

CommentService


package com.sjsq.service;

import com.sjsq.po.Comment;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 17:21

*/

public interface CommentService {

/**

  • 添加留言

  • @param comment

  • @return

*/

public boolean addComment(Comment comment);

/**

  • 展示留言

  • @param bookid

  • @return

*/

public List selectComment(Integer bookid);

}

RecordService


package com.sjsq.service;

import com.sjsq.po.Record;

import java.util.List;

/**

  • @author shuijianshiqing

  • @date 2021/5/22 22:17

*/

public interface RecordService {

/**

  • 查询所有借阅信息

  • @return

*/

public List selectRecords();

/**

  • 查询借阅信息

  • @return

*/

public List selectRecord(Integer userid);

/**

  • 新增借阅记录

  • @param record

  • @return

*/

public boolean addRecord(Record record);

/**

  • 删除借阅记录

  • @param borrowid

  • @return

*/

public boolean deleteRecord(Integer borrowid);

}

login.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

用户登录

用户登录


账号: 密码: 找回密码

注册

login-do-info.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%@ page import=“com.sjsq.dao.UserDao” %>

<%@ page import=“com.sjsq.dao.impl.UserDaoImpl” %>

<%@ page import=“com.sjsq.po.User” %>

<%@ page import=“com.sjsq.service.UserService” %>

<%@ page import=“com.sjsq.service.impl.UserServiceImpl” %>

<%@ page import=“java.util.List” %>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

用户登录

现存图书列表


<%

// 设置接收的编码为UTF-8

request.setCharacterEncoding(“utf-8”);

User user = new User();

UserDao dao = new UserDaoImpl();

String username = request.getParameter(“username”);

String password = request.getParameter(“password”);

user.setUsername(username);

user.setPassword(password);

// 获取用户登录信息

User us = dao.login(user);

// 把数据库里面的User获取出来

UserService service = new UserServiceImpl();

List list = service.selectUser(username);

for (int i = 0; i < list.size(); i++) {

user = list.get(i);

}

System.out.println(“----us的信息----”);

System.out.println(us);

// 设置会话

session.setAttribute(“user”, user);

// 这里要对us判空处理,1是管理者,0是学生,此处的isadmin必须填写不能为空。

if (us != null && us.getIsadmin().equals(1)) {

response.sendRedirect(“admin-home.jsp”);

} else if (us != null && !us.getIsadmin().equals(1)) {

response.sendRedirect(“user-home.jsp”);

} else {

response.sendRedirect(“login-fail.jsp”);

}

%>

login-fail.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8”%>

登录失败

登录失败


返回登录

logout.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

退出登录

<%

// 杀掉会话

session.invalidate();

// 重定向,地址栏的链接会发生改变

response.sendRedirect(“login.jsp”);

%>

register.jsp


<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8” %>

用户注册

用户注册


注册

重置

登录

register-do.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8”%>

<%@page import=“com.sjsq.dao.impl.UserDaoImpl”%>

<%@page import=“com.sjsq.dao.UserDao”%>

<%@page import=“com.sjsq.po.User”%>

处理注册

<%

// 设置获取注册时的编码为UTF-8

request.setCharacterEncoding(“UTF-8”);

User user=new User();

//获取register.jsp页面提交的账号和密码

String name=request.getParameter(“name”);

String password=request.getParameter(“password”);

String email=request.getParameter(“email”);

String phone=request.getParameter(“phone”);

//获取register.jsp页面提交的账号和密码设置到实体类User中

user.setUsername(name);

user.setPassword(password);

user.setEmail(email);

user.setPhone(phone);

//引入数据交互层

UserDao dao=new UserDaoImpl();

boolean flag=dao.register(user);

if(flag){

response.sendRedirect(“login.jsp”);

}else{

response.sendRedirect(“register.jsp”);

}

%>

search-password.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

找回密码

找回密码


返回上一级


请输入账号:

search-password-do.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%@page import=“java.util.List”%>

<%@page import=“com.sjsq.service.impl.UserServiceImpl”%>

<%@page import=“com.sjsq.po.User”%>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

处理找回密码

<%

User user=new User();

//获取searchPassword.jsp页面提交的账号和密码

String name=request.getParameter(“name”);

user.setUsername(name);

UserServiceImpl service=new UserServiceImpl();

List list=service.selectUser(user);

request.setAttribute(“list”, list);

for(User u:list){

request.setAttribute(“user”, u);

out.print(u);

}

if(user!=null){

request.getRequestDispatcher(“search-password-info.jsp”).forward(request, response);

}

%>

search-password-info.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%

// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错

String path = request.getContextPath();

String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”

  • request.getServerPort() + path + “/”;

%>

弹出信息

您的密码是:${user.password}

返回登录

admin-home.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

管理员主页

<%-- 头部 --%>

<jsp:include page=“top.jsp”/>

欢迎来到图书管理系统


管理员操作

管理用户

管理图书

admin-book-add.jsp


<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8” %>

新增图书

<%-- 头部 --%>

<jsp:include page=“top.jsp”/>

新增图书


返回上一级

添加

重置

admin-book-delete.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%@ page import=“com.sjsq.dao.BookDao” %>

<%@ page import=“com.sjsq.dao.impl.BookDaoImpl” %>

<%@ page import=“com.sjsq.po.Book” %>

<%@ page import=“com.sjsq.service.BookService” %>

<%@ page import=“com.sjsq.service.impl.BookServiceImpl” %>

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
TYPE html>

新增图书

<%-- 头部 --%>

<jsp:include page=“top.jsp”/>

新增图书


返回上一级

添加

重置

admin-book-delete.jsp


<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>

<%@ page import=“com.sjsq.dao.BookDao” %>

<%@ page import=“com.sjsq.dao.impl.BookDaoImpl” %>

<%@ page import=“com.sjsq.po.Book” %>

<%@ page import=“com.sjsq.service.BookService” %>

<%@ page import=“com.sjsq.service.impl.BookServiceImpl” %>

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-N0IeZa0P-1714873218614)]

[外链图片转存中…(img-7OF4vFWI-1714873218615)]

[外链图片转存中…(img-xUFvES16-1714873218615)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值