图书馆管理小项目

学习目标:图书馆管理小项目

提示:主要目的是让学完JavaSE的同学对之前掌握的知识做一些运用,该项目应用的知识点包括下面内容:

学习内容:

提示:这里可以添加要学的内容
例如:
1、面向对象的思想
2、分层的思想
3、接口
4、异常
5、集合
6、日期处理
7、Stream流
8、IO流
9、反射
10、Javafx(了解)
11、css(了解)


学习产出:

①代码存放的规范:
bean:存放实体类的包
global:存放了一些全局使用的类
media.img:存放一些图片
module:存放界面相关的类,不同的功能模块
service:存放服务相关类
theme:存放美化界面相关的文件
util:数据初始化
lib:存放第三方技术Jar包
App:主类

②关于fxml的一些知识点:
1、在项目启动时,会加载所有界面对应的fxml文件,然后将这些对象放入到map中,此map由ViewManager类进行管理。
2、每个界面都对应了一个fxml文件,fxml文件中的内容可以控制界面的展示效果。该文件中的标签都是成对出现的,但是绝对不能出现你中有我,我中有你。
3、用户在操作界面的时候会产生一些行为,比如点击一个按钮,这就是一个点击时间,我们可以通过button标签中的onAction属性与控制器对应的方法进行绑定:<button onAction=”#login”>
每个fxml文件都有一个对应的java文件相关联,这样的java文件叫做控制器,我们可以通过fxml文件中的最外层标签里面的fx:controller标签进行绑定:fx:controller="com.bjpowernode.module.login.Login"
4 :我们可以在输入框中看到自己输入的内容
:我们不能在输入框中看到自己输入的内容
通过输入框中的fx:id与控制器中的属性进行管理,例如:
fxml文件的标签:<TextField fx:id="username" />
控制器文件的属性:@FXML private TextField username;

③分层的 思想:
代码分层:
controller(请求处理层):负责与界面数据进行交互处理
service(业务逻辑层):负责业务逻辑相关处理
DAO(数据持久层):负责数据持久化操作,DAO的全称是Data Access Object
DAO层存放纯数据的增删改查,对多个数据的增删改查在service层操作。

④Stream流和IO流
IO流的使用存储对象的ObjectInputSteam和ObjectOutputSteam进行;
以下是几个之前se中没用涉及的点

list.steam().filter(u -> u.getId()==user.getId()).findFirst().get();
//使用steam流的filter过滤器获取Id一样的第一条User数据
list.steam().filter(u -> u.getId()==user.getId()).collect(Collectors.toList());
//使用steam流的filter过滤器收集Id一样的一个list集合
list.steam().collect(Collectors.groupingBy(Book::getType));
//使用steam流的collect收集方法根据Type类别groupingBy()来收集新的集合

⑤反射
简化属性赋值的时候想到反射,通过写一个方法,把传入的两个相同类的属性值进行赋值:

/**
 *  对象属性值的拷贝
 * @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();
    }
}

⑥知识点小结:
1、户欠费后需要充值并且充值之后的余额要大于0才能进行还书操作,我们需要精确计算出用户的余额,因此使用的类型是BigDecimal。(工资都用这个类)

2、编程前期我们应该考虑周全,比如想到在用户的类中添加isLend的boolean来表示是否已经借阅等;

3、借出书Id用int会导致超出范围,可以改成字符串,使用UUID生成唯一的编号`Id=UUID.randomUUID().toString();

4、使用方法重载可以有效避免很多无用操作,学会改变形参来重载,而不是在原方法上修改。

5、shift + f6同时修改相同的变量名,ctrl+alt+左键跳转实现类,ctrl+alt+t出现surround with(加包着的语句),ctrl+alt+u查看继承图

6、路径太多可以在bean中新建`Path类存放路径

7、observableList中更改集合数据界面会发生变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值