BJFXSSP

导航

基于 Java+MySQL 的图书管理系统开发

项目名称 :图书管理系统 内容
课程名称 面向对象程序综合设计
班级 网安2412
指导教师 郑如滨、黄巧玲、谢书童
学生姓名 王嘉熙、李想
学号 202421336061/202421336076
实验项目名称 基于Java、MySQL的图书管理系统

一、实验目的

  • 掌握 Java Swing 图形化界面开发,理解布局管理器(BorderLayout、GridBagLayout 等)的使用场景与配置方法。
  • 熟练运用 JDBC 技术实现 Java 程序与 MySQL 数据库的交互,包括连接建立、SQL 语句执行、结果集处理等核心操作。
  • 理解面向对象编程思想在实际项目中的应用,实现类的合理划分、模块封装与功能解耦。
  • 学会使用工具类封装重复功能,提升代码复用性与可维护性。
  • 掌握用户权限控制的基本实现思路,区分管理员与普通用户的操作权限边界。
  • 培养问题排查与调试能力,解决数据库连接异常、界面组件适配、数据校验等常见问题。

二、实验内容与设计思想

题目:图书管理系统(支持登录验证、图书 CRUD 操作
设计思路:

  • 1.本系统采用 "界面层 - 控制层 - 数据层" 的三层架构设计,核心目标是实现图书信息的高效管理与用户权限控制:

界面层:使用 Java Swing 构建可视化界面,分为登录窗口和图书管理主窗口。登录窗口支持管理员 / 普通用户双模式登录,主窗口包含图书信息输入区、功能按钮区和数据展示区,通过工具类统一界面样式与布局规则。

控制层:设计BookAction类作为核心控制器,封装图书的新增、查询、修改、删除等业务逻辑,同时处理数据库交互细节,为界面层提供统一的功能调用接口。

数据层:采用 MySQL 数据库存储图书信息,设计books表存储 ISBN、书名、作者等核心字段,通过 JDBC 技术实现数据的持久化操作。

  • 2.工具类设计:提取界面美化、输入限制、表格适配等通用功能,封装为独立工具类(如LimitTextLength、SetTableColumnCenter),降低代码冗余。

    权限控制:登录时通过身份校验区分管理员与普通用户,管理员拥有完整的 CRUD 权限,普通用户仅开放图书查询功能。

核心类 / 模块设计:

// 核心控制器类:BookAction.java
public class BookAction {
// 数据库连接配置常量
private static final String URL = "jdbc:mysql://localhost:3306/book_management_system?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
private static final String USER = "root";
private static final String PASSWORD = "lx624624";

// 核心方法(部分)
public boolean addBook(String isbn, String bookName, String author, String publisher, String publishDate, String price) { ... } // 新增图书
public void queryBooks(DefaultTableModel tableModel) { ... } // 查询所有图书
public boolean deleteBook(String isbn) { ... } // 删除图书
public boolean updateBook(String isbn, String bookName, String author, String publisher, String publishDate, String price) { ... } // 修改图书
private boolean isbnExists(String isbn) { ... } // ISBN唯一性校验

}

// 主界面类:BookInformation.java
public class BookInformation {
private JFrame frame;
private JTextField textFieldISBN; // 图书ISBN输入框
private JTable table; // 图书数据展示表格
private DefaultTableModel tableModel; // 表格数据模型
private final BookAction bookAction = new BookAction(); // 关联控制器
private boolean isAdmin; // 标记是否为管理员模式

// 初始化界面、绑定按钮事件、加载数据等方法
private void initialize() { ... }

}

// 登录界面类:LoginFrame.java
public class LoginFrame extends JFrame {
private JRadioButton rdoAdmin; // 管理员模式单选框
private JRadioButton rdoUser; // 普通用户模式单选框
private JTextField txtUsername; // 账号输入框
private JPasswordField txtPassword; // 密码输入框
private JTextField txtAdminCode; // 管理员验证码输入框

// 登录校验逻辑
private void loginCheck() { ... }

}

三、实验步骤和调试过程

实验步骤

  • 1.环境搭建:安装 JDK、IntelliJ IDEA 和 MySQL,配置数据库连接驱动,创建book_management_system数据库和books表。
  • 2.数据库表设计:在 MySQL 中执行建表语句,定义books表字段(isbn、book_name、author、publisher、publish_date、price),其中 isbn 作为唯一标识。
  • 3.模块开发:
    先实现工具类(如输入长度限制、表格居中、窗口配置);

开发BookAction类,完成数据库连接与 CRUD 操作封装;

编写登录窗口LoginFrame,实现身份验证与模式切换;

开发主窗口BookInformation,设计界面布局并绑定功能按钮事件。

  • 4.功能测试:
    测试登录功能:验证管理员 / 普通用户账号密码校验、验证码有效性;
    3583a2a42a6eeeae7ecaf54d70d36d88
    56bf6a7ee7012f00044a915228fb63ca

测试图书操作:新增(含 ISBN 唯一性校验)、查询(表格数据填充)、修改、删除功能;
da8f99fd9ba3157903a1e0031a80bda2
e53a61a76b11fbe8d91fd7865bb58cf1

3f851f274547f0c14301d03c00b63b2d

测试权限控制:普通用户是否无法看到新增 / 修改 / 删除按钮。
3c8bc341f436c22d3865561c29872993

界面优化:调整组件布局、统一字体样式、添加背景图自适应效果。
5619733c3c3189dc3f4a13fa26b05fcf
6a5dc2768df254fc5a186c249a200a51

四、实验小结

1.问题:MySQL 数据库连接失败,提示 "Public Key Retrieval is not allowed"。

排查过程:查阅 MySQL 8.0 连接配置文档,发现新版本默认禁用公钥检索功能。

解决方法:在数据库连接 URL 后添加allowPublicKeyRetrieval=true参数,同时关闭 SSL(useSSL=false)。

2.问题:Swing 界面添加背景图后,其他组件被遮挡。

排查过程:背景图面板与其他组件层级冲突,默认背景面板覆盖了前景组件。

解决方法:自定义BackgroundPanel类继承JPanel,重写paintComponent方法绘制背景图,同时将其他组件添加到该面板中,确保层级正确。

3.问题:修改图书时,未选中行点击修改按钮会抛出空指针异常。

排查过程:调试发现未判断表格选中行索引是否为 - 1(未选中状态)。

解决方法:在修改按钮事件中添加判断,若selectedRow == -1,弹出 "请选择要修改的行" 提示,避免空指针。

4.问题:使用绝对路径在桌面直接打开程序时MySQL数据库未正常加载。

排查过程:检查classpath配置,发现配置不完整

解决方法:完善快捷方式的calsspath配置后可以正常连接MySQL数据库。

实验体会和收获

  • 技术层面:熟练掌握了 JDBC 数据库交互的完整流程,理解了 Swing 布局管理器的灵活运用,学会了通过工具类封装通用功能,提升代码复用性。
    设计层面:体会到面向对象编程中 "高内聚、低耦合" 的优势,将业务逻辑与界面展示分离,使代码结构更清晰、便于维护。
  • 实践层面:培养了问题排查能力,遇到数据库连接、界面适配等问题时,能通过查阅文档、调试代码逐步定位并解决;同时意识到权限控制、数据校验等细节对系统稳定性的重要性。
  • 协作层面:与同学分工开发时,明确了模块接口设计的重要性,统一代码规范和数据传输格式,能有效减少整合时的冲突。

实验改进方向

  • 功能扩展:添加图书模糊查询(按书名、作者检索)、数据导出(Excel 格式)、用户信息管理(密码修改、新增用户)功能。
  • 性能优化:引入数据库连接池(如 Druid),避免频繁创建和关闭数据库连接,提升系统响应速度。
  • 界面美化:使用 JavaFX 替代 Swing,打造更现代化的图形界面;添加动画效果(如按钮点击反馈、窗口切换过渡)。
  • 数据安全:对用户密码进行加密存储(如 MD5 加密),避免明文存储带来的安全风险;增加输入合法性校验(如价格为数字、出版日期格式正确)。

五、参考文献

1.Java JDBC 数据库编程实战:https://docs.oracle.com/javase/tutorial/jdbc/index.html
2.Swing 图形用户界面开发指南:https://docs.oracle.com/javase/tutorial/uiswing/index.html
3.MySQL 数据库入门到精通:https://dev.mysql.com/doc/

posted on 2026-01-15 09:55  岁将秋  阅读(7)  评论(0)    收藏  举报