在写完操作后,我们可以创建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);
}
}
}