Java____西财大图书管理系统 代码实现

西财大图书管理项目代码

    • book类
      • 1.book
      • 2.bookist
    • operation类
      • 1.AddOperation
      • 2.BorrowOperation
      • 3.DisplayOperation
      • 4.FindOperation
      • 5.RemoveOperation
      • 6.ReturnOperation
      • 7.UpdateOperation
      • 8.IOperation
    • user类
      • 1.AdminUser
      • 2.NormalUser
      • 3.User
      • 4.Test

Java____西财大图书管理系统 代码实现_第1张图片

book类

在这里插入图片描述

1.book

package book_management.book;

/**

  • 每本书对应的实体类
    */
    public class Book {
    // 书名
    private String name;
    // 作者
    private String author;
    // 价格
    private double price;
    // 书的类型
    private String type;
    // 书的借阅状态
    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 void setPrice(double 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 +
    ‘}’;
    }
    }

2.bookist

package book_management.book;

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

/**
 * 书架类,所有书籍在这个类中存储
 */
public class BookList {
    // 使用JDK内置的动态数组
    // 保存每个书籍对象
    private static List<Book> books = new ArrayList<>();
    // 保存所有的书籍名称,作为操作书籍的索引
    private static List<String> booksName = new ArrayList<>();

    // 静态代码块
    static {
        // 初始化操作
        books.add(new Book("水浒传", "施耐庵",
                66.6, "武侠小说"));
        books.add(new Book("三国演义", "罗贯中",
                88.6, "谋略小说"));
        books.add(new Book("西游记", "吴承恩",
                99.6, "玄幻小说"));
        books.add(new Book("红楼梦", "曹雪芹",
                260.6, "经典小说"));

        booksName.add("水浒传");
        booksName.add("三国演义");
        booksName.add("西游记");
        booksName.add("红楼梦");
    }

    /**
     * 根据书籍名称判断当前书架上是否存在该书
     *
     * @param booksName
     * @return
     */
    public boolean isContains(String booksName) {
        // ArrayList.contains();
        if (this.booksName.contains(booksName)) {
            return true;
        } else {
            return false;
        }
    }

    public void addBook(Book book) {
        books.add(book);
    }

    public void printBook() {
        // 遍历Books数组
        Iterator<Book> iterator = books.iterator();
        while (iterator.hasNext()) {
            Book book = iterator.next();
            System.out.println(book);
        }
    }



    public void bookUpdate(String booksName,double price,String type){
        Book book = findBook(booksName);
        book.setPrice(price);
        book.setType(type);
    }

    public boolean isBorrowed(String booksName){
        Book book = findBook(booksName);
        return book.isBorrowed();
    }




    public void borrowBook(String booksName){
        //根据书名称找到具体的Book对象
        Book book = findBook(booksName);
        book.setBorrowed(true);
    }

    public void returnBook(String booksName){
        Book book = findBook(booksName);
        book.setBorrowed(false);
    }

    public void bookUndercarriage(String booksName){
        books.remove(booksName);
        this.booksName.remove(booksName);
    }



    private Book findBook(String booksName) {
        //需要迭代查找该书
        Iterator<Book> iterator = books.iterator();
        while (iterator.hasNext()){
            Book book = iterator.next();
            if (book.getName().equals(booksName)){
                return book;
            }
        }
        return null;
    }
}

operation类

Java____西财大图书管理系统 代码实现_第2张图片

1.AddOperation

package book_management.operation.impl;

import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
// 添加书籍操作
public class AddOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是书籍的添加操作");
        System.out.println("请输入书籍名称:");
        String booksName = scanner.next();
        // 需要判断当前书架上是否已经存在该书
        if (bookList.isContains(booksName)) {
            System.err.println("书架上已经存在该书,无需再次添加~");
            return;
        }else {
            System.out.println("请输入书籍作者:");
            String author = scanner.next();
            System.out.println("请输入书籍的价格:");
            double price = scanner.nextDouble();
            System.out.println("请输入书籍的类别:");
            String type = scanner.next();
            Book book = new Book(booksName,author,price,type);
            bookList.addBook(book);
            System.out.println("书籍添加成功~~");
        }
    }
}

2.BorrowOperation

package book_management.operation.impl;

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

public class BorrowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是借书操作~");
        System.out.println("请输入您想借的书名:");
        String booksName = scanner.next();
        //判断这本书是否存在
        if (bookList.isContains(booksName)){
            //进行具体的借书操作
            bookList.borrowBook(booksName);
            System.out.println("借书成功~");
        }else{
            System.err.println("该书籍还没上架,客官再等等哈~~");
        }
    }
}

3.DisplayOperation

package book_management.operation.impl;

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

/**
 * 展示当前书架的所有书籍
 */
public class DisplayOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是打印书籍列表操作~~");
        bookList.printBook();
    }
}

4.FindOperation

package book_management.operation.impl;

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 .next();
        if (bookList.isContains(booksName)){
            System.out.println("图书馆有该书~");
        }else{
            System.out.println("该书还没上架");
        }

    }
}

5.RemoveOperation

package book_management.operation.impl;

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

public class RemoveOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是书籍下架操作~");
        System.out.println("请输入您要下架的书籍名称");
        String booksName = scanner.next();
        if (bookList.isContains(booksName)){
            //具体的下架操作
            bookList.bookUndercarriage(booksName);
            System.out.println("下架成功~");
        }else {
            System.err.println("该书不在图书馆中,无法下架");
        }

    }
}

6.ReturnOperation

package book_management.operation.impl;

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

public class ReturnOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("您现在进行的是还书操作~");
        System.out.println("请输入您要还的书籍名称:");
        String booksName = scanner.next();
        //先判断该书在图书馆是否存在
        if (bookList.isContains(booksName)){
            //还书操作 判断借出状态
            if (bookList.isBorrowed(booksName)){
                bookList.returnBook(booksName);
                System.out.println("还书成功~");
            }else {
                System.err.println("该书您就没借~");
            }
        }else{
            System.err.println("该书您还没借");
        }

    }
}

7.UpdateOperation

package book_management.operation.impl;

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.next();
        if (bookList.isContains(booksName)){
            //具体操作
            System.out.println("请输入修改后的价格:");
            double price = scanner.nextDouble();
            String type = scanner.next();
            bookList.bookUpdate(booksName,price,type);
            System.out.println("书籍详情修改成功~");
        }else{
            System.err.println("书籍不存在~");
        }

    }
}

8.IOperation

package book_management.operation;


import book_management.book.BookList;

import java.util.Scanner;

/**
 * 操作书籍列表的行为
 */
public interface IOperation {
    // 获取用户输入
    Scanner scanner = new Scanner(System.in);
    // 子类共有的方法,根据传入的BookList来进行增删改查以及借阅操作
    void work(BookList bookList);
}

user类

Java____西财大图书管理系统 代码实现_第3张图片

1.AdminUser

package book_management.user;

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

// 管理员

/**
 * 1.添加书籍
 * 2.删除书籍
 * 3.更新书籍
 * 4.查找书籍
 * 5.显示当前书籍列表
 * -1.退出
 */
public class AdminUser extends User{
    public AdminUser(String userName) {
        this.name = userName;
        operations = new IOperation[] {
                new AddOperation(),
                new RemoveOperation(),
                new UpdateOperation(),
                new FindOperation(),
                new DisplayOperation()
        };
    }

    /**
     *  * 1.添加书籍
     *  * 2.删除书籍
     *  * 3.更新书籍
     *  * 4.查找书籍
     *  * 5.显示当前书籍列表
     *  * -1.退出
     * @return
     */
    @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("请输入您的选择:");
        int choice = scanner.nextInt();
        // 切记不要在这关闭scanner,当用户输入-1退出时再关闭scanner
        return choice;
    }
}

2.NormalUser

package book_management.user;

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

// 是普通用户类
public class NormalUser extends User{
    /**
     * 1.显示当前书籍列表
     * 2.查询书籍
     * 3.借阅书籍
     * 4.归还书籍
     * -1.退出
     * @param userName
     */
    public NormalUser(String userName) {
        this.name = userName;
        // 规定了普通用户的操作权限
        operations = new IOperation[] {
                new DisplayOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()
        };
    }
    // 普通用户类是需要外部来调用的

    /**
     *      * 1.显示当前书籍列表
     *      * 2.查询书籍
     *      * 3.借阅书籍
     *      * 4.归还书籍
     *      * -1.退出
     * @return
     */
    @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("请输入您的选择:");
        int choice = scanner.nextInt();
        // 切记不要在这关闭scanner,当用户输入-1退出时再关闭scanner
        return choice;
    }
}

3.User

package book_management.user;

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

import java.util.Scanner;

/**
 * 用户类
 */
public abstract class User {
    // 用户输入
    protected Scanner scanner = new Scanner(System.in);
    // 用户名
    protected String name;
    // 用户权限,此时这个数组无法初始化,不同的用户权限不同
    protected IOperation[] operations;
    // 菜单方法,具体实现现在不知道,具体实现交给子类实现
    // 返回值就是用户输入的数字,我根据数字来进行相应操作
    public abstract int menu();
    // 根据用户输入,操作书籍列表
    public void doOperation(int choice, BookList bookList) {
        operations[choice - 1].work(bookList);
    }
}

4.Test

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.Scanner;

public class Test {
    public static void main(String[] args) {
        // 用户登录
        // 1.输入用户名
        // 2.根据用户选择,确定用户身份
        User user = login();
        BookList bookList = new BookList();
        while (true) {
            int choice = user.menu();
            if (choice == -1){
                System.out.println("BayBay~~~");
                break;
            }
            user.doOperation(choice,bookList);
        }
    }

    public static User login() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName = scanner.next();
        System.out.println("请输入您的身份,1表示普通用户,0表示管理员");
        int choice = scanner.nextInt();
        if (choice == 1) {
            return new NormalUser(userName);
        }
        return new AdminUser(userName);
    }
}

说明
运行平台:Windows10 家庭版
开发工具:IntelliJ IDEA 2020.1.3 x64
JDK 版本:JDK1.8 一、 项目结果
二、 代码结构
三、 项目的操作与运行
1.普通用户的权限
输入用户名,并输入确定身份
普通用户选择 1 显示当前书籍列表
普通用户选择 2 查阅书籍
普通用户选择 3 借阅书籍
普通用户选择 4 归还书籍
普通用户选择-1 退出系统
2. 管理员的权限
管理员输入 1 添加书籍
管理员输入 2 删除书籍
管理员输入 3 更行书籍
管理员输入 4 查找书籍
管理员输入 5查看书籍列表

你可能感兴趣的:(java初阶,java,开发语言,后端)