Java练习:图书管理系统

需求

1、简单的登录

2、管理端

整理书籍(该功能为可扩展功能)

查阅书籍

增加书籍

删除书籍

打印书籍列表

退出

3、用户端

查询书籍

借阅书籍

归还书籍

退出


类的设计

大致先分为三个包:book , user , operation,后根据需求设计各个包中的类。

代码

针对每个类完善内容:

Book

package book;

public class Book {

    private String name;//书名
    private String author;//作者
    private int price;//价格
    private String type;//类型
    private boolean statue;//状态,默认false

    //构造
    public Book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }
    //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 int getPrice() {
        return price;
    }

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

    public String getType() {
        return type;
    }

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

    public boolean isStatue() {
        return statue;
    }

    public void setStatue(boolean statue) {
        this.statue = statue;
    }
    //toString
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ((statue)?",借出":",未借出")+
                '}';
    }
}

BookList

package book;

public class BookList {
    private Book[] books;//相当于书架
    private int usedSize;//书架上书的个数
    //构造
    public BookList(){
        this.books=new Book[10];
        books[0]=new Book("book1","Mary",72,"科幻");
        books[1]=new Book("book2","Bob",53,"历史");
        books[2]=new Book("book3","Alice",33,"悬疑");
        this.usedSize=3;

    }
    //尾插法
    public void setBooks(int pos,Book book){
    this.books[pos]=book;
    }
    public Book getBook(int pos){
        return this.books[pos];
    }

    public int getUsedSize() {
        return usedSize;
    }

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


AddOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("添加:");
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入图书的名字");
        String name=sc.nextLine();
        System.out.println("请输入图书的作者");
        String author=sc.nextLine();
        System.out.println("请输入图书的价格");
        int price=sc.nextInt();
        System.out.println("请输入图书的类型");
        String type=sc.next();

        Book book=new Book(name,author,price,type);
        int currentSize=bookList.getUsedSize();
        bookList.setBooks(currentSize,book);
        bookList.setUsedSize(currentSize+1);

    }
}

DelOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DelOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除");

        Scanner sc=new Scanner(System.in);
        System.out.print("请输入要删除的书名:");
        String name=sc.nextLine();
        int i;
        for ( i = 0; i <bookList.getUsedSize() ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(name)){
                break;
            }
        }
        if(i>=bookList.getUsedSize()) {
            System.out.println("查无此书!");
            return;
        }
        int pos=i;
        for (int j = pos; j < bookList.getUsedSize()-1; j++) {
            Book book=bookList.getBook(j+1);
            bookList.setBooks(j,book);
        }
        int currentSize= bookList.getUsedSize();
        bookList.setUsedSize(currentSize-1);
        System.out.println("删除完毕!");
    }
}

FindOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找:");
        
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入查找图书的名字");
        String name=sc.nextLine();

        for (int i = 0; i <bookList.getUsedSize() ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(name)){
                System.out.println("找到了!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("查无此书!");
    }
}

ReturnOperation

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

import java.util.Scanner;

public class Main {
    public static User login(){
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入你的姓名:");
        String name=sc.nextLine();
        System.out.println("请输入你的身份:0:普通用户,1:管理员");
        int choice=sc.nextInt();
        if(choice==1){
            return new AdminUser(name);
        }else{
            return new NormalUser(name);
        }

    }
    public static void main(String[] args) {
        BookList bookList=new BookList();
        //1.登录 user 会引用一个对象 管理员 或 普通用户
        User user=login();
        while(true) {//循环,多次输入
            // 会调用 user引用的对象的menu(菜单),并放回对应的选择(要执行的操作)
            int choice = user.menu();
            //2.拿choice去调用对应类的work方法

            // work 方法有很多,菜单中的每个操作都有
            //具体调用谁的 交给doOperation
            user.doOperation(choice, bookList);
        }
    }
}

DisplayOperation

package operation;

import book.Book;
import book.BookList;

public class DisplayOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("显示所有图书:");

        for (int i = 0; i <bookList.getUsedSize() ; i++) {
            Book book=bookList.getBook(i);
            System.out.println(book);
        }
    }
}

BorrowOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOperation {


    @Override
    public void work(BookList bookList) {
        System.out.println("借阅");

        Scanner sc=new Scanner(System.in);
        System.out.print("请输入要借阅的书名:");
        String name=sc.nextLine();

        for (int i = 0; i <bookList.getUsedSize() ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(name)){
                //说明有这本书
                book.setStatue(true);
                return;
            }
        }
        System.out.println("查无此书!");
    }
}

ReturnOperation

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("归还:");

        Scanner sc=new Scanner(System.in);
        System.out.println("请输入归还图书的名字");
        String name=sc.nextLine();
        for (int i = 0; i <bookList.getUsedSize() ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(name)){
                book.setStatue(false);
                System.out.println(book);
                return;
            }
        }
        System.out.println("查无此书!");
    }
}

ExitOperation

package operation;

import book.BookList;

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统!");
        System.exit(1);
    }
}

AdminUser

package user;

import operation.*;

import java.util.Scanner;

//管理员
public class AdminUser extends User {

    public AdminUser(String name) {
        super(name);
        this.operations=new IOperation[]{
                new ExitOperation(),
                //注意下标顺序,与菜单对应,0表示退出
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new DisplayOperation()

        };
    }
    //返回你要执行的对应的操作
    @Override
    public int menu() {//返回的是输入的菜单中的选项,所以int
        Scanner sc=new Scanner(System.in);
        System.out.println("======================");
        System.out.println("hello,"+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("======================");
        int choice=sc.nextInt();
        return choice;
    }

}

NormalUser

package user;

import operation.*;

import java.util.Scanner;

//普通用户
public class NormalUser extends User {

    public NormalUser(String name) {
        super(name);
        this.operations=new IOperation[]{
                new ExitOperation(),
                //注意下标顺序,0表示退出
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
        };
    }
    //返回你要执行的对应的操作
    @Override
    public int menu() {
        Scanner sc=new Scanner(System.in);
        System.out.println("======================");
        System.out.println("hello,"+this.name);
        System.out.println("1.查找");
        System.out.println("2.借阅");
        System.out.println("3.归还");
        System.out.println("0.退出系统");
        System.out.println("======================");
        int choice=sc.nextInt();
        return choice;
    }
}

Main

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

import java.util.Scanner;

public class Main {
    public static User login(){
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入你的姓名:");
        String name=sc.nextLine();
        System.out.println("请输入你的身份:0:普通用户,1:管理员");
        int choice=sc.nextInt();
        if(choice==1){
            return new AdminUser(name);
        }else{
            return new NormalUser(name);
        }

    }
    public static void main(String[] args) {
        BookList bookList=new BookList();
        //1.登录 user 会引用一个对象 管理员 或 普通用户
        User user=login();
        while(true) {//循环,多次输入
            // 会调用 user引用的对象的menu(菜单),并放回对应的选择(要执行的操作)
            int choice = user.menu();
            //2.拿choice去调用对应类的work方法

            // work 方法有很多,菜单中的每个操作都有
            //具体调用谁的 交给doOperation
            user.doOperation(choice, bookList);
        }
    }
}

运行结果:

普通人身份:

管理员身份:

猜你喜欢

转载自blog.csdn.net/Aug_IK/article/details/113158523