Java项目实战教程,Javase小项目「图书管理系统」(javaweb项目图书管理系统)

Java项目实战教程,Javase小项目「图书管理系统」(javaweb项目图书管理系统)

Java项目分享,今天这个图书馆管理项目的主要是让学完JavaSE的小伙伴,对之前掌握的Java基础知识做一些运用,该项目主要包括下面内容:

  • 面向对象的思想
  • 分层的思想
  • 接口
  • 异常
  • 集合
  • 日期处理
  • Stream流
  • IO流
  • 反射
  • Javafx
  • css

图书相关功能

图书数据初始化

功能概述

创建若干Book对象,将对象放入到List中,把List对象利用对象输出流写出到硬盘的文件中,总体功能与用户数据初始化操作类似。

泛型通配符

图书数据初始化和用户数据初始化类似,所以将两个方法进行重构,重构之后合并为一个方法。方法中添加两个形参,分别是String path(存放的路径)和List<?> list(存放的数据)。这里由于list中的泛型是不同的,所以不能在形参中填写具体的类型,这里我们使用了泛型通配符来解决该问题。

查询图书

功能概述

将硬盘文件中的图书数据查询并展示到页面中,整体跟之前的用户查询类似,只是多了条件查询,在点击查询按钮时,需要将输入的图书名称和isbn传入到DAO中。需要注意的是如果图书名称和isbn同时输入的话,在查询代码中先根据图书名称查询出图书数据bookList,之后在bookList的基础上再根据isbn进行条件查询。

添加图书

功能概述

将输入的图书数据放到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(); }}

图书统计

功能概述

根据controller中的代码得出要想展示出图表内容,需要两个数据,分别是图书类型和该图书类型对应的书籍数量,至于图书展示的操作交给界面处理就行,因此我们要做的事就是从硬盘文件中图书书籍里面统计出不同类型书籍的数量分别有多少。

方法返回值

方法的返回值写什么要根据需求来定,因此在编写方法之前要搞明白当前的需求是要做什么,倘若在需求没有搞明白的前提下来编写代码,肯定会遇到很多问题。通过图书统计功能的编写我们要学会分析现有代码,根据代码得出所需要的数据,然后再自己操作获取这些数据即可,剩余数据展示的操作交给界面来处理即可。

借阅相关功能

借阅数据初始化

功能概述

利用之前编写的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”

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年10月5日 上午8:34
下一篇 2022年10月5日 上午8:36

相关推荐