JAVA基础练习-----实现一个简单的控制台“图书管理系统”

基于控制台的图书管理系统

核心需求:

用户能够登录到系统上。用户(User.java)分成两个角色:管理员(Admin.java),普通用户(NormalUser.java)。

管理员功能:

  1. 查阅某个书籍的信息。(FindOperation.java)
  2. 增加书籍。(AddOperation.java)
  3. 删除书籍。(DelOperation.java)
  4. 查看所有书籍列表。(DisplayOperation.java)
  5. 退出程序。(ExitOperation.java)

普通用户功能:

  1. 查阅某个书籍的信息。(FindOperation.java)
  2. 借阅书籍。(BorrowOperation.java)
  3. 归还书籍。(ReturnOperation.java)
  4. 退出程序。(ExitOperation.java)

首先创建一个User用户类,User 这个类用来作为Admin 管理员类和 NormalUser普通用户类的父类,其中存放两种角色的公共信息。User 类不应该被实例化,其 角色实际就只有管理员和普通用户两种,于是就做成一个抽象类, 防止后面不小心对 User 实例化了, 编译就能给出报错。

User.java

abstract public class User {
   
    protected String name;
    protected IOperation[] operations;

    // menu()方法用来打印该用户的菜单,
    // 不同的用户支持的操作不一样, 菜单内容也不一样,
    // 此处就做成抽象方法, 再由该类的子类来进一步的重写这样的方法。
    public abstract int menu();

    public void doOperation(int choice, BookList bookList) {
   
        // 如果 choice 是 1, 并且当前 user 是 Admin 的话,
        // 此时取下标为 0 的元素, 就得到了一个 FindOperation 的实例,
        // 此时 operation 这个引用指向的就是这个 FindOperation 实例,
        IOperation operation = this.operations[choice - 1];
        // 再调用 work 方法, 这也是父类引用调用方法, 实际执行的是 引用对应的子类的方法。
        operation.work(bookList);
    }

}

NormalUser.java

public class NormalUser extends User{
   

    public NormalUser(String name){
   
        this.name = name;
        this.operations = new IOperation[] {
   
                new FinOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
                new ExitOperation()
        };
    }
    @Override
    public int menu() {
   
        System.out.println("=========================");
        System.out.println("Hello! " + name + ", 欢迎使用咱的图书管理系统");
        System.out.println(" 1. 查阅书籍信息");
        System.out.println(" 2. 借阅书籍");
        System.out.println(" 3. 归还书籍");
        System.out.println(" 4. 退出系统");
        System.out.println("=========================");
        System.out.println("请输入您的选择: ");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

Admin.java

public class Admin extends User {
   
    /*
    private String name;
    //管理员能够支持的操作,这些操作存在于IOperation这个接口里面
    //我们可以定义一个IOperation[]数组,因为我们知道接口无法实现实例化
    //所以这个数组中放置的内容,就是实现了该接口类的实例。
    //这里也能解释为什么我们要把若干个操作提取出共同信息,创建一个IOperation接口
    //因为如果过不把这些操作类提取出共性搭建接口的话,在管理员类中就很难用过一个数组来描述管理员自身
    //都支持哪些操作。
    private IOperation[] operations;
    */
    public Admin(String name){
   
        this.name = name;
        this.operations = new IOperation[] {
   
                new FinOperation(),
                new AddOperation(),
                new DelOperation(),
                new DisplayOperation(),
                new ExitOperation()
        };
    }
    @Override
    public int menu() {
   
        System.out.println("=========================");
        System.out.println("Hello! " + name + ", 欢迎使用咱的图书管理系统");
        System.out.println(" 1. 查阅书籍信息");
        System.out.println(" 2. 新增书籍信息");
        System.out.println
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值