Java图书管理系统---命令行

项目列表

Book包

Book类内包含book的基本属性

BookList类初始化图书列表并且提供图书的属性方法

User包

Administrator类

common类

operator包

功能接口

新增图书功能

借阅图书功能

删除图书功能

显示图书功能

查找图书功能

归还图书功能

结束释放资源功能

运行逻辑


项目列表

Book包

Book类内包含book的基本属性

package book;public class BooK {String name;//图书名String author;//图书作者float price;//图书价格String type;//图书类型boolean state;//图书状态 借/未借public BooK(String name, String author, float price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;this.state = false;}@Overridepublic String toString() {return "book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((state)?"借出":"未借出")+'}';}
}

BookList类初始化图书列表并且提供图书的属性方法

package book;
public class BookList {private BooK[] Books=new BooK[10];private int count;public BookList() {Books[0]=new BooK("a","a",10,"a");Books[1]=new BooK("b","b",10,"b");Books[2]=new BooK("c","c",10,"c");this.count=3;}public int getCount() {return count;}public void SetCount(int i){this.count=i;}//对书籍进行修改public void setBooks(int i,BooK books) {Books[i] = books;}public void AddSetBooks(int i,BooK books){Books[i] = books;this.count++;}//获取对应的书public BooK getPos(int i) {return Books[i];}//获取对应书的名字public String getBookName(int i){return Books[i].name;}//获取书籍的状态public boolean getBookState(int i){return Books[i].state;}public void TrueBookState(int i){Books[i].state=true;}public void FalseBookState(int i){Books[i].state=false;}
}

User包

Administrator类

package user;import book.BookList;
import operation.*;import java.util.Scanner;public class Administrator extends User{public Administrator(String name) {super(name);//接口数组this.iOperations=new IOperation[]{new Breakoperation(),new Findoperation(),new ADDoperation(),new Deleteoperation(),new Showoperation()};}@Overridepublic void DoOperation(int chick, BookList booklist) {//接收用户的选择和要操作的图书类//调用对应的操作和他重写的work方法,并把图书类booklist传入iOperations[chick].work(booklist);}@Overridepublic int menu() {System.out.println("1.查找图书\n2.新增图书\n3.删除图书\n4.显示图书\n0.退出系统\n请选择: ");Scanner scanner=new Scanner(System.in);int chick=scanner.nextInt();while(chick<0||chick>4){System.out.println("输入有误,请重新输入");System.out.println("请选择: ");chick=scanner.nextInt();}return chick;}
}

common类

package user;import book.BookList;
import operation.*;import java.util.Scanner;public class common extends User{public common(String name) {super(name);this.iOperations=new IOperation[]{new Breakoperation(),new Findoperation(),new Borrowoperation(),new Returnoperation(),new Showoperation()};}@Overridepublic void DoOperation(int chick, BookList booklist) {//接收用户的选择和要操作的图书类//调用对应的操作和他重写的work方法,并把图书类booklist传入iOperations[chick].work(booklist);}@Overridepublic int menu() {System.out.println("1.查找图书\n2.借阅图书\n3.归还图书\n4.查看图书\n0.退出系统\n请选择: ");Scanner scanner=new Scanner(System.in);int chick=scanner.nextInt();while(chick<0||chick>4){System.out.println("输入有误,请重新输入");System.out.println("请选择: ");chick=scanner.nextInt();}return chick;}
}

operator包

功能接口

public interface IOperation {public void work(BookList books);
}

新增图书功能

public class ADDoperation implements IOperation{@Overridepublic void work(BookList books) {Scanner scanner =new Scanner(System.in);System.out.println("请输入书名");String name = scanner.next();System.out.println("请输入作者");String author = scanner.next();System.out.println("请输入价格");float price = scanner.nextInt();System.out.println("请输入类型");String type = scanner.next();BooK book=new BooK(name,author,price,type);int cur=books.getCount();//在cur下标添加book书books.AddSetBooks(cur,book);System.out.println("添加成功");}
}

借阅图书功能

public class Borrowoperation implements IOperation{@Overridepublic void work(BookList books) {Scanner scanner=new Scanner(System.in);System.out.println("请输入要借阅的书");String name=scanner.next();int cur=books.getCount();for (int i = 0; i < cur; i++) {if(Objects.equals(name, books.getBookName(i))){if(!books.getBookState(i)){books.TrueBookState(i);System.out.println("成功借阅"+name);}else{System.out.println("该书已被借出");}}}}
}

删除图书功能

public class Deleteoperation implements IOperation{public void work(BookList bookList) {System.out.println("请输入要删除的书名");Scanner scanner=new Scanner(System.in);String name=scanner.next();int cur=bookList.getCount();String Bookname;int index=0;int i=0;for (; i < cur; i++){if(Objects.equals(name, Bookname = bookList.getBookName(i))){index=i;break;}}if(i==cur){System.out.println("未查找到此书");}else{//0 2//for (int j = index; j < cur-1; j++) {//books[j]=books[j+1]//获取书籍BooK book=bookList.getPos(j+1);bookList.setBooks(j,book);}bookList.SetCount(cur-1);}}
}

显示图书功能

public class Showoperation implements IOperation{@Overridepublic void work(BookList books) {int cur=books.getCount();for (int i = 0; i < cur; i++) {BooK book=books.getPos(i);System.out.println(book);}}
}

查找图书功能

public class Findoperation implements IOperation{@Overridepublic void work(BookList books) {System.out.println("请输入要查找的书名");Scanner scanner=new Scanner(System.in);String name=scanner.next();int cur=books.getCount();for (int i = 0; i < cur; i++){//用户输入的数据和类内数据进行判断时,不能用==要用equalsif(Objects.equals(name, books.getBookName(i))){BooK book=books.getPos(i);System.out.println(book);return;}}System.out.println("未查找到该书");}
}

归还图书功能

public class Returnoperation implements IOperation {@Overridepublic void work(BookList books) {Scanner scanner=new Scanner(System.in);System.out.println("请输入要归还的书");String name=scanner.next();int cur=books.getCount();for (int i = 0; i < cur; i++) {if(Objects.equals(name, books.getBookName(i))){if(!books.getBookState(i)){System.out.println("该书并未被借出");}else{books.FalseBookState(i);System.out.println("已成功归还"+name);}}}}
}

结束释放资源功能

public class Breakoperation implements IOperation{@Overridepublic void work(BookList books) {System.out.println("结束");int cur=books.getCount();for (int i = 0; i < cur; i++) {books.setBooks(i,null);}System.exit(0);}
}

运行逻辑

  1. 初始化图书列表
  2. 根据用户选择的身份,创建对应的类,用父类接收。
  3. menu函数会提示用户选择功能。chick会接收到用户选择的功能对应数字
  4. 这时User(已经是用户选择的身份Admi或comm)调用对应的DoOperation函数 传入对应的选择和图书列表
  5. DoOperation函数会根据接口数组调用对应的功能,并且在对应的booklist内修改数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499710.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab实现不同窗滤波器示例

1 汉明窗低通滤波器 &#xff1a; 在Matlab中使用汉明窗设计低通滤波器可以通过fir1函数实现。汉明窗通常用于设计滤波器&#xff0c;可以提供更突出的频率特性。 下面是一个示例代码&#xff0c;演示如何在Matlab中使用汉明窗设计低通滤波器&#xff1a; % 定义滤波器参数 fs …

DOM 获取父子节点

DOM 是以树状结构排列的&#xff0c;所以父子关系是相对的&#xff0c;当li为我们的目标节点的时候&#xff0c;ul为其父节点&#xff0c;其他li为它的兄弟节点&#xff0c;li里面包含的标签为子节点&#xff0c;以此类推。 那我们如何找父节点&#xff1f; 元素.parentNode&am…

ROS2----运行helloworld、集成开发环境的搭建

前言&#xff1a;ROS2已经出来了&#xff0c;ROS1会被逐渐淘汰&#xff0c;大家尽量不要学ROS1了&#xff01;&#xff01; 文章目录 一、运行helloworld1.创建工作空间2.创建功能包3.源文件和配置文件4.编译与运行5.源码编写下的编译与运行6.运行优化 二、集成开发环境的搭建…

Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析

3. SpringBoot原理 SpringBoot使我们能够集中精力地去关注业务功能的开发&#xff0c;而不用过多地关注框架本身的配置使用。而我们前面所讲解的都是面向应用层面的技术&#xff0c;接下来我们开始学习SpringBoot的原理&#xff0c;这部分内容偏向于底层的原理分析。 在剖析Sp…

嵌入式中14 个超级牛的免费开源小工具

Homebrew for macOS 地址&#xff1a;https://brew.sh Mac 上非常好用的包管理工具&#xff0c;很多常见的安装都可以通过 brew install app 或者 brew cask install app 直接安装&#xff0c;类似 apt-get 。 Oh My Zsh 地址&#xff1a;https://github.com/robbyrussell…

基于springboot实现线上阅读系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现线上阅读系统演示 摘要 随着社会发展速度的愈来愈快&#xff0c;以及社会压力变化的越来越快速&#xff0c;致使很多人采取各种不同的方法进行解压。大多数人的稀释压力的方法&#xff0c;是捧一本书籍&#xff0c;心情地让自己沉浸在情节里面&#xff0c;以…

【2022 J1】乘方

本主又双叒叕来更新了&#xff0c;一圈三连不用说了吧&#x1f601; 本题是J组第二轮的题&#xff1a; 题目描述 小文同学刚刚接触了信息学竞赛&#xff0c;有一天她遇到了这样一个题&#xff1a;给定正整数 a 和 b&#xff0c;求 &#xfffd;&#xfffd;ab 的值是多少。 …

【iOS ARKit】协作 Session 实例

协作 Session 使用注意事项 协作 Session 是在 ARWorldMap 基础上发展起来的技术&#xff0c;ARWorldMap 包含了一系列的地标、ARAnchor 及在观察这些地标和 ARAnchor 时摄像机的视场&#xff08;View&#xff09;。如果用户在某一个位置新创建了一个 ARAnchor&#xff0c;这时…

DataGrip2023配置连接Mssqlserver、Mysql、Oracle若干问题解决方案

1、Mssqlserver连接 本人连的是Sql2008&#xff0c;默认添加时&#xff0c;地址、端口、实例、账号、密码后&#xff0c;测试连接出现错误。 Use SSL&#xff1a;不要勾选 VM option&#xff1a;填写&#xff0c;"-Djdk.tls.disabledAlgorithmsSSLv3, RC4, DES, MD5withR…

人工智能如何改变我们与世界的沟通的方式?

腾讯研究院 作为一名设计师、艺术家、科技研究人员,人工智能如何改变我们与世界的沟通的方式&#xff1f; 1.《音外话》 它是一款语音至视频生成人工智能的系统&#xff0c;它把我们的话语转化为充满情感的视觉影像。这个系统不仅可以捕捉语言的字面意义&#xff0c;还能理解…

小红书关键词爬虫

标题 1 统计要收集的关键词&#xff0c;制作一个文件夹2 爬取每一页的内容3 爬取标题和内容4 如果内容可以被查看&#xff0c;爬取评论内容5 将结果进行汇总&#xff0c;并且每个帖子保存为一个json文件&#xff0c;具体内容6 总结 1 统计要收集的关键词&#xff0c;制作一个文…

ts的重载

官网示例 TypeScript: Documentation - Template Literal Types 这里大概理解是 T 继承了Number|sting 加上&#xff1f;条件判断就是 T继承Number|sting 部分为true 没有继承部分为false&#xff0c; 就是输入string, 为true, 输入 null 则为false, type Exclude<T, U&…

八股文打卡day24——数据库(1)

面试题&#xff1a;左连接和右连接的区别&#xff1f; 我的回答&#xff1a; 左连接的SQL语句是&#xff1a;左表 left join 右表 on 连接条件&#xff0c;表示以左表为基础&#xff0c;将左表的的所有记录与右表进行连接。即使右表中没有与左表匹配的记录&#xff0c;左连接…

类和对象(2)——距离C++又近了一步

目录 一、构造函数 1.1声明和定义构造函数 1.2成员名和参数名 1.3构造函数的使用 1.4初始化列表 二、析构函数 2.1析构函数的概念 2.2析构函数的性质 三、拷贝构造函数 四、赋值运算符重载 4.1运算符重载 4.2赋值运算符重载 一、构造函数 我们知道&#xff0c;C中…

网络编程作业day2

1.将TPC和UDP通信模型各敲两遍 &#xff08;1&#xff09;TPC通信模型&#xff1a; 服务器代码&#xff1a; #include <myhead.h> #define SERVER_IP "192.168.125.136" #define SERVER_PORT 1314 int main(int argc, const char *argv[]) {//1、创建用于监…

Rocky Linux 运维工具 ls

一、ls 的简介 ​​ls​ 用于列出当前目录下的文件和目录&#xff0c;以及它们的属性信息。通过 ​ls​命令可以查看文件名、文件大小、创建时间等信息&#xff0c;并方便用户浏览和管理文件。 二、ls 的参数说明 序号参数描述1-a显示所有文件&#xff0c;包括以 ​.​开头的…

neo4j创建新数据库

根据网上提供的教程&#xff0c;neo4j并没有提供创建数据库的命令&#xff0c;其只有一个默认数据库graph.db&#xff0c;该数据库中的所有数据将存储在neo4j安装路径下的data/databases/graph.db目录中。 因此&#xff0c;我们猜想&#xff0c;如果我们将默认数据库的名字修改…

YOLOv8改进 | 独家创新篇 | 结合SOTA思想利用双主干网络改进YOLOv8(全网独家创新,最重磅的更新)

一、本文介绍 本文给大家带来的改进机制是结合目前SOTAYOLOv9的思想利用双主干网络来改进YOLOv8(本专栏目前发布以来改进最大的内容,同时本文内容为我个人一手整理全网独家首发 | 就连V9官方不支持的模型宽度和深度修改我都均已提供,本文内容支持YOLOv8全系列模型从n到x均可…

ardupilot 及PX4姿态误差计算算法对比分析

目录 文章目录 目录摘要1.APM姿态误差计算算法2.PX4姿态误差计算算法3.结论摘要 本节主要记录ardupilot 及PX4姿态误差计算算法差异对比过程,欢迎批评指正。 备注: 1.创作不易,有问题急时反馈 2.需要理解四元物理含义、叉乘及点乘含义、方向余弦矩阵含义、四元数乘法物理含…

C++ 网络编程学习三

C 网络编程学习三 用智能指针延长session的生命周期处理粘包问题 用智能指针延长session的生命周期 问题&#xff1a; 客户端断开后&#xff1a;会触发服务器对应session的写或读事件&#xff0c;由于是异步编程&#xff0c;需要在回调中对读写事件进行处理。客户端断开&#…