Java之图书管理系统

news2024/11/23 9:51:23

🤷‍♀️🤷‍♀️🤷‍♀️ 今天给大家分享一下Java实现一个简易的图书管理系统!

清风的个人主页🎉✏️✏️ 

🌂c/java领域新星创作者

🎉欢迎👍点赞✍评论❤️收藏

😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流!

动动你们发财的小手,点点关注点点赞!在此谢过啦!哈哈哈!😛😛😛


目录

 一、找到抽象化的对象

1.书类

2.书架类

二、管理员与普通用户登录

三、实现的功能

1.查找图书

2.新增图书(管理员功能)

3.删除图书(管理员功能)

4.显示图书信息

5.退出系统

6.借阅图书(普通用户功能)

7.归还图书(普通用户功能)

四、main方法



图书管理系统源码链接-满船清梦压星河的Gitee

 

 一、找到抽象化的对象

1.书类

经过分析,我们可以知道,书可以抽象成一个类型。它的属性包括:书名,作者,价格,书的类型等等...我们就先以这些为例。为了保持封装性,我们把这些属性都设置成private修饰的。

下面是书类的定义代码:
这段代码包括一些构造函数以及设置书的属性、重写String函数等。

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

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

    public boolean isBorrowed() {
        return isBorrowed;
    }

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

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

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

2.书架类

我们可以利用一个数组来存放这些书籍,并记录当前存放书籍的数量,为后续的增删查改做准备,同时初始化有三本书籍。

下面是代码:

public class BookList {
    private Book[] books;
    private int usedSize;//记录当前书架上实际存放的书的数量

    public BookList(){
        this.books=new Book[10];
        this.books[0]=new Book("三国演义","罗贯中",18,"小说");
        this.books[1]=new Book("西游记","吴承恩",28,"小说");
        this.books[2]=new Book("红楼梦","曹雪芹",35,"小说");
        this.usedSize=3;
    }
    //获取当前存放书籍数量
    public int getUsedSize() {
        return usedSize;
    }
    
    //设置存放书籍数量
    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }
    //返回下标为pos的书籍
    public Book getBook(int pos){
        return books[pos];
    }
    //设置下标为pos位置的书籍为book
    public void setBook(int pos,Book book){
        books[pos]=book;
    }
    //返回书籍这个数组
    public Book[] getBooks(){
        
        return books;
    }
}

二、管理员与普通用户登录

首先定义一个用户抽象类,再定义管理员与普通用户去继承抽象类并重写菜单方法。

下面是用户抽象类代码:

abstract public class User {
    protected String name;
    protected IOPeration[] ioPerations;

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

管理员类代码:

public class AdiminUser extends User{
    public AdiminUser(String name){
        super(name);
        this.ioPerations=new IOPeration[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                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("*********************");

        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你的选择:>");
        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()
                };
    }

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

        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你的选择:>");
        int choice=scanner.nextInt();

        return choice;
    }
}

三、实现的功能

实现以下几个功能,可以定义一个接口,方便后续的相关操作。

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

1.查找图书

public class FindOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书>:");
        System.out.println("请输入要查找的书>:");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        //遍历这个数组
        int currentSize=bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(name)){
                System.out.println("该书信息如下>:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("无此书!!!");
    }
}

2.新增图书(管理员功能)

public class AddOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书>:");
        int cunrrentSize=bookList.getUsedSize();
        if (cunrrentSize==bookList.getBooks().length){
            System.out.println("书架已满!");
            return;
        }
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入要新增书籍>:");
        String name=scanner.nextLine();
        //检查数组当中有没有这本书
        for (int i = 0; i <cunrrentSize ; i++) {
            Book book1=bookList.getBook(i);
            if(book1.getName().equals(name)){
                System.out.println("该书已存放,无需新增!!!");
                return;
            }
        }
        System.out.println("输入书籍作者>:");
        String author=scanner.nextLine();
        System.out.println("输入书籍类型>:");
        String type=scanner.nextLine();
        System.out.println("输入书籍价格>:");
        int price=scanner.nextInt();
        Book book=new Book(name,author,price,type);
        bookList.setBook(cunrrentSize,book);
        bookList.setUsedSize(cunrrentSize+1);
        System.out.println("新增书籍成功!!!");
    }
}

3.删除图书(管理员功能)

public class AddOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书>:");
        int cunrrentSize=bookList.getUsedSize();
        if (cunrrentSize==bookList.getBooks().length){
            System.out.println("书架已满!");
            return;
        }
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入要新增书籍>:");
        String name=scanner.nextLine();
        //检查数组当中有没有这本书
        for (int i = 0; i <cunrrentSize ; i++) {
            Book book1=bookList.getBook(i);
            if(book1.getName().equals(name)){
                System.out.println("该书已存放,无需新增!!!");
                return;
            }
        }
        System.out.println("输入书籍作者>:");
        String author=scanner.nextLine();
        System.out.println("输入书籍类型>:");
        String type=scanner.nextLine();
        System.out.println("输入书籍价格>:");
        int price=scanner.nextInt();
        Book book=new Book(name,author,price,type);
        bookList.setBook(cunrrentSize,book);
        bookList.setUsedSize(cunrrentSize+1);
        System.out.println("新增书籍成功!!!");
    }
}

4.显示图书信息

public class ShowOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书>:");
        int currentSize=bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book=bookList.getBook(i);
            System.out.println(book);
        }
    }
}

5.退出系统

public class ExitOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统>:");
        System.exit(0);
    }
}

6.借阅图书(普通用户功能)

public class BorrowedOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书>:");
        /**
         * 1.你要借阅哪本书?
         * 2.你借阅的书存在吗?
         * 借阅的方式是什么?
         */
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入要借阅书籍>:");
        String name=scanner.nextLine();
        int currentSize=bookList.getUsedSize();
        int i = 0;
        for (; i <currentSize ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(name)){
                book.setBorrowed(true);
                System.out.println("借阅成功!!!");
                return;
            }
        }
        if(i==currentSize){
            System.out.println("该书不存在,无法借阅!!!");
        }
    }
}

7.归还图书(普通用户功能)

public class ReturnOperation implements IOPeration{
    @Override
    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();
        int i = 0;
        for (; i <currentSize ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(name)){
                book.setBorrowed(false);
                System.out.println("归还成功!!!");
                return;
            }
        }
        if(i==currentSize){
            System.out.println("该书不存在,无需归还!!!");
        }
    }
}

四、main方法

public class Main {
    public static User login() {
        System.out.println("请输入你的姓名:>");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入你的身份:> 1.管理员  2.普通用户");
        int choice = scanner.nextInt();

        if (choice == 1) {
            //管理员
            return new AdiminUser(name);
        } else {
            //普通用户
            return new NormalUser(name);
        }

    }

    public static void main(String[] args) {
        BookList bookList = new BookList();
        //user指向哪个对象,就看返回值是什么
        User user = login();
        while (true) {
            int choice = user.menu();

            System.out.println("choice:" + choice);
            //根据choice决定调用的是哪个方法

            user.doOperation(choice, bookList);

        }
    }
}

🎉好啦,今天的分享就到这里!!

创作不易,还希望各位大佬支持一下!

👍点赞,你的认可是我创作的动力!

收藏,你的青睐是我努力的方向!

✏️评论:你的意见是我进步的财富!

 

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

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

相关文章

SpringBoot-SpringCache缓存

文章目录 Spring Cache 介绍常用注解 Spring Cache 介绍 Spring Cache 是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache 提供了一层抽象&#xff0c;底层可以切换不同的缓存实现&#xff0c;…

基于级联延迟信号消除的锁相环(CDSC_PLL)技术MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 基于级联型延迟信号消除&#xff08;CDSC&#xff09;的锁相环技术&#xff08;CDSC-PLL&#xff09;&#xff0c;该锁相环克服了传统dq 锁相环在电网电压畸变或不对称时存在较大稳态误差的缺点。CDSC-PLL是在…

windows 用vs创建cmake工程并编译opencv应用项目生成exe流程简述

目录 前言一、安装opencv&#xff08;1&#xff09;下载&#xff08;2&#xff09;双击安装&#xff08;3&#xff09;环境变量和system文件夹设置 二、打开vs创建项目三、编辑cpp&#xff0c;.h&#xff0c;cmakelist.txt文件&#xff08;1&#xff09;h文件&#xff08;2&…

Python-敲木鱼升级版(真手动版敲木鱼)

演示效果 需要安装的第三方库&#xff1a; pip install pygame # 加载音乐 pip install pillow # 加载图片 pip install mediapipe # 判断手势的模型 pip install opencv # 模型要用来处理图形 建议有独显和摄像头的可以尝试&#xff01; 想着升级一下玩法&#xff0c;只有真敲…

二维码智慧门牌管理系统升级:引领政务服务、寄件、开锁、刻章新潮流

文章目录 前言一、政务服务二、寄件服务三、便民开锁和刻章服务四、应用范围 前言 在科技不断进步的时代&#xff0c;二维码智慧门牌管理系统升级版正在改变我们的生活&#xff0c;为政务服务、寄件、便民开锁、刻章等多种业务应用提供全新的解决方案&#xff0c;使我们的日常…

python基础(Python高级特性(切片、列表生成式)、字符串的正则表达式、函数、模块、Python常用内置函数、错误处理)培训讲义

文章目录 1. Python高级特性&#xff08;切片、列表生成式&#xff09;a) 切片的概念、列表/元组/字符串的切片切片的概念列表切片基本索引简单切片超出有效索引范围缺省 扩展切片step为正数step为负数 b) 列表生成式以及使用列表生成式需要注意的地方概念举例说明1. 生成一个列…

详细讲解如何求解「内向基环森林」问题

题目描述 这是 LeetCode 上的 「2876. 有向图访问计数」 &#xff0c;难度为 「困难」。 Tag : 「基环森林」、「内向基环树」、「拓扑排序」、「图」、「BFS」 现有一个有向图&#xff0c;其中包含 n 个节点&#xff0c;节点编号从 0 到 n - 1。此外&#xff0c;该图还包含了 …

OJ练习第185题——数组中两个数的最大异或值

数组中两个数的最大异或值 力扣链接&#xff1a;421. 数组中两个数的最大异或值 题目描述 给你一个整数数组 nums &#xff0c;返回 nums[i] XOR nums[j] 的最大运算结果&#xff0c;其中 0 ≤ i ≤ j < n 。 示例 官解思路 异或运算性质&#xff1a; class Solutio…

ZZ038 物联网应用与服务赛题第I套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;I卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用的各类软件工…

NSSCTF第十页(2)

[HNCTF 2022 WEEK3]ssssti 题目提示是jinja2模板 怎么感觉之前做过&#xff0c;看到了注入 随便进行一下注入&#xff0c;发现了过滤 大致的黑名单 " _ args -- 无法使用 request.args os -- 无法导入os 不允许post -- 无法使用 request.value 正常用的payloa…

JavaScript从入门到精通系列第二十九篇:正则表达式初体验

大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c;获益匪浅。现在把孙哥视频分享给大家。 孙哥链接&#xff1a;孙哥个人主页 作者简介&#xff1a;一个颜值99分&#xff0c;只比孙哥差一点的程序员 本专栏简介&#xff1a;话不多说&#xff0c;让我们一起干翻J…

暴力递归转动态规划(十三)

题目 给定3个参数&#xff0c;N&#xff0c;M&#xff0c;K 怪兽有N滴血&#xff0c;等着英雄来砍自己 英雄每一次打击&#xff0c;都会让怪兽流失[0~M]的血量 到底流失多少&#xff1f;每一次在[0~M]上等概率的获得一个值 求K次打击之后&#xff0c;英雄把怪兽砍死的概率。 暴…

算法题:53. 最大子数组和(动态规划)Java Python 实现

1、解题思路 该图引用自&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、动态规划解法-Python代码 # 空间未做优化时的代码&#xff0c;保留本部分代码是为了便于理解 # class Solution: # def maxSubArray(self, nums): # …

SpringBoot的Condition注解

文章目录 参考资料运行环境SpringBoot 自动配置原理一、Condition二、切换内置web服务器三、Enable*注解四、Import 注解五、EnableAutoConfiguration 注解六、案例七、收获与总结 参考资料 视频链接 运行环境 win10IDEA专业版SpringBoot 2.6.2 SpringBoot 自动配置原理 一、Co…

信道编码及MATLAB仿真

文章目录 前言一、什么是信道编码&#xff1f;二、信道编码的基本逻辑—冗余数据1、奇偶检验码2、重复码 三、编码率四、4G 和 5G 的信道编码1、卷积码2、维特比译码&#xff08;Viterbi&#xff09;—— 概率译码3、LTE 的咬尾卷积码4、LTE 的 turbo 码 五、MATLAB 仿真1、卷积…

javaspringbootMySQL网上商城系统的设计与实现08789-计算机毕业设计项目选题推荐(附源码)

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设网上商城系统。 本设…

07.Diffusion Model概述

文章目录 Diffusion Model原理Reverse ProcessDenoise模块Forward Process(Diffusion Process) 文字生成图片by Diffusion Model文字生成图像的常见套路Text EncoderFrchet Inception DistanceContrastive Language-Image Pre-Training(CLIP) DecoderGeneration Model 部分截图…

大数据毕业设计选题推荐-收视点播数据分析-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Leetcode实战

我们今天来利用这段时间的学习实操下我们的oj题。 int removeElement(int* nums, int numsSize, int val){int dst0;int src0;while(src<numsSize){if(nums[src]!val){nums[dst]nums[src];}elsesrc;}return dst;}我们这里用用两个下标&#xff0c;src来移动&#xff0c;如果…

抵押贷款巨头 Mr. Cooper 遭受网络攻击,影响 IT 系统

导语 近日&#xff0c;美国抵押贷款巨头 Mr. Cooper 遭受了一次网络攻击&#xff0c;导致该公司的 IT 系统受到影响。这一事件引起了广泛的关注&#xff0c;使得 Mr. Cooper 的在线支付平台无法正常运行。本文将为大家详细介绍这次网络攻击事件的具体情况及其对用户和公司造成的…