图书系统的创建(三)——日记

在写完操作后,我们可以创建User用户包,在这个包内我们要建立管理员(librarian)和普通成员(normal)两个类,对于用户的创建我认为有几个值得注意的点:

1.菜单框架

同样的,我们可以创建一个共同特征user父类,我们可以在里面定义name变量和构造方法。在两个子类中,我们肯定一个菜单menu去给出操作选项,例如:

System.out.println("1.借阅图书");
System.out.println("2.归还图书");
System.out.println("3.查找图书");
System.out.println("4.显示图书");
System.out.println("0.退出系统");

我们要输入选项,那我们肯定要去返回一个int类型的值,所以我们可以将menu()写成这样public  int menu().

注意: menu此时在两个子类当中,如果程序运行,此时会报错,因为我们在user父类当中还没有menu()这个方法,构成不了重写!!!所以我们必须在user中写menu(),我们可以不写里面的内容,只表示这个方法,我们可以用“抽象类”

public abstract class User {
    public abstract int menu();
}

 2.返回值的向上转型

在Main{}中,我们同样要写租借菜单login(),我们这里需要选择是管理员还是普通用户,去将User与Main里面的操作联系起来。

System.out.println("请选择身份: 1—管理员   2——普通用户");

通过选择我们可以进入对应的界面内, 所以我们需要一个返回值去返回是librarion类型还是normal类型,注意:由于这两个类都是User的子类,我们可以利用“向上转型”,用User定义这两个变量,这样无论是librarion还是normal返回的都是User类型数据。

public static User login() {
        System.out.println("欢迎来到图书系统!");
        System.out.println("请输入你的姓名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请选择身份: 1—管理员   2——普通用户");
        int choice = scanner.nextInt();
        if (choice == 1){
            return new librarian(name);
        }
        else {
            return new normal(name);
        }
    }

 3.菜单选项的联系

在不同用户中我们有不同选项,对于这些选项我们可以用数组来存储!!

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.退出系统");

我们可以利用返回值去找到对应数组下标去操作对应选项,这个我们可以很简单的写出,但是如何去启动选项的具体操作,假如数组中下标为1的是借阅图书,我们输入了1,只代表我们进入了借阅图书这个选项里,但是还没有开始具体的Operation中!!那如何联系呢?

我们知道在Operation中的所以操作都有work()方法,我们可以去调用work方法就行,那我们需要在菜单中new这些操作。

这是我们在User中定义的数组;public IoOperation [] ioOperations;

public normal(String name) {
        super(name);
        this.ioOperations = new IoOperation[] {
                new exit(),
                new lend(),
                new restore(),
                new search(),
                new displaytion()
        };
    }

 最后我们需要在创建一个方法去组合这些操作, ioOperations[choice]是对应的操作选项,即借阅图书,后面的  .work(bookshelf);就是进入到借阅图书的work方法中!

public void DoOperation(int choice, Bookshelf bookshelf){
        ioOperations[choice].work(bookshelf);
    }

总的来说,我们就是 先通过选择身份——>进入对于的menu()——>通过数组启动对应的work()。

附总代码如下:

import Operation.IoOperation;
import book.Bookshelf;
import user.User;
import user.librarian;
import user.normal;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static User login() {
        System.out.println("欢迎来到图书系统!");
        System.out.println("请输入你的姓名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请选择身份: 1—管理员   2——普通用户");
        int choice = scanner.nextInt();
        if (choice == 1){
            return new librarian(name);
        }
        else {
            return new normal(name);
        }
    }

    public static void main(String[] args) {
        System.out.println("Halle!!");
        User user = login();
        Bookshelf bookshelf = new Bookshelf();

        while (true){
            int choice = user.menu();
            user.DoOperation(choice,bookshelf);
        }

    }
}

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值