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

hello各位看官们,小tu又来送上新鲜的博客了!

上篇博客写了有关图书管理系统的需求,博主接着这篇博客来阐述自己写项目的一个大概设计思路,还有一些细节的设计。其实项目写起来不难,最重要的两个点就是:(1) 刚开始的一个整体思路的构想,也就是文档的撰写 (2) 一些细节的设计,要根据实际要求来

要是朋友们觉得博主写的还不错的就点个赞给点鼓励吧~蟹蟹!

【Java实战项目】图书管理系统(基于数据库)_第1张图片

注意:

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

目录

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

设计思路

(一) 流程图

首先根据说明需求画出了流程图,流程图如下:

【Java实战项目】图书管理系统(基于数据库)_第2张图片

(二) 包、类、方法创建

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

(三) 约束和规则

根据需求文档,再结合实际,写出了如下的约束文档

编号长度都是8位
名称都用10位
设计人名都是10位

图书出版日期、读者生日不能更改
图书名称和读者名称不能更改
图书类型和读者类型类中的类型不能修改,每个编号对应一个类型

存在的图书的类型不能删除
存在的读者的类型不能删除

借了书的读者不能删除 ——>删除时去借阅表里查询
借了的书不能删除 ——>删除时去借阅表里查询
借了书之后书的库存减1 ——>图书类重新创建一个库存减1 的修改方法

读者的可借图书数量不能超过最大值
借阅之前要先判断库存是否大于0
借阅之前要判断最大可借阅数量是否大于0,用count方法

代码解析

(一) 底层结构

Dao包里的类是接口,DaoImp是它的实现类,Service是所有操作的包,调用DaoImp里的类,这里用Book来举例说明

下图是BookDao的方法展示:
【Java实战项目】图书管理系统(基于数据库)_第4张图片

下面是BookDaoImp的方法展示:
【Java实战项目】图书管理系统(基于数据库)_第5张图片

下面是BookService的方法展示:
【Java实战项目】图书管理系统(基于数据库)_第6张图片

(二) 需求设计

(1) 在底层创建了一个selectAll的方法,这个方法有一个List的返回值,适用于后面修改数据库信息和查询数据库信息的时候,将数据库信息返回

(2) 在工具类里创建了一些新的方法,方便键盘输入数据和读写数据到文件里

(3) 用接口创建底层是很方便的,有需要的操作时就直接到接口里添加方法

(三) 数据库

数据库创建的表如下:
【Java实战项目】图书管理系统(基于数据库)_第7张图片

数据库连接使用的是德鲁伊连接池,这里说明一下,在写配置文件时最好只写以下几个属性,不要添加其他属性,后面遇到了再添加;博主在做的时候就添加了最大可连接数量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实战项目】图书管理系统(基于数据库)_第8张图片
接下来依次展示每个系统界面(只有界面展示,每个操作展示这里暂时不做展示):

(1) MainMenu主界面

【Java实战项目】图书管理系统(基于数据库)_第9张图片


(2) 操作员界面

【Java实战项目】图书管理系统(基于数据库)_第10张图片


【Java实战项目】图书管理系统(基于数据库)_第11张图片


【Java实战项目】图书管理系统(基于数据库)_第12张图片


【Java实战项目】图书管理系统(基于数据库)_第13张图片


【Java实战项目】图书管理系统(基于数据库)_第14张图片


(3) 管理员界面

【Java实战项目】图书管理系统(基于数据库)_第15张图片

项目总结

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

你可能感兴趣的:(项目实践,java,开发语言,后端)