栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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

注意:

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

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

设计思路 (一) 流程图

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


(二) 包、类、方法创建

知道了整个流程之后,就开始创建包、类、方法,按顺序依次创建,如下图:

(三) 约束和规则

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

编号长度都是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) 管理员界面

项目总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号