简单的图书管理系统(Java)

目录

0. 图书管理系统的设计

0.0 图书管理系统的文件结构

0.1 设计一本书

0.2 设计一个书籍列表

0.3 设计一个用户组

0.4 设计一个操作组

0.5 设计main()

1. 设计一本书

2. 设计一个书籍列表

3. 设计一个用户组

3.1 设计一个用户组(抽象类)

3.2 管理员

3.3 普通用户

4. 设计一个操作组

4.1 设计一个操作组(接口)

4.2 退出系统

4.3 查看书籍列表

4.4 按名字查找书籍

4.5 增加书籍

4.6 删除书籍

4.7 借阅书籍

4.8 归还书籍

5. 设计main()


0. 图书管理系统的设计

0.0 图书管理系统的文件结构

0.1 设计一本书

书有书名、作者、价格、类型、是否借出等属性

0.2 设计一个书籍列表

书籍列表用于存放书

0.3 设计一个用户组

用户组里面包含两类用户:管理员和普通用户

0.4 设计一个操作组

操作组里包含以下操作:

  • 退出系统
  • 查看书籍列表
  • 按名字查找书籍
  • 增加书籍
  • 删除书籍
  • 借阅书籍
  • 归还书籍

0.5 设计main()

图书管理系统正式开始运行的地方

1. 设计一本书

package object.library;

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;
        this.isBorrowed = false;
    }

    //提供 getter/setter 方法


    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 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 "[" + name + ", " + author + ", " 
                + price + ", " + type + ", " + 
                (isBorrowed? "已借出" : "未借出") + "]";
        }
}

2. 设计一个书籍列表

package object.library;

public class BookList {
    private Book[] books= new Book[1024];

    //当前数组中有效元素的个数
    private int size=0;

    public BookList() {
        //默认填写几本书进去,方便后续的测试
        //就可以直接按照任意顺序实现Operation,而无需先实现AddOperation
        books[0]=new Book("西游记","吴承恩",100,"古典小说");
        books[1]=new Book("红楼梦","曹雪芹",80,"古典小说");
        books[2]=new Book("高等数学","高斯",90,"数学");
        books[3]=new Book("Java 入门到精通","詹姆斯高斯林",120,"计算机");
        books[4]=new Book("西游记","吴承恩",100,"古典小说");
        size=5;
    }

    public int getSize() {
        return size;
    }

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

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

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

3. 设计一个用户组

3.1 设计一个用户组(抽象类)

package object.library.user;

import object.library.BookList;
import object.library.operation.IOperation;

public abstract class User {
    protected String name;
    protected IOperation[] operations;
    public User(String name){
        this.name = name;
    }

    //显示用户菜单,返回值表示用户输入的序号
    public abstract int menu();

    public void work(int choice, BookList bookList){
        if(choice < 0 || choice >= operations.length){
            System.out.println("输入的选项非法!");
            return;
        }
        operations[choice].work(bookList);
    }
}

3.2 管理员

package object.library.user;

import object.library.operation.*;

import java.util.Scanner;

public class Admin extends User {
    public Admin(String name){
        super(name);

        operations = new IOperation[]{
                new ExitOperation(),
                new ListOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),

        };
    }

    @Override
    public int menu(){
        System.out.println("----------------------------------");
        System.out.println("Welcome Admin " + name + "!");
        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.print("请输入您的选择:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;

    }
}

3.3 普通用户

package object.library.user;

import object.library.operation.*;

import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name) {
        super(name);

        operations = new IOperation[]{
                new ExitOperation(),
                new ListOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
        };
    }

    @Override
    public int menu(){
        System.out.println("----------------------------------");
        System.out.println("Welcome Admin " + name + "!");
        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.print("请输入您的选择:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;

    }
}

4. 设计一个操作组

4.1 设计一个操作组(接口)

package object.library.operation;

import object.library.BookList;

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

4.2 退出系统

package object.library.operation;

import object.library.BookList;

public class ExitOperation implements IOperation {

    @Override
    public void work(BookList bookList) {
        System.out.println("Exiting the program...");
        System.exit(0);
    }
}

4.3 查看书籍列表

package object.library.operation;


import object.library.Book;
import object.library.BookList;

public class ListOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("查看书籍列表");
        for(int i=0;i<bookList.getSize();i++){
            Book book = bookList.getBook(i);
            System.out.println("book["+i+"]:"+book);
        }

    }
}

4.4 按名字查找书籍

package object.library.operation;

import object.library.Book;
import object.library.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.next();
        int flag = 0;
        for(int i = 0; i < bookList.getSize(); i++){
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)){
                System.out.println("book["+i+"]:"+book);
                flag = 1;
            }
        }
        if(flag == 0){
            System.out.println("没有这本书,重新输入");
            return;
        }
        System.out.println("查找结束");
    }
}

4.5 增加书籍

package object.library.operation;


import object.library.Book;
import object.library.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.next();
        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(Name, Author, Price, type);
        int size = bookList.getSize();
        bookList.setBook(size, book);
        bookList.setSize(size+1);
        System.out.println("图书添加成功!");

    }
}

4.6 删除书籍

package object.library.operation;

import object.library.Book;
import object.library.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.print("请输入要删除的书籍序号:");
        int index = scanner.nextInt();
        if(index < 1 || index >= bookList.getSize()){
            System.out.println("输入的序号超出范围!");
            return;
        }
        if(index == bookList.getSize() - 1){
            bookList.setSize(bookList.getSize() - 1);
        }else{
            Book lastBook = bookList.getBook(bookList.getSize() - 1);
            bookList.setBook(index, lastBook);
            bookList.setSize(bookList.getSize() - 1);
        }
        System.out.println("删除成功!");
    }
}

4.7 借阅书籍

package object.library.operation;

import object.library.Book;
import object.library.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.print("请输入要借阅的图书编号:");
        int id = scanner.nextInt();
        if(id < 0 || id >= bookList.getSize()){
            System.out.println("图书编号不存在");
            return;
        }
        Book book = bookList.getBook(id);
        if(book.isBorrowed()){
            System.out.println("图书已被借出");
            return;
        }
        book.setBorrowed(true);
        System.out.println("图书借阅成功");
    }
}

4.8 归还书籍

package object.library.operation;

import object.library.Book;
import object.library.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.print("请输入要还的书的编号:");
        int id = scanner.nextInt();
        if(id < 0 || id >= bookList.getSize()){
            System.out.println("编号不存在");
            return;
        }
        Book book = bookList.getBook(id);
        if(!book.isBorrowed()){
            System.out.println("该书未被借出, 无法还书");
            return;
        }
        book.setBorrowed(false);
        System.out.println("还书成功");
    }
}

5. 设计main()

package object.library;

import object.library.user.Admin;
import object.library.user.NormalUser;
import object.library.user.User;

import java.util.Scanner;

public class Main {

    private static User login() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入你的姓名:");
        String name = scanner.next();
        System.out.print("请输入你的角色:(1.普通用户 2.管理员)");
        int role = scanner.nextInt();
        if(role == 1){
            return new NormalUser(name);
        }else if(role == 2){
            return new Admin(name);
        }else{
            System.out.println("输入的角色错误!");
            return null;
        }
    }

    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
        while (true) {
            int choice = user.menu();
            user.work(choice, bookList);
        }
    }
}

最后,如果有什么问题,欢迎大家评论哦,作者将会积极回复,嘿嘿~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值