栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现图书管理系统

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现图书管理系统

目录

图书管理系统

思维导图

图书部分

每本具体书籍——Book

书架类——BookList

用户部分

User——用户类

NormalUser(普通用户)

AdminUser(管理员)

权限

操作书籍的接口——IOperation

显示当前书籍列表——ListAllBooksOperation

添加书籍——AddOperation

下架书籍——RemoveOperation

更新书籍——UpdateOperation

查找书籍——FindOperation

借阅书籍——BorrowOperation

归还书籍——ReturnOperation

主方法——程序的入口


图书管理系统

思维导图

图书部分

每本具体书籍——Book
package book_management.book;


public class Book {
    // 书名
    private String name;
    // 作者名
    private String author;
    // 书籍价格
    private Double price;
    // 书籍的类别
    private String type;
    // 书籍是否被借出,默认为false
    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 String getAuthor() {
        return author;
    }

    public Double getPrice() {
        return price;
    }

    public String getType() {
        return type;
    }

    public boolean isBorrowed() {
        return isBorrowed;
    }

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

    public void setType(String type) {
        this.type = type;
    }

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

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + ''' +
                ", author='" + author + ''' +
                ", price=" + price +
                ", type='" + type + ''' +
                ", isBorrowed=" + isBorrowed +
                '}';
    }
}

书架类——BookList
package book_management.book;

import java.util.ArrayList;
import java.util.List;


public class BookList {
    // 书架就是保存书籍的,书本的个数不确定,要么用动态数组,要么使用链表
    private List books = new ArrayList<>();
    // 保存当前书架上所有书籍的名称,以后的操作就是根据书籍的名称来查找具体的Book对象
    // 一一对应的映射关系
    private List booksName = new ArrayList<>();

    private int usedSize;

    public BookList() {
        // 产生一个书架对象时,默认上架的四本书籍
        books.add(new Book("三国演义", "罗贯中", 76.6, "小说"));
        books.add(new Book("水浒传", "施耐庵", 55.6, "小说"));
        books.add(new Book("西游记", "吴承恩", 44.6, "小说"));
        books.add(new Book("红楼梦", "曹雪芹&未知", 88.6, "小说"));
        //将当前这四本书的书名也添加到booksName的列表中
        booksName.add("三国演义");
        booksName.add("水浒传");
        booksName.add("西游记");
        booksName.add("红楼梦");
        this.usedSize = 4;
    }

    public int getUsedSize() {
        return usedSize;
    }

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

    public Book getBook(int i) {
        return this.books.get(i);
    }

    public void setBook(int i, Book book) {
        this.books.set(i, book);
    }

    public boolean contains(String booksName) {
        // 遍历booksName这个列表
        for (String str : this.booksName) {
            if (str.equals(booksName)) {
                return true;
            }
        }
        return false;
    }

    
    public void addNewBook(String booksName, String author, double price, String type) {
        Book book = new Book(booksName, author, price, type);
        this.books.add(book);
        this.booksName.add(booksName);
        this.usedSize++;
    }

    
    public void removeBook(String booksName, BookList bookList) {
        int n = bookList.getUsedSize();
        int i = 0;
        int index = 0;
        for (; i < n; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(booksName)) {
                index = i;
                break;
            }
        }

        if (i == n) {
            System.out.println("对不起,没有找到您需要删除的书!");
            return;
        }
        //使用for循环让后一个位置的书前移一位
        for (int j = index; j < n - 1; j++) {
            Book book = bookList.getBook(j + 1);//得到j+1位置的书
            bookList.setBook(j, book);//将其设置为j位置
        }
        bookList.setUsedSize(n - 1);
        System.out.println("下架成功!");
    }

    
    public void updateBook(String booksName, String type, Boolean isBorrowed, double price, BookList bookList) {
        for (int i = 0; i < usedSize; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(booksName)) {
                book.setPrice(price);
                book.setType(type);
                book.setBorrowed(isBorrowed);
            }
        }
    }

    
    public void findBook(String booksName, BookList bookList) {
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(booksName)) {
                System.out.println("找到这本书的信息如下:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有这本书!");
    }

    
    public void returnBook(String booksName, BookList bookList) {
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book bookCur = bookList.getBook(i);
            if (bookCur.getName().equals(booksName)) {
                bookCur.setBorrowed(false);
                System.out.println("归还成功!");
                return;
            }
        }
        System.out.println("没有此书!归还失败");
    }

    
    public void isBorrowed(String booksName, BookList bookList) {
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(booksName)) {
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                return;
            }
        }
        System.out.println("没有此书!借阅失败");
    }
}

用户部分

User——用户类
package book_management.user;
import book_management.book.BookList;
import book_management.operation.IOperation;

public abstract class User {
    //用户名
    protected String name;
    // 对于书籍的操作权限,此时不确定用户类型,所以是个空数组,由子类来确定到底具备哪些权限
    protected IOperation[] operations;

    public User(String name) {
        this.name = name;
    }

    // 菜单,不同种类的用户菜单是不同的,根据菜单的返回值取得用户选择的操作
    protected abstract int menu();

    // 根据用户输入的指令来执行不同的操作
    public void doOperation(BookList bookList, int choice) {
        operations[choice - 1].work(bookList);
    }
}

不同用户操作管理系统的权限是不同的,抽象父类没法确定由定义子类时确定。

不同用户的菜单不同,由子类来确定,使用抽象方法。

NormalUser(普通用户)
package book_management.user;

import book_management.operation.IOperation;
import book_management.operation.impl.BorrowOperation;
import book_management.operation.impl.FindOperation;
import book_management.operation.impl.ListAllBooksOperation;
import book_management.operation.impl.ReturnOperation;

import java.util.Scanner;

public class NormalUser extends User{
    public NormalUser(String name) {
        super(name);
        this.operations = new IOperation[] {
                new ListAllBooksOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("==================================");
        System.out.println("欢迎" + this.name + "登录图书管理系统");
        System.out.println("1.显示当前的书籍列表");
        System.out.println("2.查找书籍");
        System.out.println("3.借阅书籍");
        System.out.println("4.归还书籍");
        System.out.println("-1.退出系统");
        System.out.println("==================================");
        System.out.println("请输入您的选择:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

AdminUser(管理员)
package book_management.user;

import book_management.operation.IOperation;
import book_management.operation.impl.*;

import java.util.Scanner;

public class AdminUser extends User {
    public AdminUser(String name) {
        super(name);
        this.operations = new IOperation[]{
                new ListAllBooksOperation(),
                new AddOperation(),
                new RemoveOperation(),
                new UpdateOperation(),
                new FindOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("==================================");
        System.out.println("欢迎" + this.name + "登录图书管理系统");
        System.out.println("1.显示当前的书籍列表");
        System.out.println("2.增加书籍");
        System.out.println("3.下架书籍");
        System.out.println("4.更新书籍");
        System.out.println("5.查找书籍");
        System.out.println("-1.退出系统");
        System.out.println("==================================");
        System.out.println("请输入您的选择:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

权限

操作书籍的接口——IOperation
package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;


public interface IOperation {
    Scanner scanner = new Scanner(System.in);
    //在指定的书架上进行操作处理
    void work(BookList bookList);
}

显示当前书籍列表——ListAllBooksOperation
package book_management.operation.impl;

import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;


public class ListAllBooksOperation implements IOperation {

    @Override
    public void work(BookList bookList) {
        System.out.println("此时您进行的是展示书籍列表的操作");
        //具体书籍在书架类中保存,我们调用的就是书架类提供的方法
        //套接口的最大目的就是做权限划分
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            System.out.println(bookList.getBook(i));
        }
    }
}

添加书籍——AddOperation
package book_management.operation.impl;

import book_management.book.BookList;
import book_management.operation.IOperation;

import java.util.Scanner;


public class AddOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是添加书籍操作");
        System.out.println("请输入您要添加的书籍名称:");
        String booksName = scanner.nextLine();
        //假设书籍已经有这本书了
        if (bookList.contains(booksName)) {
            System.err.println("书籍在当前书架上已经存在了,无需添加");
        }
        System.out.println("请输入您要添加的书籍作者:");
        String author = scanner.nextLine();
        System.out.println("请输入您要添加的书籍类别:");
        String type = scanner.nextLine();
        System.out.println("请输入您要添加的书籍价格:");
        double price = scanner.nextDouble();
        // 吃掉n
        String str = scanner.nextLine();
        //产生书籍对象保存到书架上
        bookList.addNewBook(booksName,author,price,type);
        System.out.println("添加书籍成功!");
    }
}

下架书籍——RemoveOperation
package book_management.operation.impl;

import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;

import java.util.Scanner;


public class RemoveOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("您现在进行的是下架书籍操作");
        System.out.println("请输入要下架的图书名称:");
        String booksName = scanner.next();
        bookList.removeBook(booksName,bookList);
    }
}

更新书籍——UpdateOperation
package book_management.operation.impl;

import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;


public class UpdateOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是更新书籍操作");
        System.out.println("请输入您要更新的书籍名称:");
        String booksName = scanner.nextLine();
        //书籍有这本书
        if (!bookList.contains(booksName)) {
            System.err.println("书籍不存在,无法更新");
        }
        System.out.println("请输入您要更新的书籍类别:");
        String type = scanner.nextLine();
        System.out.println("请输入您要更新的书籍借阅情况:");
        Boolean isBorrowed = scanner.nextBoolean();
        System.out.println("请输入您要更新的书籍价格:");
        double price = scanner.nextDouble();
        // 吃掉n
        String str = scanner.nextLine();
        //产生书籍对象保存到书架上
        bookList.updateBook( booksName, type, isBorrowed, price, bookList);
        System.out.println("更新书籍成功!");
    }
}

查找书籍——FindOperation
package book_management.operation.impl;

import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;


public class FindOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是查找书籍操作");
        System.out.println("请输入您要查找的书籍名称:");
        String booksName = scanner.nextLine();
        bookList.findBook(booksName,bookList);
    }
}

借阅书籍——BorrowOperation
package book_management.operation.impl;

import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;

import java.util.Scanner;


public class BorrowOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是借阅书籍操作");
        System.out.println("请输入您要借阅的书籍名称:");
        Scanner scanner = new Scanner(System.in);
        String booksName = scanner.nextLine();
        bookList.isBorrowed(booksName,bookList);
    }
}

归还书籍——ReturnOperation
package book_management.operation.impl;

import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;

import java.util.Scanner;


public class ReturnOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是归还书籍操作");
        System.out.println("请输入您要归还的书籍名称:");
        Scanner scanner = new Scanner(System.in);
        String booksName = scanner.nextLine();
        bookList.returnBook(booksName,bookList);
    }
}

 

主方法——程序的入口
package book_management;

import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;

import java.util.NoSuchElementException;
import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        // 1.此时图书馆只有一个书架
        BookList bookList = new BookList();
        // 2.登录操作
        User user = login();
        // 3.开始进行选择
        while (true) {
            int choice = user.menu();
            if (choice == -1) {
                System.out.println("系统退出");
                break;
            } else {
                user.doOperation(bookList,choice);
            }
        }
    }

    private static User login() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的姓名:");
        String name = scanner.nextLine();
        System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
        int choice = scanner.nextInt();
        if (choice == 1) {
            return new NormalUser(name);
        } else if (choice == 0) {
            return new AdminUser(name);
        } else {
            throw new NoSuchElementException("键入有误,没有选项");
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926408.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号