【Eclipse】MVC模式下的图书管理系统

第一次Java web的完整小项目,题目来自2020春季学期Java web开发技术课程设计。
团队成员3人
我负责的是管理端的图书修、删、查找,用户端的图书借阅、图书查找,以及部分可视化页面设计。
非常学生风格的成品,没什么技术含量,就简单纪念一下,因为是合作项目,所以只给出部分内容的思路。
一、CSS+HTML的可视化页面。
因为开发工具的问题,几乎没有涉及JavaScript的使用,所以会使代码看起来繁琐且不专业。
1、登陆后的用户端主页面:
默认显示是新书推荐页面,点击书名也可进行借书。
【Eclipse】MVC模式下的图书管理系统_第1张图片
welcome_user.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Library</title>
<link href="user.css" type="text/css" rel="stylesheet">
</head>
<body>
	<%
		String user = (String) request.getAttribute("account");
		session.setAttribute("account", user);
	%>
	<div id="header">
		<h1 style="margin-bottom: 0;"><%=user%>同学,Welcome to library
		</h1>
	</div>
	<div class="bar">
		<ul>
			<li><a href="ServletSkip?userdo=newbook&user=<%=user%>" target="menuFrame">
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新书推荐&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			</a></li>
			<li><a href="return_reservation.jsp" target="menuFrame">
			    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;归还图书&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			</a></li>
			<li><a href="ServletSkip?userdo=query&user=<%=user%>&do=null" target="menuFrame">
			    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;借阅图书&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			</a></li>
			<li><a href="#">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图书分类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
				<ul>
					<li><a href="ServletSkip?userdo=lit&user=<%=user%>">文学</a></li>
					<li><a href="ServletSkip?userdo=nature&user=<%=user%>">科学</a></li>
					<li><a href="ServletSkip?userdo=soc&user=<%=user%>">社会</a></li>
					<li><a href="ServletSkip?userdo=tec&user=<%=user%>">技术</a></li>
				</ul></li>
		</ul>

	</div>
	<div class="new">
		<iframe id="menuFrame" name="menuFrame" src="NewBook.jsp"
			style="overflow: visible;" scrolling="auto" frameborder="no"
			width="100%" height="100%"; float:left"> </iframe>
	</div>
	<div id="footer">All books are authentic, and the final
		interpretation right belongs to the library</div>
</body>
</html>

user.css

@charset "UTF-8";

body{
	margin:0;
	padding:0;
}
#header{
	background-color:#d3abcb;
	width:100%;
	height:50px;
	text-align:center;
    top: 0;
}
.new{
	background-color:#EEEEEE;
	height:700px;
	width:100%;
	float:left;
}

#footer{
	height:10%;
	background-color:#866d92;
	clear:both;
	text-align:center;
}
.bar{
	text-align:center;
    height:40px; 
    width:100%;
    background:rgb(189, 181, 181);
    margin-left: 0;
    float:right;
}
.bar ul{
    list-style-type: none;
    white-space:nowrap;
    overflow: hidden;
    margin-top: 0;
    margin-left:29%;          
    padding: 0;
}
.bar li {
    float:left; 
    margin-right:2%;  
    position: relative;
    overflow: hidden;
    text-align:center;
    display:inline;
}
.bar li a{
    display: block; 
    color:white;
    padding: 3px;
    overflow: hidden;
    text-decoration: none; 
    text-align:center;
}
.bar li a:hover{
    background-color: #111;
}
.bar ul li ul{
	text-align:center;
    margin-left: -0.2px;
    background:rgb(193, 176, 187);
    position: relative;
    display: none; 

}
.bar ul li ul li{
    float:none;
}
.bar ul li:hover ul{
    display: block;
}

NewBook.jsp(涉及到的ServletOperate.java后面有给出)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style type="text/css">
.new{
	background-color:#EEEEEE;
	height:100%;
	width:100%;
	float:left;
}
 h1 a{
    color:black;
    padding: 3px;
    overflow: hidden;
    text-decoration: none; 
}
 h2{
	 color:black;
    padding: 3px;
}
img{
	height:200px;
	width:160px;
	border-radius: 8px;
}</style>
<title>Insert title here</title>
</head>
<body>
<div class="new" >
<h1><a href="ServletOperate?indexs=T8561&sort=bno">云边有个小卖部</a></h1>
<h2>【中】张嘉佳</h2>
<img src="timg.jpg"/>
<p>
张嘉佳2018新作,连续三周获得畅销书榜首
云边镇少年刘十三的成长故事。
<h1><a href="ServletOperate?indexs=B7829&sort=bno">没有思想的世界</a></h1>
<h2>【美】富兰克林·福尔(Franklin Foer)</h2>
<img src="aaa.jpg"/>
<p>纽约时报、洛杉矶时报、美国国家公共广播电台年度影响力著作。
<h1><a href="ServletOperate?indexs=S8249&sort=bno">西川美和:围绕电影的X</a></h1>
<h2>【日】西川美和</h2>
<img src="bbb.jpg"/>
<p>囊括日本电影蓝丝带最佳导演奖、横滨电影节最佳导演奖、《电影旬报》年度十佳第一名。
倍受是枝裕和赞誉、当代日本女性导演的翘楚--西川美和,首部中文随笔集。
<h1><a href="ServletOperate?indexs=S4632&sort=bno">朴赞郁的蒙太奇</a></h1>
<h2>【韩】朴赞郁</h2>
<img src="ccc.jpg"/>
<p>本书收录了朴赞郁1997年到2005年间的文章及电影札记,记录了《共同警备区》《我要复仇》《老男孩》《亲切的金子》等重要电影的诞生过程及创作理念,导演对世界的看法,对习以为常现象的思考,对经典电影的剖析都闪烁着独特的智慧。
</div>

</body>
</html>

2、管理端操作主页面
【Eclipse】MVC模式下的图书管理系统_第2张图片
welocme_manager.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
* {
	margin: 0px;
	padding: 0px;
}
.header{
text-align: center;
    width:100%;
    height:75px;
    background-color:#d3abcb;
}
.main{
    width:100%;
    height:1000px;
}
.daohang{
 width:15%;
    height:100%;
     float:left;
     background-color:rgb(189, 181, 181);
}
ul{
   white-space: nowrap;
	overflow: hidden;
	text-align: center;
}
li{
    overflow: hidden;
	margin-bottom:10px;
}
li a{
    display: block;
	color: white;
	text-align: center;
	padding: 3px;
	overflow: hidden;
	text-decoration: none;
}
li a:hover{
    background-color: #111;
}
.content{
 height:100%;
  background-color:#866d92;

}
</style>
</head>
<body>
<div class="header">
<h2>Welcome,manager</h2>
<h3>you can do the following</h3>
</div>
<div class="main">
<div class="daohang"><ul>
		<li><a href="#" target="menuFrame">增加图书</a></li>
		<li><a href="#" target="menuFrame">删除用户</a></li>
		<li><a href="#" target="menuFrame">查询用户</a></li>
		<li><a href="#" target="menuFrame">更改图书</a></li>
		</ul></div>
<div class="content"><iframe id="menuFrame" name="menuFrame" src="announce_manager.jsp" style=" background-color: #EEEEEE; width:84%; height:1000px; float:right ;frameborder:0">
</iframe></div>
</div>
</body>
</html>

二、管理端对图书的修、删、查找。
1、修删(弊端是:数据库中所有的图书全部列出,优化的话,可以专门分出想要修删的类别)
可视化页面:
change_book.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="object.*"%>
<%@ page import="dao.*"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8">
<title>管理员_图书编辑</title>
<style type="text/css">
a:link,a:visited{
    text-decoration: none;
    color:#0000CD;
    display:block;
    text-align:center;
    background-color:#D4F2E7;
}
a:active,a:hover{
    background-color:#00CED1;
}
</style>
</head>
<body>
	<h2 align="center">Operate</h2>
	<table border="0" bgcolor="#ccceee" align="center">
		<tr bgcolor="#CCCCCC" align="center">
			<th>书号</th>
			<th>书名</th>
			<th>作者</th>
			<th>价格</th>
			<th>简介</th>
			<th>操作</th>
			<th></th>
		</tr>
		<%
			BookDao bd = new BookDao();
			ArrayList<Books> list = bd.findall();
			if (list == null || list.size() < 1) {
				out.print("没有数据!");
			} else {
				for (Books book : list) {
		%>
		<tr align="center" >
			<td><%=book.getBno()%></td>
			<td><%=book.getBname()%></td>
			<td><%=book.getBauthor()%></td>
			<td><%=book.getBprice()%></td>
			<td><%=book.getBremark()%></td>
			<td><a href="ServletBook?do=editbefore&bno=<%=book.getBno()%>">更改</a></td>
			<td><a href="ServletBook?do=del&bno=<%=book.getBno()%>">删除</a></td>
		</tr>
		<%
			}
			}
		%>
	</table>
</body>
</html>

edit_book.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="beans.*"%>
<%@ page import="dao.*"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>编辑书籍</title>
</head>
<body>
	<%
	//String a =(String)session.getAttribute("editbook");
	//BookDao bd = new BookDao();
	//Books book=bd.find(a);
	  Book a =(Book)session.getAttribute("editbook");
	  String b=""+a.getBprice(); 
	%>
	<form action="ServletBookEdit">
		<table>
			<tr>
				<td>书号:</td>
				<td><input name="bnoo" value="<%=a.getBno()%>"></td>
			</tr>
			<tr>
				<td>书名:</td>
				<td><input name="bname" value="<%=a.getBname() %>"></td>
			</tr>
			<tr>
				<td>作者:</td>
				<td><input name="bauthor" value="<%=a.getBauthor() %>"></td>
			</tr>
			<tr>
				<td>价格:</td>
				<td><input name="bprice" value="<%=b%>"></td>
			</tr>
			<tr>
				<td>简介:</td>
				<td><textarea name="bremark" cols="50" rows="7" ><%=a.getBremark() %></textarea><</td>
			</tr>
		</table>
				<input type="submit" value="修改"></td> 
				<input type="reset" value="取消"></td>
			
	</form>
</body>
</html>

【Eclipse】MVC模式下的图书管理系统_第3张图片
【Eclipse】MVC模式下的图书管理系统_第4张图片

【Eclipse】MVC模式下的图书管理系统_第5张图片
需要的bean:Books.java


public class Books {
	private String Bno;//书号
	private String Bname;//书名
	private String Bauthor;//作者名
	private String Bremark;//简介
	private double Bprice;//价格
	private int Bbrrow;//借阅状态
	private int Breserve;//预约状态
	
	public Books() {
		super();
		// TODO 自动生成的构造函数存根
	}
	public Books(String bno, String bname, String bauthor, double bprice, String bremark) {
		super();
		Bno = bno;
		Bname = bname;
		Bauthor = bauthor;
		Bremark = bremark;
		Bprice = bprice;
	}
	public String getBno() {
		return Bno;
	}
	public void setBno(String bno) {
		Bno = bno;
	}
	public String getBname() {
		return Bname;
	}
	public void setBname(String bname) {
		Bname = bname;
	}
	public String getBauthor() {
		return Bauthor;
	}
	public void setBauthor(String bauthor) {
		Bauthor = bauthor;
	}
	public String getBremark() {
		return Bremark;
	}
	public void setBremark(String bremark) {
		Bremark = bremark;
	}
	public double getBprice() {
		return Bprice;
	}
	public void setBprice(double bprice) {
		Bprice = bprice;
	}
	public int getBbrrow() {
		return Bbrrow;
	}
	public void setBbrrow(int bbrrow) {
		Bbrrow = bbrrow;
	}
	public int getBreserve() {
		return Breserve;
	}
	public void setBreserve(int breserve) {
		Breserve = breserve;
	}
	

}

DataConn.java(连接数据库,以下使用不再赘述)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DataConn {
	private static String drivername="com.mysql.cj.jdbc.Driver";
	private static String username="root";   
	private static String password="root";
	private static String dbs="lms";
	
    public static Connection getConnection() throws Exception
    {
    	String url1="jdbc:mysql://localhost:3306/"+dbs+"?useSSL=false&serverTimezone=UTC";
    	try {
			Class.forName(drivername);
			Connection conn=DriverManager.getConnection(url1,username,password);
			return conn;
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		}
		return null;
    }
    public static void closeConnection(Connection conn,PreparedStatement ptsm,ResultSet rs)
    {
    	try {
    		if(rs!=null)
    			rs.close();
    		if(ptsm!=null)
    			ptsm.close();
    		if(conn!=null)
    			conn.close();
    	}
    	catch(SQLException e)
    	{
    		e.printStackTrace();
    	}
    	 
    }

}

需要的Dao:BookDao.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.mysql.cj.xdevapi.Result;

import bean.DataConn;
import object.Books;

public class BookDao implements IBookDao {
	private static final String PreparedStatement = null;
	protected static String sql = "Bno, Bname,Bauthor,Bprice, Bremark,Bbrrow,Breserve";
	protected static String delete_sql = "delete from books where Bno=?";
	protected static String change_sql = "update books set Bno=?,Bname=?,Bauthor=?,Bprice=?,Bremark=? where Bno=?";

	public BookDao() {
		super();
		// TODO 自动生成的构造函数存根
	}

	
	public Books create(Books book) throws Exception {

		return null;
	}

	
	public Books find(String bno) throws Exception {
		Connection conn = null;
		Books bs = new Books();
		conn = DataConn.getConnection();
		Statement ptsm = conn.createStatement();
		String select = "select * from books where Bno=" + "'" + bno + "'";
		ResultSet rs = ptsm.executeQuery(select);
		if (rs.next()) {
			bs.setBno(rs.getString(1));
			bs.setBname(rs.getString(2));
			bs.setBauthor(rs.getString(3));
			bs.setBprice(rs.getDouble(4));
			bs.setBremark(rs.getString(5));
			bs.setBbrrow(rs.getInt(6));
			bs.setBreserve(rs.getInt(7));
		}
		ptsm.close();
		rs.close();
		conn.close();
		return bs;
	}

	
	public void delete(String bno) throws Exception {
		Connection conn = null;
		PreparedStatement ptsm = null;
		ResultSet rs = null;
		conn = DataConn.getConnection();
		ptsm = conn.prepareStatement(delete_sql);
		ptsm.setString(1, bno);
		ptsm.executeUpdate();
		DataConn.closeConnection(conn, ptsm, rs);
	}

	
	public void change(Books book) throws Exception {
		Connection conn = null;
		PreparedStatement ptsm = null;
		ResultSet rs = null;
		conn = DataConn.getConnection();
		ptsm = conn.prepareStatement(change_sql);
		ptsm.setString(1, book.getBno());
		ptsm.setString(2, book.getBname());
		ptsm.setString(3, book.getBauthor());
		ptsm.setDouble(4, book.getBprice());
		ptsm.setString(5, book.getBremark());
		ptsm.setString(6, book.getBno());
		int a = ptsm.executeUpdate();
		DataConn.closeConnection(conn, ptsm, rs);
	}

	
	public ArrayList<Books> findall() throws Exception {
		ArrayList<Books> booklist = new ArrayList<Books>();
		String sql = "select * from books";
		Connection conn = null;
		PreparedStatement ptsm = null;
		ResultSet rs = null;
		conn = DataConn.getConnection();
		ptsm = conn.prepareStatement(sql);
		rs = ptsm.executeQuery();
		try {
			while (rs.next()) {
				Books u = new Books(rs.getString(1), rs.getString(2), rs.getString(3), rs.getDouble(4),
						rs.getString(5));
				booklist.add(u);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		DataConn.closeConnection(conn, ptsm, rs);
		return booklist;
	}

	public ArrayList<Books> findfuzzy(String sort, String indexs) throws Exception {
		ArrayList<Books> booklist = new ArrayList<Books>();
		Connection conn = null;
		Books bs = new Books();
		conn = DataConn.getConnection();
		String select = "select * from books where " + sort + " like'%" + indexs + "%'";
		PreparedStatement pstmt = conn.prepareStatement(select);
		ResultSet rs = pstmt.executeQuery();
		try {
			while (rs.next()) {
				Books u = new Books(rs.getString(1), rs.getString(2), rs.getString(3), rs.getDouble(4),
						rs.getString(5));
				u.setBbrrow(rs.getInt(6));
				u.setBbrrow(rs.getInt(7));
				booklist.add(u);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		pstmt.close();
		rs.close();
		conn.close();
		return booklist;
	}

}

需要的Servlet:
ServletBook.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dao.BookDao;
import object.Books;

/**
 * Servlet implementation class ServletBook
 */
public class ServletBook extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		HttpSession session = request.getSession();
		PrintWriter out = response.getWriter();
		BookDao bd = new BookDao();
		String dos = request.getParameter("do");
		if (dos == null || dos.equals("")) {
			dos = "index";
		}
		if (dos.equals("index")) {
			response.sendRedirect("change_book.jsp");
		}
		if (dos.equals("del")) {
			String bno = request.getParameter("bno");
			try {
				bd.delete(bno);
				out.print("");
			} catch (Exception e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}

		}
		if (dos.equals("editbefore")) {
			try {
				String kkk = request.getParameter("bno");
				Books bs=new Books();
				bs = bd.find(kkk);
				session.setAttribute("editbook", bs);
				response.sendRedirect("edit_book.jsp");
			} catch (Exception e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

ServleBooktEdit.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dao.BookDao;
import object.Books;

/**
 * Servlet implementation class ServletBookEdit
 */
public class ServletBookEdit extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		HttpSession session = request.getSession();
		PrintWriter out = response.getWriter();
		BookDao bd = new BookDao();
		
			String bno = request.getParameter("bnoo");
			String bname = request.getParameter("bname");
			String ba = request.getParameter("bauthor");
			String bp = request.getParameter("bprice");
			Double b2 = Double.parseDouble(bp);
			String br = request.getParameter("bremark");
			Books bs = new Books(bno, bname, ba, b2, br);
			bs.setBbrrow(1);
			bs.setBreserve(1);
			try {
				bd.change(bs);
				out.print("");
			} catch (Exception e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
	
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

2、查找
模糊查找很粗暴,作者、书名或书号。
query_book.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询书籍提交界面</title>
</head>
<body>
<center>
	<form action="ServletSelectBook">
		<input type="text" name="indexs" size="30"><br> 
		<input name="sort" value="bno" type="radio" checked />书号
		 <input name="sort" value="bname" type="radio">书名 
		 <input name="sort" value="bauthor" type="radio">作者<br> 
		 <input type="submit" value="查询">
		  &nbsp;&nbsp;&nbsp;&nbsp;
		 <input type="reset" value="取消">
	</form>
</center>
</body>
</html>

query_result.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="beans.*"%>
<%@ page import="dao.*"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询书籍显示结果界面</title>
</head>
<body>
	<%
		String a = (String) session.getAttribute("s");
		String b = (String) session.getAttribute("result");
		BookDao bd = new BookDao();
		ArrayList<Book> Book = bd.findfuzzy(a, b);
		if (Book == null || Book.size() < 1) {
			out.print("没有数据!");
		} else {
			for (Book book : Book) {
	%>
	<h1><%=book.getBname()%></h1>
	<h2>
		书号:<%=book.getBno()%></h2>
	<h2>
		作者:<%=book.getBauthor()%></h2>
	<h2>
		价格:<%=book.getBprice()%></h2>
	<p>
		简介:
		<%=book.getBremark()%></p>
	<%
		   }
		}
	%>
</body>
</html>

【Eclipse】MVC模式下的图书管理系统_第6张图片
需要的bean:Books.java BookDao.java
需要的Dao:DataConn.java
需要的servlet:ServletOperate.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dao.BookDao;
import object.Books;

/**
 * Servlet implementation class ServletOperate
 */
public class ServletOperate extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		HttpSession session = request.getSession();
		String sort = request.getParameter("sort");
		String indexs=request.getParameter("indexs");
		String t=(String)getServletContext().getAttribute("usersno");
		if (sort == null || sort.equals("")) {
			response.sendRedirect("query_book.jsp");
		}
		else  {
			
			if(sort.equals("bno"))
			try {
				String s="Bno";
				session.setAttribute("s", s);
			
			} catch (Exception e) {
				
				e.printStackTrace();
			}
			
		if (sort.equals("bname")) {
			try {
				String s="Bname";
				session.setAttribute("s", s);
			
			} catch (Exception e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			
		}
		if (sort.equals("bauthor")) {
			try {
				String s="Bauthor";
				session.setAttribute("s", s);
			
				
			} catch (Exception e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		session.setAttribute("result", indexs);
		session.setAttribute("xh", t);
		response.sendRedirect("query_result.jsp");

		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

三、用户端的查找与借书
在此之前,需要把登录端成功提交的用户名传值到ServletSkip.java中
登录端的可视化页面就不放出来了,servlet如下

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class ServletSkip
 */
public class ServletSkip extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		HttpSession session = request.getSession();
		PrintWriter out = response.getWriter();
		String userdos=request.getParameter("userdo");
		String sno=request.getParameter("user");
		if(userdos.equals("query"))
			{
			//session.setAttribute("usersno", sno);
			session.getServletContext().setAttribute("usersno",sno);
			response.sendRedirect("query_book.jsp");
			}
		if(userdos.equals("newbook"))
		{
		//session.setAttribute("usersno", sno);
		session.getServletContext().setAttribute("usersno",sno);
		response.sendRedirect("NewBook.jsp");
		}
		if(userdos.equals("nature"))
		{
		//session.setAttribute("usersno", sno);
		session.getServletContext().setAttribute("usersno",sno);
		response.sendRedirect("nature.jsp");
		}
		if(userdos.equals("lit"))
		{
		//session.setAttribute("usersno", sno);
		session.getServletContext().setAttribute("usersno",sno);
		response.sendRedirect("literature.jsp");
		}
		if(userdos.equals("soc"))
		{
		//session.setAttribute("usersno", sno);
		session.getServletContext().setAttribute("usersno",sno);
		response.sendRedirect("society.jsp");
		}
		if(userdos.equals("tec"))
		{
		//session.setAttribute("usersno", sno);
		session.getServletContext().setAttribute("usersno",sno);
		response.sendRedirect("technology.jsp");
		}
		if(userdos.equals("")||userdos==null) {
			out.println("网页错误");
		}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

1、查找
比管理端的模糊查找多了分类查找,可以根据书号的编写方法,分别查找文学、科学、社会、技术类别的书籍
每一大类还有许多小类,可根据图书简介下的借书状态,判断是否要借
【Eclipse】MVC模式下的图书管理系统_第7张图片
例如:文学(literature.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
* {
	margin: 0px;
	padding: 0px;
}
.main{
   width:  100%;
   height: 1000px;
   background-color:red;
   float: left;
}
.daohang{
    width: 10%;
	float:left;
	height: 100%;
	background-color:rgb(189, 181, 181);
}
ul{
   white-space: nowrap;
	overflow: hidden;
	text-align: center;
}
li{
    overflow: hidden;
	margin-bottom:10px;
}
li a{
    display: block;
	color: white;
	text-align: center;
	padding: 3px;
	overflow: hidden;
	text-decoration: none;
}
li a:hover{
    background-color: #111;
}
.yemian{
	height: 100%;
    background-color:#EEEEEE;
}

</style>
</head>

<body>
	<div class="main">
		<div class="daohang">
		<ul>
		<li><a href="ServletOperate?indexs=S&sort=bno" target="menuFrame">散文</a></li>
		<li><a href="ServletOperate?indexs=X&sort=bno" target="menuFrame">古典</a></li>
		<li><a href="ServletOperate?indexs=Z&sort=bno" target="menuFrame">通俗</a></li>
		<li><a href="ServletOperate?indexs=T&sort=bno" target="menuFrame">纪实</a></li>
		</ul>
		</div>
		<div class="yemian">
		<iframe id="menuFrame" name="menuFrame" src="" style=" background-color: #adb9cd; width:89.5%; height:1000px; float:right ;frameborder:0">
</iframe>
		</div>
	</div>

</body>
</html>

【Eclipse】MVC模式下的图书管理系统_第8张图片
需要的bean、servlet如上所示
2、借书
借书时会直接跳转至模糊查找的界面:
这里的query_book.jsp、servlet、bean、dao与管理端的相同
这里更改一下的query_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="beans.*"%>
<%@ page import="dao.*"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
body {
	background-color: #EEEEEE;
	text-align: center;
}

a {
	display: block;
	color: black;
	text-align: center;
	padding: 5px;
	margin: 10px;
	overflow: hidden;
	text-decoration: none;
	background-color: white
}

a:active, a:hover {
	background-color: #C5E3E3
}
</style>
</head>
<body>
	<%
		String d = (String) session.getAttribute("xh");
	%>
	<h1><%=d%></h1>
	<%
		String a = (String) session.getAttribute("s");
		String b = (String) session.getAttribute("result");
		BookDao bd = new BookDao();
		ArrayList<Book> Book = bd.findfuzzy(a, b);
		if (Book == null || Book.size() < 1) {
			out.print("没有数据!");
		} else {
			for (Book book : Book) {
	%>
	<h1><%=book.getBname()%></h1>
	<h2>
		书号:<%=book.getBno()%></h2>
	<h2>
		作者:<%=book.getBauthor()%></h2>
	<h2>
		价格:<%=book.getBprice()%></h2>
	<p>
		简介:
		<%=book.getBremark()%></p>
	<%
		if (book.getBborrow() == 0) {
	%>
	<a href="ServletBorrow?sno=<%=d%>&bno=<%=book.getBno()%>">借书</a>
	<%
		} else {
	%>
	<a href="#">已出借</a>
	<%
		}
			}
		}
	%>
</body>
</html>

【Eclipse】MVC模式下的图书管理系统_第9张图片
增加的ServletBorrow.java:

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dao.BookDao;
import dao.SBBDao;
import dao.StudentDao;
import dao.TimeDao;
import object.Books;
import object.SBB;
import object.Student;

/**
 * Servlet implementation class ServletBorrow
 */
public class ServletBorrow extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		HttpSession session = request.getSession();
		String sno=request.getParameter("sno");
		String bno=request.getParameter("bno");
		StudentDao sd=new StudentDao();
		SBBDao sbbd=new SBBDao();
		BookDao bd=new BookDao();
		Student stu=new Student();
		Date d = new Date();
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(d);
		int year=calendar.get(Calendar.YEAR);	
		int month=calendar.get(Calendar.MONTH);					
		int day=calendar.get(Calendar.DATE);							
		int hour=calendar.get(Calendar.HOUR_OF_DAY);				
		int minute=calendar.get(Calendar.MINUTE);					
		int second=calendar.get(Calendar.SECOND);
		TimeDao td=new TimeDao(year,month,day,hour,minute,second);
		String sbb1=td.SBB1();
		String sbb2=td.SBB2();
		SBB sb=new SBB(sno,bno,sbb1,"0",sbb2,0);
		try {
			stu=sd.find(sno);
			Books bs=bd.find(bno);
			int m=stu.getSborrow();
			if(m<8)
			{
				bs.setBbrrow(0);
				bs.setBreserve(0);
				bd.change(bs);
				sbbd.Insert(sb);
				stu.setSborrow(m+1);
				sd.change(stu);
				session.setAttribute("student", stu);
				response.sendRedirect("borrow_success.jsp");
				
			}
			else {
				response.sendRedirect("borrow_fail.jsp");
			}
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			
		}
		
	
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

这里还需给出dao:TimeDao.java(用来计算应还的日期)

public class TimeDao {
	private int year;
	private int month;
	private int day;
	private int hour;
	private int minute;
	private int second;
	public TimeDao() {
		super();
		// TODO 自动生成的构造函数存根
	}
	
	public TimeDao(int year, int month, int day, int hour, int minute, int second) {
		super();
		this.year = year;
		this.month = month;
		this.day = day;
		this.hour = hour;
		this.minute = minute;
		this.second = second;
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}

	public int getDay() {
		return day;
	}

	public void setDay(int day) {
		this.day = day;
	}

	public int getHour() {
		return hour;
	}

	public void setHour(int hour) {
		this.hour = hour;
	}

	public int getMinute() {
		return minute;
	}

	public void setMinute(int minute) {
		this.minute = minute;
	}

	public int getSecond() {
		return second;
	}

	public void setSecond(int second) {
		this.second = second;
	}
    public int Runnian()
    {
    	if(year%100!=0&&year%4==0)
    	{
    		return 1;
    	}
    	else { return 0;}
    }
	public String SBB1()
	{
		String sbb1=year+"-"+month+"-"+day;
		return sbb1;
	}
	public String SBB2()
	{
		int year2;
		int month2;
		int day2;
		int[] time={31,28,31,30,31,30,31,31,30,31,30,31};
		if(Runnian()==1)
		{
			time[1]=29;
		}else {
			time[1]=28;
		}
			if(month==12)
			{
				month2=1;
				year2=year+1;
				day2=day;
			}
			else {
			if(time[month]<31)
			{
				if(day==31)
				{
					month2=month+2;
					day2=day-time[month];
				}
				else {
					month2=month+1;
					day2=day;
				}
			
				
			}
			else {
				month2=month+1;
				day2=day;
			}
			year2=year;
			
		}
			return year2+"-"+month2+"-"+day2;
		
	}

}

以及Bean:StudentDao.java(查找、更改学生的借书的本数)

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import beans.JdbcUtil;
import beans.Student;

public class StudentDao {
	protected static String change_sql = "update Students set Sborrow=? where Sno=?";
	
	public Student find(String sno) throws Exception {
		Connection conn = null;
		Student bs = new Student();
		conn = JdbcUtil.getConnection();
        Statement ptsm = conn.createStatement();
        String select="select * from students where Sno='"+sno+"'";
		ResultSet rs = ptsm.executeQuery(select);
		if (rs.next()) {
			bs.setSno(rs.getString(1));
			bs.setSname(rs.getString(2));
			bs.setSclass(rs.getInt(3));
			bs.setSgrade(rs.getInt(4));
			bs.setSprofession(rs.getString(5));
			bs.setSborrow(rs.getInt(6));
		}
		ptsm.close();
		rs.close();
        conn.close();
		return bs;
	}
	public void change(Student stu) throws Exception {
		Connection conn = null;
		PreparedStatement ptsm = null;
		ResultSet rs = null;
		conn =JdbcUtil.getConnection();
		ptsm = conn.prepareStatement(change_sql);
		ptsm.setInt(1, stu.getSborrow());
		ptsm.setString(2, stu.getSno());
		int n=ptsm.executeUpdate();
		JdbcUtil.free(rs, ptsm, conn);
	}


}

SBBDao.java(增添学生借书的记录)

import java.sql.Connection;
import java.sql.PreparedStatement;

import beans.JdbcUtil;
import beans.SBB;

public class SBBDao {

	public  void Insert(SBB b) throws Exception {
		Connection conn=null;
		conn =JdbcUtil.getConnection();
		String sql="insert into SBB(Sno,Bno,Brodate,Retdate,SRetdate,Reborrow) values(?,?,?,?,?,?);";
		PreparedStatement ptsm= conn.prepareStatement(sql);
		ptsm.setString(1, b.getSno());
		ptsm.setString(2,b.getBno());
		ptsm.setString(3, b.getBrodate());
		ptsm.setString(4, b.getRetdate());
		ptsm.setString(5,b.getSRetdate());
		ptsm.setInt(6, b.getReborrow());
		int n=ptsm.executeUpdate();
		JdbcUtil.free(null, ptsm, conn);
	}

}

若学生已借书的本数小于8本,则跳转至成功页面(borrow_success.jsp),否则跳转至失败页面(borrow_fail.jsp)
borrow_success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="beans.*"%>
<%@ page import="dao.*"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		Student s = (Student) session.getAttribute("student");
	%>
	<h1 align="center"><%=s.getSname()%>借书成功!</h1>

</body>
</html>

borrow_fail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 align="center">您已达导借书数量最大限度!</h1>
<h1 align="center">抱歉借书失败!!!</h1>
</body>
</html>

你可能感兴趣的:(JavaWeb)