java图书馆管理系统_六天写出来的基于Swing的图书管理系统你不来吐槽一下?

前段时间学习完了MySQL和JDBC,想着自己做个东西实战一下,于是写了一个烂大街的图书管理系统。。。但好歹是自己一个人日夜兼程,硬着头皮做出来的还像样的东西,总结一手吧。看的人欢迎吐槽。我会从以下几个方面进行总结。(总结的是我目前认为的以及怎么做的) + 这个项目设计步骤是什么 + 这个项目用到的知识有什么 + 这个项目遇到了什么问题,怎么解决的。 + 这个过程中收获的知识点有哪些


@[TOC]

一、这个项目设计步骤是什么

管理信息系统的建立与应用可以划分成总体规划、系统开发和系统运行三个阶段,其中系统开发阶段还可进一步分为系统分析、系统设计和系统实施等工作环节。上述各个阶段排列成一个严格的线性开发序列,在每个工作阶段均产生完整的技术文档作为下一阶段工作的指导和依据,每一阶段都应对文档进行评审,确信该阶段工作已完成并达到要求后才能进入下一阶段,同时在以后的工作中不能轻易改变前面经过评审的成果。 国外曾有人对一些软件项目开发各阶段的工作量进行了统计,结果表明,在开发过程中各工作阶段所占全部工作量的比重分别达到系统分析:系统设计:编程:模块调试:系统调试=20%:15%:20%:25%:20%。由此可见,程序编写在开发工作中只占很小比例,而调试工作却占整个开发工作量的一半左右

在做这个图书管理系统之前,我大概看了几篇相关的论文,我的大致的步骤如下:

1、明确开发环境

MySQL8.0.21、IDEA开发工具、JDK11.0、JDBC、SpringJDBC-Template、DBCP开源数据连接池 图形界面使用Swing组件 对每个工具有认识、懂得如何使用。(swing不太懂就扑街了 )

2、系统分析步骤

需要考虑:①系统的处理对象;②系统的功能、具体的业务;③对具体的业务有流程图设计;④将业务需求进行模块划分 处理对象: + 图书信息:书籍编号,书名,类型,作者,译者,出版商,出版时间,价格,存储量。  +  读者信息:编号,姓名,性别,最多可借数量,可借时间。   + 借阅信息:读者编号,书籍编号,借阅日期,还书日期,借阅时间,是否还书。  +  管理员信息:编号,姓名,密码,是否为管理员。 

系统功能、业务 从处理对象的角度去分析 + 系统管理员能够对用户实施管理:包括添加、删除用户信息,对用户密码进行有效管理。 还能够方便的进行图书管理:包括设置图书种类和图书信息,添加、删除和修改图书信息。  + 读者用户在该系统进行借书,系统自动添加借书记录和借书日期,读者还书时管理员也能在平台进行还书操作,修改读者借书信息。 + 管理员可以修改用户信息和自己的信息,还可以对数据库的信息进行维护、日志管理等 + 游客和读者都能方便的对图书进行查询。但只有登陆了才能进行借书操作

流程图设计 我没有设计,按照自己的思路写的。

功能模块划分 + 应用启动界面模块 + 用户注册模块 + 用户信息登陆模块 + 用户借阅信息 + 图书馆藏资源模块 + 管理员模块

具体功能还需要细分、设计实现

3、数据库设计

大写强调 ; 设计数据库字段用英文 !

我们要设计数据库要考虑 + 表结构的实现(主键、非空、自增、数据类型、外键约束等) + 每个表插入和删除、修改、查询的时候需要注意什么 + 触发器和事务是否需要设计

附上我的表结构:

f9ed68e2537206448b29acbe4a33d074.png

books表 书编号(主键)、书名、价格、剩余量、出版商、作者、出版日期、类型

59a32e2d2aba702757eb4a5c0343c6c7.png

user表 字段:id主键、用户名、密码、是否管理员(这里可以添加权限,我没有设计,0非管理员1管理员)

c50c1edc25df296e471f5ea5e3550408.png

reader表 id关联user表的id,名字、可借书的天数、可借书本数、性别、已借书数、人生格言(默认值)

fd977e886518a2ccf66e177e0c81f53f.png

borrow表 借书者的id、所借书id、借书日期、是否归还、截止还书日期

56e8495b2d1fbd2562d17651ed12122c.png

创建的触发器 1、当书的余量为0,读者想要借书无法借 2、当读者成功借书、则余量-1且borrow表添加对应的借书记录 3、当读者还书时、则余量+1、且borrow表删除对应的记录 4、当添加图书时,检查出版日期不能超过今天

创建的表结构的MySQL语句汇合: 创建book表——>创建user表——>创建reader表——>创建borrow表

1

这个过程中遇到的错误: + 1、MySQL不支持在触发器使用事务,也就是不允许使用rollback等操作。可以使用抛出异常来替代 + 2、在MySQL WorkBeach里面添加触发器时需要修改sql语句结束符,该语句要和创建触发器的语句一起,不要单独执行。都写好了以后点击执行。 + 3、注意数据类型,TIMESTAMP和DATE,TIMESTAMP日期包含具体几点,格式比较长。尽量使用DATE,方便与java里面的数据类型进行转化。 + 4、注意new和old的使用场景以及针对的对象表,inset和update、delete三者的new区别。 + 5、判断日期的前后使用对应的函数:mysql 日期加减天数

MySQL 

4、DAO三层架构模型实现

我们需要将与数据库的交互进行封装 在java里面创建表映射对象,我们对对象的操作就可以操作对应的表数据了。

一、ORM表映射

如books表的映射

package 

我们把这些表映射放到统一的包ORM里面。

ea266c59c198a4bcd606647b818dfdfb.png

二、数据库连接池CP

在Java中开源的数据库连接池有以下几种 : 1、C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate [2] 一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。 2、Proxool:是一个Java SQL Driver驱动程序,提供了对选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中,完全可配置,快速、成熟、健壮。可以透明地为现存的JDBC驱动程序增加连接池功能。 3、Jakarta DBCP:DBCP是一个依赖Jakartacommons-pool对象池机制的数据库连接池。DBCP可以直接的在应用程序中使用。 4、DDConnectionBroker:是一个简单、轻量级的数据库连接池。 5、DBPool:是一个高效、易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。

我们使用是DBCP

2bff2be05737e41f15e4dca999315437.png

利用该数据库连接池我们创建封装好的JDBC实例: 相关的配置我们写到一个文件里面:

cbd8872df1510cf475c89e9cbcec4cc6.png

然后我们创建工具类用于获取数据库连接池的datasource

package 

三、基于ORM表映射,利用数据库连接池设计对应的DAOImpl实现CRUD

先利用SpringJDBCTemplate返回被封装的JDBC,类型是带命名参数的JDBCTemplate

package 

创建对应表的DAOImpl,如books的DAOImpl实现CRUD操作:

package 

我们把这些表的功能实现放在同一个包里面:

95dbaff15476227083fbb03a1377bc98.png

四、测试类,用于测试每个类的功能是否完成

package 

把它放到测试包里面,当需要添加新功能时,就在这里进行测试

7691d084e22d384719f30ebea00cf690.png

5、图形界面开发

一、启动界面StartUi

a3c408aa63bb4eefd7c7af75803e75c6.png

二、注册界面UserRegister

e613880b5c3874418fc93306e8e817f9.png

83d4dfd2cf01226986c7c3919e85b025.png

三、登陆界面LogInGUi

管理员的登陆界面也是这个,但是会添加额外功能

32cb7d9cb1283fc28bddc78cc07f9cff.png

四、读者信息界面ReaderInfo

以读者身份登陆后显示个人信息,头像动态生成,man则是男头像,woman则是女头像

1574a8ca8ad857702a6bc2a5066eaebb.png

五、读者借书的信息界面(还书操作、ReturnBooksGui)

点击借书按钮,如果没有借书记录则不进入还书界面

b6570e78a128f43fb93708c03ed07f67.png

点击借书按钮,进入馆藏资源借书,然后返回:已借书数动态更新

d4f478cd76045d5796dc95e044c7d1e2.png

点击还书按钮:

91451d81d8d9029aea09615655bf775d.png

输入id还书或者全部归还

0113b7ce97af3819fa47c96bdab414ac.png

2f83b8d035947d7f965aac165d105104.png

六、图书馆资源一览界面LibrarySources

d65d557a756e9945842fd7d4ec171210.png

必须登陆才能进行借书:

5517c2734502696d8d1825a011e6d65a.png

七、管理员登陆界面AdminRegister

在登陆界面登陆提示管理员以后,点击是,会进入管理界面,弹出问候语

131232fe46302df72ecc30b0c9ffc336.png

这里会有很多操作,功能实现等。采用了菜单栏和菜单、菜单选项、监听对应的菜单,触发不同的功能。

2f7b93d0c6836b5d1d77906ddf41f695.png

a1fdb69c9059dc317b922f9ccbd3e22f.png

a3def2c07a5409ed203a963c80afdf93.png

6df1b4c2458effeec954ce969733f810.png

一些还没写的功能就用:

f6fed5ef55504ff872522634089f996a.png

aca52d47bd7e90fc0a5f914f0401f6fa.png

2、如何创建一个Map数组以及其实例化

Map

17027ad0534056bfb57d1faab720a36c.png

二、遇到的问题

1、如何使用下拉选择框

jComboBox_sex 

2、如何给JPanel添加背景图片

千万不要信哪些人说的添加Jlabel,治标不治本的。设置透明毫无美感。可以自己手写一个类来实现,利用了重新绘制的函数。

package 

3、如何动态修改JTable的值,同时检验数据的合格性,不合格不保存、如何动态删除选择的行、以及如何删除一行同时将对应的操作施加到数据库。

思路:将数据库的数据读取出来,然后得到了二维数据数据bookDate,给表创建单元格编辑器,在编辑器里可以设置对值的检验。然后在监听对应的表数据,将对应的修改值存起来,选择的行利用主键唯一性存起来。然后利用一个按钮来确认删除.就将存的数据提取处理删除。

表格编辑器

package 

给表格添加该编辑器

// 创建单元格编辑器,使用文本框作为编辑组件

对表格更新操作进行监听,然后将数据保存到bookData,但是未保存到数据库。在确认按钮上添加监控,点击,则进行对应事件的处理。

///表格监听,编辑表格得到的数据将保存到实际的数据库,保存前会发出提示

删除多选的行操作,因为你移除了一次行,对应的行的索引会变化,你要像我这么做:

jButton_delete

全部删除;

while

表格的排序和过滤: TableModel没有移除行model.removeRow(0);//一行一行的删除 所以我们要将TableModel定义为DefaultTableModel

TableModel 

4、菜单栏和菜单、菜单选项的使用

先添加菜单栏,再添加菜单,必须设置名字才能看见。。。 然后在对应的菜单添加多个菜单选项或者子菜单

JMenuBar 

5、父窗体、子窗体、A-B-C-A等的调用关系如何处理

利用了传入参数的办法,判断是否null等、或者按照需要将对应的窗体设置为:

mainJFrame

6、将一些类和方法抽取公共类、公共方法、接口,代码依然冗杂

6b542e9b1710b625e0ff5c220ef5f963.png

7、IDEA里面配置MySQL数据库

c46770d05549f45dd6e6b0505b314c8c.png

8、各种布局管理器

6e0b408ce07a3c4f41ba1f278731f5fe.png

一个很实在的讲解: 运用 BoxLayout 进行 Swing 控件布局

8、整体项目架构使用maven项目管理工具

f81fe6ab36cd15910e1f56ae291346c7.png

三、结语

项目做了6天,也是自己的第一个项目,完全独立的做,遇到了很多的难题,但是解决了以后现在我想不起啦 。。。总的来说还行。 贴上总代码行数:

33e44dd2cdee82f7f72426513d49969a.png

最大的问题:怎么样让代码,不那么冗杂!!!DAO三层架构设计不知道我的到底算不算是

四、源码

github: https://github.com/linj21a/BooksMangementSystem

结后语 说明文档什么的就不会写了。。。。博客匆忙总结一把了。还有好多东西要学,大家加油!不懂就要问,我也不懂 。大家开始吐槽吧!!!

原文链接:

六天写出来的基于Swing的图书管理系统你不来吐槽一下?_LH is programming hard-CSDN博客​blog.csdn.net
68090fb824ee3f74fe740eb330271741.png
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值