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

简介: 20、Java——迷你图书管理器(对象+集合)

⛳️ 项目需求


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


       (1)新增图书


       (2)查看图书


       (3)删除图书


       (4)借出图书


       (5)归还图书


       (6)退出图书系统



⛳️ 覆盖知识


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



⛳️ 开发思路


(1)明确需求


(2)编码顺序


       1)、数据初始化


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


       3)、菜单切换


(3)测试



⛳️ 开发步骤


❤️ 1、数据初始化

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


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


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


(4)在MyBookSystem类中初始化对象数组和相关数据


// 初始化Book集合
  ArrayList books=new ArrayList();
  // 初始化数据并添加到集合
  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);


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

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


       新增图书方法


       查看图书方法


       删除图书方法


       借出图书方法


       归还图书方法


       退出图书方法


       例子:


 

//欢迎使用迷你图书管理器方法
  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.demo05;
public class Book {
  //定义属性
  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.util.ArrayList;
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("-------------------------");
  }
  // 新增图书方法
  public static void addBook(ArrayList books) {
  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);
  System.out.println("新增《" + bookName + "》成功!");
  System.out.println("*****************************************");
  }
  // 查看图书方法
  public static void lookBook(ArrayList books) {
  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(ArrayList books) {
  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);
    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(ArrayList books) {
  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);
      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(ArrayList books) {
  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);
      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集合
  ArrayList books=new ArrayList();
  // 初始化数据并添加到集合
  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);
  int num = -1;
  // 循环操作
  do {
    // 定义一个BookMethod操作类,将操作方法定义在BookMethod类中,然后调用    
    // 欢迎菜单方法
    BookMethod.useBookSystem();
    System.out.println("请选择:");
    int choose = input.nextInt();
    switch (choose) {
    case 1:
    // 新增图书
    BookMethod.addBook(books);
    break;
    case 2:
    // 查看图书
    BookMethod.lookBook(books);
    break;
    case 3:
    // 删除图书
    BookMethod.delBook(books);
    break;
    case 4:
    // 借出图书
    BookMethod.lendBook(books);
    break;
    case 5:
    // 归还图书
    BookMethod.returnBook(books);
    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();
  }
}


相关文章
|
15天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
4天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
11 2
|
4天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
9天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
9天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
9天前
|
Java 开发者
|
18天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
8天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
10 0
|
13天前
|
Java API Apache
java集合的组内平均值怎么计算
通过本文的介绍,我们了解了在Java中计算集合的组内平均值的几种方法。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。无论是使用传统的循环方法,还是利用Java 8的Stream API,亦或是使用第三方库(如Apache Commons Collections和Guava),都可以有效地计算集合的组内平均值。希望本文对您理解和实现Java中的集合平均值计算有所帮助。
22 0
|
18天前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
15 0