# JAVA图书管理系统 **Repository Path**: qinghome/java-library-management-system ## Basic Information - **Project Name**: JAVA图书管理系统 - **Description**: MySQL期末大作业选题《图书管理系统》,代码简单易懂 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-11-19 - **Last Updated**: 2025-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **图书管理系统** 1. 期末大作业需求分析 - 核心需求:对数据库中数据进行控制(增删改查) - 核心要求:至少4个表、有菜单 - 加分项:优美的JAVA的GUI页面 - 开发标准:由于仅是期末大作业,并非线上使用,无需具备真实的高要求的功能,功能围绕核心需求进行基础开发即可; 2. 系统描述:一个数据库信息管理系统用于管理图书馆的书籍、读者和借阅记录。 3. 表需求分析设计: - 图书表:包含图书编号、书名、作者、出版社、出版日期、库存数量等字段。 - 读者表:包含读者编号、姓名、性别、联系方式等字段。 - 借阅表:包含借阅编号、图书编号、读者编号、借阅日期、归还日期等字段。 - 管理员表:包含管理员编号、姓名、密码等字段,用于管理系统的登录权限。 4. 程序功能分析实现: - 对图书的增删改查,包括添加新图书、修改图书信息、删除图书以及查询图书库存和借阅状态。 - 对读者的增删改查,如添加新读者、修改读者信息、删除读者以及查询读者借阅记录。 - 实现图书借阅和归还功能,记录借阅日期和归还日期,并更新图书库存和读者借阅状态。 5. 数据库表 ```mysql -- 创建管理员表 CREATE TABLE administrators ( admin_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL ); -- 创建图书表 CREATE TABLE books ( book_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100) NOT NULL, author VARCHAR(100) NOT NULL, publisher VARCHAR(100) NOT NULL, publication_date DATE, quantity_in_stock INT DEFAULT 0 ); -- 创建读者表 CREATE TABLE readers ( reader_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, gender VARCHAR(10), contact_info VARCHAR(100) ); -- 创建借阅记录表 CREATE TABLE borrowings ( borrowing_id INT AUTO_INCREMENT PRIMARY KEY, book_id INT NOT NULL, reader_id INT NOT NULL, borrowing_date DATE NOT NULL, return_date DATE, FOREIGN KEY (book_id) REFERENCES books(book_id) ON DELETE CASCADE, FOREIGN KEY (reader_id) REFERENCES readers(reader_id) ON DELETE CASCADE ); -- 为 books 表添加索引 CREATE INDEX idx_books_title ON books(title); CREATE INDEX idx_books_author ON books(author); CREATE INDEX idx_books_publisher ON books(publisher); -- 为 readers 表添加索引 CREATE INDEX idx_readers_name ON readers(name); -- 为 borrowings 表添加索引(根据查询需求) CREATE INDEX idx_borrowings_book_id ON borrowings(book_id); CREATE INDEX idx_borrowings_reader_id ON borrowings(reader_id); ``` 6. 示例数据 ```mysql INSERT INTO books (title, author, publisher, publication_date, quantity_in_stock) VALUES ('The Silent Forest', 'Lily Anderson', 'GreenLeaf Publishing', '2015-03-12', 25), ('Mystery of the Lost City', 'James Thompson', 'Mystery House', '2018-07-23', 40), ('Journey Through Time', 'Sophia Martinez', 'TimeWave Press', '2020-11-05', 30), ('Secrets of the Ocean', 'Ethan Brown', 'BlueWave Publishers', '2017-05-19', 15), ('Whispers in the Dark', 'Olivia Davis', 'NightSky Books', '2019-09-14', 22), ('Echoes of Eternity', 'Liam Wilson', 'Eternal Press', '2021-01-08', 18), ('Shadows of the Past', 'Emma Johnson', 'ShadowBox Publications', '2016-04-27', 35), ('The Last Frontier', 'Noah Lee', 'Frontier Books', '2014-12-03', 28), ('Beyond the Horizon', 'Ava Harris', 'SkyLine Publishing', '2022-06-17', 20), ('The Forgotten Realm', 'Mason Clark', 'RealmGate Press', '2013-08-30', 12), ('Legends of the East', 'Isabella Lewis', 'Eastern Tales', '2019-02-21', 27), ('Tides of Change', 'Logan Walker', 'ChangeMakers Publishing', '2020-10-11', 19), ('Mystic Mountains', 'Mia Young', 'MountainPeak Books', '2018-03-29', 24), ('Desert Mirage', 'Lucas King', 'DesertBloom Publishers', '2017-07-07', 16), ('Forest of Dreams', 'Amelia Scott', 'DreamWeaver Press', '2021-09-25', 14), ('Celestial Nights', 'Oliver Green', 'StarLight Books', '2015-11-19', 21), ('Urban Legends', 'Charlotte Adams', 'Cityscape Publishing', '2016-06-13', 17), ('Voyage to the Unknown', 'Elijah Baker', 'VoyagePress', '2022-02-04', 23), ('Realm of Shadows', 'Harper Nelson', 'ShadowRealm Publishers', '2014-10-22', 26), ('The Golden Compass', 'Benjamin Carter', 'CompassPoint Books', '2013-05-16', 29), ('Starlight Symphony', 'Ella Mitchell', 'Symphony Press', '2019-12-09', 11), ('Hidden Treasures', 'Alexander Perez', 'TreasureChest Publishing', '2020-08-18', 13), ('Winds of Winter', 'Grace Roberts', 'WinterWind Books', '2017-01-30', 20), ('Autumn Leaves', 'Daniel Turner', 'LeafPrint Publishers', '2018-04-05', 19), ('Summer Breeze', 'Victoria Phillips', 'BreezeBooks', '2021-07-14', 22), ('Spring Awakening', 'Matthew Campbell', 'SpringBloom Press', '2016-09-03', 24), ('Northern Lights', 'Chloe Parker', 'Aurora Publishers', '2015-02-28', 18), ('Southern Cross', 'Henry Evans', 'Crossroads Publishing', '2014-06-19', 16), ('Eastern Sunrise', 'Abigail Edwards', 'Sunrise Press', '2013-11-11', 14), ('Western Sunset', 'Sebastian Collins', 'SunsetBooks', '2019-03-07', 17), ('Central Park Stories', 'Avery Stewart', 'ParkSide Publishing', '2020-05-22', 21), ('Island Mysteries', 'Jack Sanchez', 'IslandPress', '2017-08-16', 13), ('Mountain Echoes', 'Scarlett Morris', 'EchoPress', '2018-12-25', 19), ('River Tales', 'Samuel Rogers', 'RiverFlow Publishers', '2021-04-10', 15), ('Lake Dreams', 'Ella Reed', 'LakeHouse Books', '2016-10-31', 20), ('Desert Winds', 'David Cook', 'WindSong Publishers', '2015-07-20', 18), ('Ocean Whispers', 'Lily Morgan', 'WhisperWave Press', '2014-09-09', 22); INSERT INTO readers (name, gender, contact_info) VALUES ('张伟', 'Male', 'zhangwei@example.com'), ('李娜', 'Female', 'lina@example.com'), ('王强', 'Male', 'wangqiang@example.com'), ('刘洋', 'Female', 'liuyang@example.com'), ('陈杰', 'Male', 'chenjie@example.com'), ('杨丽', 'Female', 'yangli@example.com'), ('赵磊', 'Male', 'zhaolei@example.com'), ('黄敏', 'Female', 'huangmin@example.com'), ('周涛', 'Male', 'zhoutao@example.com'), ('吴婷', 'Female', 'wuting@example.com'), ('徐磊', 'Male', 'xulei@example.com'), ('孙悦', 'Female', 'sunyue@example.com'), ('胡斌', 'Male', 'hubin@example.com'), ('林琳', 'Female', 'linlin@example.com'), ('高飞', 'Male', 'gaofei@example.com'), ('林芳', 'Female', 'linfang@example.com'), ('何军', 'Male', 'hejun@example.com'), ('郭霞', 'Female', 'guoxia@example.com'), ('马强', 'Male', 'maqiang@example.com'), ('罗燕', 'Female', 'luoyan@example.com'), ('梁宇', 'Male', 'liangyu@example.com'), ('宋梅', 'Female', 'songmei@example.com'), ('郑凯', 'Male', 'zhengkai@example.com'), ('谢敏', 'Female', 'xiemin@example.com'), ('韩峰', 'Male', 'hanfeng@example.com'), ('唐丽', 'Female', 'tangli@example.com'), ('冯伟', 'Male', 'fengwei@example.com'), ('于娜', 'Female', 'yunna@example.com'), ('董强', 'Male', 'dongqiang@example.com'), ('萧薇', 'Female', 'xiaowei@example.com'), ('程鹏', 'Male', 'chengpeng@example.com'), ('袁婷', 'Female', 'yuanting@example.com'), ('曹磊', 'Male', 'caolei@example.com'), ('邓丽', 'Female', 'dengli@example.com'), ('曾军', 'Male', 'zengjun@example.com'), ('彭芳', 'Female', 'pengfang@example.com'), ('萧强', 'Male', 'xiaoqiang@example.com'), ('蔡敏', 'Female', 'caimin@example.com'), ('潘伟', 'Male', 'panwei@example.com'), ('田娜', 'Female', 'tianna@example.com'), ('杜磊', 'Male', 'dulei@example.com'), ('贾悦', 'Female', 'jiayue@example.com'); INSERT INTO borrowings (book_id, reader_id, borrowing_date, return_date) VALUES (5, 12, '2023-02-15', '2023-03-01'), (18, 7, '2023-04-10', '2023-04-25'), (22, 35, '2023-05-05', '2023-05-20'), (9, 19, '2023-06-18', '2023-07-03'), (15, 28, '2023-07-22', '2023-08-06'), (3, 4, '2023-08-30', '2023-09-14'), (27, 33, '2023-09-12', '2023-09-27'), (11, 2, '2023-10-01', '2023-10-16'), (34, 25, '2023-10-20', '2023-11-04'), (6, 18, '2023-11-05', '2023-11-20'), (14, 9, '2023-12-10', '2023-12-25'), (21, 30, '2023-12-15', '2023-12-30'), (8, 22, '2024-01-10', '2024-01-25'), (19, 14, '2024-02-05', '2024-02-20'), (2, 5, '2024-03-12', '2024-03-27'), (30, 16, '2024-04-18', '2024-05-03'), (10, 8, '2024-05-22', '2024-06-06'), (17, 11, '2024-06-30', '2024-07-15'), (13, 20, '2024-07-25', '2024-08-09'), (24, 27, '2024-08-14', '2024-08-29'), (7, 31, '2024-09-01', '2024-09-16'); ``` 7. 代码结构 ```stylus LibraryManagementSystem/ │ ├── config.properties --数据库配置文件 ├── lib/ │ └── mysql-connector-j-8.4.0.jar --数据库驱动 ├── src/ │ ├── Main.java --程序入口 │ ├── dao/ │ │ ├── AdminDAO.java --管理员接口 │ │ ├── BookDAO.java --书籍接口 │ │ ├── BorrowingDAO.java --借阅接口 │ │ └── ReaderDAO.java --读者接口 │ ├── dao/impl/ │ │ ├── AdminDAOImpl.java --管理员接口实现类 │ │ ├── BookDAOImpl.java --书籍接口实现类 │ │ ├── BorrowingDAOImpl.java --借阅接口实现类 │ │ └── ReaderDAOImpl.java --读者接口实现类 │ ├── gui/ │ │ ├── MainFrame.java --界面入口 │ ├── gui/dialog/ │ │ ├── AdminLoginDialog.java --管理员登陆 | | ├── CreateAdminDialog.java --创建管理员 | | ├── ChangeAdminCredentialsDialog.java --更改管理员 │ │ ├── InitializationDialog.java --初始化程序 | ├── gui/panel/ | | ├── BorrowingForm.java --借阅表单 │ │ ├── BorrowingPanel.java --借阅管理面板 │ │ ├── BookForm.java --书籍表单 │ │ ├── BookPanel.java --书籍管理面板 │ │ ├── DataManagementPanel.java --数据管理面板 │ │ ├── ReaderForm.java --读者表单 │ │ └── ReaderPanel.java --读者管理面板 │ ├── model/ │ │ ├── Administrator.java --管理员功能封装类 │ │ ├── Book.java --书籍功能封装类 │ │ ├── Borrowing.java --借阅功能封装类 │ │ └── Reader.java --读者功能封装类 │ └── util/ │ └── DBUtil.java --工具类(数据库) └── README.md --个人开发日志 ``` 8. 更新日志 ```markdown ## 2024.10.31 8:35 图书管理系统v1.0正式上线 更新内容: 1. 图书管理系统基础功能实现 2. 程序初始化功能(数据库初始化) - 描述:判断本机是否存在数据库或管理员账号 预更新内容: 1. 针对现有功能补充并优化(已完成) ## 2024.11.1 0:45 图书管理系统更新至v1.1 更新内容: 1. 新增数据查询功能:便于在大量数据中快速定位 2. 新增若干BUG 3. 优化数据库查询性能 - 方式:添加索引 预更新内容: 1. 全面优化GUI界面美观度(已完成) 2. 修复若干BUG(已完成) ## 2024.11.1 17:57 图书管理系统更新至v1.2 更新内容: 1. 布局管理器优化:使用GridBagLayout代替GridLayout和FlowLayout以获得更灵活和精确的组件布局 2. 统一字体和颜色:提高界面的整体美观性 3. 现代化外观:启用Nimbus Look and Feel,使应用程序看起来更现代 4. 按钮样式优化:调整按钮大小和样式,使其更具吸引力。 5. 增加边距和填充:使用EmptyBorder和Insets来增加组件之间的间距,使界面更加整洁 6. 使用面板分组:将相关组件分组到不同的JPanel中,提高界面组织性 7. 修复若干BUG 预更新内容: 1. 新增数据的批量删除功能(已完成) 2. 新增借阅功能的快速查询选择书籍/读者的功能(废弃) - 停止开发,偏离“开发标准”,技术不够,出现致命错误 3. 新增数据列表的右键菜单操作(已完成) ## 2024.11.1 23:40 图书管理系统更新至v1.3 更新内容: 1. 管理员登陆失败提示及措施(账号密码错误) 2. 借阅管理支持修改借阅信息 3. 借阅归还时不填写归还日期则默认为当日日期 4. 新增右键菜单,操作更加方便 5. 优化程序代码结构 预更新内容: 1. 新增数据管理面板(已完成) 2. 支持数据导出为excel或sql的格式(已完成) - 修正:去除excel格式,该功能偏离“开发标准”,不符合直接的对数据库的操作 3. 支持excel或sql格式的数据批量导入(已完成) - 修正:去除excel格式,该功能偏离“开发标准”,不符合直接的对数据库的操作 4. 支持修改管理员账号密码(已完成) 5. 新增7天自动登录功能(废弃) - 停止开发,技术不足,无法解决逻辑上的不足 6. 新增账号退出功能(已完成) ## 2024.11.2 19:21 图书管理系统更新至v1.4 更新内容: 1. 新增数据管理面板 2. 新增修改管理员账号密码功能 3. 新增退出账号登录功能 ## 2024.11.5 00:15 图书管理系统更新至v1.5 更新内容: 1. 新增MySQL连接检测机制+MySQL配置界面 2. 修复初始化数据库时,直接退出程序会跳过直接进入下一阶段得逻辑错误 3. 从MainFrame程序分离出Main文件作为入口,放置到src文件夹下 ## 2024.11.6 00:30 图书管理系统更新至v2.0 更新内容: 1. 新增数据库导入导出功能 2. 可能新增若干隐藏BUG ## 大版本更新完结,后续或许更新修复BUG ``` ## 后记 仅供参考,请勿乱搞 代码比较简单,README文件中描述可能并非完全符合程序功能,具体功能需要自行探索