• 【JavaSE】阶段性小结,运用Java实现图书管理系统


    逻辑分析

    我们需要完成一个图书管理系统,首先我们要对他的逻辑进行分析,Java是面向对象的语言,那我们的图书管理系统都包含哪些对象呢?既然是图书管理系统,首先我们是不是要有书,既然有书了我们就需要有存放书的书架,我们还需要有用户,这里我们写两类用户,一类是管理员,可以对书架进行管理,一类是普通用户,可以实现借书还书等功能。经过我们的分析,大致的逻辑已经出来了,我们可以通过画图来理清楚我们的思路:
    在这里插入图片描述
    这样我们就可以创建出对应的类与接口:
    在这里插入图片描述
    那么如何将书放入书架呢?我们在书架类中创建一个书类的数组是不是就可以储存书类对象了
    在这里插入图片描述

    主题框架

    首先我们来看看已经完成的图书管理系统是什么样子的:
    在这里插入图片描述
    在这里插入图片描述
    从上面两个图中我们可以对图书管理系统的框架进行一个分析:

    主要有两点:
    1、通过我们对身份的选择,打印管理员和普通用户两个不同的菜单
    2、再次通过我们的选择,实现对我们所选择的用户的功能的实现

    我们先来完成第一个框架,通过我们身份的选择打印不同的用户菜单:
    因为不同用户打印的菜单是不一样的,那么我们就可以在父类中写一个抽象方法menu,那么此时父类User也应该是抽象的了,子类方法通过重写父类中的menu实现需要打印的菜单,我们通过创建不同的用户对象去调用对应的menu就可以实现打印不同的菜单了。
    在这里插入图片描述

    在这里插入图片描述
    这样我们就使用多态的思想实现了我们的问题1,通过我们对身份的选择,打印管理员和普通用户两个不同的菜单,我们是通过选择判断,创建了不同的子类对象实现向上转型,之后通过这个对象调用打印菜单的方法,因为menu是抽象方法,而抽象方法不会在父类中实现,会调用对应子类中我们重写的menu方法,这样我们就完成了需求,打印对应用户菜单
    在这里插入图片描述

    上面就是管理员用户的menu的菜单,我们只需要打印菜单就好了,那为什么会有返回值呢?因为我们还需要完成问题2:通过我们的选择,实现对我们所选择的用户的功能的实现。此时menu返回的是我们第二次的选择——对操作的选择。这里我们依旧是使用多态的思想,我们可以在父类用户类中创建一个IOperation接口的数组,此时我们不在父类中初始化,在对应的子类中初始化,这样不同的子类中的数组元素可以是不同的,我们把我们的选择choice当作IOperation数组的下标,这样就访问到了不同子类中的对应功能
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在两个子类中数组iOperations的元素是不同的,这样我们就可以调用对应用户的对应功能了。以上这就是我们的主体框架需要完成的两个最重要的点,剩下就只需要我们对对应功能的实现了。

    具体方法

    添加书籍

    在这里插入图片描述
    输入书籍信息,如果书架中没有此本书,就调用Book的构造方法,将刚才录入的书籍信息当作参数,构造一本书,再将书放入书架中,并给书架中书的数量加一。

    删除书籍

    在这里插入图片描述

    删除书籍值得我们讲一下,首先我们输入需要输入删除书籍的名字,遍历书架中的书,如果书架中当前位置的书,名字与我们需要删除的书籍名称相同,那就进行覆盖,将书架中后一本书覆盖到当前位置,依次类推,最后将书架中书的总数减一,并且将最后一本书的位置,置为null删除就成功了。

    查找书籍

    在这里插入图片描述
    输入要查找的书籍名称,遍历书架,找到与我们查找的书籍名字相同的书籍,打印该书籍的信息。

    借阅书籍

    在这里插入图片描述
    同样输入书籍名称,遍历书架找到该书籍的信息,判断是否借出,如果没有就借阅成功。

    归还书籍

    在这里插入图片描述

    展示书籍

    在这里插入图片描述
    遍历书架,打印每一本书籍的信息即可。

    退出系统

    在这里插入图片描述

    源码

    大家可以去我的码云里面看,也可以在下面观看: 图书管理系统源码

    User

    package User;
    
    import Book.BookList;
    import Operation.IOperation;
    
    public abstract class User {
        protected String name;
        protected IOperation[] iOperations;
    
        public User() {
        }
    
        public User(String name) {
            this.name = name;
        }
    
        public abstract int menu();
    
        public void doWork(int choice, BookList bookList) {
            this.iOperations[choice].work(bookList);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    NormalUser

    package User;
    
    import Book.BookList;
    import Operation.*;
    
    import java.util.Scanner;
    
    public class NormalUser extends User{
        public NormalUser() {
        }
    
        public NormalUser(String name) {
            super(name);
            this.iOperations = new IOperation[]{
                    new ExitOperation(),
                    new BorrowbookOperation(),
                    new ReturnbookOperation(),
                    new FindbookOperation()
            };
        }
    
        @Override
        public int menu() {
            System.out.println(" 欢迎 " + name + " 管理员进入系统 ");
            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;
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    AdmintUser

    package User;
    
    import Book.BookList;
    import Operation.*;
    
    import java.util.Scanner;
    
    public class AdmintUser extends User {
    
        public AdmintUser() {
        }
    
        public AdmintUser(String name) {
            super(name);
            this.iOperations = new IOperation[]{
                    new ExitOperation(),
                    new AddbookOperation(),
                    new DeletbookOperation(),
                    new FindbookOperation(),
                    new ShowbookOperation()
            };
        }
    
    
    
        @Override
        public int menu() {
            System.out.println(" 欢迎 " + 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("****************************************");
            System.out.println("请输入你需要的操作:");
            Scanner scanner = new Scanner(System.in);
            int choice = scanner.nextInt();
            return choice;
        }
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    Book

    package Book;
    
    public class Book {
        private String name;//书名
        private String type;//类型
        private String author;//作者
        private int price;//价格
        private boolean isBorrow;//是否借出
    
        public Book() {
        }
    
        public Book(String name, String author, int price, String type) {
            this.name = name;
            this.type = type;
            this.author = author;
            this.price = price;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        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 boolean isBorrow() {
            return isBorrow;
        }
    
        public void setBorrow(boolean borrow) {
            isBorrow = borrow;
        }
    
        @Override
        public String toString() {
            return "Book{" +
                    "name='" + name + '\'' +
                    ", type='" + type + '\'' +
                    ", author='" + author + '\'' +
                    ", price=" + price +
                    ", isBorrow=" + isBorrow +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    BookList

    package Book;
    
    public class BookList {
        Book[] books = new Book[20];
    
        private int usedSize;
    
        public BookList() {
            books[0] = new Book("三国演义","罗贯中",89,"小说");
            books[1] = new Book("西游记","吴承恩",78,"小说");
            books[2] = new Book("红楼梦","曹雪芹",49,"小说");
            this.usedSize = 3;
        }
    
        public Book getBooks(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;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    IOperation

    package Operation;
    
    import Book.BookList;
    
    public interface IOperation {
        void work(BookList bookList);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    AddboookOperation

    package Operation;
    
    import Book.Book;
    import Book.BookList;
    
    import java.util.Scanner;
    
    public class AddbookOperation 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 type = scanner.nextLine();
            System.out.println("请输入你要添加的书籍作者:");
            String author = scanner.nextLine();
            System.out.println("请输入你要添加的书籍的价格:");
            int price = scanner.nextInt();
    
            int size = bookList.getUsedSize();
            for(int i = 0;i < size;i++) {
                Book book = bookList.getBooks(i);
                if(book.getName().equals(name)) {
                    System.out.println("不好意思,您想添加的图书已经存在!");
                    return;
                }
            }
            Book book = new Book(name,author,price,type);
            bookList.setBooks(size,book);
            bookList.setUsedSize(size + 1);
            System.out.println("添加图书成功!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    DeletbookOperation

    package Operation;
    
    import Book.Book;
    import Book.BookList;
    
    import java.util.Scanner;
    
    public class DeletbookOperation 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 size = bookList.getUsedSize();
            int index = -1;
            for(int i = 0;i < size;i++) {
                Book book = bookList.getBooks(i);
                if(book.getName().equals(name)) {
                    index = i;
                    System.out.println("找到该图书了!");
                    break;
                }
            }
            if(index == -1) {
                System.out.println("没有找到该图书!");
            }else {
                for(int j = index;j < size - 1;j++) {
                    Book book = bookList.getBooks(j+1);
                    bookList.setBooks(j,book);
                }
                bookList.setUsedSize(size - 1);
                bookList.setBooks(size - 1,null);
                System.out.println("删除成功!");
    
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    FindbookOperation

    package Operation;
    
    import Book.Book;
    import Book.BookList;
    
    import java.util.Scanner;
    
    public class FindbookOperation 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 size = bookList.getUsedSize();
            for(int i = 0;i < size;i++) {
                Book book = bookList.getBooks(i);
                if(book.getName().equals(name)) {
                    System.out.println("找到了这本书!");
                    System.out.println(book);
                    return;
                }
            }
            System.out.println("不好意思没有找到");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    ShowbookOperation

    package Operation;
    
    import Book.Book;
    import Book.BookList;
    
    public class ShowbookOperation implements IOperation{
        @Override
        public void work(BookList bookList) {
            System.out.println("展示书籍");
            int size = bookList.getUsedSize();
            for(int i = 0;i < size;i++) {
                Book book = bookList.getBooks(i);
                System.out.println(book);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    BorrowbookOperation

    package Operation;
    
    import Book.Book;
    import Book.BookList;
    
    import java.util.Scanner;
    
    public class BorrowbookOperation 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 size = bookList.getUsedSize();
            for(int i = 0;i < size;i++) {
                Book book = bookList.getBooks(i);
                if(book.getName().equals(name) &&
                !book.isBorrow()) {
                    book.setBorrow(true);
                    System.out.println("借阅成功!!");
                    return;
                }
            }
            System.out.println("对不起没有找到该书籍!");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    ReturnbookOperation

    import Book.Book;
    import Book.BookList;
    
    import java.util.Scanner;
    
    public class ReturnbookOperation 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 size = bookList.getUsedSize();
            for(int i = 0;i < size;i++) {
                Book book = bookList.getBooks(i);
                if(book.getName().equals(name) &&
                        book.isBorrow()) {
                    book.setBorrow(false);
                    System.out.println("归还成功!!");
                    return;
                }
            }
            System.out.println("对不起没有找到该书籍!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    ExitOperation

    package Operation;
    
    import Book.BookList;
    
    public class ExitOperation implements IOperation{
        @Override
        public void work(BookList bookList) {
            System.out.println("退出程序");
            System.exit(0);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    [Ubuntu, Ajax Nx]C++调用python报from import错误
    【Python百宝箱】视觉算法秀:Python图像处理舞台上的巅峰对决
    安全先行,合规的内外网文件摆渡要重点关注什么?
    【Linux】Linux进程间通信(二)
    《Terraform 101 从入门到实践》 Terraform在公有云GCP上的应用
    k8s docker 中部署think php 并搭建php websocket
    这个编辑器即将开源!
    c++中的指针
    .NET开发工作效率提升利器 - CodeGeeX AI编程助手
    在uniapp中,如何去掉一些不想要的权限,
  • 原文地址:https://blog.csdn.net/weixin_64182409/article/details/127941839