目录
- 1.设计框架
- [2. 实现用户类](#2. 实现用户类)
- 3.实现书和书架类
- 4.登录界面的实现
- 5.实现menu方法
- 6.测试菜单选择
- 7.实现一个IFun接口
-
- [7.1 查找功能的实现](#7.1 查找功能的实现)
- [7.2 展示功能的实现](#7.2 展示功能的实现)
- [7.3 增加功能的实现](#7.3 增加功能的实现)
- [7.4 删除功能的实现](#7.4 删除功能的实现)
- [7.5 退出功能的实现](#7.5 退出功能的实现)
- [7.6 借阅功能的实现](#7.6 借阅功能的实现)
- [7.7 归还功能的实现](#7.7 归还功能的实现)
- 8.实现IFuntion类型的数组
- [9. 在main方法中使用IFuntion类型的数组](#9. 在main方法中使用IFuntion类型的数组)
- 10.测试当前的功能是否能实现
- 11.程序代码
-
- [11.1 Demo1包](#11.1 Demo1包)
- [11.2 Demo2包](#11.2 Demo2包)
- [11.3 Demo3包](#11.3 Demo3包)
- [11.4 Main类](#11.4 Main类)
1.设计框架

图书管理系统的对象有普通用户和管理员,可以通过登录系统进行选择,对于普通用户可以操作的对象是书架上的图书,可以查询,展示,借阅,归还,退出等操作,而管理员操作对象也是书架上的图书,可以对图书进行查找,展示,增加,删除,退出图书系统的操作,以上就是简单设计框架。
2. 实现用户类
管理员和普通用户都是Person,可以将共性部分进行归纳,然后继承给子类普通用户和管理员,将这几个类存放于Demo1的包中。
1.Person类:成员属性包括名字和年龄,并实现构造方法。
java
package Demo1;
public abstract class Person {
//成员属性
public String name;//名字
public int age;
//构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
2.实现AdminUser类继承于Person类,完成构造方法。
java
package Demo1;
public class AdminUser extends Person{
//构造方法
public AdminUser(String name, int age) {
super(name, age);
}
}
3.实现NormalUser类继承于Person类,完成构造方法。
java
package Demo1;
public class NormalUser extends Person{
//构造方法
public NormalUser(String name, int age) {
super(name, age);
}
}
3.实现书和书架类
将这两个类存放于Demo2的包中,并实现类的定义。
1.实现一个书籍类,成员变量有书名,作者,类型,价格,书籍的情况(是否借出),这一些成员变量除了书籍的情况,其它都用private修饰,完成封装,使用set或get方法完成初始化或获取,重写toString方法,可根据需求修改。
java
package Demo2;
public class Book {
//成员变量
private String name;//书名
private String auther;//作者
private String type;//类型
private double cost;//价格
public boolean borrowed;//是否借出
//四个参数的构造方法
public Book(String name, String auther, String type, double cost) {
this.name = name;
this.auther = auther;
this.type = type;
this.cost = cost;
}
//set方法
public void setName(String name) {this.name = name;}//设置书名
public void setAuther(String auther) {this.auther = auther;}//编辑作者名
public void setType(String type) {this.type = type;}//设置类型
public void setCost(double cost) {this.cost = cost;}//价格
//get方法
public String getName() {return name;}//获取书名
public String getAuther() {return auther;}//获取作者名字
public String getType() {return type;}//获取书籍类型
public double getCost() {return cost;}//获取书籍价格
//重写toString方法:系统默认生成后根据需要修改,以下修改了borrowed的表达
//使用三目操作符,表达式结果是:"已借出"和"未借出"两种结果
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", auther='" + auther + '\'' +
", type='" + type + '\'' +
", cost=" + cost +
", borrowed=" + ((this.borrowed == true) ? "已借出" : "未借出") +
'}';
}
}
2.实现一个书架可以存放书籍,书架的容量为10,定义一个变量记录当前存放的书籍数目,存放一些书籍,例如四大名著,完成set和get方法。
java
package Demo2;
//书架
public class Booklist {
//实例化Book类型的数组
Book[] book = new Book[10];//书架容量,10
//创建一个记录当前书籍数的变量
private int count;
//在构造方法中先存放一些书籍,例如四大名著
public Booklist(){
book[0] = new Book("西游记","吴承恩","长篇小说",832.50);
book[1] = new Book("红楼梦","曹雪芹","长篇小说",51.90);
book[2] = new Book("三国演义","罗贯中","长篇小说",43.80);
book[3] = new Book("水浒传","施耐庵","长篇小说",496.00);
this.count = 4;
}
//set方法
//将新的引用赋给当前下标的引用
public void setBook(int pos,Book book) {
this.book[pos] = book;
}
//设置count的值
public void setCount(int count) {
this.count = count;
};
//将后面的引用赋给前面的引用,在删除功能中使用
public void setBook(Book[] book,int pos) {
this.book[pos] = book[pos+1];
}
//get方法
//得到当前书籍的引用
public Book[] getBook() {
return book;
}
//获取当前书架上的书籍数
public int getCount() {
return count;
}
}
4.登录界面的实现
实现一个login方法实现用户的选择功能,返回类型为Person。
java
import Demo1.AdminUser;
import Demo1.NormalUser;
import Demo1.Person;
import Demo2.Booklist;
import java.util.Scanner;
public class Main{
public static Person login(){
//选择身份
System.out.println("请选择你的身份:> 1.管理员 2.普通用户");
System.out.print("请输入:> ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
//返回类型
if(choice == 1) return new AdminUser("zansang",22);
else return new NormalUser("lisi",33);
}
public static void main(String[] args) {
//1.加载用户选择,通过返回值确定用户类型
Person person = login();//接收返回值
}
}
5.实现menu方法
在Person类中定义一个抽象的menu方法,在子类AdminUser和NormalUser中重写。
java
package Demo1;
public abstract class Person {
//成员属性
public String name;//名字
public int age;
//构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//菜单menu
public abstract void menu();
}
java
//管理员选择的菜单
@Override
public int menu(){
//打印菜单
System.out.println(this.name + "欢迎你来到图书管理系统!");
System.out.println("****************************");
System.out.println("***** 0.Exit *****");
System.out.println("***** 1.AddBook *****");
System.out.println("***** 2.DelBook *****");
System.out.println("***** 3.Search *****");
System.out.println("***** 4.ShowBook *****");
System.out.println("****************************");
//选择功能
Scanner scanner = new Scanner(System.in);
System.out.print("请选择:>");
int choice = scanner.nextInt();
//返回选择选项
return choice;
}
java
//普通用户选择的菜单
@Override
public int menu(){
//打印菜单
System.out.println(this.name + "欢迎你来到图书管理系统!");
System.out.println("****************************");
System.out.println("***** 0.Exit *****");
System.out.println("***** 1.Borrow *****");
System.out.println("***** 2.Return *****");
System.out.println("***** 3.Search *****");
System.out.println("***** 4.ShowBook *****");
System.out.println("****************************");
//选择功能
Scanner scanner = new Scanner(System.in);
System.out.print("请选择:>");
int choice = scanner.nextInt();
//返回选择选项
return choice;
}
6.测试菜单选择
java
import Demo1.AdminUser;
import Demo1.NormalUser;
import Demo1.Person;
import Demo2.Booklist;
import java.util.Scanner;
public class Main{
public static Person login(){
//选择身份
System.out.println("请选择你的身份:> 1.管理员 2.普通用户");
System.out.print("请输入:> ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
//返回类型
if(choice == 1) return new AdminUser("zansang",22);
else return new NormalUser("lisi",33);
}
public static void main(String[] args) {
//1. //加载书架:有书架和书籍才可以操作,先实例一个书架
Booklist booklist = new Booklist();
while(true) {
//2.加载用户选择,通过返回值确定用户类型
Person person = login();//接收返回值
//3.实现选择功能,不同用户有不同的选择,根据login返回类型确定
int choice = person.menu();
if(choice == 0) break;
}
}
}

通过测试程序当前可以根据选择的身份调用不同的菜单,下一步可以具体实现功能的使用。
7.实现一个IFun接口
创建一个新的Demo3包实现一个IFuntion接口,接口中定义一个抽象的work方法。
java
package Demo3;
public interface IFuntion {
//抽象方法:功能
public abstract void work(Booklist booklist);
}
7.1 查找功能的实现
查找功能可以遍历数组,通过书名匹配,使用IFuntion接口,重写抽象方法。
java
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;
public class Search implements IFuntion{
@Override
public void work(Booklist booklist) {
//输入查找的书名
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:>");
String bookName = scanner.nextLine();
//遍历数组
int sz = booklist.getCount();
int i = 0;
for (; i < sz; i++) {
if(booklist.getBook(i).getName().equals(bookName)){
break;//找到了
}
}
//找不到
if(i == sz) System.out.println(bookName + "此书不存在!");
//找到了,输出展示
else{
System.out.print("找到了,书籍信息: ");
System.out.println(booklist.getBook(i));
}
}
}
7.2 展示功能的实现
展示的功能是通过数组遍历将书籍信息输出打印,使用IFuntion这个接口,重写work方法。
java
package Demo3;
import Demo2.Booklist;
public class ShowBook implements IFuntion{
@Override
public void work(Booklist booklist) {
System.out.println("************************************");
int sz = booklist.getCount();//获取当前书籍数
//遍历数组输出
for (int i = 0; i < sz; i++) {
System.out.println(booklist.getBook(i));
}
System.out.println("************************************");
}
}
7.3 增加功能的实现
增加可能使用IFuntion这个接口,重写work方法,需要先判断容量是否已满,如果已满就不能增加,如果未满就可以添加在count下标的位置,添加后调用setCount方法使count++。
java
package Demo3;
import Demo2.Book;
import Demo2.Booklist;
import java.util.Scanner;
public class AddBook implements IFuntion{
@Override
public void work(Booklist booklist) {
//获取当前容量
int sz = booklist.getCount();
//获取总的容量
int capacity = booklist.getBook().length;
//判断
if(sz == capacity){//说明已满,不可添加
System.out.println("书架存放位置已满,不可添加!");
return;
}
//未满,可以添加
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:>");
String bookName = scanner.nextLine();
System.out.print("请输入作者名称: >");
String auther = scanner.nextLine();
System.out.print("请输入书籍类型: >");
String type = scanner.nextLine();
System.out.print("请输入书籍价格: >");
double cost = scanner.nextDouble();
//将输入好的数据存放于一个临时的引用中
Book tem = new Book(bookName,auther,type,cost);
//通过set方法方法
booklist.setBook(sz,tem);
//将count+1
booklist.setCount(sz + 1);//sz表示当前的count
//提示一下
System.out.println("增加成功!");
}
}
7.4 删除功能的实现
删除功能使用IFuntion这个接口,重写work方法,先遍历数组查寻是否存在需要删除的书籍,如果存在在找到的下标位置从后往前替换,最后一个引用设置为null。

java
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;
public class DelBook implements IFuntion{
@Override
public void work(Booklist booklist) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入删除的书籍名称:>");
String bookName = scanner.nextLine();
//遍历数组
int sz = booklist.getCount();
int i = 0 ;
for (; i < sz; i++) {
if(booklist.getBook(i).getName().equals(bookName)){
break;//找到了
}
}
//找不到
if(sz == i) System.out.println("输入的书籍名称不存在!");
//找到了
else{
for (; i < sz - 1; i++) {
//使用set方法:将i+1下标的引用赋值给下标为i的引用
booklist.setBook(booklist.getBook(),i);
}
//将数组count - 1
booklist.setCount(sz - 1);
//提示一下
System.out.println("输入的书籍已经删除!");
}
}
}
7.5 退出功能的实现
退出功能使用IFuntion这个接口,重写抽象方法work,使用System类的Exit方法。
java
package Demo3;
import Demo2.Booklist;
public class Exit implements IFuntion{
@Override
public void work(Booklist booklist) {
//提示一下
System.out.println("程序正在退出中......");
System.exit(0);//参数一般默认为0
}
}
7.6 借阅功能的实现
借阅可能使用IFuntion这个接口,重写抽象方法work,遍历数组抽象对应的书籍是否存在,如果存在查询是否借阅,如果未借出,可以借阅后修改状态。
java
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;
public class Borrow implements IFuntion{
@Override
public void work(Booklist booklist) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入需要借阅的书籍名称:>");
String bookName = scanner.nextLine();
//遍历数组
int sz = booklist.getCount();
int i = 0 ;
for (; i < sz; i++) {
if(booklist.getBook(i).equals(bookName)){
break;//找到了
}
}
if(sz == i) System.out.println("需要借阅的书籍不存在!");
//已经借阅
else {
if (booklist.getBook(i).borrowed == true) {
System.out.println("此书籍已经借阅!");
} else {
System.out.println("此书籍可以借阅!");
}
booklist.getBook(i).borrowed = true;
System.out.println("已登记,可以借出!");
}
}
}
7.7 归还功能的实现
归还功能使用IFtunion这个接口,重写work方法,首先遍历数组匹配归还的书籍名称,如果匹配上,将书籍状态设置未借出后提示归还成功,如果未匹配上,就提示归还的书籍不存在。
java
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;
public class Return implements IFuntion{
@Override
public void work(Booklist booklist) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入需要归还的书籍名称:>");
String bookName = scanner.nextLine();
//遍历数组
int sz = booklist.getCount();
int i = 0;
for (; i < sz; i++) {
if (booklist.getBook(i).getName().equals(bookName)) {
break;//找到了
}
}
//找不到
if(sz == i) System.out.println("输入的归还书籍不存在");
//找到了,将书籍状态设置为未借出后提示归还
else{
booklist.getBook(i).borrowed = false;
System.out.println("书籍归还成功!");
}
}
}
8.实现IFuntion类型的数组
在Person类中定义一个IFuntion类型的数组引用,具体实现方式子类完成。
java
//使用接口数组
public IFuntion[] iFuntions;
AdminUser类中,数组的内容与管理员菜单匹配,在构造方法中完成赋值。
java
//构造方法
public AdminUser(String name, int age) {
super(name, age);
this.iFuntions = new IFuntion[]{
new Exit(),
new AddBook(),
new DelBook(),
new Search(),
new ShowBook()
};
}
NormalUser类中,数组的内容与普通用户菜单匹配,在构造方法中完成赋值。
java
//构造方法
public NormalUser(String name, int age) {
super(name, age);
this.iFuntions = new IFuntion[]{
new Exit(),
new Borrow(),
new Return(),
new Search(),
new ShowBook()
};
}
9. 在main方法中使用IFuntion类型的数组
java
public static void main(String[] args) {
//1. //加载书架:有书架和书籍才可以操作,先实例一个书架
Booklist booklist = new Booklist();
//2.加载用户选择,通过返回值确定用户类型
Person person = login();//接收返回值
while(true) {
//3.实现选择功能,不同用户有不同的选择,根据login返回类型确定
int choice = person.menu();
if(choice < 0 || choice >= booklist.getBook().length){
System.out.println("非法输入,请重新输入!!!");
}else {
//通过person引用使用iFuntions这个引用数组下标为choice的类
//调用其中的work方法
person.iFuntions[choice].work(booklist);
}
}
10.测试当前的功能是否能实现
1.测试管理员功能,展示,搜索,增加,删除,退出。
2.测试普通用户的功能:展示,搜索,借阅,归还,退出。
11.程序代码
11.1 Demo1包

java
package Demo1;
import Demo2.Booklist;
import Demo3.IFuntion;
public abstract class Person {
//成员属性
public String name;//名字
public int age;
//构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//菜单menu
public abstract int menu();
//使用接口数组
public IFuntion[] iFuntions;
}
java
package Demo1;
import Demo2.Booklist;
import Demo3.*;
import java.util.Scanner;
public class AdminUser extends Person{
//构造方法
public AdminUser(String name, int age) {
super(name, age);
this.iFuntions = new IFuntion[]{
new Exit(),
new AddBook(),
new DelBook(),
new Search(),
new ShowBook()
};
}
@Override
public int menu(){
//打印菜单
System.out.println(this.name + "欢迎你来到图书管理系统!");
System.out.println("****************************");
System.out.println("***** 0.Exit *****");
System.out.println("***** 1.AddBook *****");
System.out.println("***** 2.DelBook *****");
System.out.println("***** 3.Search *****");
System.out.println("***** 4.ShowBook *****");
System.out.println("****************************");
//选择功能
Scanner scanner = new Scanner(System.in);
System.out.print("请选择:>");
int choice = scanner.nextInt();
//返回选择选项
return choice;
}
}
java
package Demo1;
import Demo3.*;
import java.util.Scanner;
public class NormalUser extends Person{
//构造方法
public NormalUser(String name, int age) {
super(name, age);
this.iFuntions = new IFuntion[]{
new Exit(),
new Borrow(),
new Return(),
new Search(),
new ShowBook()
};
}
@Override
public int menu(){
//打印菜单
System.out.println(this.name + "欢迎你来到图书管理系统!");
System.out.println("****************************");
System.out.println("***** 0.Exit *****");
System.out.println("***** 1.Borrow *****");
System.out.println("***** 2.Return *****");
System.out.println("***** 3.Search *****");
System.out.println("***** 4.ShowBook *****");
System.out.println("****************************");
//选择功能
Scanner scanner = new Scanner(System.in);
System.out.print("请选择:>");
int choice = scanner.nextInt();
//返回选择选项
return choice;
}
}
11.2 Demo2包

java
package Demo2;
public class Book {
//成员变量
private String name;//书名
private String auther;//作者
private String type;//类型
private double cost;//价格
public boolean borrowed;//是否借出
//四个参数的构造方法
public Book(String name, String auther, String type, double cost) {
this.name = name;
this.auther = auther;
this.type = type;
this.cost = cost;
}
//set方法
public void setName(String name) {this.name = name;}//设置书名
public void setAuther(String auther) {this.auther = auther;}//编辑作者名
public void setType(String type) {this.type = type;}//设置类型
public void setCost(int cost) {this.cost = cost;}//价格
//get方法
public String getName() {return name;}
public String getAuther() {return auther;}
public String getType() {return type;}
public double getCost() {return cost;}
//重写toString方法:系统默认生成后根据需要修改,以下修改了borrowed的表达
//使用三目操作符,表达式结果是:"已借出"和"未借出"两种结果
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", auther='" + auther + '\'' +
", type='" + type + '\'' +
", cost=" + cost +
", borrowed=" + ((this.borrowed == true) ? "已借出" : "未借出") +
'}';
}
}
java
package Demo2;
public class Booklist {
//实例化Book类型的数组
Book[] book = new Book[10];//书架容量,10
//创建一个记录当前书籍数的变量
private int count;
//在构造方法中先存放一些书籍,例如四大名著
public Booklist(){
book[0] = new Book("西游记","吴承恩","长篇小说",832.50);
book[1] = new Book("红楼梦","曹雪芹","长篇小说",51.90);
book[2] = new Book("三国演义","罗贯中","长篇小说",43.80);
book[3] = new Book("水浒传","施耐庵","长篇小说",496.00);
this.count = 4;
}
//set方法
//将新的引用赋给当前下标的引用
public void setBook(int pos,Book book) {
this.book[pos] = book;
}
public void setCount(int count) {
this.count = count;
};
//将后面的引用赋给前面的引用,在删除功能中使用
public void setBook(Book[] book,int pos) {
this.book[pos] = book[pos+1];
}
//get方法
//得到当前书籍的引用
public Book[] getBook() {
return book;
}
//获取当前下标数的引用
public Book getBook(int pos){
return book[pos];
}
//获取当前书架上的书籍数
public int getCount() {
return count;
}
}
11.3 Demo3包

java
package Demo3;
import Demo2.Book;
import Demo2.Booklist;
import java.util.Scanner;
public class AddBook implements IFuntion{
@Override
public void work(Booklist booklist) {
//获取当前容量
int sz = booklist.getCount();
//获取总的容量
int capacity = booklist.getBook().length;
//判断
if(sz == capacity){//说明已满,不可添加
System.out.println("书架存放位置已满,不可添加!");
return;
}
//未满,可以添加
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:>");
String bookName = scanner.nextLine();
System.out.print("请输入作者名称: >");
String auther = scanner.nextLine();
System.out.print("请输入书籍类型: >");
String type = scanner.nextLine();
System.out.print("请输入书籍价格: >");
double cost = scanner.nextDouble();
//将输入好的数据存放于一个临时的引用中
Book tem = new Book(bookName,auther,type,cost);
//通过set方法方法
booklist.setBook(sz,tem);
//将count+1
booklist.setCount(sz + 1);//sz表示当前的count
//提示一下
System.out.println("增加成功!");
}
}
java
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;
public class Borrow implements IFuntion{
@Override
public void work(Booklist booklist) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入需要借阅的书籍名称:>");
String bookName = scanner.nextLine();
//遍历数组
int sz = booklist.getCount();
int i = 0 ;
for (; i < sz; i++) {
if(booklist.getBook(i).getName().equals(bookName)){
break;//找到了
}
}
if(sz == i) System.out.println("需要借阅的书籍不存在!");
//已经借阅
else {
if (booklist.getBook(i).borrowed == true) {
System.out.println("此书籍已经借阅!");
} else {
System.out.println("此书籍可以借阅!");
}
booklist.getBook(i).borrowed = true;
System.out.println("已登记,可以借出!");
}
}
}
java
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;
public class DelBook implements IFuntion{
@Override
public void work(Booklist booklist) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入删除的书籍名称:>");
String bookName = scanner.nextLine();
//遍历数组
int sz = booklist.getCount();
int i = 0 ;
for (; i < sz; i++) {
if(booklist.getBook(i).getName().equals(bookName)){
break;//找到了
}
}
//找不到
if(sz == i) System.out.println("输入的书籍名称不存在!");
//找到了
else{
for (; i < sz - 1; i++) {
//使用set方法:将i+1下标的引用赋值给下标为i的引用
booklist.setBook(booklist.getBook(),i);
}
//将数组count - 1
booklist.setCount(sz - 1);
//提示一下
System.out.println("输入的书籍已经删除!");
}
}
}
java
package Demo3;
import Demo2.Booklist;
public class Exit implements IFuntion{
@Override
public void work(Booklist booklist) {
//提示一下
System.out.println("程序正在退出中......");
System.exit(0);//参数一般默认为0
}
}
java
package Demo3;
import Demo2.Booklist;
public interface IFuntion {
//抽象方法:功能
public abstract void work(Booklist booklist);
}
java
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;
public class Return implements IFuntion{
@Override
public void work(Booklist booklist) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入需要归还的书籍名称:>");
String bookName = scanner.nextLine();
//遍历数组
int sz = booklist.getCount();
int i = 0;
for (; i < sz; i++) {
if (booklist.getBook(i).getName().equals(bookName)) {
break;//找到了
}
}
//找不到
if(sz == i) System.out.println("输入的归还书籍不存在");
//找到了,将书籍状态设置为未借出后提示归还
else {
booklist.getBook(i).borrowed = false;
System.out.println("书籍归还成功!");
}
}
}
java
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;
public class Search implements IFuntion{
@Override
public void work(Booklist booklist) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:>");
String bookName = scanner.nextLine();
//遍历数组
int sz = booklist.getCount();
int i = 0;
for (; i < sz; i++) {
if(booklist.getBook(i).getName().equals(bookName)){
break;//找到了
}
}
//找不到
if(i == sz) System.out.println(bookName + "此书不存在!");
//找到了,输出展示
else {
System.out.print("找到了,书籍信息: ");
System.out.println(booklist.getBook(i));
}
}
}
java
package Demo3;
import Demo2.Booklist;
public class ShowBook implements IFuntion{
@Override
public void work(Booklist booklist) {
System.out.println("*******************************************************************************");
int sz = booklist.getCount();//获取当前书籍数
//遍历数组输出
for (int i = 0; i < sz; i++) {
System.out.println(booklist.getBook(i));
}
System.out.println("*******************************************************************************");
}
}
11.4 Main类

java
import Demo1.AdminUser;
import Demo1.NormalUser;
import Demo1.Person;
import Demo2.Booklist;
import java.util.Scanner;
public class Main{
public static Person login(){
//选择身份
System.out.println("请选择你的身份:> 1.管理员 2.普通用户");
System.out.print("请输入:> ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
//返回类型
if(choice == 1) return new AdminUser("zansang",22);
else return new NormalUser("lisi",33);
}
public static void main(String[] args) {
//1. //加载书架:有书架和书籍才可以操作,先实例一个书架
Booklist booklist = new Booklist();
//2.加载用户选择,通过返回值确定用户类型
Person person = login();//接收返回值
while(true) {
//3.实现选择功能,不同用户有不同的选择,根据login返回类型确定
int choice = person.menu();
if(choice < 0 || choice > booklist.getBook().length){
System.out.println("非法输入,请重新输入!!!");
}else {
//通过person引用使用iFuntions这个引用数组下标为choice的类
//调用其中的work方法
person.iFuntions[choice].work(booklist);
}
}
}
}