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

    @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内修改数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL进阶:大厂高频面试——各类SQL语句性能调优经验

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;MySQL进阶&#xff1a;强推&#xff0c;冲大厂必精通&#xff01;MySQL索引底层&#xff08;BTree&#xff09;、性能分析、使用…

批量获取图片(下)

1.问题分析 我们观察下之前获得的图片&#xff0c;可以发现图片的清晰度不够。 放大之后比较模糊&#xff0c;这样的图叫做缩略图&#xff0c;那该如何获得高清海报图片呢&#xff1f; 为了找到高清图片&#xff0c;我们需要对网页结构进行分析&#xff0c;找到高清图对应的链…

C#,动态规划(DP)金矿问题(Gold Mine Problem)的算法与源代码

1 金矿问题&#xff08;Gold Mine Problem&#xff09; 给定一个N*M尺寸的金矿&#xff0c;每个点都有一个非负数表示当前点所含的黄金数目&#xff0c;最开始矿工位于第一列&#xff0c;但是可以位于任意行。矿工只能向右&#xff0c;右上&#xff0c;右下三个方向移动。问该…

Eureka 入门教程

Eureka 介绍 1. 注册中心概述 什么是注册中心&#xff1f; 给客户端提供可供调用的服务列表&#xff0c;客户端在进行远程调用&#xff08;RPC&#xff09;时&#xff0c;根据服务列表选择服务提供方的服务地址进行服务调用 注册中心的核心功能 注册&#xff1a;服务提供者上…

CY8C42(1.PSoC4 Pioneer Kit开箱及基本使用)

1.开箱 最近了解到赛普拉斯有一种芯片&#xff0c;属于PSoC系列&#xff0c;与传统MCU不同&#xff0c;有点类似跨界芯片&#xff0c;于是就买来玩玩了&#xff0c;老实说用完还是很特别的&#xff0c;因为我没有用过FPGA&#xff0c;不确定是不是FPGA的开发流程&#xff08;有…

【性能测试】loadrunner12.55--知识准备

1.0. 前言 ​ 在性能测试中&#xff0c;牵扯到了许多比较杂的知识点&#xff0c;这里将给大家说一下&#xff0c;loadrunner性能测试前需要做的一些准备&#xff0c;本节中我们将先从性能测试的一些术语入手&#xff0c;再到HTTP的一些知识&#xff0c;最后导我们loadrunner12…

linux文件及文件内容查找命令总结

在linux环境下&#xff0c;我们经常要查找一个文件或者文件的内容&#xff0c;但搜索的命令有很多&#xff0c;这些命令都有什么区别&#xff0c;应该怎么选择和使用呢&#xff1f; 下面总结了一些常见的文件查找、内容查找的命令&#xff0c;收藏起来备用吧。 文件查找 where…

虚拟机中window7界面太小解决办法

1.在虚拟机中的桌面的空白处右击&#xff0c;然后点击屏幕分辨率 2.根据自己电脑屏幕的大小来选择对应分辨率

java之servlet

动态的web资源开发技术 不同的用户&#xff0c;或者携带不同的参数&#xff0c;访问服务器 服务器添加判断层&#xff0c;实现访问不同的web资源

c++数据结构算法复习基础-- 2 -- 线性表-单链表-常用操作接口-复杂度分析

1、链表 特点 每一个节点都是在堆内存上独立new出来的&#xff0c; 节点内存不连续优点 内存利用率高&#xff0c;不需要大块连续内存 插入和删除节点不需要移动其它节点&#xff0c;时间复杂度O(1)。 不需要专门进行扩容操作缺点 内存占用量大&#xff0c;每一个节点多出存…

LeetCode238题:除自身以外数组的乘积(python3)

代码思路&#xff1a; 当前位置的结果就是它左部分的乘积再乘以它右部分的乘积&#xff0c;因此需要进行两次遍历&#xff0c;第一次遍历求左部分乘积&#xff0c;第二次遍历求右部分的乘积&#xff0c;再将最后的计算结果一起求出来。 class Solution:def productExceptSelf(…

【力扣 - 杨辉三角】

题目描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 提示: 1 < numRows < 30 方法一&#xff1a;数学 思路…

【免费】两阶段鲁棒优化matlab实现——CCG和benders

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序采用matlab复现经典论文《Solving two-stage robust optimization problems using a column-and-constraint generation method》算例&#xff0c;实现了C&CG和benders算法两部分内容&#xff0c;通过…

93. 递归实现组合型枚举 刷题笔记

与我前面发的递归实现那一题有点相似 可以看看 94. 递归实现排列型枚举 刷题笔记-CSDN博客 思路 用u记录 选到哪一个位置 一旦选完 就输出 该题 要求升序 我们在选数时加入一个条件 大于上一个选择的数即可 依旧是从小到大搜到符合条件的每一个数 代码 #include<…

安防视频监控EasyCVR平台使用GB28181协议接入时,如何正确配置端口?

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…

多线程万字详解

进程和线程是计算机程序执行的两个重要概念。 1.进程&#xff1a; 进程是操作系统分配资源的基本单位&#xff0c;每个进程都有自己独立的地址空间&#xff0c;每启动一个进程&#xff0c;系统就会为它分配内存。进程间通信比较复杂&#xff0c;需要用到IPC&#xff08;InterP…

Day07:基础入门-抓包技术全局协议封包监听网卡模式APP小程序PC应用

目录 非HTTP/HTTPS协议抓包工具 WireShark 科来网络分析系统 WPE封包 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件上传下载/端口服务/Sh…

Vue3使用JSX/TSX

文章目录 1. 什么是 JSX & TSX?JSX&#xff08;JavaScript XML&#xff09;TSX&#xff08;TypeScript XML&#xff09; 2.Vue3 中使用 TSX基本渲染 & 响应式 & 事件 3.JSX 和 template 哪个好呢&#xff1f;总结 1. 什么是 JSX & TSX? 提示&#xff1a;JSX…

springboot231基于SpringBoot+Vue的乡政府管理系统

乡政府管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装乡政府管理系统软件来发挥其高效…

LeetCode:2867. 统计树中的合法路径数目(筛质数+ DFS Java)

目录 2867. 统计树中的合法路径数目 题目描述&#xff1a; 实现代码与思路&#xff1a; 筛质数 DFS 原理思路&#xff1a; 2867. 统计树中的合法路径数目 题目描述&#xff1a; 给你一棵 n 个节点的无向树&#xff0c;节点编号为 1 到 n 。给你一个整数 n 和一个长度为 …