Java.实现简单的图书管理系统

本项目是基于JDBC技术实现对数据库的连接,从而实现简单系统的管理,项目实现了,用户注册、用户登录、图书信息显示、添加图书和删除图书的功能

一:功能展示

先给大家看一下思维导图:
在这里插入图片描述

1.用户注册

在这里插入图片描述

2.用户登录

在这里插入图片描述

3.添加图书

在这里插入图片描述

4.删除图书

在这里插入图片描述

二:准备

  • 1.首先在本地数据库中创建两张表,一张存储用户信息,一张存储图书信息
    在这里插入图片描述
    在这里插入图片描述

  • 2.Servlet 开发环境(tomcat服务器)

三:流程

1.在工程中创建Book类和User类

图书类:

import java.util.ArrayList;
import java.util.List;

public class Book {
	private int bookId;				//图书ID
	private String bookName;		//图书名称
	private float bookPrice;		//图书价格
	private String bookPublisher;	//出版社
	private String bookDesc;		//图书描述
	public int getBookId() {
		return bookId;
	}
	public void setBookId(int bookId) {
		this.bookId = bookId;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	public float getBookPrice() {
		return bookPrice;
	}
	public void setBookPrice(float bookPrice) {
		this.bookPrice = bookPrice;
	}
	public String getBookPublisher() {
		return bookPublisher;
	}
	public void setBookPublisher(String bookPublisher) {
		this.bookPublisher = bookPublisher;
	}
	public String getBookDesc() {
		return bookDesc;
	}
	public void setBookDesc(String bookDesc) {
		this.bookDesc = bookDesc;
	}
	@Override
	public String toString() {
		return "Book [bookId=" + bookId + ", bookName=" + bookName + ", bookPrice=" + bookPrice + ", bookPublisher="
				+ bookPublisher + ", bookDesc=" + bookDesc + "]";
	}
}

用户类:

public class User {
	private String uName;	//用户名
	private String uPwd;	//用户密码
	
	public String getUName() {
		return uName;
	}
	public void setUName(String uName) {
		this.uName = uName;
	}
	public String getUPwd() {
		return uPwd;
	}
	public void setUPwd(String uPwd) {
		this.uPwd = uPwd;
	}
	@Override
	public String toString() {
		return "User [uName=" + uName + ", uPwd=" + uPwd + "]";
	}
	
}

2.创建DBUtil类连接数据库

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DBUtil {
	// 连接SqlServer的配置信息
	private String driver;
	private String connStr;
	private String user;
	private String pwd;

	private Connection conn = null;

	public DBUtil() {
		// 加载配置文件,初始化SqlServer配置属性
		try {
			loadDBProperty("DBConfig.properties");
		} catch (ClassNotFoundException | IOException | SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 加载数据库配置文件
	 * 
	 * @param pFile
	 * @throws IOException
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	private void loadDBProperty(String pFile) throws IOException, ClassNotFoundException, SQLException {
		// 创建Properties对象
		Properties prop = new Properties();
		// 加载配置文件
		prop.load(DBUtil.class.getClassLoader().getResourceAsStream(pFile));
		driver = prop.getProperty("DRIVER");
		connStr = prop.getProperty("CONN_STR");
		user = prop.getProperty("USER");
		pwd = prop.getProperty("PWD");
	}

	// 获取连接对象
	private void connectToDB() throws SQLException, ClassNotFoundException {
		if (null == conn || conn.isClosed()) {
			Class.forName(driver);
			conn = DriverManager.getConnection(connStr, user, pwd);
		}
	}

	/**
	 * 查询数据
	 * 
	 * @param sql 查询数据的sql语句
	 * @return 查询到的数据集
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public ResultSet queryDate(String sql) throws ClassNotFoundException, SQLException {
		// 连接到数据库
		connectToDB();
		Statement stmt = conn.createStatement();
		// 执行查询
		ResultSet rs = stmt.executeQuery(sql);
		return rs;
	}

	/**
	 * 判断数据是否存在
	 * 
	 * @param sql 查询的sql语句
	 * @return 存在则返回true,否则返回false
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public boolean isExist(String sql) throws ClassNotFoundException, SQLException {
		// 连接到数据库
		connectToDB();
		Statement stmt = conn.createStatement();
		// 执行查询
		ResultSet rs = stmt.executeQuery(sql);
		return rs.next();
	}

	/**
	 * 插入数据
	 * 
	 * @param sql 执行插入的sql语句
	 * @return 插入记录的行数
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public int addDataToTable(String sql) throws ClassNotFoundException, SQLException {
		// 连接到数据库
		connectToDB();
		Statement stmt = conn.createStatement();
		return stmt.executeUpdate(sql);
	}

	/**
	 * 修改或删除数据
	 * 
	 * @param sql 待操作的SQL语句
	 * @return 修改或删除的记录行数
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 */
	public int updateData(String sql) throws ClassNotFoundException, SQLException {
		// 连接到数据库
		connectToDB();
		Statement stmt = conn.createStatement();
		return stmt.executeUpdate(sql);

	}

	/**
	 * 关闭数据库连接
	 * 
	 * @throws SQLException
	 */
	public void closeDB() throws SQLException {
		if (null != conn && !conn.isClosed()) {
			conn.close();
		}
	}
}

3.制作登录、登录失败、添加图书、注册的静态页面

登录页面:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>
	<h1>用户登录</h1>
	</p>
	<p>
	<form action="login.action" method="post">
		用户名: <input type="text" name="uName"><br/><br/>
		密 码: <input type="password" name="uPwd"><br/><br/>
		<input type="submit" value="登录"><br/><br/>
		<a href="regest.html">注册新用户</a>
	</form>
	</p>
</body>
</html>

登录失败:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>用户名或密码错误,<a href="login.html">请返回重新登录</a></h1>
</body>
</html>

注册:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>
	<h1>用户注册</h1>
	</p>
	<p>
	<form action="regest.action" method="post">
		用户名: <input type="text" name="uName"><br/><br/>
		密 码: <input type="password" name="uPwd"><br/><br/>
		确认密码: <input type="password" name="uPwdCopy"><br/><br/>
		<input type="submit" value="注册">
</body>
</html>

添加图书:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <h1>添加图书</h1>
  <form action="addBook.action" method="post">
     bookName:       <input type="text" name="bookName"><br/>
     bookPrice:      <input type="text" name="bookPrice"><br/>
     bookPublisher:  <input type="text" name="bookPublisher"><br/>
     bookDescription:<input type="text" name="bookDescription"><br/>
     <input type="submit" value="添加图书">
     
  </form>

</body>
</html>

4.管理图书和用户

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

import net.lww.entitys.Book;
import net.lww.utils.DBUtil;

public class BookService {
	private List<Book> books;
	private DBUtil dbUtil;

	public BookService() {
		//初始化图书集合
		books = new ArrayList<Book>();
		dbUtil = new DBUtil();
	}

	/**
	 * 获取所有图书信息
	 * @param sql 查询图书的sql语句
	 * @return 图书集合
	 */
	public List<Book> getBooks(String sql){
		try {
			//查询所有图书
			ResultSet rs = dbUtil.queryDate("select * from Book");
			while(rs.next()) {
				//获取图书表字段book_id的值
				int bookId = rs.getInt("book_id");
				//获取图书表字段book_name的值
				String bookName = rs.getString("book_name");
				//获取图书表字段book_price的值
				float bookPrice = rs.getFloat("book_price");
				//获取图书表字段book_publisher的值
				String bookPublisher = rs.getString("book_publisher");
				//获取图书表字段book_description的值
				String bookDesc = rs.getString("book_description");
				//根据获取到的图书信息构造图书对象
				Book book = createBook(bookId, bookName, bookPrice, bookPublisher, bookDesc);
				books.add(book);
			}
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		return books;
	}

	/**
	 * 根据图书信息构造图书对象
	 * @param bookId 图书编号
	 * @param bookName 图书名称
	 * @param bookPrice 图书价格
	 * @param bookPublisher 出版社
	 * @param bookDesc 图书描述
	 * @return 构造的图书对象
	 */
	private Book createBook(int bookId, String bookName, float bookPrice, String bookPublisher, String bookDesc) {
		Book book = new Book();
		book.setBookId(bookId);
		book.setBookName(bookName);
		book.setBookPrice(bookPrice);
		book.setBookPublisher(bookPublisher);
		book.setBookDesc(bookDesc);
		return book;
	}
	
	/**
	 * 添加图书
	 * @param book 待添加的图书对象
	 * @return 添加图书是否成功,成功返回true,否则返回false
	 */
	public boolean addBook(Book book) {
		//获取图书信息
		String bookName=book.getBookName();
		float bookPrice=book.getBookPrice();
		String bookPublisher=book.getBookPublisher();
		String bookDespriction=book.getBookDesc();
		//拼接插入图书的sql语句
		String sql="insert into Book(book_name,book_price,book_publisher,book_description) values ('"+bookName
				+"',"+bookPrice+",'"+bookPublisher+"','"+bookDespriction+"')";
		int n=-1;//存储插入的记录数
		try {
			n=dbUtil.addDataToTable(sql);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return n>0?true:false;
	}
	
	/**
	 * 根据图书名称删除指定图书
	 * @param bookName 图书名称
	 * @return 是否删除图书,成功删除返回true,否则返回false
	 */
	public boolean deleteBookByName(String bookName) {
		//拼接删除图书的sql语句
		String sql="delete from Book where book_name='"+bookName+"'";
		int n=-1;//存储插入的记录数
		try {
			n=dbUtil.addDataToTable(sql);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return n>0?true:false;
	}
}

package net.lww.services;

import java.sql.SQLException;

import net.lww.entitys.User;
import net.lww.utils.DBUtil;

public class UserService {
	private DBUtil dbUtil;
	public UserService() {
		dbUtil = new DBUtil();
	}
	
	/**
	 * 判断用户是否存在
	 * @param user 待判断的用户
	 * @return 存在则返回true,否则返回false
	 */
	public boolean isExistUser(User user) {
		//获取待判断的用户信息
		String uName = user.getUName();
		String uPwd = user.getUPwd();
		//根据用户信息拼接sql语句
		String sql = "select * from UserInfo where user_name = '" + uName +"' and user_pwd = '" + uPwd +"'";
		System.out.println(sql);
		boolean b = false;
		try {
			b = dbUtil.isExist(sql);
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		return b;
	}
	
	/**
	 * 注册用户
	 * @param user 待注册的用户
	 * @return 注册是否成功,成功返回true,否则返回false
	 */
	public boolean regestUser(User user) {
		//获取用户信息
		String uName = user.getUName();
		String uPwd = user.getUPwd();
		//拼接插入用户的sql语句
		String sql = "insert into UserInfo(user_name, user_pwd) values('" + uName + "', '" + uPwd + "')";
		//将用户的信息插入用户表中
		int n = -1;//存储插入的记录数
		try {
			n = dbUtil.addDataToTable(sql);
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		return n > 0 ? true : false;
		
	}
}

5.在servlet中实现添加图书、显示图书信息,删除图书、注册用户

检测登录是否有效:

package net.lww.actions;

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 net.lww.entitys.User;
import net.lww.services.UserService;

/**
 * 处理用户登录
 */
@WebServlet("/login.action")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * Default constructor.
	 */
	public LoginServlet() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 设置编码方式
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html,charset=utf-8");
		// 获取请求参数
		String uName = request.getParameter("uName");
		String uPwd = request.getParameter("uPwd");
		if (null != uName && null != uPwd) {
			// 根据请求参数构造User对象
			User user = new User();
			user.setUName(uName);
			user.setUPwd(uPwd);

			// 调用服务层接口查询用户是否存在
			boolean b = new UserService().isExistUser(user);
			if (b) {// 如果存在该用户,则跳转到首页显示图书信息
				// 将用户存入ServletContext
				getServletContext().setAttribute("user", uName);
				response.sendRedirect("book.action");
			} else {
				response.sendRedirect("loginfalse.html");
			}
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

添加图书:

package net.lww.actions;

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 net.lww.entitys.Book;
import net.lww.entitys.User;
import net.lww.services.BookService;
import net.lww.services.UserService;

/**
 * 新增图书
 */
@WebServlet("/addBook.action")
public class AddBookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 设置编码方式
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		//获取图书信息
		String bookName=request.getParameter("bookName");
		String bookPrice=request.getParameter("bookPrice");
		String bookPublisher=request.getParameter("bookPublisher");
		String bookDescription=request.getParameter("bookDescription");
		// 将图书信息添加到数据库
		Book book=new Book();
		book.setBookName(bookName);
		book.setBookPrice(Float.parseFloat(bookPrice));
		book.setBookPublisher(bookPublisher);
		book.setBookDesc(bookDescription);
		boolean flag=new BookService().addBook(book);
		if(flag) {
			//添加成功,跳转到显示图书信息界面
			response.sendRedirect("book.action");
		}else {
			//添加失败,返回信息给客户端
			response.getWriter().write("图书添加失败");
		}
			

	}

	/**
	 * @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);
	}

}

显示图书信息:

package net.lww.actions;

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

import javax.servlet.ServletContext;
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 net.lww.entitys.Book;
import net.lww.services.BookService;

/**
 * 显示图书信息
 */
@WebServlet("/book.action")
public class BooksInfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public BooksInfoServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 设置编码方式
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		// 获取PrintWriter对象
		PrintWriter writer = response.getWriter();
		// 检测用户是否已经登录
		ServletContext context = getServletContext();
		Object user = context.getAttribute("user");
		if (null == user) {// 还未登录
			writer.write("您还未登录,<a href='login.html'>点此重新登录</a>");
		} else {// 已经登录,显示图书信息
			// 获取图书信息
			BookService bookService = new BookService();
			List<Book> books = bookService.getBooks("select * from Book");
			// 以表格形式将图书信息返回给客户端浏览器
			// 打印表格表头
			writer.write("<table border='1'>");
			writer.write("<tr align='center'>");
			writer.write("<th width='30'>编号</th>");
			writer.write("<th width='150'>图书名称</th>");
			writer.write("<th width='100'>图书价格</th>");
			writer.write("<th width='150'>出版社</th>");
			writer.write("<th>图书介绍</th>");
			writer.write("<th width='100'>删除按钮</th>");
			writer.write("</tr>");
			// 打印图书信息
			for (Book book : books) {
				writer.write("<tr align='center'>");
				// 打印图书编号
				writer.write("<td>");
				writer.write(new String((book.getBookId() + "").getBytes(), "utf-8"));
				writer.write("</td>");
				// 打印图书名称
				writer.write("<td>");
				writer.write(book.getBookName());
				writer.write("</td>");
				// 打印图书价格
				writer.write("<td>");
				writer.write(book.getBookPrice() + "");
				writer.write("</td>");
				// 打印出版社
				writer.write("<td>");
				writer.write(book.getBookPublisher());
				writer.write("</td>");
				// 打印图书介绍
				writer.write("<td align='left'>");
				writer.write(book.getBookDesc());
				writer.write("</td>");
				//删除图书按钮
				writer.write("<td>");
				writer.write("<a href='deleteBook.action?bookName="+book.getBookName()+"'>删除</a>");
				writer.write("</td>");
				
				writer.write("</tr>");
			}
			writer.write("</table>");
			writer.write("<br/><br/>");
			writer.write("<a href='addBook.html'>添加新图书</a>");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

删除图书:

package net.lww.actions;

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 net.lww.services.BookService;

/**
 * 根据图书名称删除图书
 */
@WebServlet("/deleteBook.action")
public class DeleteBookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DeleteBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 设置编码方式
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		//获取图书名称对象
		Object obj=request.getParameter("bookName");
		boolean flag=new BookService().deleteBookByName(obj.toString());
		if(flag) {
			//删除成功,跳转到显示图书信息界面
			response.sendRedirect("book.action");
		}else {
			//删除失败,返回信息给客户端
			response.getWriter().write("图书删除失败");
		}

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

注册用户:

package net.lww.actions;

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 net.lww.entitys.User;
import net.lww.services.UserService;

/**
 * 注册新用户
 */
@WebServlet("/regest.action")
public class RegestUserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public RegestUserServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 设置编码方式
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		// 获取用户信息
		String uName = request.getParameter("uName");
		String uPwd = request.getParameter("uPwd");
		String uPwdCopy = request.getParameter("uPwdCopy");
		if (!uName.equals("") && !uPwd.equals("") && !uPwdCopy.equals("") && uPwd.equals(uPwdCopy)) {// 两次密码相同
			// 将用户信息添加到数据库
			User user = new User();
			user.setUName(uName);
			user.setUPwd(uPwd);
			boolean flag = new UserService().regestUser(user);
			if (flag) {
				// 跳转到登录页面
				response.sendRedirect("login.html");
			} else {
				response.sendRedirect("regest.html");
			}
		} else {// 两次密码不相同或用户名、密码为空
			response.sendRedirect("regest.html");
		}
	}

	/**
	 * @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);
	}

}

发布了89 篇原创文章 · 获赞 56 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44867340/article/details/105349447