应粉丝要求,出个借阅系统swing版的,时间有些赶,可能还存在一些bug,不过不要紧,发现bug提给我,我逐个去修复与完善程序。
问题描述
实现简易版图书借阅管理系统,学生(读者)在系统里可以检索图书,借阅图书,归还图书,修改密码,查看个人借阅信息等功能;
管理员有书籍信息,学生(读者)信息,借阅信息维护等功能
需求分析
- 系统分为管理员账户,学生(读者)账户
- 管理员账户可以进行书籍,学生(读者)信息的维护(CRUD)
- 学生(读者)账户可以借书,还书,检索图书,个人借阅信息浏览
要点
开发语言
:Java (jdk版本12+)
数据库
:MySQL (版本8.0+)
工具
:JDBC
交互场景
:控制台
软件
:IDEA(推荐),Navicat
项目构建:maven
数据库设计
实体关系:
数据库表设计:
注意
:所有表的主键记得勾上自增
管理员表:
书籍表:
学生表:
借书表:
程序运行效果
1.登录验证:分读者与管理员两个身份,输入账号密码,校验通过即可进入系统,否则弹窗提示操作结果。
2.首页:读者进入系统后,首先看到的是首页,可在此处设置公告,书目推荐等信息。
3.检索:读者通过输入要查书本的ISBN或者书名即可查询
4.借还书籍:在表单输入要借图书的ISBN,点确认即可,会先确认该书是否还有库存,如果无,不能借阅成功,反之可以;表格显示的是当前登录用户的借阅信息,鼠标指针选中一行,点击右下角的还书,即可归还书籍。
5.个人信息:读者在此可以查看自己的个人信息,修改密码。
6.学生管理:管理员可以对学生(读者)信息进行多条件查询,新增,修改,删除。
\7. 书籍管理:管理员可以对书籍信息进行多条件查询,新增,修改,删除。
8.借阅一览:查看系统内部的借阅信息,可选中行删除记录。
9.数据汇总:重要指标数据汇总,如读者数量,书籍种类数量,库存总数等,可根据实际来调整。
部分程序
数据库连接工具类
package com.tushu.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnDB {
// 获取连接通道
// Connection
public static Connection getConnection() {
Connection conn = null;
// 1.加载驱动类
try {
// Mysql驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接通道
String url ="jdbc:mysql://localhost:3306/bm?useSSL=false&serverTimezone=Asia/Shanghai";
String user = "root";
String password = "xxxxx";
conn = DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException e) {
// 1.类名错误 2.外部jar没有引用
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
// 关闭资源
public static void closeDB(ResultSet rs,Statement pst,Connection conn) {
try {
if(rs!=null) {
rs.close();
}
if(pst!=null) {
pst.close();
}
if(conn!=null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println(ConnDB.getConnection());
}
}
时间获取工具类
package com.tushu.utils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TimeTools {
public static String getTime() {
Date date = new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return dateFormat.format(date);
}
//获取当前时间往后一个月的时间
public static String getTime2() {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, +1);
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return dateFormat.format(calendar.getTime());
}
}
CRUD方法封装类
package com.tushu.dao;
import com.tushu.utils.ConnDB;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseDAO {
// 共通的增删改方法
public int update(String sql,Object[] arr) {
Connection conn = ConnDB.getConnection();
PreparedStatement pst = null;
try {
pst = conn.prepareStatement(sql);
//对占位符赋值
for (int i = 0; i < arr.length; i++) {
pst.setObject(i+1, arr[i]);
}
int row = pst.executeUpdate();
return row;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
ConnDB.closeDB(null, pst, conn);
}
return 0;
}
// 共通查询
public <T>T select(String sql,Object[] arr){
Connection conn = ConnDB.getConnection();
PreparedStatement pst = null;
ResultSet rs = null;
T t = null;
try {
pst= conn.prepareStatement(sql);
for (int i = 0; i < arr.length; i++) {
pst.setObject(i+1, arr[i]);
}
rs = pst.executeQuery();
// 对结果集的收集
if(rs.next()) {
// 收集对象的属性
t = this.rowMapper(rs);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
ConnDB.closeDB(null, pst, conn);
}
return t;
}
// 查询结果集合
public <T> List<T> selectAll(String sql,Object[] arr){
List<T> list = new ArrayList<>();
Connection conn = ConnDB.getConnection();
PreparedStatement pst = null;
ResultSet rs = null;
try {
pst= conn.prepareStatement(sql);
for (int i = 0; i < arr.length; i++) {
pst.setObject(i+1, arr[i]);
}
rs = pst.executeQuery();
T t = null;
// 对结果集的收集
while(rs.next()) {
// 收集对象的属性
t = this.rowMapper(rs);
// 添加到集合
list.add(t);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
ConnDB.closeDB(null, pst, conn);
}
return list;
}
// 定义方法 每个查询的结果集获取对应的属性
public abstract <T> T rowMapper(ResultSet rs) throws SQLException;
}
篇幅有限,就不在这里展示全部代码了。
完整源码=》:
https://gitee.com/yan-sheng-li/lend-system-win