Java项目分享,今天的库管理项目主要是针对已经学完JavaSE的小伙伴,利用一些自己之前掌握的Java基础知识。该项目主要包括以下内容:
*面向对象的思维。
*分层思维。
*接口。
*不正常。
*收藏。
*日期处理。
*流流。
* IO流量。
*反思。
* Javafx
* css
#图书相关功能。
#图书数据初始化。
#功能概述
创建几个图书对象,将它们放入列表中,并使用对象的输出流将列表对象写入硬盘文件。整体功能类似于用户数据初始化操作。
#通用通配符
图书数据初始化类似于用户数据初始化,所以两种方法重构后合并为一种方法。方法添加两个形式参数,它们是字符串。
路径(存储路径)和列表?
列表(存储的数据)。这里,因为列表中的泛型不同,所以我们不能在形式参数中填写具体的类型。这里,我们使用通用通配符来解决这个问题。
#查询书籍。
#功能概述
将硬盘文件中的图书数据查询显示到页面,除了条件查询比较多之外,总体上与之前的用户查询类似。当您单击查询按钮时,您需要将输入的图书名称和isbn传递到DAO中。需要注意的是,如果同时输入图书名称和isbn,首先会根据查询代码中的图书名称查询图书数据bookList,然后基于bookList根据isbn进行条件查询。
#添加书籍。
#功能概述
输入的book数据放入Book对象中,然后使用对象输出流将Book对象写出到硬盘文件中。需要手动设置id号的自增操作。类似于用户添加。
#删除书籍。
#功能概述
根据输入的书号,从图书数据中找到对应的图书对象,然后从图书收藏对象中删除该图书对象。
#修改书。
#功能概述
将修改后的图书数据保存到硬盘文件中类似于修改用户。
#使用反射。
在修改操作中,需要将输入的数据逐个放入查询到的书对象中,需要调用很多set和get方法。如果属性太多,代码会很麻烦。为了解决这个问题,我们编写了一个工具类,它使用反射来获取类中的所有属性,然后执行赋值操作。注意排除工具类中不想分配的属性,如serialVersionUID。
代码:
/ * 对象属性值的拷贝 * @param origin * @param dest */public static void populate(Object origin, Object dest) { try { //使用反射解决这个问题 //判断两个对象是否是同一类型 if (origin.getClass() != dest.getClass()) { throw new RuntimeException("两个对象必须得是同一类型"); } Class? clazz = origin.getClass(); //获取origin中的属性 Field[] fields = clazz.getDeclaredFields(); for (Field f : fields) { //排除serialVersionUID if ("serialVersionUID".equals(f.getName())) { continue; } //打破封装 f.setAccessible(true); //从dest对象中找到对应的属性值,然后赋值到origin相应的属性中 f.set(origin,f.get(dest)); } } catch (IllegalAccessException e) { e.printStackTrace(); }}
#图书统计。
#功能概述
根据控制器中的代码,如果要显示图表内容,需要两个数据,即图书类型和图书类型对应的图书数量。至于图书展示的操作,就交给界面了,所以我们需要做的就是从硬盘文件中的图书统计不同类型的图书数量。
#方法返回值。
>方法的返回值写什么要根据需求来定,因此在编写方法之前要搞明白当前的需求是要做什么,倘若在需求没有搞明白的前提下来编写代码,肯定会遇到很多问题。通过图书统计功能的编写我们要学会分析现有代码,根据代码得出所需要的数据,然后再自己操作获取这些数据即可,剩余数据展示的操作交给界面来处理即可。# 借阅相关功能
# 借阅数据初始化
# 功能概述
利用之前编写的InitDataUtil工具类将借阅数据进行初始化。
# UUID
由于可能会产生很多借阅数据,所以编号不能再用int类型自动增长了,这里将Lend类中的编号类型改成了String。这类的编号不要让用户来输入,我们使用UUID来生成。UUID的生成跟网卡MAC地址、时间戳、随机或伪随机数、时序等元素有关,可以保证唯一性。UUID的长度是36,去除里面的-
之后长度是32。
# 借阅数据查询
# 功能概述
当用户借阅了某本书之后会生成一条数据,我们需要在借阅管理中将该数据查询出来,查询的时候需要注意Lend对象中包含了Book和User对象,对于这类对象的查询我们可以通过多次get方法将其查出。
# 借阅书籍
# 功能概述
通过点击图书管理中的借阅按钮生成一条借阅数据,在点击借阅按钮之后,需要查询出可以借书的用户,每位用户只能借阅1本书,这里查询出的用户列表必须都是可以借书的用户。这部分操作的界面较多,注意界面之间的数据传递。
# User类的修改
为了能够方便的查询出哪些用书手中已经借书了,我们可以在User类中添加一个boolean属性isLend,该属性的作用是标识当前用户手中是否有书。但是修改User类之后会发现代码很多地方有编译报错,通过这个改动发现类似这种User的类最好在开始的时候定义好,否则后期修改会导致改动较大。
# Service层的使用
Controller主要的作用是处理跟界面相关的操作,DAO层主要的作用是处理跟数据持久化方面的操作,遇到一些比较复杂的操作时,我们需要在service层编写业务逻辑代码,在service中可以调用多个不同得DAO。这样可以将代码分层处理,便于后期的扩展升级。
# 还书功能
# 功能概述
用户看完书籍之后需要进行归还,默认最长借阅周期是30天,倘若超出的话,超出1天扣1元,30元封顶。如果在还书的时候,用户的余额已为负数,则表示欠费了,需要改用户先还清欠款才能进行还书的操作。
# 逾期扣款
计算超出归还日期的用户所需支付的金额,然后进行扣款操作,这里个功能需要每天执行,我们可以使用定时任务解决,但是考虑到该项目用户不会每天运行,所以单独写个方法,当启动软件的时候进行同一计算然后再扣款。
# 充值
# 功能概述
用户欠费后需要充值并且充值之后的余额要大于0才能进行还书操作,我们需要精确计算出用户的余额,因此使用的类型是BigDecimal。
本视频专为零基础的小伙伴倾情打造,共分为29个章节,可在线观看,可下载学习,源码、课件均已配齐
> 关注+转发私信“1”