1.思维导图如下
2.Book包下
Book类
package practice_2_27.Book;
public class Book {
private String bookName;
private String author;
private Double price;
private String type;
private Boolean isBorrowed;
public Book(String bookName, String author, Double price, String type) {
this.bookName = bookName;
this.author = author;
this.price = price;
this.type = type;
this.isBorrowed = false;
}
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrowed=" + isBorrowed +
'}';
}
public Book(String bookName) {
this.bookName = bookName;
}
public String getBookName() {
return bookName;
}
public String getAuthor() {
return 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;
}
}
BookList类
package practice_2_27.Book;
import java.util.ArrayList;
import java.util.List;
public class BookList {
public static final List<Book>books = new ArrayList<>();
public static final List<String>bookNames = new ArrayList<>();
static {
books.add(new Book("三国演义","罗贯中",65.3,"小说"));
books.add(new Book("红楼梦","曹雪芹",103.5,"小说"));
books.add(new Book("水浒传","施耐庵",44.4,"小说"));
books.add(new Book("西游记","吴承恩",98.2,"小说"));
bookNames.add("三国演义");
bookNames.add("红楼梦");
bookNames.add("水浒传");
bookNames.add("西游记");
}
public void disPlay() {
for (Book temp:books) {
System.out.println(temp.toString());
}
}
public boolean isBookContains(String bookName){
return bookNames.contains(bookName);
}
public int index(String bookName){
return bookNames.indexOf(bookName);
}
public void remove(int index){
books.remove(index);
bookNames.remove(index);
}
}
User包下
User类
package practice_2_27.User;
import practice_2_27.Book.BookList;
import practice_2_27.Operate.IOperation;
import java.util.Scanner;
public abstract class User {
protected String userName;
protected IOperation[] operations;
Scanner sc = new Scanner(System.in);
public User(String userName) {
this.userName = userName;
}
public abstract int menu();
public void doOperate(BookList bookList,int choice) {
operations[choice-1].operate(bookList);
}
}
NormalUser类
package practice_2_27.User;
import practice_2_21.Operation.impl.ListBooksOperation;
import practice_2_27.Operate.IOperation;
import practice_2_27.Operate.impls.BorrowOperation;
import practice_2_27.Operate.impls.FindOperation;
import practice_2_27.Operate.impls.ListOperation;
import practice_2_27.Operate.impls.ReturnOperation;
import practice_2_27.User.User;
import java.util.Scanner;
public class NormalUser extends User {
public NormalUser(String userName) {
super(userName);
super.operations = new IOperation[]{
new ListOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation()
};
}
@Override
public int menu() {
System.out.println("************欢迎"+userName+"来到图书管理系统***********");
System.out.println("1.显示书籍列表");
System.out.println("2.查询书籍");
System.out.println("3.借阅书籍");
System.out.println("4.归还书籍");
System.out.println("-1.退出系统");
System.out.println("请输入你的选择:");
int choice = sc.nextInt();
if(choice == -1){
sc.close();
}
return choice;
}
}
Admin类
package practice_2_27.User;
import practice_2_27.Operate.IOperation;
import practice_2_27.Operate.impls.*;
public class Admin extends User{
public Admin(String userName) {
super(userName);
super.operations = new IOperation[]{
new AddOperation(),
new DeleteOperation(),
new UpdateOperation(),
new FindOperation(),
new ListOperation()
};
}
@Override
public int menu() {
System.out.println("************欢迎"+userName+"来到图书管理系统***********");
System.out.println("1.添加书籍");
System.out.println("2.删除书籍");
System.out.println("3.更新书籍");
System.out.println("4.查找书籍");
System.out.println("5.显示书籍列表");
System.out.println("-1.退出系统");
System.out.println("请输入你的选择:");
int choice = sc.nextInt();
if(choice == -1){
sc.close();
}
return choice;
}
}
Operate包下
IOperation接口
package practice_2_27.Operate;
import practice_2_27.Book.BookList;
import java.util.Scanner;
public abstract interface IOperation {
Scanner sc = new Scanner(System.in);
void operate(BookList bookList);
}
impl包下的操作类
Add Operation
package practice_2_27.Operate.impls;
import practice_2_27.Book.Book;
import practice_2_27.Book.BookList;
import practice_2_27.Operate.IOperation;
public class AddOperation implements IOperation {
@Override
public void operate(BookList bookList) {
System.out.println("您现在进行的是添加书籍操作");
System.out.println("请输入您要添加的书籍名称");
String bookName = sc.nextLine();
//判断书架上是否已经包含了该图书
if(bookList.isBookContains(bookName)){
System.out.println("书架上已经有这本书啦~");
return;
}
System.out.println("请输入作者名称:");
String author = sc.nextLine();
System.out.println("请输入书籍价格:");
Double price = sc.nextDouble();
System.out.println("请输入书籍类型:");
String type = sc.nextLine();
type = sc.nextLine();
bookList.books.add(new Book(bookName,author,price,type));
bookList.bookNames.add(bookName);
System.out.println("添加成功");
}
}
Borrow Operation
package practice_2_27.Operate.impls;
import practice_2_27.Book.BookList;
import practice_2_27.Operate.IOperation;
public class BorrowOperation implements IOperation {
@Override
public void operate(BookList bookList) {
System.out.println("请输入你要借的书籍名称:");
String bookName = sc.nextLine();
if(!bookList.isBookContains(bookName)){
System.out.println("书架上没有这本书哦~");
}else {
//判断这本书是否被借出去
int index = bookList.index(bookName);
if(bookList.books.get(index).getBorrowed() == false){
bookList.books.get(index).setBorrowed(true);
System.out.println("借阅成功~");
}else {
System.out.println("这本书已经被借走啦~");
}
}
}
}
DeleteOperation
package practice_2_27.Operate.impls;
import practice_2_27.Book.BookList;
import practice_2_27.Operate.IOperation;
public class DeleteOperation implements IOperation {
@Override
public void operate(BookList bookList) {
System.out.println("请输入要删除的书籍名称:");
String bookName = sc.nextLine();
//判断书架上是否存在这本书
if(!bookList.isBookContains(bookName)){
System.out.println("书架上没有这本书哦~");
}else {
//找到其下标
int index = bookList.index(bookName);
//删除
bookList.remove(index);
System.out.println("删除成功~");
}
}
}
Find Operation
package practice_2_27.Operate.impls;
import practice_2_27.Book.BookList;
import practice_2_27.Operate.IOperation;
public class FindOperation implements IOperation {
@Override
public void operate(BookList bookList) {
System.out.println("请输入要查找的书籍名称:");
String bookName = sc.nextLine();
//判断书架上是否存在这本书
if(!bookList.isBookContains(bookName)){
System.out.println("书架上没有这本书哦~");
}else {
//找到其下标
int index = bookList.index(bookName);
//删除
System.out.println(bookList.books.get(index));
}
}
}
ListOperation
package practice_2_27.Operate.impls;
import practice_2_27.Book.BookList;
import practice_2_27.Operate.IOperation;
public class ListOperation implements IOperation {
@Override
public void operate(BookList bookList) {
System.out.println("书籍列表:");
bookList.disPlay();
}
}
ReturnOperation
package practice_2_27.Operate.impls;
import practice_2_27.Book.BookList;
import practice_2_27.Operate.IOperation;
public class ReturnOperation implements IOperation {
@Override
public void operate(BookList bookList) {
//还书
System.out.println("请输入你需要还的书籍名称:");
String bookName = sc.nextLine();
//检查书架上是否有这本书
if(!bookList.isBookContains(bookName)){
System.out.println("书架上没有这本书哦~");
}else {
//检查这本书有没有被借走
int index = bookList.index(bookName);
if(bookList.books.get(index).getBorrowed() == true){
bookList.books.get(index).setBorrowed(false);
System.out.println("还书成功~");
}else {
System.out.println("这本书没有被借走呀~");
} }
}
}
UpdateOperation
package practice_2_27.Operate.impls;
import practice_2_27.Book.Book;
import practice_2_27.Book.BookList;
import practice_2_27.Operate.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void operate(BookList bookList) {
System.out.println("请输入要更新的书籍名称:");
String bookName = sc.nextLine();
//
if(!bookList.isBookContains(bookName)){
System.out.println("书架上没有这本书哦~");
}else {
int index = bookList.index(bookName);
Book book = bookList.books.get(index);
System.out.println("请输入修改后的书籍价格:");
Double price = sc.nextDouble();
book.setPrice(price);
System.out.println("请输入修改后的书籍类型:");
String type = sc.nextLine();
type = sc.nextLine();
book.setType(type);
System.out.println("请输入修改后该书籍是否被借出");
Boolean res = sc.nextBoolean();
book.setBorrowed(res);
System.out.println("修改成功!");
}
}
}
Main类
import practice_2_27.Book.BookList;
import practice_2_27.User.Admin;
import practice_2_27.User.NormalUser;
import practice_2_27.User.User;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//创建一个书架对象
BookList bookList = new BookList();
User user = login();
while (true){
int res = user.menu();
if(res == -1){
System.out.println("bye~~~");
return;
}else {
user.doOperate(bookList,res);
}
}
}
public static User login(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String userName = sc.nextLine();
System.out.println("1.普通用户 2.管理员");
System.out.println("请输入您的身份:");
int val = sc.nextInt();
if(val == 1){
return new NormalUser(userName);
}else{
return new Admin(userName);
}
}
}