java使用面向对象实现图书管理系统

news2024/12/23 18:17:25

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
系列专栏:xiaoxie的JAVA系列专栏——CSDN博客●'ᴗ'σσணღ*
我的目标:"团团等我💪( ◡̀_◡́ ҂)" 

( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​+关注(互三必回)!

 一.Book类

首先我们需要先创建一个Book类

public class Book {
    private String name;
    private String author;
    private double price;
    private String type;
    private boolean  isBorrowed;
   // 构造函数
    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }
    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 double getPrice() {
        return price;
    }

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

    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }
  // 重写toString方法
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ( (isBorrowed == true) ? ",已借出" : ",未借出" )+
                //", isBorrowed=" + isBorrowed +
                '}';
    }
}

二.BookList类

public class BookList {
    public Book[] List;
    public int size;
    public BookList() {
       List = new Book[10];
       List[0] = new Book("西游记", "吴承恩", 10.25, "小说");
       List[1] = new Book("三国演义","罗贯中",20.50,"小说");
       List[2] = new Book("红楼梦","曹雪芹",50.9,"小说");
       List[3] = new Book("水浒传","施耐庵",15.5,"小说");

        size = 4;
    }
    public boolean isFull() {
        return size >= List.length;
    }
    public boolean isEmpty() {
        return size == 0;
    }
    public void newLength() {
        List = new Book[size+10];
    }

    public Book getList(int i) {
        return List[i];
    }

    public int getSize() {
        return size;
    }

    public void setList(Book book , int pos) {
        List[pos] = book;
    }

    public void setSize(int size) {
        this.size = size;
    }
}

三.User类

public abstract class User {
 public IOperation[] iOperations;
 public String name;
    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
    public void doOperation(int choice,BookList bookList) {
        IOperation operation = this.iOperations[choice];
        operation.work(bookList);
    }
}

四.管理员类

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

    public int menu() {
        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("************************");
        System.out.println("请输入你的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

 五.普通类

public class NormalUser extends User{
    public NormalUser(String name) {
        super(name);
       this.iOperations = new IOperation[] {
               new ExitOperation(),
               new  FindOperation(),
               new BorrowedOperation(),
               new ReturnOperation()
       };
    }
    @Override
    public int menu() {
        System.out.println("********普通用户菜单********");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("***************************");
        System.out.println("请输入你的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

六.实现操作的接口

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

 七.各种操作类

import java.util.Scanner;

// 添加图书的操作

public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        if(bookList.isFull()) {
            bookList.newLength();
        }
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入你要添加的书名");
        String name = scan.nextLine();
        System.out.println("请输入你要添加图书的作者");
        String author = scan.nextLine();
        System.out.println("请输入你要添加图书的价格");
        double price = scan.nextDouble();
        scan.nextLine();
        System.out.println("请输入你要添加图书的类型");
        String type = scan.nextLine();
        Book tmp = new Book(name,author,price,type);
        int count = bookList.getSize();
        for (int i = 0; i < count; i++) {
            if(tmp.getName().equals(bookList.getList(i).getName())) {
                System.out.println("请勿重复添加");
                System.exit(0);
            }
        }
        bookList.setList(tmp,count);
        bookList.setSize(count+1);
    }
}
import java.util.Scanner;

// 借出书籍

public class BorrowedOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        Scanner scan = new Scanner(System.in);
        int count1 = bookList.getSize();
        System.out.println("以下是图书馆的书单: ");
        for (int i = 0; i < count1; i++) {
            if (bookList.getList(i) != null) {
                System.out.println(bookList.getList(i));
            }
        }
        System.out.println("请输入你要借阅的图书名字:");
        String name = scan.nextLine();
        int count = bookList.getSize();
        int i = 0;
        for (; i < count; i++) {
            if (bookList.getList(i).getName().equals(name) ) {
                if(bookList.getList(i).isBorrowed()  ) {
                    System.out.println("书已被借走,请等归还后再来借阅");
                    return;
                }
                bookList.getList(i).setBorrowed(true);
                System.out.println("借阅成功,请于7天时间内归还");
                return;
            }
        }

        if(i == count) {
            System.out.println("没有找到这本书");
        }
    }
}
import java.util.Scanner;


 //删除书籍的操作
 
public class DeleteOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        if(bookList.isEmpty()) {
          throw  new NullException("书架为空");
        }
        Scanner san = new Scanner(System.in);
        System.out.println("请输入你要删除的图书名字");
        String name = san.nextLine();
        int count = bookList.getSize();
        int i = 0;
        for (; i < count; i++) {
            if(bookList.getList(i).getName().equals(name)) {
               break;
            }
        }
        if(i == count) {
            System.out.println("没有找到这本书");

        } else {
            while (i < count) {
                bookList.List[i++] = bookList.List[i+1];
            }
            System.out.println("删除成功");
            bookList.setSize(count-1);
        }
    }
}
// 退出操作

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.exit(0);
    }
}
import java.util.Scanner;

// 通过图书的名字来查找图书

public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入你要查找的图书名字");
        String name = scan.nextLine();
        int count = bookList.getSize();
        int i = 0;
        for (; i < count; i++) {
            if(bookList.getList(i).getName().equals(name)) {
                System.out.println("图书信息如下:");
                System.out.println(bookList.getList(i));
                break;
            }
        }
        if(i == count) {
            System.out.println("没有找到这本书");
        }
    }
}
//归还操作
public class ReturnOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入你要归还的图书名字:");
        String name = scan.nextLine();
        int count = bookList.getSize();
        int i = 0;
        for (; i < count; i++) {
            if (bookList.getList(i).getName().equals(name) && bookList.getList(i).isBorrowed()) {
                bookList.getList(i).setBorrowed(false);
                System.out.println("归还成功,欢迎下次光临");
                return;
            }
        }
        if(i == count) {
            System.out.println("没有找到这本书");
        }
    }
}
//显示图书的操作

public class ShowOperation implements IOperation{

    @Override
    public void work(BookList bookList) {
        int count = bookList.getSize();
        System.out.println("图书信息如下: ");
        for (int i = 0; i < count; i++) {
            if (bookList.getList(i) != null) {
                System.out.println(bookList.getList(i));
            }
        }
    }
}
//异常
public class NullException extends RuntimeException {
    public NullException() {
    }
    public NullException(String message) {
        super(message);
    }
}

八.主函数

public class Main {
    public static User menu() {
        int choice = 0;
        String possWord = "123456";
        System.out.println("请输入你的身份:");
        System.out.println("1.管理员   2.普通用户 ");
        Scanner scan = new Scanner(System.in);
        choice = scan.nextInt();
        scan.nextLine();
        if (choice == 1) {
            System.out.println("请输入密码:");
            int count = 3;
            while (count > 0) {
                String MyPossWord = scan.nextLine();
                if (MyPossWord.equals(possWord)) {
                    count = -1;
                    break;
                } else {
                    --count;
                    System.out.println("密码错误,你还有" + count + "次机会");
                }
            }
            if (count != -1) {
                System.out.println("密码输入错误超过3次,请您24小时后在来");
                System.exit(0);
            }
            return new Admin("admin");
        }
        return new NormalUser("noraluser");
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = Main.menu();
        while (true) {
            int choice = user.menu();
            user.doOperation(choice,bookList);
        }
        }
}

九.说明

以上就是java使用面向对象的知识来实现图书管理系统的全部内容了,此代码仅仅只是对初学Java的读者有帮助,可以通过借鉴此代码,再根据自己所学的知识自己构建一个图书管理系统,这个 图书管理系统也是差不多涵盖了JavaSE所有内容,博主相信你自己下去编写一个图书管理系统,会对Java的掌握更上一步。 

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

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

相关文章

算法基础之筛质数

筛质数 核心思想&#xff1a;筛法求质数 埃氏筛法: 每次用 2 3 4…. p-1 筛 2 - p之间的数出现2 3 4 …的倍数时 去掉(4实际已经被去掉 不会用4去筛)当2~p-1的数都没有筛掉p 说明p是质数 优化: 只用2~p-1中质数筛 线性筛法: 核心: n只会被其最小质因子筛掉 每一个合数都只…

如何使用AI智能写作API接口批量处理数据

有大量的数据&#xff0c;想使用AI智能写作工具进行批量操作处理&#xff0c;有没什么好方法&#xff1f; 可以使用简数采集器&#xff0c;支持自动采集数据&#xff0c;也支持批量导入数据&#xff0c;然后调用第三方AI智能写作API接口进行批量处理&#xff08;例如&#xff…

『 C++ 』二叉树进阶OJ题

文章目录 根据二叉树创建字符串 &#x1f996;&#x1f969; 题目描述&#x1f969; 解题思路&#x1f969; 代码 二叉树的层序遍历(分层遍历) &#x1f996;&#x1f969; 题目描述&#x1f969; 解题思路&#x1f969; 代码 二叉树的层序遍历(分层遍历)Ⅱ &#x1f996;&…

redis集群介绍

这里写自定义目录标题 redis集群是什么&#xff1f;redis集群方案1.节点2.槽指派3在集群中执行命令4.复制与故障转移5.消息 redis集群搭建参考文档 redis集群是什么&#xff1f; redis集群是一个由多个主从节点群组成的分布式服务集群&#xff0c;它具有复制、高可用和分片特性…

无锡算法大赛线下颁奖会,齐聚院士专家探讨前沿AI技术,大赛选手优秀获奖方案分享!

极市邀您参与“视界拓新知Al有所为 2023首届无锡国际人工智能算法大赛”&#xff0c;相聚美丽无锡&#xff01; 举行地点&#xff1a;无锡君来洲际酒店君来厅 举行时间&#xff1a;2023年12月27日&#xff08;周三&#xff09; 此次大会齐聚多名院士专家&#xff0c;分享前沿…

Linux/Windows IP | Team基础管理

引言 IP&#xff08;Internet Protocol&#xff09; 定义&#xff1a; IP&#xff08;Internet Protocol&#xff09;是网络传输数据的协议&#xff0c;负责在网络中唯一标识和定位设备&#xff0c;并提供数据传输的基础。功能&#xff1a; 允许计算机在网络上相互通信和交换…

做一个家政预约小程序需要了解哪些功能?

随着科技的发展&#xff0c;人们的生活方式发生改变&#xff0c;家政服务在快节奏的时代成为家庭必备。为了满足人们对家政服务的需求&#xff0c;许多家政公司开始寻求线上发展机会。小程序作为轻量级应用&#xff0c;逐渐成为家政行业的重要载体。本文将详细介绍家政小程序的…

【数据结构和算法】---二叉树(1)--树概念及结构

目录 一、树的概念及结构1.1 树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用 二、二叉树的概念及结构2.1 二叉树概念2.2 特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储结构 三、树概念相关题目 一、树的概念及结构 1.1 树的概念 树是一种非线性的数据结构&#…

Python爬虫之两种urlencode编码发起post请求方式

背景 闲来无事想爬一下牛客网的校招薪资水平及城市分布&#xff0c;最后想做一个薪资水平分布的图表出来 于是发现牛客使用的是application/x-www-form-urlencoded的格式 测试 首先可以先用apipost等测试工具先测试一下是否需要cookie之类的&#xff0c;发现是不需要的&…

第五节TypeScript 运算符

一、描述 运算符用于执行程序代码运算。 二、运算符主要包括&#xff1a; 算术运算符逻辑运算符关系运算符按位运算符赋值运算符三元/条件运算符字符串运算符类型运算符 1、算术运算符 y5&#xff0c;对下面算术运算符进行解释&#xff1a; 运算符 描述 例子 x 运算结果…

Elasticsearch:什么是文本分类?

文本分类定义 - text classification 文本分类是一种机器学习&#xff0c;它将文本文档或句子分类为预定义的类或类别。 它分析文本的内容和含义&#xff0c;然后使用文本标签为其分配最合适的标签。 文本分类的实际应用包括情绪分析&#xff08;确定评论中的正面或负面情绪&…

10 个顶级免费 Android 数据恢复软件可帮助恢复已删除的文件

不小心删除了手机上的一些重要数据或文件&#xff1f;这很不幸&#xff0c;但不要悲伤或放弃希望&#xff0c;因为仍有机会恢复它们。 10 个顶级免费 Android 数据恢复软件 虽然 Android 手机没有像 Windows 那样的回收站可以自动存储您删除的数据&#xff0c;但是有很多功能强…

v高速、低功耗数模转换器MS9708/MS9710/MS9714

产品简述 MS9708/MS9710/MS9714 是一个 8-Bit/10-Bit/14-Bit 高速、低功耗 D/A 转换器。当采样速率达到 125MSPS 时&#xff0c; MS9708/MS9710/MS9714 也能提供优越的 AC 和 DC 性能。 MS9708/MS9710/MS9714 的正常工作电压范围为 2.7V 到 5.5V &#xff0c;…

Python轴承故障诊断 (八)基于EMD-CNN-GRU并行模型的故障分类

目录 前言 1 经验模态分解EMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 2.3 故障数据的EMD分解可视化 2.4 故障数据的EMD分解预处理 3 基于EMD-CNN-GRU并行模型的轴承故障诊断分类 3.1 训练数据、测试数据分组&#xff0c;数据分ba…

什么是“人机协同”机器学习?

“人机协同”&#xff08;HITL&#xff09;是人工智能的一个分支&#xff0c;它同时利用人类智能和机器智能来创建机器学习模型。在传统的“人机协同”方法中&#xff0c;人们会参与一个良性循环&#xff0c;在其中训练、调整和测试特定算法。通常&#xff0c;它的工作方式如下…

MySql数据库联合查询(MySql数据库学习——六)

本编博客总结了mysql数据库的联合查询&#xff0c;仅用于学习和总结。ฅ ˘ฅ 联合查询&#xff0c;简单的来讲就是多个表联合起来进行查询。 前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字…

【qt信号槽-5】信号槽相关注意事项记录

背景&#xff1a; 信号槽是qt很重要的概念&#xff0c;遇到问题帮助没少看。其中就有signals and slots这一章节&#xff0c;说得很到位。 概念琐碎&#xff0c;记录备忘。不对之处望指正。 【qt信号槽-1】槽函数重写问题&#xff0c;qt_metacall和qt_static_metacall-CSDN博…

【数据结构和算法】定长子串中元音的最大数目

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;滑动窗口 2.2 方法二&#xff1a;滑动窗口优化版 三、代码 3.1 方法一&#xf…

使用Docker部署Nexus Maven私有仓库并结合Cpolar实现远程访问

文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定Nexus公网地址7. 固定地址访问Nexus Nexus是一个仓库管理工具&#xff0c;用于管理和组织软件构建过程中的依赖项和构件。它与Maven密切相关&#xff0c;可…

CQ 社区版 V2.7.0 发布 | 数据源版本扩充、新增批量执行功能等

2023 年的最后一个社区版本来啦&#xff01;提前祝大家新年快乐~ ✿✿ヽ(▽)ノ✿ 应社区小伙伴的建议&#xff0c;本次版本增加了大量已支持数据源的适配版本&#xff01;&#xff01;&#xff01;&#xff08;是听劝的官方没错&#xff09;同时&#xff0c;新增批量执行、Blo…