当前位置: 首页 > news >正文

Java SE - 图书管理系统模拟实现

目录

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

1.设计框架

在这里插入图片描述

图书管理系统的对象有普通用户和管理员,可以通过登录系统进行选择,对于普通用户可以操作的对象是书架上的图书,可以查询,展示,借阅,归还,退出等操作,而管理员操作对象也是书架上的图书,可以对图书进行查找,展示,增加,删除,退出图书系统的操作,以上就是简单设计框架。

2. 实现用户类

管理员和普通用户都是Person,可以将共性部分进行归纳,然后继承给子类普通用户和管理员,将这几个类存放于Demo1的包中。

1.Person类:成员属性包括名字和年龄,并实现构造方法。

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类,完成构造方法。

package Demo1;public class AdminUser extends Person{//构造方法public AdminUser(String name, int age) {super(name, age);}
}

3.实现NormalUser类继承于Person类,完成构造方法。

package Demo1;public class NormalUser extends Person{//构造方法public NormalUser(String name, int age) {super(name, age);}
}

3.实现书和书架类

将这两个类存放于Demo2的包中,并实现类的定义。

1.实现一个书籍类,成员变量有书名,作者,类型,价格,书籍的情况(是否借出),这一些成员变量除了书籍的情况,其它都用private修饰,完成封装,使用set或get方法完成初始化或获取,重写toString方法,可根据需求修改。

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的表达//使用三目操作符,表达式结果是:“已借出”和“未借出”两种结果@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", auther='" + auther + '\'' +", type='" + type + '\'' +", cost=" + cost +", borrowed=" + ((this.borrowed == true) ? "已借出" : "未借出")  +'}';}
}

2.实现一个书架可以存放书籍,书架的容量为10,定义一个变量记录当前存放的书籍数目,存放一些书籍,例如四大名著,完成set和get方法。

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。

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中重写。

package Demo1;public abstract class Person {//成员属性public String name;//名字public int age;//构造方法public Person(String name, int age) {this.name = name;this.age = age;}//菜单menupublic abstract void menu();
}
//管理员选择的菜单@Overridepublic 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;
}
//普通用户选择的菜单
@Overridepublic 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.测试菜单选择

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方法。

package Demo3;public interface IFuntion {//抽象方法:功能public abstract void work(Booklist booklist);
}

7.1 查找功能的实现

查找功能可以遍历数组,通过书名匹配,使用IFuntion接口,重写抽象方法。

package Demo3;
import Demo2.Booklist;
import java.util.Scanner;public class Search implements IFuntion{@Overridepublic 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方法。

package Demo3;
import Demo2.Booklist;public class ShowBook implements IFuntion{@Overridepublic 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++。

package Demo3;
import Demo2.Book;
import Demo2.Booklist;
import java.util.Scanner;public class AddBook implements IFuntion{@Overridepublic 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+1booklist.setCount(sz + 1);//sz表示当前的count//提示一下System.out.println("增加成功!");}
}

7.4 删除功能的实现

删除功能使用IFuntion这个接口,重写work方法,先遍历数组查寻是否存在需要删除的书籍,如果存在在找到的下标位置从后往前替换,最后一个引用设置为null。

在这里插入图片描述

package Demo3;
import Demo2.Booklist;
import java.util.Scanner;public class DelBook implements IFuntion{@Overridepublic 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 - 1booklist.setCount(sz - 1);//提示一下System.out.println("输入的书籍已经删除!");}}
}

7.5 退出功能的实现

退出功能使用IFuntion这个接口,重写抽象方法work,使用System类的Exit方法。

package Demo3;import Demo2.Booklist;public class Exit implements IFuntion{@Overridepublic void work(Booklist booklist) {//提示一下System.out.println("程序正在退出中......");System.exit(0);//参数一般默认为0}
}

7.6 借阅功能的实现

借阅可能使用IFuntion这个接口,重写抽象方法work,遍历数组抽象对应的书籍是否存在,如果存在查询是否借阅,如果未借出,可以借阅后修改状态。

package Demo3;import Demo2.Booklist;import java.util.Scanner;public class Borrow implements IFuntion{@Overridepublic 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方法,首先遍历数组匹配归还的书籍名称,如果匹配上,将书籍状态设置未借出后提示归还成功,如果未匹配上,就提示归还的书籍不存在。

package Demo3;import Demo2.Booklist;import java.util.Scanner;public class Return implements IFuntion{@Overridepublic 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类型的数组引用,具体实现方式子类完成。

//使用接口数组public IFuntion[] iFuntions;

AdminUser类中,数组的内容与管理员菜单匹配,在构造方法中完成赋值。

   //构造方法public AdminUser(String name, int age) {super(name, age);this.iFuntions = new IFuntion[]{new Exit(),new AddBook(),new DelBook(),new Search(),new ShowBook()};}

NormalUser类中,数组的内容与普通用户菜单匹配,在构造方法中完成赋值。

  //构造方法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类型的数组

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包

在这里插入图片描述

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;}//菜单menupublic abstract int menu();//使用接口数组public IFuntion[] iFuntions;
}
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()};}@Overridepublic 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;}
}
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()};}@Overridepublic 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包

在这里插入图片描述

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的表达//使用三目操作符,表达式结果是:“已借出”和“未借出”两种结果@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", auther='" + auther + '\'' +", type='" + type + '\'' +", cost=" + cost +", borrowed=" + ((this.borrowed == true) ? "已借出" : "未借出")  +'}';}
}
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包

在这里插入图片描述

package Demo3;
import Demo2.Book;
import Demo2.Booklist;
import java.util.Scanner;public class AddBook implements IFuntion{@Overridepublic 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+1booklist.setCount(sz + 1);//sz表示当前的count//提示一下System.out.println("增加成功!");}
}
package Demo3;import Demo2.Booklist;import java.util.Scanner;public class Borrow implements IFuntion{@Overridepublic 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("已登记,可以借出!");}}
}
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;public class DelBook implements IFuntion{@Overridepublic 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 - 1booklist.setCount(sz - 1);//提示一下System.out.println("输入的书籍已经删除!");}}
}
package Demo3;import Demo2.Booklist;public class Exit implements IFuntion{@Overridepublic void work(Booklist booklist) {//提示一下System.out.println("程序正在退出中......");System.exit(0);//参数一般默认为0}
}
package Demo3;import Demo2.Booklist;public interface IFuntion {//抽象方法:功能public abstract void work(Booklist booklist);
}
package Demo3;import Demo2.Booklist;import java.util.Scanner;public class Return implements IFuntion{@Overridepublic 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("书籍归还成功!");}}
}
package Demo3;
import Demo2.Booklist;
import java.util.Scanner;public class Search implements IFuntion{@Overridepublic 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));}}
}
package Demo3;
import Demo2.Booklist;public class ShowBook implements IFuntion{@Overridepublic 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类

在这里插入图片描述

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);}}}
}
http://www.lryc.cn/news/574379.html

相关文章:

  • 【计算复杂度】普通卷积 VS 深度可分离卷积
  • react 的过渡动画
  • Redis基本介绍
  • 通过审计日志分析和摘要利用大型语言模型进行网络攻击检测
  • /var/lib/docker/overlay2目录过大怎么办
  • 项目上线(若依前后分离版)
  • MATLAB GUI界面设计 第三章——仪器组件
  • 【无刷电机FOC进阶基础准备】【04 clark变换、park变换、等幅值变换】
  • MultipartFile、File 和 Mat
  • 从0开始学习R语言--Day30--函数型分析
  • SQL Server2022版详细安装教程(Windows)
  • 63-差分电流检测电路
  • 【Verilog】Verilator的TestBench该用C++还是SystemC
  • docker方式启动Jenkins
  • Python训练营---DAY56
  • C#串口通讯实战指南
  • RAW图像简单可视化以及png、jpg的区别
  • 设计模式 - 抽象工厂
  • AI智能体——MCP 模型上下文协议
  • 71-Oracle Undo与Flashback管理(Guarantee设置)深度解析
  • vue3+ELInput无法输入的问题
  • 传输层协议UDP
  • 服务器中集群防御和单机防御分别是指什么?
  • (cvpr2025) DefMamba: Deformable Visual State Space Model
  • github常用插件
  • Java编程中的设计模式:单例模式的深度剖析
  • EEG分类攻略2-Welch 周期图
  • Python 数据分析与可视化 Day 5 - 数据可视化入门(Matplotlib Seaborn)
  • Spring Boot使用MCP服务器
  • Flask框架index.html里引用的本地的js和css或者图片