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

news2024/11/18 23:46:08

项目列表

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;
    }

    @Override
    public 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()
        };
    }

    @Override
    public void DoOperation(int chick, BookList booklist) {
        //接收用户的选择和要操作的图书类
        //调用对应的操作和他重写的work方法,并把图书类booklist传入
        iOperations[chick].work(booklist);
    }

    @Override
    public 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()
        };
    }

    @Override
    public void DoOperation(int chick, BookList booklist) {
        //接收用户的选择和要操作的图书类
        //调用对应的操作和他重写的work方法,并把图书类booklist传入
        iOperations[chick].work(booklist);
    }

    @Override
    public 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{
    @Override
    public 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{
    @Override
    public 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{
    @Override
    public 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{
    @Override
    public 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++)
        {
            //用户输入的数据和类内数据进行判断时,不能用==要用equals
            if(Objects.equals(name, books.getBookName(i)))
            {
                BooK book=books.getPos(i);
                System.out.println(book);
                return;
            }
        }
        System.out.println("未查找到该书");
    }
}

归还图书功能

public class Returnoperation implements IOperation {
    @Override
    public 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{
    @Override
    public 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.coloradmin.cn/o/1478907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排序(1)

目录 1 排序的概念及其应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2 直接插入排序 2.1 基本思想 2.2 基本思路 2.3 代码实现 2.4 时间复杂度 3 冒泡排序&#xff08;回顾&#xff09; 3.1 思路分析 3.2 时间复杂度 4 比较 1 排序的概念及其应用 1.…

[分类指标]准确率、精确率、召回率、F1值、ROC和AUC、MCC马修相关系数

准确率、精确率、召回率、F1值 定义&#xff1a; 1、准确率&#xff08;Accuracy&#xff09; 准确率是指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为&#xff1a; 准确率能够清晰的判断我们模型的表现&#xff0c;但有一个严重的缺陷&…

双指针问题(Java编写)

日升时奋斗&#xff0c;日落时自省 目录 一、移动零 二、盛水最多的容器 三、快乐数 四、复写零 五、三数之和 六、有效三角形的个数 七、四数之和 一、移动零 题目来源&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目主要内容就是将数组中所有的零移动到…

解决VSCode 不能拖拽文件问题

给【以管理员身份运行次程序】关掉&#xff0c;不要打勾 至于为什么开启了管理员就不能拖拽了&#xff0c;我也不知道&#xff0c;我猜的&#xff1a; 这可能是因为在VSCode中&#xff0c;管理员权限可能会限制用户对文件的操作权限。管理员权限对于一些操作可能会有更严格的限…

【Vue3】全局组件,递归组件,动态组件,传送组件,缓存组件,异步组件等

组件使用 父子组件传参父传子模板上直接使用js里面使用ts组件里面泛型接收ts泛型里面设置默认值 子传父方式一&#xff0c;采用defineEmits方式二&#xff0c;采用ts的泛型 方式三&#xff0c;采用ref获取子组件内部暴露的数据和方法子组件先暴露父组件接收 全局组件发现有报错…

云原生精品资料合集(附下载)

云计算是产业数字化转型的关键基础设施,以基础设施资源为中心的云搬迁时代接近尾声&#xff0c;以应用价值为中心的云原生时代已经到&#xff0c;所以IT人员学习云原生正当时&#xff01;最近跟各位大神征集了云原生的教程&#xff0c;行业报告和最佳实践&#xff0c;总有一款适…

【软考】UML中的图之通信图

目录 1. 说明2. 图示3. 特性4. 例题4.1 例题1 1. 说明 1.通信图强调收发消息的对象的结构组织2.早期版本叫做协作图3.通信图强调参加交互的对象和组织4.首先将参加交互的对象作为图的顶点&#xff0c;然后把连接这些对象的链表示为图的弧&#xff0c;最后用对象发送和接收的消…

『Linux从入门到精通』第 ㉑ 期 - 文件系统详解

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f427;认识磁盘&#x1f427;逻辑抽象&#x1f427;文件系统&#x1f426;Block&#x1f426;Block Group&#x1f414;Block Group 的组成部分 &#x1f426;Superblock(超级区块)&#x1f426;Group Description(…

FRM模型十二:极值理论

目录 极值理论介绍GEVPOT 代码实现 极值理论介绍 在风险管理中&#xff0c;将事件分为高频高损、高频低损、低频高损、低频低损。其中低频高损是一种非常棘手的损失事件&#xff0c;常出现在市场大跌、金融体系崩溃、金融危机以及自然灾害等事件中。 由于很难给极端事件一个准…

如何解决局域网tcp延迟高来进行安全快速内外网传输呢?

在当今企业运营中&#xff0c;数据的快速流通变得至关重要&#xff0c;但局域网内的TCP延迟问题却成为了数据传输的障碍。本文旨在分析局域网TCP延迟的成因&#xff0c;并探讨几种企业数据传输的常见模式&#xff0c;以及如何为企业选择合适的传输策略&#xff0c;以确保数据在…

简单求和计算器

其实对于计算器的写法在C语言阶段就已经有了&#xff0c;但是&#xff0c;在目前阶段《前后端交互》&#xff0c;这算是一种全新的写法&#xff0c;毕竟将数据从前端返回给后端&#xff0c;然后再将数据返回给前端&#xff0c;都涉及到一些参数的交互&#xff0c;值得我们学习深…

[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解

一、分析判断 进入靶机&#xff0c;主页面如图&#xff1a; 主页面提供给我们一条关键信息&#xff1a; flag值在 表flag 中的 flag列 中。 接着我们尝试输入不同的id&#xff0c;情况分别如图&#xff1a; 当id1时&#xff1a; 当id2时&#xff1a; 当id3时&#xff1a; 我…

博弈论---Nim游戏(公平组合游戏,概念,证明异或为0就是必败态,示例)

目录 概念&#xff1a; 公平组合游戏ICG 有向图游戏 Nim游戏 先手&#xff09;必胜状态 先手&#xff09;必败状态 如何确定先手是否必胜或者必败&#xff08;都采用最优策略&#xff09; 证明&#xff1a;全部异或为0则是必败状态 综上&#xff1a; 例子 概念&#…

OJ_二叉树已知先序遍历序列(有空叶子)求中序遍历序列

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;struct TreeNode {char data;TreeNode* left;TreeNode* right; };TreeNode* RecursiveBuildTree(int& i, char str[]) {char c str[i];i;if (c #) {re…

红队基础设施建设

文章目录 一、ATT&CK二、T1583 获取基础架构2.1 匿名网络2.2 专用设备2.3 渗透测试虚拟机 三、T1588.002 C23.1 开源/商用 C23.1.1 C2 调研SliverSliver 对比 CS 3.1.2 CS Beacon流量分析流量规避免杀上线 3.1.3 C2 魔改3.1.4 C2 隐匿3.1.5 C2 准入应用场景安装配置说明工具…

【开源】JAVA+Vue.js实现桃花峪滑雪场租赁系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

掌握Python操作Word:从基础到高级全覆盖

掌握Python操作Word&#xff1a;从基础到高级全覆盖 引言Python操作Word的基础文档的创建与打开文档的基本操作 创建和打开Word文档创建新的Word文档打开现有文档读取文档内容修改现有文档 编辑文档内容添加和编辑文本设置格式插入标题 处理文档结构操作段落列表的处理表格的操…

Linux Shell脚本练习(三)

1、测试用户名与密码是否正确。 2、输出1-1000内的素数。 3、对 100 以内的所有正整数相加求和(1234...100)。 4、输出9*9 乘法表。 5、编写脚本,显示进度条。 、 6、输入三个数并进行升序排序

Linux-nginx服务

一.Nginx概述 1.定义 一款高新能、轻量级Web服务软件 系统资源消耗低 对HTTP并发连接的处理能力高 单台物理服务器可支持30 000&#xff5e;50 000个并发请求。 2.Nginx模块作用 &#xff08;1&#xff09;main模块 全局配置模块&#xff0c;所有模块都要执行遵守&#xf…

Mac 制作可引导安装器

Mac 使用U盘或移动固态硬盘制作可引导安装器&#xff08;以 Monterey 为例&#xff09; 本教程参考 Apple 官网相关教程 创建可引导 Mac OS 安装器 重新安装 Mac OS 相关名词解释 磁盘分区会将其划分为多个单独的部分&#xff0c;称为分区。分区也称为容器&#xff0c;不同容器…