前言

该我的项目外围需要:

实现简略登录

管理员端实现下列性能

①查找书籍
②减少书籍
③删除书籍
④展现全副书籍
⑤退出零碎

通用户实现下列性能

①查问书籍
②借阅书籍
③偿还书籍
④退出零碎

我的项目类的设计展现

图书相干的类

Book:定义书籍的信息 BookList:示意书库,外面寄存书籍

package book;/** * Created with IntelliJ IDEA * Details about unstoppable_t: * User: Administrator * Date: 2021 -01-19 * Time: 16:54 */public class Book {    //定义成员变量    private String name;    private String author;    private int price;    private String type;    private boolean isBorrowed = false; //示意书的借阅状态    public Book(String name, String author, int price, String type) {        this.name = name;        this.author = author;        this.price = price;        this.type = type;//        this.isBorrowed = isBorrowed;    }    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;    }    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;    }//    @Override//    public String toString() {//        return "Book{" +//                "name='" + name + '\'' +//                ", author='" + author + '\'' +//                ", price=" + price +//                ", type='" + type + '\'' +//                ", isBorrowed=" + isBorrowed +//                '}';//    }    @Override    public String toString() {        return "Book{" +                "name='" + name + '\'' +                ", author='" + author + '\'' +                ", price=" + price +                ", type='" + type + '\'' +                ((isBorrowed == true) ? " 借阅状态: 已借出" : " 借阅状态: 未借出") +                '}';    }}
package book;/** * Created with IntelliJ IDEA * Details about unstoppable_t: * User: Administrator * Date: 2021 -01-19 * Time: 16:54 */public class BookList {    public int usedSize = 3;  //书架    public Book[] books = new Book[10]; //书的类型为Book,用顺数组book去存储    public BookList() {        books[0] = new Book("三国演义","罗贯中", 100, "小说");        books[1] = new Book("水浒传", "施耐庵", 100, "小说");        books[2] = new Book("西游记", "吴承恩", 100, "小说");    }    //给指定地位放书    public void setBooks(int pos,Book book) {        this.books[pos] = book;    }    //拿到指定地位的书    public Book getBooks(int pos){        return this.books[pos];    }    public int getUsedSize() {        return usedSize;    }    public void setUsedSize(int usedSize) {        this.usedSize = usedSize;    }}

对书库(程序表)操作的类

//新增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 newBook = new Book(name,author,price,type); //构建新书(对象)        int size = booklist.getUsedSize(); //通过bookList援用拜访以后程序表长度        booklist.setBooks(size,newBook); //将新书放在程序表最初面        booklist.setUsedSize(size+1); //程序表放了新书之后,长度加1    }}//借阅public class BorrowOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("借阅书籍");        Scanner sc = new Scanner(System.in);        System.out.println("请输出书名");        String name = sc.nextLine();  //name为所要借阅书名        for (int i = 0; i < booklist.getUsedSize(); i++) {            //通过booklist下标遍历每一本书            Book book = booklist.getBooks(i);            if(book.getName().equals(name)){                //如果为true,阐明要借阅的书存在,咱们须要做的是批改书的借阅状态                book.setBorrowed(true);  //为true示意书曾经结出                return ;            }        }        System.out.println("十分道歉,本馆没有您要借阅的书!"); //    }}//删除public class DelOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("删除书籍");        Scanner sc = new Scanner(System.in);        System.out.println("请输出书名");        String name = sc.nextLine();  //name为所要删除的书名        int i = 0;        for (; i < booklist.getUsedSize(); i++) {            Book book = booklist.getBooks(i);            if(book.getName().equals(name)){                break;            }        }        if(i >= booklist.getUsedSize()){            System.out.println("没有要删除的这本书!");            return ;        }        //此时i为所要删除书的下标        for (int j = i; j < booklist.getUsedSize()-1; j++) {            Book book = booklist.getBooks(j+1); //取得j+1地位的书            booklist.setBooks(j,book);  //将j+1地位的书给j地位        }        int size = booklist.getUsedSize();  //取得程序表长度        booklist.setUsedSize(size-1);   //删除书后,长度减去1        System.out.println("书已被删除!");    }}//展现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.getBooks(i);            System.out.println(book);        }    }}//查找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();  //name为所要查找书名        for (int i = 0; i < booklist.getUsedSize(); i++) {            //通过booklist下标遍历每一本书            Book book = booklist.getBooks(i);            if(book.getName().equals(name)){                System.out.println("该书存在!");                System.out.println(book);  //间接打印书的信息,toString办法已被重写                return ;            }        }        System.out.println("没有这本书!");    }}//偿还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();  //name为所要偿还的书名        for (int i = 0; i < booklist.getUsedSize(); i++) {            Book book = booklist.getBooks(i);            if(book.getName().equals(name)){                book.setBorrowed(false);                System.out.println(book);  //间接打印书的信息,toString办法已被重写                return ;            }        }        System.out.println("没有你要偿还的这本书!");    }}//退出public class ExitOperation implements IOperation{    @Override    public void work(BookList booklist) {        System.out.println("退出零碎");        System.exit(1); //示意退出零碎    }}//总接口public interface IOperation {    void work(BookList booklist);}

用户相干类

<mark style="box-sizing: border-box; outline: 0px; background-color: rgb(248, 248, 64); color: rgb(0, 0, 0); overflow-wrap: break-word;">用户类</mark>

package user;import book.BookList;import operation.IOperation;/** * Created with IntelliJ IDEA * Details about unstoppable_t: * User: Administrator * Date: 2021 -01-19 * Time: 16:55 */abstract public class User {    public String name;    public IOperation[] operations;    public User(String name){        this.name = name;    }    /*    新建menu办法,了解为用户菜单    因为SpecialPerson和OrdinaryPerson继承了User,所以让两个子类重写menu办法,二者的菜单展现不统一    此时menu能够没有具体实现,因此将它设计为形象办法,因而User类成为抽象类     */    abstract public int menu();    //operations中寄存的是哪些操作方法,得看子类    public void doOperation(int choice, BookList bookList){        this.operations[choice].work(bookList);    }}

<mark style="box-sizing: border-box; outline: 0px; background-color: rgb(248, 248, 64); color: rgb(0, 0, 0); overflow-wrap: break-word;">管理员</mark>

package user;import operation.*;import java.util.Scanner;/** * Created with IntelliJ IDEA * Details about unstoppable_t: * User: Administrator * Date: 2021 -01-19 * Time: 16:56 * 管理员 */public class SpecialPerson extends User{    //构造方法    public SpecialPerson(String name){        super(name);        this.operations = new IOperation[]{        new ExitOperation(), //0退出零碎        new FindOperation(),        new AddOperation(),        new DelOperation(),        new DisplayOperation()        };    }    /*    重写父类User的menu办法    menu作用:返回你要执行的操作     */    @Override    public int menu() {        System.out.println("管理员菜单!");        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("================================");        System.out.println("请依照提醒抉择相应操作: ");        Scanner sc = new Scanner(System.in);        int choice = sc.nextInt();        return choice;    }}

<mark style="box-sizing: border-box; outline: 0px; background-color: rgb(248, 248, 64); color: rgb(0, 0, 0); overflow-wrap: break-word;">普通用户</mark>

package user;import operation.*;import java.util.Scanner;/** * Created with IntelliJ IDEA * Details about unstoppable_t: * User: Administrator * Date: 2021 -01-19 * Time: 16:57 * 普通用户 */public class OrdinaryPerson extends User{    //构造方法    public OrdinaryPerson(String name){        super(name);        this.operations = new IOperation[]{                new ExitOperation(), //0退出零碎                new FindOperation(),                new BorrowOperation(),                new ReturnOperation()        };    }    //重写父类User的menu办法    @Override    public int menu() {        System.out.println("普通用户菜单!");        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("================================");        System.out.println("请依照提醒抉择相应操作: ");        Scanner sc = new Scanner(System.in);        int choice = sc.nextInt();        return choice;    }}

主函数程序

import book.BookList;import user.OrdinaryPerson;import user.SpecialPerson;import user.User;import java.util.Scanner;/** * Created with IntelliJ IDEA * Details about unstoppable_t: * User: Administrator * Date: 2021 -01-19 * Time: 16:30 */public class TrqTest {    //login(登录)办法返回用户实例,类型为User    public static User login(){        Scanner sc = new Scanner(System.in);        System.out.println("请输出你的姓名: ");        String name = sc.nextLine();        System.out.println("请输出你的身份> 1:管理员 0:普通用户");        int number = sc.nextInt();        if(number == 1){            return new SpecialPerson(name);        }else{            return new OrdinaryPerson(name);        }    }    public static void main(String[] args) {        BookList bookList = new BookList();        //登录        User user = login(); // 父类援用指向子类实例(向上转型)        while(true) {            //user.menu() 调用哪个menu办法,依据登录身份决定            int choice = user.menu();            //此doOperation办法是以后user本人的办法            //choice抉择以后用户operations数组中的相应的类,该类产生的对象调用本人的work办法            user.doOperation(choice, bookList);        }    }}

运行一下看看具体怎么样吧


感激你看到这里,文章有什么有余还请斧正,感觉文章对你有帮忙的话记得给我点个赞,每天都会分享java相干技术文章或行业资讯,欢送大家关注和转发文章!
欢送关注公众号:前程有光,支付一线大厂Java面试题总结+各知识点学习思维导+一份300页pdf文档的Java外围知识点总结!