当前位置: 首页 > news >正文

Java 图书管理系统

文章目录

  • 图书管理系统
  • 接口(Operation)
    • ShowOperation
    • FindOperation
    • AddOperation
    • ExitOperation
    • DelOperation
    • BorrowOperation
    • ReturnOperation

图书管理系统

  1. 图书包里面有书籍信息和书架信息,操作的接口
  2. 功能包里面有查找图书,删除图书,退出系统,增加图书,展示图书,借阅图书,归还图书等功能

普通用户和管理员看到的菜单是不一样的,需要对菜单进行重写

在这里插入图片描述
定义成数组,可以更好地组织数据,数组里面存储的是各种类,可以调用的1,2,3,4方法

在这里插入图片描述
框架:
先构造一个bookList对象,在构造一个user对象,返回登入的是管理员对象还是普通用户对象,循环里面是每次的(choice)选择,menu对应的是两个对象的动态绑定,doOperation每次调用对应选项的work方法

在这里插入图片描述

在这里插入图片描述
现在Main函数中调用doOperation方法,再用接口数组调用choice选择的接口对象,用对象调用每个对象中的work方法
在这里插入图片描述

在这里插入图片描述

接口(Operation)

把实现的功能写到一个接口中,在Operation这个包下面写各种操作的类,来实现接口中的work方法


package operation;import book.BookList;public interface IOPeration {public void work(BookList bookList);
}
package operation;import book.BookList;public class FindOperation implements IOPeration{public void work(BookList bookList) {System.out.println("查找图书!");}
}

ShowOperation

  1. 显示图书:把书的信息打印出来,得到有效书的本数,然后遍历书架,得到每本书的信息
package operation;import book.Book;
import book.BookList;public class ShowOperation implements IOPeration{public void work(BookList bookList) {System.out.println("打印图书!");int useSize = bookList.getUsedSize();for(int i = 0;i < useSize;i++){Book book = bookList.getBook(i);System.out.println(book);// book重写了toString方法}}
}

FindOperation

查找图书:遍历书架,将要找的图书的名字和书架上的书名进行比对,如果有就找到了,并打印信息,最后返回

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class FindOperation implements IOPeration{public void work(BookList bookList) {System.out.println("查找图书!");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int useSize = bookList.getUsedSize();for(int i = 0;i < useSize;i++){Book book = bookList.getBook(i);if(name.equals(book.getName())) {System.out.println("找到了这本书,信息如下:");System.out.println(book);return;}}System.out.println("没有找到这本书!");}
}

AddOperation

新增图书:从键盘上输入书的信息,把它放入到书的对象中,最后放到书架的最后一个位置
如果书架满了就放不了数,如果有了同样的书也放不了

package operation;import book.Book;
import book.BookList;
import user.User;import java.util.Scanner;public class AddOperation implements IOPeration{public void work(BookList bookList){System.out.println("新增图书!");Scanner scanner = new Scanner(System.in);System.out.println("请输入书名:");String name = scanner.nextLine();System.out.println("请输入作者:");String author = scanner.nextLine();System.out.println("请输入类型:");String type = scanner.nextLine();// 把价格放在最后输入,因为价格会有一个回车,// 会被下一个scanner读到,造成没有输入下一个数据System.out.println("请输入价格:");int price = scanner.nextInt();// 检查数组当中有没有这本书int useSize = bookList.getUsedSize();for(int i = 0;i < useSize;i++){Book book = bookList.getBook(i);if(name.equals(book.getName())){System.out.println("有这本书了,不进行存放了!");return;}}if(useSize == bookList.getBooks().length){System.out.println("书架满了!");}else {Book book = new Book(name, author, price, type);bookList.setBook(useSize, book);// useSize要改变,要加1bookList.setUsedSize(useSize+1);}}
}

ExitOperation

  1. 退出系统:直接写exit(0)
package operation;import book.BookList;public class ExitOperation  implements IOPeration{public void work(BookList bookList) {System.out.println("退出系统!");System.exit(0);}
}

DelOperation

  1. 删除图书:
    找到有没有这本书
    从后往前覆盖删除这本书
    将最后一本书置空
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class DelOperation implements IOPeration{public void work(BookList bookList) {System.out.println("删除图书!");// 输入这本书System.out.println("请输入要删除的书:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();// 如果没有这本书就直接返回// 如果有这本书就把它的下标记录下来int useSize = bookList.getUsedSize();int k = 0;int i = 0;for(i = 0;i < useSize;i++){Book book = bookList.getBook(i);if(book.getName().equals(name)){k = i;break;}}if(i == useSize) {System.out.println("没有你要删除的图书!");return;}// 从后往前覆盖删除// 1 2 3 4Book[] books = bookList.getBooks();for(int j = k;j < useSize - 1;j++){books[j] = books[j + 1];}books[useSize - 1] = null;// 将最后一本书置为空,并且有效书的个数减一bookList.setUsedSize(useSize - 1);System.out.println("删除成功!");}
}

BorrowOperation

  1. 借阅图书:
    你要借阅哪本书
    你借阅的书有没有
    借阅的方式是什么:只需要把isborrow修改为true表示借阅成功,false表示没有借阅
package operation;import book.BookList;
import book.Book;import java.util.Scanner;public class BorrowOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("借阅图书!");/*1. 你要借阅哪本书?2.你借阅的图书在不在?3.在的话置为true*/System.out.println("输入你要借阅的图书:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int useSize = bookList.getUsedSize();int i = 0;for(i = 0;i < useSize;i++){Book book = bookList.getBook(i);if(name.equals(bookList.getBook(i).getName()) && book.isBorrowed() == false){book.setBorrowed(true);System.out.println("借阅成功!");System.out.println(book);return;}}if(i == useSize) {System.out.println("你借阅的图书不存在!");}}
}

ReturnOperation

  1. 归还图书:和借阅图书的思路基本一样,就是修改一下输入的文字信息
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class ReturnOperation implements IOPeration{public void work(BookList bookList) {System.out.println("归还图书!");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要归还的图书:");String name = scanner.nextLine();int useSize = bookList.getUsedSize();int i = 0;for(i = 0;i < useSize;i++){Book book = bookList.getBook(i);if(name.equals(bookList.getBook(i).getName()) && book.isBorrowed() == true){book.setBorrowed(false);System.out.println("归还成功!");System.out.println(book);return;}}if(i == useSize) {System.out.println("你归还的图书不存在!");}}
}

缺点:

  1. 没有做到持久化存储
    可以存储到文件中,或者存储到数据库中
  2. 当前用到的只是数组
  3. 交互的页面是命令行的
    以后可以做成是网页的交互

图书最难的点就是框架问题
gitee全部代码

http://www.lryc.cn/news/577255.html

相关文章:

  • 在拉卡拉分账功能中实现实时更新,需结合异步回调通知和数据库事务来确保数据一致性。以下是具体实现方案
  • 【Linux系统部分】在Linux命令行中写一个简单的shell外壳
  • 网络安全2023—新安全新发展
  • HarmonyOS NEXT仓颉开发语言实战案例:电影App
  • 【AI时代速通QT】第四节:Windows下Qt Creator调试指南
  • Oracle 进阶语法实战:从多维分析到数据清洗的深度应用​(第四课)
  • ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模等科研应用
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 高性能MySQL集群:架构设计与优化实战指南
  • 银河麒麟系统上利用WPS的SDK进行WORD的二次开发
  • 【Oracle学习笔记】7.存储过程(Stored Procedure)
  • jvm的调优命令jstack打印堆栈信息阐述以及调优
  • 04_Americanas精益管理项目_数仓搭建
  • VMware vSphere 9与ESXi 9正式发布:云原生与AI驱动的虚拟化平台革新
  • QT控件 使用Font Awesome开源图标库修改QWidget和QML两种界面框架的控件图标
  • Maven 中,dependencies 和 dependencyManagement
  • 基于C++实现 bp 神经网络的手写数字识别
  • 【LeetCode 热题 100】239. 滑动窗口最大值——(解法一)滑动窗口+暴力解
  • 从0开始学习计算机视觉--Day06--反向传播算法
  • 【FR801xH】富芮坤FR801xH之PMU GPIO
  • Stable Diffusion 项目实战落地:从0到1 掌握ControlNet 第三篇: 打造光影字形的创意秘技-文字与自然共舞
  • [面试] js手写题-树转数组
  • 文心大模型 4.5 系列开源首发:技术深度解析与应用指南
  • uni-app使用uview2自定义tabber
  • PHP 全面解析:从入门到实践的服务器端脚本语言
  • 计算机网络中那些常见的路径搜索算法(一)——DFS、BFS、Dijkstra
  • Qt Quick 与 QML(四)qml中的Delegate系列委托组件
  • Python I/O 库 包 iopath
  • ExGeo代码理解(七)main.py(运行模型进行训练和测试)
  • 生成式人工智能实战 | 变分自编码器(Variational Auto-Encoder, VAE)