• 图书管理系统


    目的

    此篇代码是对类和对象、抽象类、接口等知识相关训练,适合初学者使用和参考。

    题目

    要求创建一个图书管理系统。
    在这里插入图片描述

    • 程序的开始,要求输入姓名;
    • 选择身份:1.管理员 2.普通用户
    • 下面是菜单,不同的身份有着不同的菜单
      在这里插入图片描述

    在这里插入图片描述

    我们创建四个包:用户包、操作包、书类型包、主函数包
    在这里插入图片描述

    书类型的包

    书类型的包包含两个类:书、书架

    Book

    在这里插入图片描述

    • 书的属性:书名、作者、价格、类型、是否被借出
    • 书名的get 方法,用于后面使用书名查找书籍
    • IsBorrowe的get\set方法用于后面的“借出书籍”“归还书籍”的操作
    • toString()用于输出书籍的相关信息(是否被借出的返回格式需要我们的额外调整)

    BookList

    在这里插入图片描述

    • 书架的属性:书的数组、书的数目
    • 构造方法:初始化书的数组里面的内容,让其中有三本书,并使书的数目为3
    • 书籍的set方法:用于后面的新增图书、删除图书(因为删除图书,我们是将最后一本书放到删除图书的位置,所以我们构造了两个重载的方法)
    • getBook():用于后面的查找图书的操作,获取书架当中的书
    • 书的数目的get()和ser()方法,用于后面的新增删除图书的操作,获取图书数目的方法

    用户包

    我们创建一个抽象类:User,
    NormalUser和AdminUser这两个类继承User

    User

    在这里插入图片描述

    • 如图所示,User类中包含name \ IOperations
    • IOperations 是操作类的数组,里面需要放入各种操作类,以对应不同的对象不同的操作。
    • 菜单方法,输出菜单,后面根据不同的对象写出不同的方法体(需要被重写)
    • doWork()对书架进行操作一句菜单进行选择

    NormalUser

    在这里插入图片描述

    • 构造方法:里面的操作数组是重点,依次按照顺序进行排列
    • menu():普通用户的菜单,依照菜单的信息让用户进行选择

    AdminUser

    在这里插入图片描述

    • 构造方法:重点是操作数组,根据需要进行组合
    • menu():让用户根据菜单的信息进行选择

    操作类型的包

    操作类型的类:Add\Brrow\Del\Exit\Find\Return\Show
    操作类型的接口:所有的操作用一个接口IOperation

    IOperation

    在这里插入图片描述

    • 这是所有操作的接口,我们看他虽然很短,但是确实十分的重要,我们可以使用接口数组,在数组中放入不同的操作,这样我们就可以使用这一个接口数组完成不同的操作

    Show

    在这里插入图片描述

    • 重写接口的方法,展示所有书籍的内容,其中调用了BookLIst类中的getBook()方法和Book类中的toString()方法来输出相关的信息

    Add

    在这里插入图片描述

    • 这里我们要新增一个图书,我们要输入书名、作者、类型、价格,同时我们创建一个Book类的对象用于接受这些信息,我们调用BookList类中的setBook()方法,把图书放入数组中,同时放入的位置是BookList类中getUsedSize()方法获取的位置,即为数组新增图书要放的位置

    Find

    在这里插入图片描述

    • 查找图书:我们遍历整个数组,我们通过Book类中的getName()方法来和输入的书名进行比较,相等,则打印信息。

    Brrow 和 Return

    在这里插入图片描述
    在这里插入图片描述

    • 我们通过书名查找图书,找到后,判断这本书是否被借阅的状态(调用Book类中getIsBrrowed()方法来判断书的状态),根据状态,判断它是否需要归还或借阅。

    Exit

    在这里插入图片描述

    • 我们使用System.exit(0)来退出程序。

    Del

    在这里插入图片描述

    • 我们输入要删除的图书名字,遍历整个数组,找到这本书,如果这本书在最后一个位置上,只要书的数目 -1即可;如果书不在最后的位置上,我们把最后位置上的出放在要删除的书的位置上即可。但两种方法都要书的数目 -1。注意BookList中setBook的一种方法体可能不能满足我们的使用,我们需要重载(刚刚已说)

    main包

    在这里插入图片描述

    • 首先我们创建一个书架的对象
    • 我们用User父类接收NormalUser或AdminUser对象(具体是那个对象,我们并不清楚,所有我们使用能够接受所有用户的类),login()静态方法被调用,用于我们选择身份,返回返回值为一个用户对象即可
    • 如果我们选择的是普通用户,接下来user.menu()这个方法被重写,user具体是哪个类型的对象就调用哪个menu()。根据菜单返回的值,从父类继承先来的doWork()中,IOperations[]数组是子类的对象的操作数组,【】内是选择的数字(代表不同的操作),这样我们就完成了所有的过程。

    在这里插入图片描述

    代码链接

    图书管理系统

  • 相关阅读:
    MySql架构模式
    创业者关注的聚合代驾平台是什么?
    C++20 std::swap_ranges 用法小结
    动态规划——多重背包
    你需要知道的webpack高频面试题
    拒绝拖延症
    Flink系列文档-(YY02)-Flink编程基础-入门示例
    常用的Layout布局元素(重点)
    Mysql其他日志
    flask celery定时任务
  • 原文地址:https://blog.csdn.net/fengxia110/article/details/128086360