文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

图书管理借阅系统【Java简易版】Java三大特征封装,继承,多态的综合运用

2023-09-05 21:28

关注

前言
前几篇文章讲到了Java的基本语法规则,今天我们就用前面学到的数组,类和对象,封装,继承,多态,抽象类,接口等做一个图书管理借阅系统。

文章目录

Java语言是面向对象的,所以首先要分析完成这个图书管理系统,有哪些对象:
👱使用者User
📘书Book
📲操作Operation
使用者分为两种,普通用户(NormalUser)和图书管理员(AdminUser)对于普通用户来说,需要查找,借阅,归还图书操作。
在这里插入图片描述

对于图书管理员来说,需要查找,新增,删除,显示图书操作。
在这里插入图片描述

在这里插入图片描述

🥉Book类

书有以下属性:
书名 String name
作者 String author
价格 int price
类型 String type
是否被借出 boolean isBorrow

private String name;    private String author;    private int price;    private String type;    private boolean isBorrowed;

注意:这里的控制符全部设置为了私有的,需要提供方法来获取
提供get( )和set( )进行设置和获取

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

提供一个构造方法

注意构造方法中不提供isBorrow,isBorrow是boolean类型,默认值为false,表示未被借出

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

提供ToString方法显示书的信息

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

完整的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 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;    }    @Override    public String toString() {        return "Book{" +                "name='" + name + '\'' +                ", author='" + author + '\'' +                ", price=" + price +                ", type='" + type + '\'' +                ", isBorrowed=" + isBorrowed +((isBorrowed==true)?"已被借阅":"未被借阅")+                '}';    }}

🥉BookList类

用于存放book,相当于书架
设置一个book类型的数组存放书

 private Book[] books;

再设置一个成员变量记录书的数量

   private int usedSize;

提供一个构造方法,进行一次初始化

 public BookList() {        this.books =new Book[DEFAULT_CAPACITY];        //初始化三本书        this.books[0]=new Book("三国演义","罗贯中",10,"小说");        this.books[1]=new Book("西游记","吴承恩",10,"小说");        this.books[2]=new Book("红楼梦","曹雪芹",10,"小说");        this.usedSize=3;    }

再提供一个book类型的成员方法获取下标为pos的book

 public Book getBook(int pos) {        return books[pos];    }

再提供一个方法,给一个数组下标和book,存放到bookList中

 public void setBooks(int pos,Book book) {        books[pos]=book;    }

提供一个方法,获取书的数量

  public int getUsedSize() {        return usedSize;    }

提供一个方法,修改书的数量

public void setUsedSize(int usedSize) {        this.usedSize = usedSize;    }

提供一个方法,获取book数组

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

完整的BookList类

package book;public class BookList {    private Book[] books;    private int usedSize;    private static final int DEFAULT_CAPACITY = 10;    public BookList() {        this.books =new Book[DEFAULT_CAPACITY];        //初始化三本书        this.books[0]=new Book("三国演义","罗贯中",10,"小说");        this.books[1]=new Book("西游记","吴承恩",10,"小说");        this.books[2]=new Book("红楼梦","曹雪芹",10,"小说");        this.usedSize=3;    }    public Book getBook(int pos) {        return books[pos];    }    public void setBooks(int pos,Book book) {        books[pos]=book;    }    public int getUsedSize() {        return usedSize;    }    public void setUsedSize(int usedSize) {        this.usedSize = usedSize;    }    public Book[] getBooks() {        return books;    }}

管理员或是普通用户,对书的操作都是在BookList类的数组books中进行操作,提供一个IOperation的接口,实现对数组的操作

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

创建各种类,来实现对书的所有操作,引用IOperation接口,对方法进行重写

举个例子:

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

普通用户和图书管理员都是用户,需要进行操作,所以我们直接创建一个User类

package user;import book.BookList;import operation.IOperation;public abstract class User {    protected String name;    protected IOperation[] iOperation;    public User(String name) {        this.name = name;    }    public abstract int menu();    public void doOperation(int choice, BookList bookList) {        iOperation[choice].work(bookList);    }}

🥉普通用户类

package user;import operation.*;import java.util.Scanner;public class NormalUser extends User{    public NormalUser(String name) {        super(name);        this.iOperation=new IOperation[]{                new ExitOperation(),                new FindOperation(),                new BorrowOperation(),                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("**********************");        Scanner scanner=new Scanner(System.in);        System.out.println("请输入你的操作:");        int choice=scanner.nextInt();        return choice;    }}

🥉图书管理员

package user;import operation.*;import java.util.Scanner;public class AdminUser extends User{    public AdminUser(String name) {        super(name);        this.iOperation=new IOperation[]{                new ExitOperation(),                new FindOperation(),                new AddOperation(),                new DelOperation(),                new ShowOperation(),        };    }    @Override    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;    }}

🥉测试类

将所有类连接起来,使类之间相互交互

package user;import book.BookList;import java.util.Scanner;import operation.*;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 AdminUser(name);        } else  {            return new NormalUser(name);        }    }    public static void main(String[] args) {        BookList bookList=new BookList();        User user=login();        while(true){            int choice= user.menu();            System.out.println("choice: "+choice);            user.doOperation(choice,bookList);        }    }}

运行结果
在这里插入图片描述
在这里插入图片描述

🥉新增图书

package operation;import book.Book;import book.BookList;import java.util.Scanner;public class AddOperation implements IOperation{    @Override    public void work(BookList bookList) {        System.out.println("新增图书!");        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 book=new Book(name,author,price,type);        int curr=bookList.getUsedSize();        for (int i = 0; i < curr; i++) {            Book book1=bookList.getBook(i);            if(book1.getName().equals(name)){                System.out.println("该书已存在,无法存放!");            } else if (curr==bookList.getBooks().length) {                System.out.println("已经存放满,无法再存放!");            }else {                bookList.setBooks(curr,book);                bookList.setUsedSize(curr+1);            }        }    }}

🥉删除图书

package operation;import book.Book;import book.BookList;import java.util.Scanner;public class DelOperation 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 curr= bookList.getUsedSize();        int pos=-1;        for (int i = 0; i < curr; i++) {            Book book1=bookList.getBook(i);            if(book1.getName().equals(name)) {                pos = i;                break;            }        }        if (pos==-1){            System.out.println("没有找到书名!");        }else {            int j=pos;            for ( ; j < curr-1; j++) {                Book book=bookList.getBook(j+1);                bookList.setBooks(j,book);            }            bookList.setBooks(j,null);            bookList.setUsedSize(curr-1);            System.out.println("删除成功!");        }    }}

🥉查找图书

package operation;import book.Book;import book.BookList;import java.util.Scanner;public class FindOperation 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 curr= bookList.getUsedSize();        for (int i = 0; i < curr; i++) {            Book book=bookList.getBook(i);            if(book.getName().equals(name)){                System.out.println("找到你想查找的书名:");                System.out.println(book);                return;            }        }        System.out.println("你要查找的书籍不存在");    }}

🥉借阅图书

package operation;import book.Book;import book.BookList;import java.util.Scanner;public class BorrowOperation 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 curr=bookList.getUsedSize();        for (int i = 0; i < curr; i++) {            Book book = bookList.getBook(i);            if(book.getName().equals(name)){                book.setBorrowed(true);                System.out.println("借阅成功!");                System.out.println(book);                return;            }        }        System.out.println("借阅的书籍不存在!");    }}

🥉归还图书

package operation;import book.Book;import book.BookList;import java.util.Scanner;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 curr= bookList.getUsedSize();        for (int i = 0; i < curr; i++) {            Book book=bookList.getBook(i);            if(book.getName().equals(name)){                book.setBorrowed(false);                System.out.println("归还成功!");                System.out.println(book);                return;            }        }        System.out.println("未查找到你要归还的书名!");    }}

🥉打印图书

package operation;import book.BookList;public class ShowOperation implements IOperation{    @Override    public void work(BookList bookList) {        System.out.println("打印图书!");        int curr= bookList.getUsedSize();        for (int i = 0; i < curr; i++) {            System.out.println(bookList.getBook(i));        }    }}

🥉退出系统

package operation;import book.BookList;public class ExitOperation implements IOperation{    @Override    public void work(BookList bookList) {        System.out.println("退出图书!");        System.out.println("退出系统!");        System.exit(0);    }}

写文至此,如有不同见解或者疑惑,欢迎在评论区留言!

来源地址:https://blog.csdn.net/weixin_65476629/article/details/132167670

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯