26、Java——迷你图书管理器(对象+IO流)

发布于:2022-11-28 ⋅ 阅读:(494) ⋅ 点赞:(0)

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。

🍎个人主页:乐趣国学的博客

🍊个人信条:不迁怒,不贰过。小知识,大智慧。

💞当前专栏:Java案例分享专栏

✨特色专栏:国学周更-心性养成之路

🥭本文内容:Java——迷你图书管理器(对象+IO流)

更多内容点击👇

                       Java——迷你图书管理器(对象+集合)

                       Java——迷你图书管理器(对象+数组)

目录

⛳️ 项目需求

⛳️ 覆盖知识

⛳️ 开发思路 

⛳️ 开发步骤

❤️ 1、数据初始化

❤️ 2、BookMethod类中定义各种方法

⛳️ 代码展示 

❤️ 1、Book类

❤️ 2、BookMethod类

❤️ 3、 MyBookSystem类


⛳️ 项目需求

为某图书馆开发一个迷你图书管理系统,实现图书的管理,包括如下功能:

        (1)新增图书

        (2)查看图书

        (3)删除图书

        (4)借出图书

        (5)归还图书

        (6)退出图书系统

⛳️ 覆盖知识

        程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、集合、输入输出流等相关知识

⛳️ 开发思路 

(1)明确需求

(2)编码顺序

        1)、数据初始化

        2)、循环完成各种图书管理操作

        3)、菜单切换

(3)测试

⛳️ 开发步骤

❤️ 1、数据初始化

 (1)设计一个包含图书信息的类:Book类

 (2)设计一个图书信息操作的方法类:BookMethod类

 (3)设计一个图书管理系统测试类:MyBookSystem类

 (4)在MyBookSystem类中初始化对象数组和相关数据,然后添加到Book集合中,最后用序列化和反序列化知识,将集合写入IO流中。

		// 初始化Book集合
		List<Book> books=new ArrayList<Book>();

		// 初始化数据并添加到集合
		Book book1=new Book("罗马假日", 1, 1, 15);
		Book book2=new Book("白雪公主", 0, 0, 12);
		Book book3=new Book("葫芦兄弟", 0, 0, 30);
		books.add(book1);
		books.add(book2);
		books.add(book3);
		BookMethod.writeBook(books);

❤️ 2、BookMethod类中定义各种方法

        定义方法实现向books.txt文件中写入信息

	// 定义方法实现向books.txt文件中写入信息
	public static void writeBook(List<Book> books) {
		ObjectOutputStream oosOrder = null;
		try {
			oosOrder = new ObjectOutputStream(new FileOutputStream("books.txt"));
			oosOrder.writeObject(books);
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (oosOrder != null) {
					oosOrder.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

        定义方法实现从books.txt文件中读取信息

	// 定义方法实现从books.txt文件中读取信息
	@SuppressWarnings("resource")
	public static List<Book> readBook() {
		// 创建输入流
		ObjectInputStream oisOrder = null;
		try {
			oisOrder = new ObjectInputStream(new FileInputStream("books.txt"));
			Object object = oisOrder.readObject();
			@SuppressWarnings("unchecked")
			ArrayList<Book> al = (ArrayList<Book>) object;
			return al;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;

	}

        欢迎使用迷你图书管理器方法

        新增图书方法

        查看图书方法

        删除图书方法

        借出图书方法

        归还图书方法

        退出图书方法

        例子:

    //欢迎使用迷你图书管理器方法
	public static void useBookSystem() {
		// 输出欢迎菜单
		System.out.println("欢迎使用迷你图书管理器");
		System.out.println("-------------------------");
		System.out.println("1.新增图书");
		System.out.println("2.查看图书");
		System.out.println("3.删除图书");
		System.out.println("4.借出图书");
		System.out.println("5.归还图书");
		System.out.println("6.退出图书");
		System.out.println("-------------------------");
	}

⛳️ 代码展示 

❤️ 1、Book类

package cn.bdqn.demo01;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Book implements Serializable {
	//定义属性
	private String name;
	private int state;
	private int date;
	private int count;
	
	//添加无参构造
	public Book() {
		super();
	}

	//添加有参构造
	public Book(String name, int state, int date, int count) {
		super();
		this.name = name;
		this.state = state;
		this.date = date;
		this.count = count;
	}

	//添加get/set方法
	public String getName() {
		return name;
	}

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

	public int getState() {
		return state;
	}

	public void setState(int state) {
		this.state = state;
	}

	public int getDate() {
		return date;
	}

	public void setDate(int date) {
		this.date = date;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}
	
}

❤️ 2、BookMethod类

package cn.bdqn.demo01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class BookMethod {

	// 定义一个静态的Scanner
	static Scanner inputsc = new Scanner(System.in);

	// static String bookName;
	// 欢迎使用迷你图书管理器方法
	public static void useBookSystem() {
		// 输出欢迎菜单
		System.out.println("欢迎使用迷你图书管理器");
		System.out.println("-------------------------");
		System.out.println("1.新增图书");
		System.out.println("2.查看图书");
		System.out.println("3.删除图书");
		System.out.println("4.借出图书");
		System.out.println("5.归还图书");
		System.out.println("6.退出图书");
		System.out.println("-------------------------");
	}

	// 定义方法实现向books.txt文件中写入信息
	public static void writeBook(List<Book> books) {
		ObjectOutputStream oosOrder = null;
		try {
			oosOrder = new ObjectOutputStream(new FileOutputStream("books.txt"));
			oosOrder.writeObject(books);
		} catch (FileNotFoundException e) {
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (oosOrder != null) {
					oosOrder.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

	// 定义方法实现从books.txt文件中读取信息
	@SuppressWarnings("resource")
	public static List<Book> readBook() {
		// 创建输入流
		ObjectInputStream oisOrder = null;
		try {
			oisOrder = new ObjectInputStream(new FileInputStream("books.txt"));
			Object object = oisOrder.readObject();
			@SuppressWarnings("unchecked")
			ArrayList<Book> al = (ArrayList<Book>) object;
			return al;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;

	}
	
    //比较两个集合是否相等
//    public static boolean compareByFor(List<Book> list,List list2){
//        boolean flag = false;
//        if (list.size()==list2.size()){
//            for (Book str :list){
//                if (!list2.contains(str)){
//                    System.out.println(flag);
//                    return false;
//                }
//            }
//            flag = true;
//        }
//        return flag;
//    }
    
	// 新增图书方法
	public static void addBook() {
		List<Book> books=readBook();
		System.out.println("-->新增图书\n");
		System.out.println("请输入图书名称:");
		String bookName = inputsc.next();
		// System.out.println(bookName);

		Book book = new Book(bookName, 0, 0, 0);
		books.add(book);
		writeBook(books);
		System.out.println("新增《" + bookName + "》成功!");

		System.out.println("*****************************************");
	}

	// 查看图书方法
	public static void lookBook() {
		List<Book> books=readBook();
		System.out.println("-->查看图书\n");
		System.out.println("序号\t状态\t名称\t借出日期\t借出次数");
		for (int i = 0; i < books.size(); i++) {
			String BookState = (books.get(i).getState() == 0) ? "可借阅" : "已借出";
			String dateStr = (books.get(i).getDate() == 0) ? "" : (books.get(i)
					.getDate() + "日");
			System.out.println((i + 1) + "\t" + BookState + "\t"
					+ books.get(i).getName() + "\t" + dateStr + "\t"
					+ books.get(i).getCount() + "次");
		}
		System.out.println("*****************************************");
	}

	// 删除图书方法
	public static void delBook() {
		List<Book> books=readBook();
		System.out.println("-->删除图书\n");
		System.out.println("请输入要删除图书的名称:");
		String delete = inputsc.next();
		boolean flag3 = false;
		int index = -1; // 记录要删除图书的位置
		for (int i = 0; i < books.size(); i++) {
			// 删除的图书存在、状态处于可借阅状态
			if (books.get(i).getName() != null
					&& delete.equals(books.get(i).getName())
					&& books.get(i).getState() == 0) {
				flag3 = true;
				books.remove(i);
				writeBook(books);
				System.out.println("图书删除成功!");
				break;
			} else if (books.get(i).getName() != null
					&& delete.equals(books.get(i).getName())
					&& books.get(i).getState() == 1) {
				flag3 = true;
				System.out.println("该图书已被借出,目前无法删除!");
				break;
			}
		}
		if (!flag3) {
			System.out.println("没有找到匹配信息!");
		}
		System.out.println("*****************************************");
	}

	// 借出图书方法
	public static void lendBook() {
		List<Book> books=readBook();
		System.out.println("-->借出图书\n");
		System.out.print("请输入图书名称:");
		String want = inputsc.next(); // 要借出的图书名称
		if (books.size() == 0) {
			System.out.println("没有找到匹配信息!");
		} else {
			for (int i = 0; i < books.size(); i++) {
				if (want.equals(books.get(i).getName())
						&& books.get(i).getState() == 0) { // 找到匹配可借
					books.get(i).setState(1); // 将此图书置于借出状态
					System.out.print("请输入借出日期:");
					int inputscData = inputsc.nextInt();
					books.get(i).setDate(inputscData);
					while (books.get(i).getDate() < 1
							|| books.get(i).getDate() > 31) { // 当输入借出的日期不满足1-31时
						System.out.println("必须输入大于等于1且小于等于31的数字,请重新输入:");
						inputscData = inputsc.nextInt();
						books.get(i).setDate(inputscData);
					}
					System.out.println("借出《" + want + "》成功!");
					books.get(i).setCount(books.get(i).getCount() + 1);
					writeBook(books);
					break;
				} else if (want.equals(books.get(i).getName())
						&& books.get(i).getState() == 1) { // 找到匹配已被借出
					System.out.println("《" + want + "》已被借出!");
					break;
				}
			}
		}

		System.out.println("*****************************************");
	}

	// 归还图书方法
	public static void returnBook() {
		List<Book> books=readBook();
		System.out.println("-->归还图书\n");
		int charge = 0; // 租金
		System.out.print("请输入归还图书名称:");
		String want = inputsc.next();
		if (books.size() == 0) {
			System.out.println("没有找到匹配信息!");
		} else {
			for (int i = 0; i < books.size(); i++) {
				if (want.equals(books.get(i).getName())
						&& books.get(i).getDate() == 1) {// 找到匹配
					books.get(i).setDate(0); // 将借阅状态修改为可借阅
					System.out.print("请输入归还日期:");
					int redate = inputsc.nextInt();
					while (redate < books.get(i).getDate() || redate > 31) { // 归还日期不能小于借出日期,也不能大于31
						if (redate < books.get(i).getDate()) {
							System.out.println("归还日期不能小于借出日期,请重新输入:");
						} else {
							System.out.println("一个月只有31天,请重新输入:");
						}
						redate = inputsc.nextInt();
					}
					charge = redate - books.get(i).getDate();

					System.out.println("\n归还《" + want + "》成功!");
					System.out.println("借出日期为:" + books.get(i).getDate() + "日");
					System.out.println("归还日期为:" + redate + "日");
					System.out.println("应付租金(元):" + charge);
					books.get(i).setDate(0);
					writeBook(books);
					break;
				} else if (want.equals(books.get(i).getName())
						&& books.get(i).getState() == 0) {// 找到匹配但没有借出
					System.out.println("该图书没有被借出!无法进行归还操作。");
					break;
				}
			}
		}
		System.out.println("*****************************************");
	}
}

❤️ 3、 MyBookSystem

package cn.bdqn.demo01;

import java.util.*;

/**
 * 图书管理系统类MyBookMgr
 * 
 * @author Administrator
 *
 */
public class MyBookSystem {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);

		// 是否退出系统,false代表退出系统
		boolean flag = true;

		// 初始化Book集合
		List<Book> books=new ArrayList<Book>();

		// 初始化数据并添加到集合
		Book book1=new Book("罗马假日", 1, 1, 15);
		Book book2=new Book("白雪公主", 0, 0, 12);
		Book book3=new Book("葫芦兄弟", 0, 0, 30);
		books.add(book1);
		books.add(book2);
		books.add(book3);
		BookMethod.writeBook(books);
		int num = -1;
		// 循环操作
		do {
			// 定义一个BookMethod操作类,将操作方法定义在BookMethod类中,然后调用			
			// 欢迎菜单方法
			BookMethod.useBookSystem();
			System.out.println("请选择:");
			int choose = input.nextInt();
			switch (choose) {
			case 1:
				// 新增图书
				BookMethod.addBook();
				break;
			case 2:
				// 查看图书
				BookMethod.lookBook();
				break;
			case 3:
				// 删除图书
				BookMethod.delBook();
				break;
			case 4:
				// 借出图书
				BookMethod.lendBook();
				break;
			case 5:
				// 归还图书
				BookMethod.returnBook();
				break;
			case 6:
				// 退出图书
				flag = false;
				break;
			default:
				flag = false;
				break;
			}
			if (flag) {
				System.out.println("输入0返回:");
				num = input.nextInt();
			} else {
				break;
			}
		} while (num == 0);
		System.out.println("谢谢使用!");
		input.close();
	}
}

       码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,请关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到