用Java实现图书馆管理程序

一,简介

下文所介绍的是一个控制台版本的图书馆管理系统,主要是练习下JavaSE阶段的面向对象等知识。不涉及IO,数据库等存储。

系统功能:
两种权限:管理员、普通用户
管理员可以进行增、删、查、显示等功能
普通用户可以进行查找以及借书、还书等功能

二、总体结构

1,树形结构

在这里插入图片描述

2,UML图

在这里插入图片描述
package user
在这里插入图片描述
package action
在这里插入图片描述

三、代码

package action
(0)IAction

package Java3_13.action;

import Java3_13.book.BookList;

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

(1)addAction

package Java3_13.action;

import Java3_13.book.Book;
import Java3_13.book.BookList;

import java.util.Scanner;

public class AddAction implements IAction {
    @Override
    public void work(BookList bookList) {
    	Scanner scanner = new Scanner(System.in);
        System.out.println("新增书籍");
        System.out.print("请输入书名:");
        String name = scanner.next();
        System.out.print("请输入作者:");
        String author = scanner.next();
        System.out.print("请输入价钱:");
        int price = scanner.nextInt();
        System.out.print("请输入种类:");
        String type = scanner.next();
        // 将借出状态默认为false,即没有借出
        Book book = new Book(name, author, price, type, false);
        // 此处暂时不考虑扩容操作,直接进行尾插操作
        int size = bookList.getSize();
        bookList.setBook(book, size);
        bookList.setSize(size + 1);
        System.out.println("新增图书成功!");
    }
}

(2)DelAction

package Java3_13.action;

import Java3_13.book.Book;
import Java3_13.book.BookList;

import java.util.Scanner;

public class DelAction implements IAction {
    @Override
    public void work(BookList bookList) {
        /*
        删除图书的思路:循环遍历,若找到则记下位置,否则删除失败
        如果找到,这里简单处理,将最后一个书籍挪到要删除的位置,然后size--
         */
        System.out.println("删除图书");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请删除要删除书籍的书名:");
        String name = scanner.next();
        // 1,先找到图书,找到的图书即为下标为i的图书
        int i = 0;
        for (; i < bookList.getSize(); i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                break;
            }
        }
        if (i >= bookList.getSize()) {
            System.out.println("没有找到能够匹配的书籍,删除失败!");
            return;
        }
        // 将最后一本图书,移动到i的位置
        int size = bookList.getSize();
        Book book = bookList.getBook(size - 1);
        bookList.setBook(book, i);
        bookList.setSize(size - 1);
        System.out.println("删除成功!");
    }
}

(3)BorrowAction

package Java3_13.action;

import Java3_13.book.Book;
import Java3_13.book.BookList;

import java.util.Scanner;

public class BorrowAction implements IAction {
    @Override
    public void work(BookList bookList) {
        System.out.println("执行结束操作");
        System.out.println("请输入你要借的书籍的书名:");
        Scanner sanner = new Scanner(System.in);
        String name = sanner.next();
        // 找到要接的书,然后将书的状态改成“借出”状态即可
        for (int i = 0; i < bookList.getSize(); i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                if (book.isBorrowed()) {
                    continue;
                } else {
                    book.setBorrowed(true);
                    System.out.println("借书成功!");
                    return;
                }
            }

        }
        System.out.println("借书失败!没有匹配的书籍!");
    }
}

(4)ReturnAction

package Java3_13.action;

import Java3_13.book.Book;
import Java3_13.book.BookList;

import java.util.Scanner;

public class ReturnAction implements IAction {
    @Override
    public void work(BookList bookList) {
        System.out.println("执行还书操作!");
        System.out.println("请输入你要还的书名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        for (int i = 0; i < bookList.getSize(); i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                if (book.isBorrowed()) {
                    book.setBorrowed(false);
                    System.out.println("还书成功");
                    return;
                }
            }
        }
        System.out.println("还书失败");
    }
}

(5)FindAction

package Java3_13.action;

import Java3_13.book.Book;
import Java3_13.book.BookList;

import java.util.Scanner;

public class FIndAction implements IAction {
    @Override
    public void work(BookList bookList) {
        System.out.println("执行查找图书操作");
        System.out.println("请输入要查找的书籍名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        for (int i = 0; i < bookList.getSize(); i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                System.out.println(book);
                System.out.println("查找完成");
            }
        }
    }
}

(6)DisplayAction

package Java3_13.action;

import Java3_13.book.BookList;

public class DisplayAction implements IAction {
    @Override
    public void work(BookList bookList) {
        for (int i = 0; i < bookList.getSize(); i++) {
            System.out.println(bookList.getBook(i));
        }
    }
}

(7)ExitAction

package Java3_13.action;

import Java3_13.book.BookList;

public class ExitAction implements IAction {
    @Override
    public void work(BookList bookList) {
        System.out.println("goodbye!!!");
        System.exit(0);
    }
}

package book
(1)book

package Java3_13.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, boolean isBorrowed) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
        this.isBorrowed = isBorrowed;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

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

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

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

    public String getName() {
        return name;
    }

    public String getAuthor() {
        return author;
    }

    public int getPrice() {
        return price;
    }

    public String getType() {
        return type;
    }

    public boolean isBorrowed() {
        return isBorrowed;
    }

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

(2)BookList

package Java3_13.book;

// 用来表示多本书
public class BookList {
    // 相当于一个顺序表
    private Book[] books = new Book[100];
    private int size = 0;

    public BookList() {
        // 先添加几个数据进去,方便后续测试
        books[0] = new Book("三国演义", "罗贯中", 100, "古典名著",
                false);
        books[1] = new Book("西游记", "吴承恩", 120, "古典名著",
                false);
        books[2] = new Book("某名著", "兰陵笑笑生", 200, "古典名著",
                false);
        size = 3;
    }

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

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

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }
}

package user
(1)user

package Java3_13.user;


import Java3_13.action.IAction;
import Java3_13.book.BookList;

abstract public class User {
    protected String name = null;
    protected IAction[] actions = null;

    abstract public int menu();

    public void doAction(int choice, BookList bookList) {
        this.actions[choice].work(bookList);
    }
}

(2)Admin

package Java3_13.user;

import Java3_13.action.*;

import java.util.Scanner;

public class Admin extends User{
    public Admin(String name) {
        this.name = name;
        actions = new IAction[]{
                new ExitAction(),
                new AddAction(),
                new DelAction(),
                new FIndAction(),
                new DisplayAction()
        };
    }

    @Override
    public int menu() {
        int choice;
        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("0,退出");
        System.out.println("=======================");
        Scanner scanner = new Scanner(System.in);
        do {
            // 循环输入
            choice = scanner.nextInt();
        }while (choice < 0 || choice> 4);
        return choice;
    }
}

(3)NormalUser

package Java3_13.user;

import Java3_13.action.*;

import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name) {
        this.name = name;
        actions = new IAction[]{
                new ExitAction(),
                new FIndAction(),
                new BorrowAction(),
                new ReturnAction()
        };
    }

    @Override
    public int menu() {
        int choice;
        System.out.println("====================");
        System.out.println("欢迎" + name + "使用图书馆管理系统");
        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);
        do {
            choice = scanner.nextInt();
        } while (choice < 0 || choice > 3);
        return choice;
    }
}

四、总结

本程序主要是对前面所学知识的回顾和复习。面向对象的最重要之处就在于多态,通过程序练习,感受面向对象和结构化编程的差异。

发布了65 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44002167/article/details/104842707