Java 程序设计实验报告
题 目 简易的图书管理系统
20xx 年 5 月 22 日
一、实验目的
1、熟练掌握 SQL 命令
2、掌握 Swing 图形用户界面编程。
3、掌握 java 与数据库的连接技术。
4、掌握 java.sql 包中提供各种类,编写程序实现数据库信息的存取和查询。
5、培养独立查找资料,并解决问题的能力。
二、实验任务
1、建立一个数据库 Library,其中含有如下表格(字段):
Books(ISBN(书号),Title(书名),Authors(作者),Publisher(出版社),
EditionNumber(版次),PublicationDate(出版日期),Type(书类))
Reader(ReaderID,FirstName,LastName,Address,PhoneNumber,Limits)
Record(RecordID,ISBN,ReaderID,BorrowingDate,ReturnDate)
使用的数据库系统可以自由选择。
提前设置好 Books,Reader 的数据。
2、使用 java 编程实现如下功能:
(1)用户可通过相应界面,依据图书的 ISBN,Title,Authors,Publisher,
PublicationDate,Type 的组合条件,查询数据库中的符合条件的书籍,程序需将
查询结果以表格的方式展示给用户,用户可选择结果排序的依据。
(2)提供用户相应的方式借书。当用户选择借阅某本书籍时,应查询该书是否
已经被借出:如果被借出,则显示信息(“该书已被借出,归还时间 XXXXX”);
如该书未被借出,则查阅读者权限(是否超出该读者所能借阅的最大数目书籍),
如未超出显示借书成功,并向数据库中增加一条借阅记录,如果超出,则显示信
息(“已超过您的最大借阅数目)。
(3)提供用户相应的方式还书。还书成功时,将该次的借阅记录删除。
选作部分:
(1)修改数据库设计,通过相应界面,提供 Reader、Books 的增加、删除、修
改功能。
(2)修改数据库设计,可查询某用户的所有借阅记录。
三、开发工具与平台
使用 IDEA 编写代码,swing+mysql。整体代码使用了 MVC 架构,为了考前复
习,仅使用 jdbc 进行数据库连接,没有使用框架。
四、设计思路
1、界面设计
view 包下是主要的视图,包括登录界面、主页界面、图书类别管理、用户借阅
记录、用户图书查询、用户图书归还、用户信息修改。
(LoginFrame 类)登录界面:监听“登录”、“注册”按钮,该界面有管理员和
普通用户两种选择,普通用户仅能操作用户功能,而管理员能操作全部功能。连
接数据库判断后将用户信息传入主页界面,同时进入主页界面。
(MainFrame 类)主页界面:主要功能在菜单栏。先根据传入的信息判断是管理
员还是普通用户,若是普通用户则禁用部分功能。菜单内有管理员操作(图书类
别管理、用户借阅记录),用户操作(用户图书查询、用户图书归还、用户信息
修改),退出(返回登录界面)等功能。
(BookManage 类)图书类别管理界面:管理员界面,用来新增图书、删除图书、
修改图书信息的界面,默认以表格形式显示全部图书。用户可以点击表格直接修
改,也可以通过表格下方的输入框进行增删改的操作。主要是通过 jdbc 对
record、reader、books 三张表进行联合查询。
(BookRecord 类)用户借阅记录界面:管理员界面,用于管理员查询用户的借
阅记录,默认显示全部用户的借阅记录。管理员可通过分类查询(对用户名分类,
有下拉框可供选择)对数据进行筛选。以表格形式显示数据,包含用户是否归还、
借阅日期等的列。
(BookSelect 类)图书查询界面:普通用户界面,用于用户查询图书并借阅图书。
能依据图书的 ISBN,Title,Authors,Publisher,PublicationDate,Type 的组合
条件进行查询。用户借书时必须输入归还日期,系统会判断该时间是否合法(格
式是否正确、时间是否是未来的某一天)。点击借书后会判断该书是否已经被借
阅以及用户的借书最大限制是否已经达到,任何一个不满足都会有提示框显示。
当然最后借书成功也会有提示框。
(BookReturn 类)图书归还界面:普通用户界面,用于用户查询自己已经借阅
的图书,并提供归还的按钮,用户只需选择想要归还的图书归还即可。
(UserManage 类)个人信息修改界面:普通用户界面,用于用户修改个人信息,
用户可以查看个人姓名、地址、手机号码等信息并进行修改。
2、逻辑设计(课题中的难点的解决方案)
难点 1:题目已经指定了数据表的字段,要按照数据表的字段查询图书需要 3 张
表联合查询,比较麻烦。
解决:使用左外连接查询或者子查询等一次性查询避免多次连接数据库。直接通
过数据表插入修改数据对 sql 语句进行大量测试,保证能达到理想状态。
难点 2:我以表格形式显示数据,数据更新后要么就重新加载整个界面,要么就
重新加载表格,两种方法都会衍生出其他问题。
解决:使用重新加载整个页面的形式,旧界面的查询的关键字会丢失,导致增加
其他工作量。所以我选择重新加载表格,但是没想到当删除图书的时候,旧的表
没有被完全覆盖,所以会出现数据库删除了但界面有残留的 bug,所以我又查询
了 JTable 的各种方法。通过 DefaultTableModel 和 JTable 联合使用最终能够使表
格的数据保持一致。(改 bug 期间还出现了表格一致但是鼠标监听表格某一行又
出现问题的局面,但是最终都完美解决了)这个 bug 是我思考最久的,花了好几
个小时。其他问题其实都不算什么难点。
难点 3:查询用户的借阅记录,如果用题目提供的数据表无法实现查询用户的记
录,因为数据都被删了。
解决:我在记录表加了个 status 字段,如果为 0 就是借书的记录,如果为 1 就是
已经归还。所以管理员能够查看各个用户的借书记录,还能通过用户名进行分类
查询。
五、实验总结
(实验结果截图展示,实验过程总结)
首先说明代码的完成内容,必做和选作的功能全部实现了。因为之前合作做过很
多后端的项目,所以我认为这个简易图书馆项目是比较简单的。但是之前是用
mybatis 或者 springboot 的框架,对于基本的连接都不熟练,所以借着这次机会
复习一下数据库连接。
游戏运行:直接运行 Main 类,然后进行登录,也可以注册,有管理员和普通用
户的区分。普通用户没有权限不能注册成为管理员,登录成功后进入主页。管理
员能够对图书进行增删改查的操作,还能查询用户的借书记录,借书记录也能够
进行分类查询查看不同用户的借书记录。
普通用户能够对图书进行分类查询,然后选择图书然后输入归还日期就能够借阅,
还有归还界面,用户只能查看自己借的书,然后选择图书进行归还。还有个人信
息修改的功能,用户能够查看并修改自己的个人信息。
总结:本次实验很好地复习了对于 sql 的增删改操作,还有分类查询、模糊查询
等的使用。用户用关键字检索的时候就需要使用到模糊查询,算是对 jdbc 有一
个比较基础的实践。通过这次的实验,我对 JTable 的使用也有了更加详细的了
解。此外对 jdbc 的使用也有了一次比较全面的练习。很高兴能有这两次实验,
能够独立完成两个比较完整的项目。虽然 swing 的使用已经很少了,但 Java 的
强大依旧是有目共睹的。
以下是实验项目的一些操作展示。