图书管理项目

fxml文件

标签

标签都是成对存在的,有两种写法

<Stackpane></Stackpane>
<button/>

绑定控制器

每个fxml文件都有对应一个jave文件,这个java文件叫做控制器 通过fx:controller绑定

x:controller:"com.module.login"

事件

由于每一个标签会对应一个事件,我们可以通过标签中的onAction属性与控制器的相对应方法进行绑定

<button :onAction="#login">

输入框

通过输入框fx:id与控制器属性进行绑定

<TextFiled fx:id ="username">
@FXML private TextField username;

分层的思想

请添加图片描述

用户相关功能

用户数据初始化

先创建user对象放入到list中,然后通过输出流list对象写出到硬盘的user.txt中,达到持久化的目的

关于serializable接口

由于存到list中的是User对象,所以要让User实现可序列化,要对某个类的对象进行IO操作时,要让该类实现serializable接口。
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
把对象转换为字节序列的过程称为对象的序列化
把字节序列恢复为对象的过程称为对象的反序列化

ObjectOutputStream 类

对象的序列化流:把对象转成字节数据的输出到文件中保存,对象的输出过程称为序列化,可实现对象的持久存储。

FileOutputStream

FileOutputStream流是指文件字节输出流,专用于输出原始字节流如图像数据等,其继承OutputStream类,拥有输出流的基本特性

注意要点

1.利用对象输出流将list数据写出到文件中
oos= new ObjectOutputStream(new FileOutputStream(PathConstant.USER_PATH));
2.写入数据
oos.writeObject(list);
3.记得最后要关闭流
if(oos!=null){
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public class InitDataUtil {
    public static void main(String[] args) {
        initUser(null);
    }
    
// 初始化用户数据
public static void  initUser(List<User> userList){
        ObjectOutputStream oos=null;
        //创建相关文件和文件夹
        try {
       File diretory= new File("user/");
       //路径全部用常量表示
       File file =new File(PathConstant.USER_PATH);
       //判断文件是否存在
        if(!diretory.exists()){
            diretory.mkdir();
        }
        if(!file.exists()) {
            file.createNewFile();
            List<User> list = new ArrayList<>();
            //判断UserList是否有数据
            if (userList == null) {
                list.add(new User(1001, "xiaoming", Constant.USER_OK, BigDecimal.TEN));
            }else{
                list =userList;
            }
            //利用对象输出流将list数据写出到文件中
            oos= new ObjectOutputStream(new FileOutputStream(PathConstant.USER_PATH));
            oos.writeObject(list);
        }
 }
        catch (IOException e) {
                e.printStackTrace();
            }finally {
            //最后关闭
            if(oos!=null){
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            }
    }
}

查询用户

读取user.txt中的文件,将硬盘上的文件加载到内存中

serialVersionUID

user类实现serializable接口后,最好添加serialVersionUID,便于对user版本的控制。如果不添加,在user类改变后UID也会改变,和之前的UID对应不上,导致运行出错。

查询用户中代码的分层使用

controller: UserViewCtrl
service:接口UserService,实现类UserServiceImpl
dao:接口UserDao,实现类UserDaoImpl
这里通过接口的使用可以提高代码的可插拔性,提高了程序的可维护性。

userdoa
请添加图片描述

public interface UserDao {
    List<User> select();
}
public class UserDaoImpl implements UserDao {
    /*
    从硬盘文件读取数据
     */
    public List<User> select() {
        try(ObjectInputStream ois=new ObjectInputStream(new FileInputStream(PathConstant.USER_PATH))){
            List<User> list =(List<User>)ois.readObject();
            return  list;

        }catch (Exception e){
            e.printStackTrace();
        }

        //如果上面出现了异常,则返回一个List对象
        return new ArrayList<>();
    }

}

userservice

public interface UserService {
    List<User> select();
}
public class UserServiceImpl implements UserService {

    private UserDao userDao=new UserDaoImpl() ;

    /*
    查询
     */

        @Override
        public List<User> select() {
            return userDao.select();
        }
}

usercontrol

 ObservableList<User> users = FXCollections.observableArrayList();
    private UserService userService =new UserServiceImpl() ;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        //调用Userservice层查询用户数据
        List<User> userList =userService.select();


      users.addAll(userList);
        c1.setCellValueFactory(new PropertyValueFactory<>("id"));
        c2.setCellValueFactory(new PropertyValueFactory<>("name"));
        c3.setCellValueFactory(new PropertyValueFactory<>("money"));
        c4.setCellValueFactory(new PropertyValueFactory<>("status"));
        userTableView.setItems(users);

    }
    

添加用户

功能:在界面添加用户信息后,control调用service层,最后调用dao层,将用户数据持久化到硬盘中
在添加界面输入用户信息之后,点击提交按钮,会将用户对象传到service层,service层再调用DAO,在DAO中使用对象输入流将用户集合数据读到内存中,将新增的user对象存入集合里面,之后使用对象输出流将用户集合数据写出到硬盘文件中。

在创建类似User这样的类时,我们通常会在里面添加一个id编号属性,目的是作为该对象的唯一标识,便于查询,修改,删除操作。为了保证id编号不重复,这里通过程序控制id编号自动增长,在多线程环境下需要注意线程安全的问题。

dao层

Uerdao接口添加add方法

请添加图片描述
userdaoimpl实现上述接口重写add方法请添加图片描述

请添加图片描述

service层

user service接口添加add方法
请添加图片描述

userserviceimpl 重写add方法调用userdao添加用户请添加图片描述

control层

修改userhandleview 调用userservice,再调用user请添加图片描述

修改用户

点击修改按钮之后需要将当前选中的修改数据显示到修改界面中,修改界面里面要存储数据的编号id,这些数据传到DAO层之后,通过id在用户集合中找到相应的用户对象,从而进行修改操作。这里的修改界面跟添加界面使用的是同一个fxml

方法:编写dao层,然后编写service层,最后在control层调用user service

关于lamda表达式

   (参数) ->  需要返回的值

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目背景 为了提高图书管理的效率和便利性,我们决定开发一个基于Spring的图书管理项目。该项目将涵盖图书的借阅、归还、管理和查询等功能,以满足用户对图书管理的各种需求。 项目范围 项目将包括以下主要功能: 1.图书借阅:用户可以通过系统查看图书馆中的图书信息,并选择借阅感兴趣的图书; 2.图书归还:用户可以在规定的时间内将借阅的图书归还给图书馆; 3.图书管理:管理员可以对图书进行管理,包括添加、删除、修改图书信息等; 4.图书查询:用户可以通过系统查询图书的基本信息和借阅状态; 用户角色 项目将涉及以下几种用户角色: 1.管理员:具有对图书进行管理的权限; 2.普通用户:可以浏览图书信息、借阅图书和归还图书; 技术实现 项目将采用Spring框架搭建后端,使用Spring MVC实现后端与前端的交互,采用MySQL数据库存储图书信息,并通过Hibernate实现数据库操作。 项目目标 通过该项目,我们希望实现图书管理的自动化和规范化,提高图书管理的效率和便利性,满足用户对图书管理的各种需求。同时,通过该项目开发,我们也可以提升团队在Spring框架和数据库操作方面的技术能力。 项目进度安排 项目将划分为需求分析、数据库设计、系统开发、测试和上线部署等阶段。我们计划在3个月内完成整个项目开发和测试,并实现上线推广。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值