28--使用对象流搭建图书管理系统

1、创建实体类Book

package com.work.pojo;

import java.io.Serializable;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2023-12-23 15:08
 * @Description: 创建图书实体类
 */
public class Book implements Serializable {
    // 生成serialVersionUID
    private static final long serialVersionUID = -8180604591919457929L;

    private int id;
    private String name;
    private String author;
    private double price;

    public Book() {
    }

    public Book(int id, String name, String author, double price) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}

2、创建数据访问层接口BookDao

package com.work.dao;

import com.work.pojo.Book;

import java.util.List;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2023-12-23 15:22
 * @Description: 数据访问层--BookDao接口
 */
public interface BookDao {

    // 添加图书
    public boolean addBook(Book book);

    // 根据id查询图书
    public Book findBookById(int id);

    // 根据id删除图书
    public boolean deleteBookById(int id);

    // 根据id修改图书价格
    public boolean updatePriceById(int id ,double price);

    // 查询全部图书
    public List selectBooks();
}

3、实现数据访问层接口BookDaoImpl

package com.work.dao.impl;

import com.work.dao.BookDao;
import com.work.pojo.Book;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2023-12-23 15:26
 * @Description: 数据访问层--BookDao实现类BookDaoImpl
 */
public class BookDaoImpl implements BookDao {

    // 文件路径
    private static String path = "F:\\Java\\JavaSE\\Day20\\file\\books.txt";

    // 创建一个集合接受图书
    private List books;

    // 初始化保存书籍的文件
    static {
        // 声明保存图书信息的文件
        File file = new File(path);
        //获取文件的父文件夹
        File parentFile = file.getParentFile();
        // 判断是否存在,不存在则创建
        if (!parentFile.exists()){
            parentFile.mkdirs();
        }
        // 判断文件是否存在,不存在创建文件并初始化
        if (!file.exists()){
            // 集合接收图书
            List books = new ArrayList<>();

            // 创建流
            ObjectOutputStream oos = null;
            try {

                oos = new ObjectOutputStream(new FileOutputStream(file));
                // 操作流
                oos.writeObject(books);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                // 关闭流
                try {
                    if (oos != null)
                        oos.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }



    }

    /**
     * @description: 添加图书
     * @author: 憨憨浩浩
     * @date: 2023/12/23 15:45
     * @param: [book]
     * @return: boolean
     **/
    @Override
    public boolean addBook(Book book) {
        // 获取图书集合
        readBooks();

        // 添加图书
        books.add(book);

        // 重新将集合写入文件
        writeBooks();

        return true;
    }

    /**
     * @description: 根据id查询图书
     * @author: 憨憨浩浩
     * @date: 2023/12/23 16:03
     * @param: [id]
     * @return: com.work.pojo.Book
     **/
    @Override
    public Book findBookById(int id) {

        // 获取图书集合
        readBooks();

        // 遍历集合
        for (Book book : books) {
            if (id == book.getId()){
                return book;
            }
        }

        return null;
    }

    /**
     * @description: 根据id删除图书
     * @author: 憨憨浩浩
     * @date: 2023/12/23 16:05
     * @param: [id]
     * @return: boolean
     **/
    @Override
    public boolean deleteBookById(int id) {

        // 获取图书集合
        readBooks();

        // 遍历集合
        for (Book book : books) {
            if (id == book.getId()){
                books.remove(book);

                // 写入数据
                writeBooks();
                return true;
            }
        }



        return false;
    }

    /**
     * @description: 根据id修改图书价格
     * @author: 憨憨浩浩
     * @date: 2023/12/23 16:08
     * @param: [id, price]
     * @return: boolean
     **/
    @Override
    public boolean updatePriceById(int id ,double price) {
        // 获取图书集合
        readBooks();

        // 遍历集合
        for (Book book : books) {
            if (id == book.getId()){
                book.setPrice(price);

                // 写入数据
                writeBooks();
                return true;
            }
        }



        return false;
    }

    /**
     * @description: 查询全部图书
     * @author: 憨憨浩浩
     * @date: 2023/12/23 17:04
     * @param: []
     * @return: java.util.List
     **/
    @Override
    public List selectBooks() {
        // 获取图书集合
        readBooks();

        return books;
    }

    /**
     * @description: 读取文件中的集合对象,并返回到books集合中
     * @author: 憨憨浩浩
     * @date: 2023/12/23 15:47
     * @param: []
     * @return: java.util.List
     **/
    private void readBooks(){
        // 创建流(反序列化流)
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream(path));

            // 操作流
            books = (List) ois.readObject();

        } catch (EOFException e) {
            books = new ArrayList<>();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            try {
                if (ois != null)
                    ois.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

    /**
     * @description: 将修改后的图书集合写入到文件中
     * @author: 憨憨浩浩
     * @date: 2023/12/23 15:55
     * @param: []
     * @return: boolean
     **/
    private void writeBooks(){
        // 创建流(序列化流)
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream(path));

            // 操作流
            oos.writeObject(books);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            try {
                if (oos != null)
                    oos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

}

4、创建业务逻辑层接口BookService

package com.work.service;

import com.work.pojo.Book;

import java.util.List;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2023-12-23 16:09
 * @Description: 业务逻辑层--BookService
 */
public interface BookService {

    // 添加图书
    public boolean addBook(Book book);

    // 根据id删除图书
    public boolean deleteBookById(int id);

    // 根据id修改图书价格
    public boolean updatePriceById(int id ,double price);

    // 查询全部图书
    public List selectBooks();

}

5、实现业务逻辑层接口BookServiceImpl

package com.work.service.impl;

import com.work.dao.BookDao;
import com.work.dao.impl.BookDaoImpl;
import com.work.pojo.Book;
import com.work.service.BookService;

import java.util.List;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2023-12-23 16:11
 * @Description: 业务逻辑层--BookService实现类BookServiceImpl
 */
public class BookServiceImpl implements BookService {

    // 创建数据层持久层对象
    private BookDao bookDao = new BookDaoImpl();

    /**
     * @description: 添加图书
     * @author: 憨憨浩浩
     * @date: 2023/12/23 16:16
     * @param: [book]
     * @return: boolean
     **/
    @Override
    public boolean addBook(Book book) {
        // 根据id查询图书,为null表示没有该图书,添加图书
        if (bookDao.findBookById(book.getId()) == null){
            bookDao.addBook(book);
            return true;
        }

        return false;
    }

    /**
     * @description: 根据id删除图书
     * @author: 憨憨浩浩
     * @date: 2023/12/23 16:18
     * @param: [id]
     * @return: boolean
     **/
    @Override
    public boolean deleteBookById(int id) {
        return bookDao.deleteBookById(id);
    }

    /**
     * @description: 根据id修改图书价格
     * @author: 憨憨浩浩
     * @date: 2023/12/23 16:19
     * @param: [id, price]
     * @return: boolean
     **/
    @Override
    public boolean updatePriceById(int id, double price) {
        return bookDao.updatePriceById(id,price);
    }

    /**
     * @description: 查询全部图书
     * @author: 憨憨浩浩
     * @date: 2023/12/23 16:20
     * @param: []
     * @return: java.util.List
     **/
    @Override
    public List selectBooks() {
        List books = bookDao.selectBooks();
        for (Book book : books) {
            System.out.println(book);
        }
        return books;
    }
}

6、创建测试类

package com.work.test;

import com.work.pojo.Book;
import com.work.service.impl.BookServiceImpl;

import java.util.List;
import java.util.Scanner;

/**
 * @Author: 憨憨浩浩
 * @CreateTime: 2023-12-23 16:21
 * @Description: 图书管理系统测试类
 */
public class BookTest {
    public static void main(String[] args) {
        // 定义扫描器
        Scanner scan = new Scanner(System.in);
        // 定义bookServiceImpl实现类
        BookServiceImpl bookService = new BookServiceImpl();
        // 打印系统头部
        System.out.println("******************************");
        System.out.println("*********图书管理系统**********");
        System.out.println("******************************");
        while (true){
            System.out.println("1、添加图书 2、根据id修改图书价格 3、根据id删除图书 4、查询所有图书 0、退出");
            System.out.println("请输入你操作的编号:");
            // 定义变量接收输入的操作编号
            int num = scan.nextInt();

            switch (num){
                case 1: // 添加图书
                    System.out.println("请输入书籍id:");
                    int id = scan.nextInt();
                    System.out.println("请输入书籍名称:");
                    String name = scan.next();
                    System.out.println("请输入书籍作者:");
                    String author = scan.next();
                    System.out.println("请输入书籍价格:");
                    double price = scan.nextDouble();
                    Book book = new Book(id,name,author,price);
                    // 添加图书
                    if (bookService.addBook(book)){
                        System.out.println("添加成功");
                    } else {
                        System.out.println("添加失败");
                    }
                    break;
                case 2: // 根据id修改图书价格
                    System.out.println("请输入你要修改的书籍id:");
                    id = scan.nextInt();
                    System.out.println("请输入你要修改的书籍价格:");
                    price = scan.nextDouble();
                    // 根据id修改图书价格
                    if (bookService.updatePriceById(id,price)){
                        System.out.println("修改成功");
                    } else {
                        System.out.println("修改失败");
                    }
                    break;
                case 3: // 根据id删除图书
                    System.out.println("请输入你要删除的书籍id:");
                    id = scan.nextInt();
                    // 根据id删除图书
                    if (bookService.deleteBookById(id)){
                        System.out.println("删除成功");
                    } else {
                        System.out.println("删除失败");
                    }
                    break;
                case 4: // 查询所有图书
                    // 查询所有图书
                    bookService.selectBooks();
                    break;
                case 0:
                    System.out.println("你已退出图书管理系统");
                    return;
                default:
                    System.out.println("暂无此操作,请重新输入");
                    break;
            }

        }
    }
}

7、结果展示

28--使用对象流搭建图书管理系统_第1张图片28--使用对象流搭建图书管理系统_第2张图片

你可能感兴趣的:(JavaSE学习记录,java,开发语言)