Java项目——图书管理系统Plus(基于第一个项目的完善)

链接:https://pan.baidu.com/s/1xIwWdCBh-BuY1EGP4KfSeg
提取码:51d7

在完成了第一个Java项目图书管理系统之后,我进行了Java多线程和网络的学习,并做了一个模拟QQ群聊和私聊系统,等我回过头来看我之前写的图书管理系统的时候,感觉功能有点少了,然后也没用到多少Java的思想,所以就决定对此系统进行完善,有时候重复也是个很好的学习方法,该系统又新增了超级管理员和管理员的功能,超级管理员有修改用户的权限,该系统默认有一个超级管理员,账号和密码都是123,由于上一个图书管理系统,没有实现借还书的功能,在此进行了完善,以及对修改功能进行了扩展,可以进行模糊修改,还有对用户或者管理员的操作不当而产生的bug进行了修复,等开学有Java课程设计的,该系统是个不错的参考资源

对该系统进行一个介绍吧:

该系统用了windowbuilder工具和Navicat工具,其中JDK是1.8版本。

这是图书表

Java项目——图书管理系统Plus(基于第一个项目的完善)_第1张图片

这是用户表

Java项目——图书管理系统Plus(基于第一个项目的完善)_第2张图片

这是借书记录表

Java项目——图书管理系统Plus(基于第一个项目的完善)_第3张图片

这是该系统的包和类

Java项目——图书管理系统Plus(基于第一个项目的完善)_第4张图片Java项目——图书管理系统Plus(基于第一个项目的完善)_第5张图片Java项目——图书管理系统Plus(基于第一个项目的完善)_第6张图片


由于管理员的存在,该系统对不同的身份进行了不同的界面设置,这是管理员界面左图和普通用户界面右图

Java项目——图书管理系统Plus(基于第一个项目的完善)_第7张图片Java项目——图书管理系统Plus(基于第一个项目的完善)_第8张图片

在这里我详细介绍一下借还书的操作,借还书就是在book表里加了一个字段用来标记,然后再新建一个记录表,把借还书放到记录表里

借书功能:

package com.book.dao;

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

import javax.swing.JOptionPane;

import com.model.Book;
import com.model.Record;
import com.model.User;
import com.record.dao.RecordDaoImpl;
import com.util.DbUtil;

/**
 * 该类有一个构造方法,为实现用户的借书操作
 * 
 * @author 11852
 *
 */
public class LendDao {
	public boolean lendDao(User user, Book book) {
		ResultSet rs = new BookDaoImpl().select(book);//这里是查询一下符合该条件的书
		try {
			if(rs.next()) {//如果存在符合条件的书
				if(rs.getInt("book_lend") == 0) {//判断该书是否以借出,如果没有借出,则执行if
					
					//这是从数据库获取信息
					book.setId(rs.getString("book_id"));
					book.setName(rs.getString("book_name"));
					book.setLend(1);//标记该书已借出
					new BookDaoImpl().update(book);//更新数据库中book表
					
					//将该书存到借书记录表中
					Record record = new Record();
					record.setUserId(user.getId());
					record.setBookId(book.getId());
					record.setBookName(book.getName());

					//这里是获取时间,也就是借书的时间
					String sql = "select now()";
					Connection con = new DbUtil().getCon();//进行数据库的连接

					PreparedStatement pstmt = con.prepareStatement(sql);//对该sql语句进行预编译
					Date t = null;//设置初始时间为空
					ResultSet result = pstmt.executeQuery();//返回执行完数据库的结果集
					while (result.next()) {
						t = result.getDate(1);//记录时间
						record.setLendDate(t);//把时间加到借书记录表的对象中
					}
					
					if (new RecordDaoImpl().insert(record)) {//将该对象加到数据库中
						new BookDaoImpl().update(book);
						return true;
					}
				}else {
					JOptionPane.showMessageDialog(null, "该书不存在");
				}
			}
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		return false;
	}
}

还书功能:

package com.book.dao;

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

import com.model.Book;
import com.model.Record;
import com.model.User;
import com.record.dao.RecordDaoImpl;
import com.util.DbUtil;
/**
 * 该类有一个构造方法,为实现用户的还书操作
 * @author 11852
 *
 */
public class ReceiveDao {
	public boolean receiveDao(User user, Book book) {
		//这里是把用户信息和图书信息放到一个借书记录对象中
		Record record = new Record();
		record.setUserId(user.getId());
		record.setBookId(book.getId());
		new RecordDaoImpl().delete(record);
		book.setLend(0);//标记该书已还,也就是未借出
		String sql = "select now()";
		Connection con = new DbUtil().getCon();

		PreparedStatement pstmt;
		try {
			pstmt = con.prepareStatement(sql);
			Date t = null;
			ResultSet result = pstmt.executeQuery();
			while (result.next()) {
				t = result.getDate(1);
			}
			record.setLendDate(t);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if(new BookDaoImpl().update(book)) {
			return true;
		}
		return false;
	}
}

在这里还有对增删改查的完善,对修改实现了模糊修改的功能,也就是可以只单单修改某一个属性,以图书为例:

package com.book.dao;

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

import javax.swing.JOptionPane;
import javax.xml.bind.SchemaOutputResolver;

import com.model.Book;
import com.util.DbUtil;
import com.util.StringUtil;
import com.util.BookUtil;

public class BookDaoImpl implements BookDao {

	@Override
	public boolean insert(Book book) {
		if (!BookUtil.bookSelect(book)) {
			Connection con = new DbUtil().getCon();
			String sql = "insert into book values(?,?,?,?,?,?)";
			PreparedStatement pstmt;
			try {
				pstmt = con.prepareStatement(sql);
				pstmt.setString(1, book.getId());
				pstmt.setString(2, book.getName());
				pstmt.setString(3, book.getAuthor());
				pstmt.setString(4, book.getPress());
				pstmt.setString(5, book.getType());
				pstmt.setInt(6, book.getLend());
				if (pstmt.executeUpdate() > 0) {
					return true;
				} else {
					return false;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} else {
			JOptionPane.showMessageDialog(null, "该书号已存在");
		}
		return false;
	}

	@Override
	public boolean delete(Book book) {
		if (BookUtil.bookSelect(book)) {
			Connection con = new DbUtil().getCon();
			String sql = "delete from book where book_id = ?";
			PreparedStatement pstmt;
			try {
				pstmt = con.prepareStatement(sql);
				pstmt.setString(1, book.getId());
				if (pstmt.executeUpdate() > 0) {
					return true;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return false;
	}

	@Override
	public boolean update(Book book) {

		if (BookUtil.bookSelect(book)) {
			String sql = "update book set book_id = book_id";
			StringBuffer sb = new StringBuffer(sql);
			if (StringUtil.isNotEmpty(book.getName())) {
				sb.append(",book_name=" + "'"+book.getName()+"'");
			}
			if (StringUtil.isNotEmpty(book.getAuthor())) {
				sb.append(",book_author=" + "'"+book.getAuthor()+"'");
			}
			if (StringUtil.isNotEmpty(book.getType())) {
				sb.append(",book_type=" + "'"+book.getType()+"'");
			}
			if (StringUtil.isNotEmpty(book.getPress())) {
				sb.append(",book_press=" + "'"+book.getPress()+"'");
			}
			if(book.getLend() == 0) {
				sb.append(",book_lend=0");
			}else if(book.getLend() == 1) {
				sb.append(",book_lend=1");
			}
			sb.append(" where book_id=" + book.getId());
			Connection con = new DbUtil().getCon();
			PreparedStatement pstmt;
			try {
				pstmt = (PreparedStatement) con.prepareStatement(sb.toString());
				if (pstmt.executeUpdate() > 0) {
					return true;
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} else {
			return false;
		}
		return false;
	}

	@Override
	public ResultSet select(Book book) {
		String sql = "select * from book where book_id=book_id";
		StringBuffer sb = new StringBuffer(sql);
		if (StringUtil.isNotEmpty(book.getId())) {
			sb.append(" and book_id like '%" + book.getId() + "%'");
		} else if (StringUtil.isNotEmpty(book.getName())) {
			sb.append(" and book_name like '%" + book.getName() + "%'");
		} else if (StringUtil.isNotEmpty(book.getAuthor())) {
			sb.append(" and book_author like '%" + book.getAuthor() + "%'");
		} else if (StringUtil.isNotEmpty(book.getType())) {
			sb.append(" and book_type like '%" + book.getType() + "%'");
		} else if (StringUtil.isNotEmpty(book.getPress())) {
			sb.append(" and book_press like '%" + book.getPress() + "%'");
		}
		Connection con = new DbUtil().getCon();
		PreparedStatement pstmt;
		try {
			pstmt = con.prepareStatement(sb.toString());
			ResultSet rs = pstmt.executeQuery();
			return rs;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}

对于功能的详解可以参考第一个Java项目图书管理系统

想要详细了解该系统的实现,可以查看该系统源码

你可能感兴趣的:(java,小系统)