基于往期学习的类和对象、继承、多态、抽象类和接口来完成一个控制台版本的 “图书管理系统”
在控制台界面中实现用户与程序交互
任务目标:
1、系统中能够表示多本图书的信息
2、提供两种用户(普通用户,管理员)
3、普通用户:查看书籍列表,查找图书,借书,还书
4、管理员:查看书籍列表,查找图书,新增图书,删除图书
任务实现:
1、图书类
创建一个包 library 用来表示 图书管理系统 ,再创建 Book 类表示 一本的图书信息
在类里创建需要用到的属性(书名,作者,价格,类型,是否被借出)
package library;
public class Book {
private String name; //书名
private String author; //作者
private double price; //价格
private String type; //类型
private Boolean isBorrowed; //是否被借出
//构造方法
//当新增图书时,默认是未被借出
public Book(String name, String author, double price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
this.isBorrowed = false;
}
//提供 get/set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Boolean getBorrowed() {
return isBorrowed;
}
public void setBorrowed(Boolean borrowed) {
isBorrowed = borrowed;
}
}
2、图书列表类
创建一个 BookList 类用来管理多个书籍对象
package library;
public class BookList {
//创建数组来记录多本书的信息
private Book[] books = new Book[100];
private int size = 0;//当前数组中有效元素的个数
//构造方法
public BookList(){
//默认添加几本书,方便后续测试
books[0] = new Book("西游记","吴承恩",100.0,"古典名著");
books[1] = new Book("高等数学","高斯",90.0,"自然科学");
books[2] = new Book("福尔摩斯探案集","阿瑟·柯南·道尔",110,"悬疑推理小说");
size = 3;
}
//提供 get/set 方法
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public Book getBook(int index){
return books[index];
}
public void setBooks(int index,Book book){
books[index] = book;
}
}
3、用户类
因为 普通用户 和 管理员 是从 用户 中根据不同的权限分离出来的,这里就涉及到了 继承 的知识,让 子类 继承 父类 来减少代码量
package library.User;
import library.IOperation;
//用户父类,派生出子类管理员和普通用户
public abstract class User {
//这里用 protected 修饰 name,可以让子类直接获取到,不用 get/set 方法
protected String name;
//当前这个类能够进行哪些操作,就往这个数组中添加对应的对象
protected IOperation[] operations;
//构造方法
public User(String name) {
this.name = name;
}
//管理员和普通用户的权限不一样,菜单面板也有所不同,
//但是在父类中没有办法确定使用哪个菜单,所以可以写成抽象类,让子类去进行重写
//通过返回用户输入的序号来决定执行不同的操作,所以使用 int 类
//写成 抽象方法 后就需要将这个父类写成 抽象类
public abstract int menu();
}
父类写到这,我们就可以去创建子类
4、普通用户类(NormalUser)
import java.util.Sc