项目实践|【Java实战项目】图书管理系统(基于数据库)

hello各位看官们,小tu又来送上新鲜的博客了!
上篇博客写了有关图书管理系统的需求,博主接着这篇博客来阐述自己写项目的一个大概设计思路,还有一些细节的设计。其实项目写起来不难,最重要的两个点就是:(1) 刚开始的一个整体思路的构想,也就是文档的撰写 (2) 一些细节的设计,要根据实际要求来
要是朋友们觉得博主写的还不错的就点个赞给点鼓励吧~蟹蟹!
项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

注意:
项目整体代码连接,提取码:v6u1

目录

  • 设计思路
    • (一) 流程图
    • (二) 包、类、方法创建
    • (三) 约束和规则
  • 代码解析
    • (一) 底层结构
    • (二) 需求设计
    • (三) 数据库
    • (四) 日志记录添加
  • 界面展示
    • (1) MainMenu主界面
    • (2) 操作员界面
    • (3) 管理员界面
    • 项目总结

设计思路 (一) 流程图 首先根据说明需求画出了流程图,流程图如下:
项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

?
(二) 包、类、方法创建 知道了整个流程之后,就开始创建包、类、方法,按顺序依次创建,如下图:
项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

?
(三) 约束和规则 根据需求文档,再结合实际,写出了如下的约束文档
编号长度都是8位
名称都用10位
设计人名都是10位
?
图书出版日期、读者生日不能更改
图书名称和读者名称不能更改
图书类型和读者类型类中的类型不能修改,每个编号对应一个类型
?
存在的图书的类型不能删除
存在的读者的类型不能删除
?
借了书的读者不能删除 ——>删除时去借阅表里查询
借了的书不能删除 ——>删除时去借阅表里查询
借了书之后书的库存减1 ——>图书类重新创建一个库存减1 的修改方法
?
读者的可借图书数量不能超过最大值
借阅之前要先判断库存是否大于0
借阅之前要判断最大可借阅数量是否大于0,用count方法
【项目实践|【Java实战项目】图书管理系统(基于数据库)】?
代码解析 (一) 底层结构 Dao包里的类是接口,DaoImp是它的实现类,Service是所有操作的包,调用DaoImp里的类,这里用Book来举例说明
下图是BookDao的方法展示:
项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

下面是BookDaoImp的方法展示:
项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

下面是BookService的方法展示:
项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

(二) 需求设计 (1) 在底层创建了一个selectAll的方法,这个方法有一个List的返回值,适用于后面修改数据库信息和查询数据库信息的时候,将数据库信息返回
(2) 在工具类里创建了一些新的方法,方便键盘输入数据和读写数据到文件里
(3) 用接口创建底层是很方便的,有需要的操作时就直接到接口里添加方法
(三) 数据库 数据库创建的表如下:
项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

数据库连接使用的是德鲁伊连接池,这里说明一下,在写配置文件时最好只写以下几个属性,不要添加其他属性,后面遇到了再添加;博主在做的时候就添加了最大可连接数量n,后面就出现数据库只能调用n次的问题
属性:
url=??
username=??
password=??
driverClassName=??
?
博主的配置
url=jdbc:mysql://localhost:3306/library_system?rewriteBatchedStatements=true
username=root
password=123
driverClassName=com.mysql.jdbc.Driver
(四) 日志记录添加 添加日志很方便,在工具类中创建好静态的方法,在每个增删改查操作后面添加一句调用
//添加日志信息 public static void loginLogInfo(String s) { SimpleDateFormat sdf=new SimpleDateFormat(); String time=sdf.format(new Date()); String ss=time+"——"+s; try { FileWriter fw=new FileWriter("D:\\JavaSE_Project3\\project3\\src\\File\\loginLog.txt",true); fw.write(ss); fw.flush(); fw.write("\r\n"); fw.close(); }catch (Exception e){ e.printStackTrace(); } }public static void operatorLogInfo(String s){ SimpleDateFormat sdf=new SimpleDateFormat(); String time=sdf.format(new Date()); String ss=time+"——"+s; try { FileWriter fw=new FileWriter("D:\\JavaSE_Project3\\project3\\src\\File\\operatorLog.txt",true); fw.write(ss); fw.flush(); fw.write("\r\n"); fw.close(); }catch (Exception e){ e.printStackTrace(); } }

?
界面展示 下图是整体界面的一个设计类图:
项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

接下来依次展示每个系统界面(只有界面展示,每个操作展示这里暂时不做展示):
(1) MainMenu主界面 项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

(2) 操作员界面 项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

(3) 管理员界面 项目实践|【Java实战项目】图书管理系统(基于数据库)
文章图片

项目总结 本来写这个项目的时候是想着用抽象工厂模式的,但是把项目做好之后发现自己建的抽象工厂是错误的,工厂的产品应该是管理员和操作员,而我创建的产品是操作,意思是我将操作进行分类创建了,这跟抽象工厂的设计理念不符,所以博文中并未提过跟抽象工厂有关的,这也算是自己的一个小教训了,没有把设计模式理解透彻就把项目写完了

    推荐阅读