目录
一,Book包
1.Book 书
2.BookList 书架
二,Operation 包
1.IOperation 接口
2.ExitOperation 退出系统
3.AddOperation 新增图书
4.DelOperation 删除图书
5.BorrowOperation 借阅图书
6.ReturnOperation 归还图书
7.DisplayOperation 展示图书
8.FindOperation 找到图书
三,User包
1.User 抽象类
2.AdminUser 管理员类
3.NormalUser 普通用户
四,Main类
一,Book包
定义一个Book包,其中含有 Book 和 booklist类
1.Book 书
Book类用来构造每一本书的参数
包含:
(1)变量:1.书名 2.作者 3.价格 4.类型 5.是否被借出
(2)构造方法 以便后续增添等操作
(3)Generate——>Getter and Setter来得到get和set的方法,因为各参数都是用private来修饰的,也因为使获得和修改方便,专门定义了get和set的方法
(4)toString 来打印书的每个参数
package Book;
public class Book {
private String name;//书名
private String author;//作者
private int price;//价格
private String type;//类型
private boolean isBorrowed;//是否借出
//Generate——>Constructor 构造方法
//不构造isBorrowd 默认未被借出
public Book(String name, String author, int price, String type){
this.name=name;
this.author=author;
this.price=price;
this.type=type;
}
//Generate——>toString() 方法的实现
//Generate——>Getter and Setter
public void setName(String name) {
this.name = name;
}
public String getName(){
return name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + ''' +
", author='" + author + ''' +
", price=" + price +
", type='" + type + ''' +
((isBorrowed==true?"已经借出":"未借出"))+ '}';
}
}
2.BookList 书架
类如其名,就是用来放置书的
(1)构造方法中,放置基础的3本图书
(2)定义得到书和设置书的方法
(3)定义得到现在总书数和修改书数的方法
package Book;
public class BookList {
//最多可以放十本书
private Book[] books=new Book[10];
//记录当前books数组中还有多少本书
private int usedSize;
public BookList(){
books[0]=new Book("三国演义","罗贯中",19,"小说");
books[1]=new Book("西游记","吴承恩",29,"小说");
books[2]=new Book("红楼梦","曹雪芹",9,"小说");
usedSize=3;
}
//给一个下标,返回该下标的对应的书值,此时pos位置一定是合法的
public Book getBook(int pos){
return books[pos];//返回的类型和Book类无关
}
//把一本书放到books数组指定下标中
public void setBooks(int pos,Book book){
books[pos]=book;
}
//实时获取当前书的个数
public int getUsedSize(){
return usedSize;
}
//用来实时修改当前书架上的书的个数
public void setUsedSize(int size){
usedSize=size;
}
public void add(){
}
}
二,Operation 包
1.IOperation 接口
让子类去实现接口,重写接口定义的work方法,扩展新功能
package Operation;
import Book.BookList;
public interface IOperation {
//通过接口,实现
default void work(BookList booklist){
//子类去实现接口,重写接口定义的work方法,扩展新功能
}
}
2.ExitOperation 退出系统
让子类去实现接口,重写接口定义的work方法,扩展新功能
package Operation;
import Book.BookList;
public interface IOperation {
//通过接口,实现
default void work(BookList booklist){
//子类去实现接口,重写接口定义的work方法,扩展新功能
}
}
2.ExitOperation 退出系统
使用System.exit(); 方法终止Java虚拟机
状态代码为零表示正常退出,而状态代码为非零表示异常代码。
package Operation;
import Book.BookList;
public class ExitOperation implements IOperation{
@Override
public void work(BookList booklist) {
System.out.println("退出系统!");
System.exit(0);//是一个状态码
}
}
3.AddOperation 新增图书
记得改变书架上书的个数
package Operation;
import Book.*;
import java.util.Scanner;
public class AddOperation implements IOperation {
public void work(BookList booklist) {
System.out.println("新增图书!");
Scanner input =new Scanner(System.in);
System.out.println("请输入书名:");
String name=input.nextLine();
System.out.println("请输入图书的作者:");
String author= input.nextLine();
System.out.println("请输入图书的价格:");
int price=input.nextInt();
System.out.println("请输入图书的类型:");
String type=input.nextLine();
//将新书的参数,录入到书架之中,并且书的个数加一
Book book=new Book(name,author,price,type);
int currentSize= booklist.getUsedSize();
booklist.setBooks(currentSize,book);
booklist.setUsedSize(currentSize+1);
System.out.println("新增书籍成功");
}
}
4.DelOperation 删除图书
import Book.Book;
import Book.BookList;
public class DelOperation implements IOperation{
@Override
public void work(BookList booklist) {
System.out.println("删除图书!");
Scanner input = new Scanner(System.in);
String name = input.nextLine();
int currentSize = booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book = booklist.getBook(i);
//第一个循环找到所删书,并判断是否存在
if(book.getName().equals(name)){
//第二个循环实现删除
for (int j = i; j < currentSize; j++) {
booklist.setBooks(j,booklist.getBook(j+1));
//j——>所删书位置, getBook(j+1)——>所删书其后元素
//把需删除书元素后一个元素覆盖掉所删书,实现删除
}
//实时修改书架上的个数,减1
booklist.setUsedSize(currentSize-1);
System.out.println("删除成功!");
return;
}
}
System.out.println("没有你要找的书");
}
}
5.BorrowOperation 借阅图书
import Book.BookList;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work(BookList booklist) {
System.out.println("借阅图书!");
Scanner input =new Scanner(System.in);
System.out.println("请输入借阅书名:");
String name=input.nextLine();
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=booklist.getBook(i);
if(book.getName().equals(name)){
book.setBorrowed(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("没有你要找的这本书");
}
}
6.ReturnOperation 归还图书
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void work(BookList booklist) {
System.out.println("归还图书!");
Scanner input =new Scanner(System.in);
System.out.println("请输入归还书名:");
String name=input.nextLine();
//确定现在有多少本书,需要遍历多少次
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=booklist.getBook(i);
if(book.getName().equals(name)){
book.setBorrowed(false);//book
System.out.println("归还成功!");
return;
}
}
}
}
7.DisplayOperation 展示图书
package Operation;
import Book.Book;
import Book.BookList;
public class DisplayOperation implements IOperation {
@Override
public void work(BookList booklist) {
System.out.println("显示图书!");
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
System.out.println(booklist.getBook(i));
}
}
}
8.FindOperation 找到图书
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation {
public void work(BookList booklist){
System.out.println("查找图书!");
Scanner input =new Scanner(System.in);
System.out.println("请输入书名:");
String name=input.nextLine();
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=booklist.getBook(i);
if(book.getName().equals(name)){
System.out.println("找到了这本书!");
System.out.println(book);
return;
}
}
//没有找到
System.out.println("没有你要找的这本书");
}
}
三,User包
1.User 抽象类
package User;
import Book.BookList;
import Operation.IOperation;
public abstract class User {
protected String name;//用户名 protected 可以用在不同包子类中
protected IOperation[] iOperations;
//构造方法,用来初始化对象姓名
public User(String name){
this.name=name;
}
//抽象类,在子类中实现具体的方法——重写,发生动态绑定
public abstract int menu();
public void doOperation (int choice, BookList bookList){
this.iOperations[choice].work(bookList);
//通过choice确定对象 调用指定方法
}
}
2.AdminUser 管理员类
package User;
import Book.BookList;
import Operation.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name){
super(name);
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new AddOperation(),//2 新增
new DelOperation(),//3 删除
new DisplayOperation()//4 显示
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
System.out.println("3.删除图书");
System.out.println("4.显示图书");
System.out.println("请输入你的操作");
//根据你的选择,返回你的选择
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
3.NormalUser 普通用户
package User;
import Operation.*;
import java.util.Scanner;
public class NormalUser extends User{
//先构造方法
public NormalUser(String name){
super(name);//先构造父类
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new BorrowOperation(),//2 借阅
new ReturnOperation()//3 归还
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("请输入你的操作");
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
四,Main类
import Book.BookList;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work(BookList booklist) {
System.out.println("借阅图书!");
Scanner input =new Scanner(System.in);
System.out.println("请输入借阅书名:");
String name=input.nextLine();
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=booklist.getBook(i);
if(book.getName().equals(name)){
book.setBorrowed(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("没有你要找的这本书");
}
}
6.ReturnOperation 归还图书
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void work(BookList booklist) {
System.out.println("归还图书!");
Scanner input =new Scanner(System.in);
System.out.println("请输入归还书名:");
String name=input.nextLine();
//确定现在有多少本书,需要遍历多少次
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=booklist.getBook(i);
if(book.getName().equals(name)){
book.setBorrowed(false);//book
System.out.println("归还成功!");
return;
}
}
}
}
7.DisplayOperation 展示图书
package Operation;
import Book.Book;
import Book.BookList;
public class DisplayOperation implements IOperation {
@Override
public void work(BookList booklist) {
System.out.println("显示图书!");
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
System.out.println(booklist.getBook(i));
}
}
}
8.FindOperation 找到图书
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation {
public void work(BookList booklist){
System.out.println("查找图书!");
Scanner input =new Scanner(System.in);
System.out.println("请输入书名:");
String name=input.nextLine();
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=booklist.getBook(i);
if(book.getName().equals(name)){
System.out.println("找到了这本书!");
System.out.println(book);
return;
}
}
//没有找到
System.out.println("没有你要找的这本书");
}
}
三,User包
1.User 抽象类
package User;
import Book.BookList;
import Operation.IOperation;
public abstract class User {
protected String name;//用户名 protected 可以用在不同包子类中
protected IOperation[] iOperations;
//构造方法,用来初始化对象姓名
public User(String name){
this.name=name;
}
//抽象类,在子类中实现具体的方法——重写,发生动态绑定
public abstract int menu();
public void doOperation (int choice, BookList bookList){
this.iOperations[choice].work(bookList);
//通过choice确定对象 调用指定方法
}
}
2.AdminUser 管理员类
package User;
import Book.BookList;
import Operation.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name){
super(name);
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new AddOperation(),//2 新增
new DelOperation(),//3 删除
new DisplayOperation()//4 显示
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
System.out.println("3.删除图书");
System.out.println("4.显示图书");
System.out.println("请输入你的操作");
//根据你的选择,返回你的选择
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
3.NormalUser 普通用户
package User;
import Operation.*;
import java.util.Scanner;
public class NormalUser extends User{
//先构造方法
public NormalUser(String name){
super(name);//先构造父类
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new BorrowOperation(),//2 借阅
new ReturnOperation()//3 归还
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("请输入你的操作");
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
四,Main类
package Operation;
import Book.Book;
import Book.BookList;
public class DisplayOperation implements IOperation {
@Override
public void work(BookList booklist) {
System.out.println("显示图书!");
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
System.out.println(booklist.getBook(i));
}
}
}
8.FindOperation 找到图书
package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation {
public void work(BookList booklist){
System.out.println("查找图书!");
Scanner input =new Scanner(System.in);
System.out.println("请输入书名:");
String name=input.nextLine();
int currentSize= booklist.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book=booklist.getBook(i);
if(book.getName().equals(name)){
System.out.println("找到了这本书!");
System.out.println(book);
return;
}
}
//没有找到
System.out.println("没有你要找的这本书");
}
}
三,User包
1.User 抽象类
package User;
import Book.BookList;
import Operation.IOperation;
public abstract class User {
protected String name;//用户名 protected 可以用在不同包子类中
protected IOperation[] iOperations;
//构造方法,用来初始化对象姓名
public User(String name){
this.name=name;
}
//抽象类,在子类中实现具体的方法——重写,发生动态绑定
public abstract int menu();
public void doOperation (int choice, BookList bookList){
this.iOperations[choice].work(bookList);
//通过choice确定对象 调用指定方法
}
}
2.AdminUser 管理员类
package User;
import Book.BookList;
import Operation.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name){
super(name);
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new AddOperation(),//2 新增
new DelOperation(),//3 删除
new DisplayOperation()//4 显示
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
System.out.println("3.删除图书");
System.out.println("4.显示图书");
System.out.println("请输入你的操作");
//根据你的选择,返回你的选择
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
3.NormalUser 普通用户
package User;
import Operation.*;
import java.util.Scanner;
public class NormalUser extends User{
//先构造方法
public NormalUser(String name){
super(name);//先构造父类
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new BorrowOperation(),//2 借阅
new ReturnOperation()//3 归还
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("请输入你的操作");
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
四,Main类
1.User 抽象类
package User;
import Book.BookList;
import Operation.IOperation;
public abstract class User {
protected String name;//用户名 protected 可以用在不同包子类中
protected IOperation[] iOperations;
//构造方法,用来初始化对象姓名
public User(String name){
this.name=name;
}
//抽象类,在子类中实现具体的方法——重写,发生动态绑定
public abstract int menu();
public void doOperation (int choice, BookList bookList){
this.iOperations[choice].work(bookList);
//通过choice确定对象 调用指定方法
}
}
2.AdminUser 管理员类
package User;
import Book.BookList;
import Operation.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name){
super(name);
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new AddOperation(),//2 新增
new DelOperation(),//3 删除
new DisplayOperation()//4 显示
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
System.out.println("3.删除图书");
System.out.println("4.显示图书");
System.out.println("请输入你的操作");
//根据你的选择,返回你的选择
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
3.NormalUser 普通用户
package User;
import Operation.*;
import java.util.Scanner;
public class NormalUser extends User{
//先构造方法
public NormalUser(String name){
super(name);//先构造父类
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new BorrowOperation(),//2 借阅
new ReturnOperation()//3 归还
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("请输入你的操作");
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
四,Main类
package User;
import Book.BookList;
import Operation.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name){
super(name);
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new AddOperation(),//2 新增
new DelOperation(),//3 删除
new DisplayOperation()//4 显示
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
System.out.println("3.删除图书");
System.out.println("4.显示图书");
System.out.println("请输入你的操作");
//根据你的选择,返回你的选择
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
3.NormalUser 普通用户
package User;
import Operation.*;
import java.util.Scanner;
public class NormalUser extends User{
//先构造方法
public NormalUser(String name){
super(name);//先构造父类
this.iOperations=new IOperation[]{
new ExitOperation(),//0 退出
new FindOperation(),//1 查找
new BorrowOperation(),//2 借阅
new ReturnOperation()//3 归还
};
}
public int menu(){
System.out.println("hello"+this.name+"欢迎来到图书小练习");
System.out.println("0.退出系统");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("请输入你的操作");
Scanner input =new Scanner(System.in);
int choice=input.nextInt();
return choice;
}
}
四,Main类
import Book.BookList;
import User.*;
import java.util.Scanner;
public class Main {
//在login方法中实现一个登录
//以User为返回类型,发生向上转型
public static User login(){
Scanner input =new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name=input.nextLine();
//根据返回类型,新建一个不同的对象
System.out.println("请输入你的身份:");
System.out.println("1-> 管理员");
System.out.println("0-> 普通用户");
int choice =input.nextInt();
if(choice==1){
return new AdminUser(name);
}else{
return new NormalUser(name);
}
}
public static void main(String[] args) {
//准备图书
BookList bookList=new BookList();
//通过login()确定产生user这个对象引用User包里哪个类
User user=login();
while(true){
int choice =user.menu();
//超级重要的一句,对应User中的doOperation
// user 对应管理员或者普通用户,取决于login()的返回类型
user.doOperation(choice,bookList);
//联系User类中,doOperation方法
}
}
}



