链接:https://pan.baidu.com/s/1xIwWdCBh-BuY1EGP4KfSeg
提取码:51d7
在完成了第一个Java项目图书管理系统之后,我进行了Java多线程和网络的学习,并做了一个模拟QQ群聊和私聊系统,等我回过头来看我之前写的图书管理系统的时候,感觉功能有点少了,然后也没用到多少Java的思想,所以就决定对此系统进行完善,有时候重复也是个很好的学习方法,该系统又新增了超级管理员和管理员的功能,超级管理员有修改用户的权限,该系统默认有一个超级管理员,账号和密码都是123,由于上一个图书管理系统,没有实现借还书的功能,在此进行了完善,以及对修改功能进行了扩展,可以进行模糊修改,还有对用户或者管理员的操作不当而产生的bug进行了修复,等开学有Java课程设计的,该系统是个不错的参考资源
对该系统进行一个介绍吧:
该系统用了windowbuilder工具和Navicat工具,其中JDK是1.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项目图书管理系统
想要详细了解该系统的实现,可以查看该系统源码