目录
码云链接:20220518/src · 地瓜/JavaCode - 码云 - 开源中国 (gitee.com)
搭建框架
建包
主函数一个包;
图书一个包;
我们对图书的各种操作,例如查找图书,借阅图书,添加图书等,放在一个包里;
使用者一个包;
包中的类
主函数自然不用多说;
图书包:图书包里我们需要创建哪些类呢?我们试想一下,图书要有属性:书名,作者,书的类型,价格,可否借阅,因此我们需要一个书类;那么我们用户如果想要对图书进行一些操作,该如何实现呢?试想一下,我们现实生活中都是从书架上找书,拿书,还书也最终要将图书放回书架上,因此,我们对图书的操作就转变为了从书架上对图书进行各种操作,查找,借阅等,因此我们还需要一个书架类,供我们实现各种功能。
操作包:也不用多讲了吧,存放各种操作类。
使用者包:管理者,普通用户
大致思路
首先,登陆界面要有,比如先提示你输入名字,再确认你的身份,再根据身份显示出菜单,因为管理者和普通用户对图书的操作肯定是不一样的;那么显示完菜单后,肯定就要选择接下来要进行的操作了,是管理者的增加图书,还是用户的借阅图书等,此时要有一个选择,当选择完时,就要对图书进行操做了,比如是用户的借阅图书,那么你就要提示用户输入想要借阅的书名等一系列操作,最终帮助用户完成本次操作。那么这些方法的调用,也就是根据用户的选择来进行不同的操作该如何实现呢?大家要注意一下这个点,我认为它很重要。
我们肯定要打印这些东西,我们可以注意到,输入1代表查找,2代表新增,我们可不可以将各种操作方法存到数组里,再与输入的数字对应起来,从而实现根据输入的数字来调用方法,那么此时问题又来了,我们这个数组创建在哪里呢,又该如何创建呢?大家有没有思考过呢?
首先,我们根据数组成员来调用方法,那么数组中存的肯定是对象的引用,一个格子对应一个引用,一个引用调用一个方法,所以我们一个操作对应一个类,那么数组的类型是什么呢?我们这么多不同的类,要有个统一那么一定是接口,我们给每个类实现同一个接口,用这个接口创建一个数组,用来存储对象的引用,这样就完成了向上转型,所有类都可以放到数组中了。
在思考,管理者和普通用户所对应的操作各不相同,因此在管理者和普通用户的类中都需要创建一个操作数组。说到这儿,我们还剩下一个终极问题:如何通过选择来调用方法?没错,我们现在只是实现了过程,还差最后一步调用没完成。
如何我们在管理者和普通用户中分别定义一个操作数组我们实际使用起来会很麻烦,我们已经学过父子类了,我们可以定一个了使用者类,让管理者类和普通用户类,分别继承使用者类,在父类中定义一个操作数组并不将其初始化,而是在子类中初始化;我们在父类中实现一个操作方法,最终实现,通过选择来调用方法。
整体融合
我们先写一个主方法,还需要写一个登录方法。
public static User logIn() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的名字:");
String name = scanner.nextLine();
System.out.println("请输入你的身份: 1 -> 管理员 0 -> 普通用户");
int choice = scanner.nextInt();
if (choice == 1) {
return new Administrator(name);
}else {
return new Consumer(name);
}
}
public static void main(String[] args) {
BookRack bookRack = new BookRack(); // 准备图书
//确认身份
User user = logIn();
while(true) {
int choice = user.menu();
user.doIOperation(choice,bookRack);
}
}