【Java实战项目】图书管理系统(基于数据库)
hello各位看官们,小tu又来送上新鲜的博客了!
上篇博客写了有关图书管理系统的需求,博主接着这篇博客来阐述自己写项目的一个大概设计思路,还有一些细节的设计。其实项目写起来不难,最重要的两个点就是:(1) 刚开始的一个整体思路的构想,也就是文档的撰写 (2) 一些细节的设计,要根据实际要求来
要是朋友们觉得博主写的还不错的就点个赞给点鼓励吧~蟹蟹!
注意:
目录
设计思路
(一) 流程图
首先根据说明需求画出了流程图,流程图如下:
(二) 包、类、方法创建
知道了整个流程之后,就开始创建包、类、方法,按顺序依次创建,如下图:
(三) 约束和规则
根据需求文档,再结合实际,写出了如下的约束文档
编号长度都是8位
名称都用10位
设计人名都是10位
图书出版日期、读者生日不能更改
图书名称和读者名称不能更改
图书类型和读者类型类中的类型不能修改,每个编号对应一个类型
存在的图书的类型不能删除
存在的读者的类型不能删除
借了书的读者不能删除 ——>删除时去借阅表里查询
借了的书不能删除 ——>删除时去借阅表里查询
借了书之后书的库存减1 ——>图书类重新创建一个库存减1 的修改方法
读者的可借图书数量不能超过最大值
借阅之前要先判断库存是否大于0
借阅之前要判断最大可借阅数量是否大于0,用count方法
代码解析
(一) 底层结构
Dao包里的类是接口,DaoImp是它的实现类,Service是所有操作的包,调用DaoImp里的类,这里用Book来举例说明
下图是BookDao的方法展示:
下面是BookDaoImp的方法展示:
下面是BookService的方法展示:
(二) 需求设计
(1) 在底层创建了一个selectAll的方法,这个方法有一个List的返回值,适用于后面修改数据库信息和查询数据库信息的时候,将数据库信息返回
(2) 在工具类里创建了一些新的方法,方便键盘输入数据和读写数据到文件里
(3) 用接口创建底层是很方便的,有需要的操作时就直接到接口里添加方法
(三) 数据库
数据库创建的表如下:
数据库连接使用的是德鲁伊连接池,这里说明一下,在写配置文件时最好只写以下几个属性,不要添加其他属性,后面遇到了再添加;博主在做的时候就添加了最大可连接数量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("rn");
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("rn");
fw.close();
}catch (Exception e){
e.printStackTrace();
}
}
界面展示
下图是整体界面的一个设计类图:
接下来依次展示每个系统界面(只有界面展示,每个操作展示这里暂时不做展示):
(1) MainMenu主界面
(2) 操作员界面
(3) 管理员界面
项目总结
本来写这个项目的时候是想着用抽象工厂模式的,但是把项目做好之后发现自己建的抽象工厂是错误的,工厂的产品应该是管理员和操作员,而我创建的产品是操作,意思是我将操作进行分类创建了,这跟抽象工厂的设计理念不符,所以博文中并未提过跟抽象工厂有关的,这也算是自己的一个小教训了,没有把设计模式理解透彻就把项目写完了