java实现图书系统源码

news2024/11/15 6:56:53

建包和类:

Book

Book:

package Book;

public class Book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed;

    public Book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ((isBorrowed == true)?" 已借出 ":" 未借出 ")+
                //", isBorrowed=" + isBorrowed +
                '}';
    }
}

BookList:

package Book;

public class BookList {
    private Book[] books = new Book[10];//创建一个数组
    private  int UsedSize;//有效的使用长度//实践上放书的个数



    public BookList(){
        this.books[0]=new Book("三国演义","罗贯中",10,"小说");
        this.books[1]=new Book("红楼梦","曹雪芹",20,"小说");
        this.books[2]=new Book("西游记","吴承恩",30,"小说");

        this.UsedSize = 3;//书架上的书

    }
    //用来访问数组的长度
    public int getUsedSize() {
        return UsedSize;
    }

    public void setUsedSize(int usedSize) {
        UsedSize = usedSize;
    }

    //用来访问数组下标,所以我们要对这个进行修改,使其返回数组的下标
    public Book getBook(int pos) {
        return books[pos];
    }

    //给某一个位置放一本书
    public void setBook(int pos,Book book) {
        this.books[pos] = book;
    }

    //得到书的数组的长度

    public Book[] getBooks() {
        return books;
    }
}

Main:

package Book;

import User.User;
import User.AdminUser;
import User.NomalUser;
import java.util.Scanner;

public class Main {
        public static User login(){
                Scanner scanner =new Scanner(System.in);
                System.out.println("请输入你的名字: ");
                String name = scanner.nextLine();

                System.out.println("请输入你的身份:1.管理员 2.普通用户 ");

                int choice = scanner.nextInt();// 1 或者 2

                if(choice == 1){
                        return new AdminUser(name);

                }else{
                        return new NomalUser(name);
                }

        }

        public static void main(String[] args) {
                BookList bookList =  new BookList();

                User user =login();
                while(true){
                        //看user引用哪个对象,然后下一步调用哪个菜单
                        int choice = user.menu();

                        //根据返回值 调那个对象 使用哪个方法
                        //确认对象 包含了 哪些方法?
                        //在进行调用子类的对象是,构造方法会初始化好对应的操作对象
                        //user引用了哪个对象
                        user.doIoperation(choice,bookList);
                }

        }

}

User

User:

package User;

import Book.BookList;
import ioperations.IOperation;



public abstract class User {
    protected String name;
    //此时这个数组没有初始化
    protected IOperation[] iOperations;

    public User(String name){
        this.name = name;
    }
    public abstract int menu();

    //构造一个方法去实现调用
    //通过数组下标使用数组进行调用,选择的方法
    public void doIoperation(int choice , BookList bookList){
        iOperations[choice].work(bookList);
        //通过点号访问方法
    }

}

AdminUser:

package User;

import ioperations.*;

import java.util.Scanner;

public class AdminUser extends User {
    public AdminUser(String name) {
        super(name);
        this.iOperations = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation(),

        };
    }

    public int menu(){
        System.out.println("**欢迎"+this.name+"进入图书系统**");
        System.out.println("******管理员菜单******");
        System.out.println("1.查找图书");
        System.out.println("2.新增图书");
        System.out.println("3.删除图书");
        System.out.println("4.显示图书");
        System.out.println("0.退出系统");
        System.out.println("********************");
        Scanner scanner =new Scanner(System.in);
        System.out.println("请输入你选择的数字: ");
        int choice = scanner.nextInt();
        return choice;

    }
}

NomalUser:

package User;

import ioperations.*;

import java.util.Scanner;

public class NomalUser extends User{
    public NomalUser(String name) {
        super(name);
        //创建新的数组,new 新的方法
        this.iOperations = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()
        };
    }

    public int menu(){
        System.out.println("****欢迎"+this.name+"进入图书系统****");
        System.out.println("*******普通用户菜单*******");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("************************");
        Scanner scanner =new Scanner(System.in);
        System.out.println("请输入你选择的数字: ");
        int choice = scanner.nextInt();
        return choice;

    }
}

ioperations

ioperation:

package ioperations;

import Book.BookList;

public interface IOperation {
    public void work(BookList bookList);

}

AddOperation:

package ioperations;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class AddOperation implements IOperation {
    //新增图书
    public void work(BookList bookList) {
        System.out.println("新增图书.....");

        //1.判断是否已经满了
        //2.输入各种成员变量 构建对象
        // 3.放到数组的最后一个位置
        //4.us++


        //1.判满
        int currentSize = bookList.getUsedSize();

        if (currentSize == bookList.getBooks().length) {
            System.out.println("书架满了,不能放了");
            return;
        }


        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();

        System.out.println("请输入价格:");
        int price = scanner.nextInt();

        Book newbook = new Book(name, author, price, type);

        //3.判断有没有这本书不能插入
        for (int i = 0; i < currentSize; i++) {

            //第一步:从书架上拿到书
            Book book = bookList.getBook(i);
            //通过书得到书的名字,然后用equals于输入的名字进行对比
            if (book.getName().equals(name)) {
                System.out.println("有这本书不能插入");
                System.out.println(book);
                return;
            }
            //4.插入
            bookList.setBook(currentSize, newbook);

            bookList.setUsedSize(currentSize + 1);

            System.out.println("新增图书成功!!");
        }
    }
}

BorrowOperation:

package ioperations;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOperation {
    //借阅图书
    public void work(BookList bookList) {
        System.out.println("借阅图书.....");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要借阅的书名:");
        String name = scanner.nextLine();

        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            //第一步:从书架上拿到书
            Book book = bookList.getBook(i);

            //通过书得到书的名字,然后用equals于输入的名字进行对比
            if (book.getName().equals(name)) {
                if(book.isBorrowed()) {
                    System.out.println("该书已经被借出!!");
                    return;
                }

                System.out.println("找到了这本书");
                System.out.println(book);
                book.setBorrowed(true);
                System.out.println("借阅成功!!");
                return;
            }
        }
        System.out.println("没有你要找的书");
    }
}

DelOperation:

package ioperations;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

    public class DelOperation implements IOperation{
    //删除图书
    public void work(BookList bookList) {
        System.out.println("删除图书.....");

        //找到自己要删除书的位置,然后后面往前面覆盖 us--;

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要删除的书名:");
        String name = scanner.nextLine();

        int currentSize = bookList.getUsedSize();

        //记录下标 pos
        int pos = -1;
        int i = 0;
        for (i = 0; i < currentSize; i++) {
            //第一步:从书架上拿到书
            Book book = bookList.getBook(i);
            //通过书得到书的名字,然后用equals于输入的名字进行对比
            if (book.getName().equals(name)) {
                System.out.println("找到了这本书");
                System.out.println(book);
                pos = i;
                break;
            }
        }
        if (i == currentSize) {
            System.out.println("没有你要删除的书");
            return;
        }

        //开始删除...
        for (int j = pos; j <currentSize-1 ; j++) {
            //bookList[j] = bookList[j+1];
            Book book = bookList.getBook(j+1);

            bookList.setBook(j,book);
        }
        bookList.setBook(currentSize-1,null);

        bookList.setUsedSize(currentSize-1);
        System.out.println("删除成功!!!");


    }
}

ExitOperation:

package ioperations;

import Book.BookList;

public class ExitOperation implements IOperation{
    //退出系统
    public void work(BookList bookList){
        System.out.println("退出系统.....");
        //调用exit 设置为0 正常退出
        System.exit(0);
    }
}

FindOperation:

package ioperations;

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);
        System.out.println("请输入你要查找的书名:");
        String name = scanner.nextLine();

        //获得书架的长度存到currentSize中
        int currentSize = bookList.getUsedSize();

        for (int i = 0; i < currentSize; i++) {

            //第一步:从书架上拿到书
            Book book = bookList.getBook(i);
            //通过书得到书的名字,然后用equals于输入的名字进行对比
            if (book.getName().equals(name)) {
                System.out.println("找到了这本书");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有你要找的书");
    }
}

ReturnOperation:

package ioperations;

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 currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            //第一步:从书架上拿到书
            Book book = bookList.getBook(i);

            //通过书得到书的名字,然后用equals于输入的名字进行对比
            if (book.getName().equals(name)) {
                if(book.isBorrowed()) {
                    book.setBorrowed(false);
                    System.out.println("归还成功!!");
                    return;
                }

            }
        }
        System.out.println("没有你要归还的图书!!");
    }
}


ShowOperation:

package ioperations;

import Book.Book;
import Book.BookList;

public class ShowOperation implements IOperation{
    //显示图书
    public void work(BookList bookList){
        System.out.println("显示图书.....");

        //currentSize 用来获取书架长度
        int currentSize = bookList.getUsedSize();

        for (int i = 0; i < currentSize ; i++) {
            Book book = bookList.getBook(i);
            System.out.println(book);

        }

    }
}

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

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

相关文章

【Qnx 】Qnx IPC通信PPS

Qnx IPC通信PPS Qnx自带PPS服务&#xff0c;PPS全称Persistent Publish/Subscribe Service&#xff0c;就是常见的P/S通信模式。 Qnx PPS的通信模式是异步的&#xff0c;Publisher和Subscriber也无需关心对方是否存在。 利用Qnx提供的PPS服务&#xff0c;Publisher可以通知多…

OrangePi KunPengPro | 开发板开箱测评之学习与使用

OrangePi KunPengPro | 开发板开箱测评之学习与使用 时间&#xff1a;2024年5月23日20:51:12 文章目录 OrangePi KunPengPro | 开发板开箱测评之学习与使用概述1.参考2.资料、工具3.使用3-1.通过串口登录系统3-2.通过SSH登录系统3-3.安装交叉编译工具链3-4.复制文件到设备3-5.第…

Android 使用 ActivityResultLauncher 申请权限

前面介绍了 Android 运行时权限。 其中&#xff0c;申请权限的步骤有些繁琐&#xff0c;需要用到&#xff1a;ActivityCompat.requestPermissions 函数和 onRequestPermissionsResult 回调函数&#xff0c;今天就借助 ActivityResultLauncher 来简化书写。 步骤1&#xff1a;创…

攻防世界[GoodRe]

攻防世界[GoodRe] 学到知识&#xff1a; 逆向的精髓&#xff1a;三分懂&#xff0c;七分蒙。TEA 算法快速识别&#xff08;蒙&#xff09;&#xff1a; 数据处理的形式&#xff1a;进入加密时的数据和加密结束后的数据&#xff0c;处理时数据的分组等等&#xff0c;都能用来…

AtCoder Beginner Contest 355 A~F

A.Who Ate the Cake?(思维) 题意 已知有三个嫌疑人&#xff0c;有两个证人&#xff0c;每个证人可以指出其中一个嫌疑人不是罪犯&#xff0c;如果可以排除两个嫌疑人来确定犯人&#xff0c;输出犯人的身份&#xff0c;如果无法确定&#xff0c;输出"-1"。 分析 …

Pytorch(Overview)

目标 如何利用pytorch完成学习系统&#xff1f; 理解神经网络&#xff08;neural networks&#xff09;和深度学习&#xff08;deep learning&#xff09;基础。 需要了解线性代数和概率论数理统计等相关关系&#xff0c;和python编程语言。 讨论理解 到底什么是human int…

vue3项目+TypeScript前端项目 ———— elemnet-plus,svg图标配置,sass,mock数据

一.集成element-plus 官网地址 安装 pnpm install element-plus 引入 // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vueconst app createApp(App)app.use(ElementPlus) app.…

esp32-idf 开发踩坑记录

现象 直接使用原始命令编译idf.py build 但是提示idf 版本错误 卸载旧版本 编译出错build 问题 然后删除编译文件后&#xff0c;重新编译&#xff0c;还是出错 解决方法1 最后发现是因为项目所在文件夹有中文目录&#xff0c;把项目迁移到英文目录后&#xff0c;重新编译&a…

重学java 46.集合 ① Collection集合

事常与人违&#xff0c;事总在人为 —— 24.5.26 集合 知识导航 1.集合的特点以及作用 2.使用collection接口中的方法 3.使用迭代器迭代集合 4.ArrayList以及LinkedList的使用 5.使用增强for遍历集合 一、单列集合框架的介绍 1.长度可变的容器&#xff1a;集合 2.集合的特点 a.…

TCP/IP协议(一)

一.报文和协议 协议有什么作用&#xff1f;协议定义通信实体间所交换报文的格式和次序&#xff0c;以及在报文发送和/或接收或者其他事件方面所采取的行动(响应)。 什么是报文&#xff1f;指在网络中传输的数据单元&#xff0c;网络通讯的基本单位。&#xff08;HTTP报文、TCP报…

录屏技巧:win11怎么录屏?这5个电脑录屏方法快速了解下

无论您是想进行工作演示还是游戏直播&#xff0c;电脑录屏都有很大帮助。录制 Win 11 屏幕在很多方面都非常有效&#xff0c;因为它能让事情变得更简单。但 Win11怎么录屏呢&#xff1f;如果您仍有困惑&#xff0c;请查看本篇文章中列出的5个方法。在本文中&#xff0c;我们列出…

Python 获取当前IP地址(爬虫代理)

Python 获取当前IP地址&#xff08;爬虫代理&#xff09; 在Python中&#xff0c;获取当前的公网IP地址通常涉及到发送一个请求到外部服务&#xff0c;因为本地IP地址通常只在你的私有网络内部是可见的&#xff0c;而公网IP地址是由你的ISP&#xff08;互联网服务提供商&#x…

猫抓(cat-catch)插件的常规用法

目录 1.1、前言1.2、抓取图片资源1.3、抓取音频资源1.4、抓取视频资源 1.1、前言 本文将介绍利用猫抓&#xff08;cat-catch&#xff09;插件如下抓取网页上的图片、音频、视频等资源&#xff0c;猫抓&#xff08;cat-catch&#xff09;插件的安装及设置请参考推荐一款媒体影音…

【网络技术】【Kali Linux】Wireshark嗅探(十五)SSDP(简单服务发现协议)报文捕获及分析

往期 Kali Linux 上的 Wireshark 嗅探实验见博客&#xff1a; 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;一&#xff09;ping 和 ICMP 【网络技术】【Kali Linux】Wireshark嗅探&#xff08;二&#xff09;TCP 协议 【网络技术】【Kali Linux】Wireshark嗅探&…

picamera配opencv做发现移动物体后录像50秒

本来是想配合上一篇写的测距传感器数据打开摄像头录制个50秒实时画面&#xff0c;后来这个测距传感器&#xff08;因为我是歪用&#xff0c;用来识别范围内的移动物体&#xff09;给的数据&#xff0c;false alarming还是太高了。于是想到使用本人之前深恶痛绝的opencv来试一试…

如何使用Kimi和通义千问辅助快速阅读论文

说明 上一篇博文我介绍了最新阅读的一篇TinyML的论文。我有个习惯就是使用Google Schloar跟踪当前最新的论文&#xff0c;只要在Google Schloar中设置好关键字&#xff0c;它每天就把最新的相关论文的链接和摘要发送到邮箱里面。不过现在论文太多了&#xff0c;每篇都认真读取…

分享免费的手机清理软件app,一款国外开发的手机清理神器,让手机再战两年!

手机内存越来越大&#xff0c;软件却越来越占地方&#xff0c;就像微信这家伙&#xff0c;轻轻松松就吃了十几个G&#xff01; 害得阿星8128G的手机&#xff0c;本来想换新的&#xff0c;结果用了这款Avast Cleanup软件&#xff0c;瞬间感觉手机还能再战两年&#xff01; 注意…

让大模型变得更聪明三个方向

让大模型变得更聪明三个方向 随着人工智能技术的飞速发展&#xff0c;大模型在多个领域展现出了前所未有的能力&#xff0c;但它们仍然面临着理解力、泛化能力和适应性等方面的挑战。那么&#xff0c;如何让大模型变得更聪明呢&#xff1f; 方向一&#xff1a;算法创新 1.1算…

Generative Action Description Prompts for Skeleton-based Action Recognition

标题&#xff1a;基于骨架的动作识别的生成动作描述提示 源文链接&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/papers/Xiang_Generative_Action_Description_Prompts_for_Skeleton-based_Action_Recognition_ICCV_2023_paper.pdfhttps://openaccess.thecvf.c…

【云原生】kubernetes声明式管理-----YAML文件

目录 引言 一、声明式管理简介 &#xff08;一&#xff09;什么是声明式管理 &#xff08;二&#xff09;支持格式 二、YAML文件 &#xff08;一&#xff09;YAML文件基本格式 &#xff08;二&#xff09;YAML文件实践 三、YAML文件创建方式 &#xff08;一&#xff0…