hello各位看官们,小tu又来送上新鲜的博客了!
上篇博客写了有关图书管理系统的需求,博主接着这篇博客来阐述自己写项目的一个大概设计思路,还有一些细节的设计。其实项目写起来不难,最重要的两个点就是:(1) 刚开始的一个整体思路的构想,也就是文档的撰写 (2) 一些细节的设计,要根据实际要求来
要是朋友们觉得博主写的还不错的就点个赞给点鼓励吧~蟹蟹!
文章图片
注意:
项目整体代码连接,提取码:v6u1
目录
- 设计思路
-
- (一) 流程图
- (二) 包、类、方法创建
- (三) 约束和规则
- 代码解析
-
- (一) 底层结构
- (二) 需求设计
- (三) 数据库
- (四) 日志记录添加
- 界面展示
-
- (1) MainMenu主界面
- (2) 操作员界面
- (3) 管理员界面
- 项目总结
设计思路 (一) 流程图 首先根据说明需求画出了流程图,流程图如下:
文章图片
?
(二) 包、类、方法创建 知道了整个流程之后,就开始创建包、类、方法,按顺序依次创建,如下图:
文章图片
?
(三) 约束和规则 根据需求文档,再结合实际,写出了如下的约束文档
编号长度都是8位【项目实践|【Java实战项目】图书管理系统(基于数据库)】?
名称都用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("\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();
}
}
?
界面展示 下图是整体界面的一个设计类图:
文章图片
接下来依次展示每个系统界面(只有界面展示,每个操作展示这里暂时不做展示):
(1) MainMenu主界面
文章图片
(2) 操作员界面
文章图片
文章图片
文章图片
文章图片
文章图片
(3) 管理员界面
文章图片
项目总结 本来写这个项目的时候是想着用抽象工厂模式的,但是把项目做好之后发现自己建的抽象工厂是错误的,工厂的产品应该是管理员和操作员,而我创建的产品是操作,意思是我将操作进行分类创建了,这跟抽象工厂的设计理念不符,所以博文中并未提过跟抽象工厂有关的,这也算是自己的一个小教训了,没有把设计模式理解透彻就把项目写完了
推荐阅读
- Career|Java学习方法的一点个人见解-完整版
- java|Java学习方法的一点个人见解
- 学习方法|[转]Java学习方法的一点个人见解-完整版
- Java编程|网上书店管理系统项目【Java数据库编程实战】
- 算法|算法之排序/sort
- 数据结构和算法|【大厂必会的数据结构和算法】01-稀疏数组和队列
- 如何在Java中向左或向右旋转数组()
- 如何在Java中初始化和比较字符串()
- 如何在Java 8中从Stream获取ArrayList()