目录
图书管理系统
思维导图
图书部分
每本具体书籍——Book
书架类——BookList
用户部分
User——用户类
NormalUser(普通用户)
AdminUser(管理员)
权限
操作书籍的接口——IOperation
显示当前书籍列表——ListAllBooksOperation
添加书籍——AddOperation
下架书籍——RemoveOperation
更新书籍——UpdateOperation
查找书籍——FindOperation
借阅书籍——BorrowOperation
归还书籍——ReturnOperation
主方法——程序的入口
图书管理系统
思维导图
图书部分
每本具体书籍——Book
package book_management.book;
public class Book {
// 书名
private String name;
// 作者名
private String author;
// 书籍价格
private Double price;
// 书籍的类别
private String type;
// 书籍是否被借出,默认为false
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;
}
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
public Double getPrice() {
return price;
}
public String getType() {
return type;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setPrice(Double price) {
this.price = price;
}
public void setType(String type) {
this.type = type;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + ''' +
", author='" + author + ''' +
", price=" + price +
", type='" + type + ''' +
", isBorrowed=" + isBorrowed +
'}';
}
}
书架类——BookList
package book_management.book;
import java.util.ArrayList;
import java.util.List;
public class BookList {
// 书架就是保存书籍的,书本的个数不确定,要么用动态数组,要么使用链表
private List books = new ArrayList<>();
// 保存当前书架上所有书籍的名称,以后的操作就是根据书籍的名称来查找具体的Book对象
// 一一对应的映射关系
private List booksName = new ArrayList<>();
private int usedSize;
public BookList() {
// 产生一个书架对象时,默认上架的四本书籍
books.add(new Book("三国演义", "罗贯中", 76.6, "小说"));
books.add(new Book("水浒传", "施耐庵", 55.6, "小说"));
books.add(new Book("西游记", "吴承恩", 44.6, "小说"));
books.add(new Book("红楼梦", "曹雪芹&未知", 88.6, "小说"));
//将当前这四本书的书名也添加到booksName的列表中
booksName.add("三国演义");
booksName.add("水浒传");
booksName.add("西游记");
booksName.add("红楼梦");
this.usedSize = 4;
}
public int getUsedSize() {
return usedSize;
}
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
public Book getBook(int i) {
return this.books.get(i);
}
public void setBook(int i, Book book) {
this.books.set(i, book);
}
public boolean contains(String booksName) {
// 遍历booksName这个列表
for (String str : this.booksName) {
if (str.equals(booksName)) {
return true;
}
}
return false;
}
public void addNewBook(String booksName, String author, double price, String type) {
Book book = new Book(booksName, author, price, type);
this.books.add(book);
this.booksName.add(booksName);
this.usedSize++;
}
public void removeBook(String booksName, BookList bookList) {
int n = bookList.getUsedSize();
int i = 0;
int index = 0;
for (; i < n; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
index = i;
break;
}
}
if (i == n) {
System.out.println("对不起,没有找到您需要删除的书!");
return;
}
//使用for循环让后一个位置的书前移一位
for (int j = index; j < n - 1; j++) {
Book book = bookList.getBook(j + 1);//得到j+1位置的书
bookList.setBook(j, book);//将其设置为j位置
}
bookList.setUsedSize(n - 1);
System.out.println("下架成功!");
}
public void updateBook(String booksName, String type, Boolean isBorrowed, double price, BookList bookList) {
for (int i = 0; i < usedSize; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
book.setPrice(price);
book.setType(type);
book.setBorrowed(isBorrowed);
}
}
}
public void findBook(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
System.out.println("找到这本书的信息如下:");
System.out.println(book);
return;
}
}
System.out.println("没有这本书!");
}
public void returnBook(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book bookCur = bookList.getBook(i);
if (bookCur.getName().equals(booksName)) {
bookCur.setBorrowed(false);
System.out.println("归还成功!");
return;
}
}
System.out.println("没有此书!归还失败");
}
public void isBorrowed(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
book.setBorrowed(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("没有此书!借阅失败");
}
}
用户部分
User——用户类
package book_management.user;
import book_management.book.BookList;
import book_management.operation.IOperation;
public abstract class User {
//用户名
protected String name;
// 对于书籍的操作权限,此时不确定用户类型,所以是个空数组,由子类来确定到底具备哪些权限
protected IOperation[] operations;
public User(String name) {
this.name = name;
}
// 菜单,不同种类的用户菜单是不同的,根据菜单的返回值取得用户选择的操作
protected abstract int menu();
// 根据用户输入的指令来执行不同的操作
public void doOperation(BookList bookList, int choice) {
operations[choice - 1].work(bookList);
}
}
不同用户操作管理系统的权限是不同的,抽象父类没法确定由定义子类时确定。
不同用户的菜单不同,由子类来确定,使用抽象方法。
NormalUser(普通用户)
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.BorrowOperation;
import book_management.operation.impl.FindOperation;
import book_management.operation.impl.ListAllBooksOperation;
import book_management.operation.impl.ReturnOperation;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.operations = new IOperation[] {
new ListAllBooksOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
System.out.println("1.显示当前的书籍列表");
System.out.println("2.查找书籍");
System.out.println("3.借阅书籍");
System.out.println("4.归还书籍");
System.out.println("-1.退出系统");
System.out.println("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
AdminUser(管理员)
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name) {
super(name);
this.operations = new IOperation[]{
new ListAllBooksOperation(),
new AddOperation(),
new RemoveOperation(),
new UpdateOperation(),
new FindOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
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("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
权限
操作书籍的接口——IOperation
package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;
public interface IOperation {
Scanner scanner = new Scanner(System.in);
//在指定的书架上进行操作处理
void work(BookList bookList);
}
显示当前书籍列表——ListAllBooksOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class ListAllBooksOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("此时您进行的是展示书籍列表的操作");
//具体书籍在书架类中保存,我们调用的就是书架类提供的方法
//套接口的最大目的就是做权限划分
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
System.out.println(bookList.getBook(i));
}
}
}
添加书籍——AddOperation
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class AddOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是添加书籍操作");
System.out.println("请输入您要添加的书籍名称:");
String booksName = scanner.nextLine();
//假设书籍已经有这本书了
if (bookList.contains(booksName)) {
System.err.println("书籍在当前书架上已经存在了,无需添加");
}
System.out.println("请输入您要添加的书籍作者:");
String author = scanner.nextLine();
System.out.println("请输入您要添加的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要添加的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.addNewBook(booksName,author,price,type);
System.out.println("添加书籍成功!");
}
}
下架书籍——RemoveOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class RemoveOperation implements IOperation {
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("您现在进行的是下架书籍操作");
System.out.println("请输入要下架的图书名称:");
String booksName = scanner.next();
bookList.removeBook(booksName,bookList);
}
}
更新书籍——UpdateOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是更新书籍操作");
System.out.println("请输入您要更新的书籍名称:");
String booksName = scanner.nextLine();
//书籍有这本书
if (!bookList.contains(booksName)) {
System.err.println("书籍不存在,无法更新");
}
System.out.println("请输入您要更新的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要更新的书籍借阅情况:");
Boolean isBorrowed = scanner.nextBoolean();
System.out.println("请输入您要更新的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.updateBook( booksName, type, isBorrowed, price, bookList);
System.out.println("更新书籍成功!");
}
}
查找书籍——FindOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是查找书籍操作");
System.out.println("请输入您要查找的书籍名称:");
String booksName = scanner.nextLine();
bookList.findBook(booksName,bookList);
}
}
借阅书籍——BorrowOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
归还书籍——ReturnOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是归还书籍操作");
System.out.println("请输入您要归还的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.returnBook(booksName,bookList);
}
}
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management.book;
public class Book {
// 书名
private String name;
// 作者名
private String author;
// 书籍价格
private Double price;
// 书籍的类别
private String type;
// 书籍是否被借出,默认为false
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;
}
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
public Double getPrice() {
return price;
}
public String getType() {
return type;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setPrice(Double price) {
this.price = price;
}
public void setType(String type) {
this.type = type;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + ''' +
", author='" + author + ''' +
", price=" + price +
", type='" + type + ''' +
", isBorrowed=" + isBorrowed +
'}';
}
}
书架类——BookList
package book_management.book;
import java.util.ArrayList;
import java.util.List;
public class BookList {
// 书架就是保存书籍的,书本的个数不确定,要么用动态数组,要么使用链表
private List books = new ArrayList<>();
// 保存当前书架上所有书籍的名称,以后的操作就是根据书籍的名称来查找具体的Book对象
// 一一对应的映射关系
private List booksName = new ArrayList<>();
private int usedSize;
public BookList() {
// 产生一个书架对象时,默认上架的四本书籍
books.add(new Book("三国演义", "罗贯中", 76.6, "小说"));
books.add(new Book("水浒传", "施耐庵", 55.6, "小说"));
books.add(new Book("西游记", "吴承恩", 44.6, "小说"));
books.add(new Book("红楼梦", "曹雪芹&未知", 88.6, "小说"));
//将当前这四本书的书名也添加到booksName的列表中
booksName.add("三国演义");
booksName.add("水浒传");
booksName.add("西游记");
booksName.add("红楼梦");
this.usedSize = 4;
}
public int getUsedSize() {
return usedSize;
}
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
public Book getBook(int i) {
return this.books.get(i);
}
public void setBook(int i, Book book) {
this.books.set(i, book);
}
public boolean contains(String booksName) {
// 遍历booksName这个列表
for (String str : this.booksName) {
if (str.equals(booksName)) {
return true;
}
}
return false;
}
public void addNewBook(String booksName, String author, double price, String type) {
Book book = new Book(booksName, author, price, type);
this.books.add(book);
this.booksName.add(booksName);
this.usedSize++;
}
public void removeBook(String booksName, BookList bookList) {
int n = bookList.getUsedSize();
int i = 0;
int index = 0;
for (; i < n; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
index = i;
break;
}
}
if (i == n) {
System.out.println("对不起,没有找到您需要删除的书!");
return;
}
//使用for循环让后一个位置的书前移一位
for (int j = index; j < n - 1; j++) {
Book book = bookList.getBook(j + 1);//得到j+1位置的书
bookList.setBook(j, book);//将其设置为j位置
}
bookList.setUsedSize(n - 1);
System.out.println("下架成功!");
}
public void updateBook(String booksName, String type, Boolean isBorrowed, double price, BookList bookList) {
for (int i = 0; i < usedSize; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
book.setPrice(price);
book.setType(type);
book.setBorrowed(isBorrowed);
}
}
}
public void findBook(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
System.out.println("找到这本书的信息如下:");
System.out.println(book);
return;
}
}
System.out.println("没有这本书!");
}
public void returnBook(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book bookCur = bookList.getBook(i);
if (bookCur.getName().equals(booksName)) {
bookCur.setBorrowed(false);
System.out.println("归还成功!");
return;
}
}
System.out.println("没有此书!归还失败");
}
public void isBorrowed(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
book.setBorrowed(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("没有此书!借阅失败");
}
}
用户部分
User——用户类
package book_management.user;
import book_management.book.BookList;
import book_management.operation.IOperation;
public abstract class User {
//用户名
protected String name;
// 对于书籍的操作权限,此时不确定用户类型,所以是个空数组,由子类来确定到底具备哪些权限
protected IOperation[] operations;
public User(String name) {
this.name = name;
}
// 菜单,不同种类的用户菜单是不同的,根据菜单的返回值取得用户选择的操作
protected abstract int menu();
// 根据用户输入的指令来执行不同的操作
public void doOperation(BookList bookList, int choice) {
operations[choice - 1].work(bookList);
}
}
不同用户操作管理系统的权限是不同的,抽象父类没法确定由定义子类时确定。
不同用户的菜单不同,由子类来确定,使用抽象方法。
NormalUser(普通用户)
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.BorrowOperation;
import book_management.operation.impl.FindOperation;
import book_management.operation.impl.ListAllBooksOperation;
import book_management.operation.impl.ReturnOperation;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.operations = new IOperation[] {
new ListAllBooksOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
System.out.println("1.显示当前的书籍列表");
System.out.println("2.查找书籍");
System.out.println("3.借阅书籍");
System.out.println("4.归还书籍");
System.out.println("-1.退出系统");
System.out.println("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
AdminUser(管理员)
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name) {
super(name);
this.operations = new IOperation[]{
new ListAllBooksOperation(),
new AddOperation(),
new RemoveOperation(),
new UpdateOperation(),
new FindOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
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("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
权限
操作书籍的接口——IOperation
package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;
public interface IOperation {
Scanner scanner = new Scanner(System.in);
//在指定的书架上进行操作处理
void work(BookList bookList);
}
显示当前书籍列表——ListAllBooksOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class ListAllBooksOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("此时您进行的是展示书籍列表的操作");
//具体书籍在书架类中保存,我们调用的就是书架类提供的方法
//套接口的最大目的就是做权限划分
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
System.out.println(bookList.getBook(i));
}
}
}
添加书籍——AddOperation
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class AddOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是添加书籍操作");
System.out.println("请输入您要添加的书籍名称:");
String booksName = scanner.nextLine();
//假设书籍已经有这本书了
if (bookList.contains(booksName)) {
System.err.println("书籍在当前书架上已经存在了,无需添加");
}
System.out.println("请输入您要添加的书籍作者:");
String author = scanner.nextLine();
System.out.println("请输入您要添加的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要添加的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.addNewBook(booksName,author,price,type);
System.out.println("添加书籍成功!");
}
}
下架书籍——RemoveOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class RemoveOperation implements IOperation {
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("您现在进行的是下架书籍操作");
System.out.println("请输入要下架的图书名称:");
String booksName = scanner.next();
bookList.removeBook(booksName,bookList);
}
}
更新书籍——UpdateOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是更新书籍操作");
System.out.println("请输入您要更新的书籍名称:");
String booksName = scanner.nextLine();
//书籍有这本书
if (!bookList.contains(booksName)) {
System.err.println("书籍不存在,无法更新");
}
System.out.println("请输入您要更新的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要更新的书籍借阅情况:");
Boolean isBorrowed = scanner.nextBoolean();
System.out.println("请输入您要更新的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.updateBook( booksName, type, isBorrowed, price, bookList);
System.out.println("更新书籍成功!");
}
}
查找书籍——FindOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是查找书籍操作");
System.out.println("请输入您要查找的书籍名称:");
String booksName = scanner.nextLine();
bookList.findBook(booksName,bookList);
}
}
借阅书籍——BorrowOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
归还书籍——ReturnOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是归还书籍操作");
System.out.println("请输入您要归还的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.returnBook(booksName,bookList);
}
}
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management.book;
import java.util.ArrayList;
import java.util.List;
public class BookList {
// 书架就是保存书籍的,书本的个数不确定,要么用动态数组,要么使用链表
private List books = new ArrayList<>();
// 保存当前书架上所有书籍的名称,以后的操作就是根据书籍的名称来查找具体的Book对象
// 一一对应的映射关系
private List booksName = new ArrayList<>();
private int usedSize;
public BookList() {
// 产生一个书架对象时,默认上架的四本书籍
books.add(new Book("三国演义", "罗贯中", 76.6, "小说"));
books.add(new Book("水浒传", "施耐庵", 55.6, "小说"));
books.add(new Book("西游记", "吴承恩", 44.6, "小说"));
books.add(new Book("红楼梦", "曹雪芹&未知", 88.6, "小说"));
//将当前这四本书的书名也添加到booksName的列表中
booksName.add("三国演义");
booksName.add("水浒传");
booksName.add("西游记");
booksName.add("红楼梦");
this.usedSize = 4;
}
public int getUsedSize() {
return usedSize;
}
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
public Book getBook(int i) {
return this.books.get(i);
}
public void setBook(int i, Book book) {
this.books.set(i, book);
}
public boolean contains(String booksName) {
// 遍历booksName这个列表
for (String str : this.booksName) {
if (str.equals(booksName)) {
return true;
}
}
return false;
}
public void addNewBook(String booksName, String author, double price, String type) {
Book book = new Book(booksName, author, price, type);
this.books.add(book);
this.booksName.add(booksName);
this.usedSize++;
}
public void removeBook(String booksName, BookList bookList) {
int n = bookList.getUsedSize();
int i = 0;
int index = 0;
for (; i < n; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
index = i;
break;
}
}
if (i == n) {
System.out.println("对不起,没有找到您需要删除的书!");
return;
}
//使用for循环让后一个位置的书前移一位
for (int j = index; j < n - 1; j++) {
Book book = bookList.getBook(j + 1);//得到j+1位置的书
bookList.setBook(j, book);//将其设置为j位置
}
bookList.setUsedSize(n - 1);
System.out.println("下架成功!");
}
public void updateBook(String booksName, String type, Boolean isBorrowed, double price, BookList bookList) {
for (int i = 0; i < usedSize; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
book.setPrice(price);
book.setType(type);
book.setBorrowed(isBorrowed);
}
}
}
public void findBook(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
System.out.println("找到这本书的信息如下:");
System.out.println(book);
return;
}
}
System.out.println("没有这本书!");
}
public void returnBook(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book bookCur = bookList.getBook(i);
if (bookCur.getName().equals(booksName)) {
bookCur.setBorrowed(false);
System.out.println("归还成功!");
return;
}
}
System.out.println("没有此书!归还失败");
}
public void isBorrowed(String booksName, BookList bookList) {
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(booksName)) {
book.setBorrowed(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("没有此书!借阅失败");
}
}
User——用户类
package book_management.user;
import book_management.book.BookList;
import book_management.operation.IOperation;
public abstract class User {
//用户名
protected String name;
// 对于书籍的操作权限,此时不确定用户类型,所以是个空数组,由子类来确定到底具备哪些权限
protected IOperation[] operations;
public User(String name) {
this.name = name;
}
// 菜单,不同种类的用户菜单是不同的,根据菜单的返回值取得用户选择的操作
protected abstract int menu();
// 根据用户输入的指令来执行不同的操作
public void doOperation(BookList bookList, int choice) {
operations[choice - 1].work(bookList);
}
}
不同用户操作管理系统的权限是不同的,抽象父类没法确定由定义子类时确定。
不同用户的菜单不同,由子类来确定,使用抽象方法。
NormalUser(普通用户)
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.BorrowOperation;
import book_management.operation.impl.FindOperation;
import book_management.operation.impl.ListAllBooksOperation;
import book_management.operation.impl.ReturnOperation;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.operations = new IOperation[] {
new ListAllBooksOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
System.out.println("1.显示当前的书籍列表");
System.out.println("2.查找书籍");
System.out.println("3.借阅书籍");
System.out.println("4.归还书籍");
System.out.println("-1.退出系统");
System.out.println("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
AdminUser(管理员)
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name) {
super(name);
this.operations = new IOperation[]{
new ListAllBooksOperation(),
new AddOperation(),
new RemoveOperation(),
new UpdateOperation(),
new FindOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
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("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
权限
操作书籍的接口——IOperation
package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;
public interface IOperation {
Scanner scanner = new Scanner(System.in);
//在指定的书架上进行操作处理
void work(BookList bookList);
}
显示当前书籍列表——ListAllBooksOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class ListAllBooksOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("此时您进行的是展示书籍列表的操作");
//具体书籍在书架类中保存,我们调用的就是书架类提供的方法
//套接口的最大目的就是做权限划分
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
System.out.println(bookList.getBook(i));
}
}
}
添加书籍——AddOperation
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class AddOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是添加书籍操作");
System.out.println("请输入您要添加的书籍名称:");
String booksName = scanner.nextLine();
//假设书籍已经有这本书了
if (bookList.contains(booksName)) {
System.err.println("书籍在当前书架上已经存在了,无需添加");
}
System.out.println("请输入您要添加的书籍作者:");
String author = scanner.nextLine();
System.out.println("请输入您要添加的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要添加的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.addNewBook(booksName,author,price,type);
System.out.println("添加书籍成功!");
}
}
下架书籍——RemoveOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class RemoveOperation implements IOperation {
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("您现在进行的是下架书籍操作");
System.out.println("请输入要下架的图书名称:");
String booksName = scanner.next();
bookList.removeBook(booksName,bookList);
}
}
更新书籍——UpdateOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是更新书籍操作");
System.out.println("请输入您要更新的书籍名称:");
String booksName = scanner.nextLine();
//书籍有这本书
if (!bookList.contains(booksName)) {
System.err.println("书籍不存在,无法更新");
}
System.out.println("请输入您要更新的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要更新的书籍借阅情况:");
Boolean isBorrowed = scanner.nextBoolean();
System.out.println("请输入您要更新的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.updateBook( booksName, type, isBorrowed, price, bookList);
System.out.println("更新书籍成功!");
}
}
查找书籍——FindOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是查找书籍操作");
System.out.println("请输入您要查找的书籍名称:");
String booksName = scanner.nextLine();
bookList.findBook(booksName,bookList);
}
}
借阅书籍——BorrowOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
归还书籍——ReturnOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是归还书籍操作");
System.out.println("请输入您要归还的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.returnBook(booksName,bookList);
}
}
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management.user;
import book_management.book.BookList;
import book_management.operation.IOperation;
public abstract class User {
//用户名
protected String name;
// 对于书籍的操作权限,此时不确定用户类型,所以是个空数组,由子类来确定到底具备哪些权限
protected IOperation[] operations;
public User(String name) {
this.name = name;
}
// 菜单,不同种类的用户菜单是不同的,根据菜单的返回值取得用户选择的操作
protected abstract int menu();
// 根据用户输入的指令来执行不同的操作
public void doOperation(BookList bookList, int choice) {
operations[choice - 1].work(bookList);
}
}
不同用户操作管理系统的权限是不同的,抽象父类没法确定由定义子类时确定。
不同用户的菜单不同,由子类来确定,使用抽象方法。
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.BorrowOperation;
import book_management.operation.impl.FindOperation;
import book_management.operation.impl.ListAllBooksOperation;
import book_management.operation.impl.ReturnOperation;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.operations = new IOperation[] {
new ListAllBooksOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
System.out.println("1.显示当前的书籍列表");
System.out.println("2.查找书籍");
System.out.println("3.借阅书籍");
System.out.println("4.归还书籍");
System.out.println("-1.退出系统");
System.out.println("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
AdminUser(管理员)
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name) {
super(name);
this.operations = new IOperation[]{
new ListAllBooksOperation(),
new AddOperation(),
new RemoveOperation(),
new UpdateOperation(),
new FindOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
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("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
权限
操作书籍的接口——IOperation
package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;
public interface IOperation {
Scanner scanner = new Scanner(System.in);
//在指定的书架上进行操作处理
void work(BookList bookList);
}
显示当前书籍列表——ListAllBooksOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class ListAllBooksOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("此时您进行的是展示书籍列表的操作");
//具体书籍在书架类中保存,我们调用的就是书架类提供的方法
//套接口的最大目的就是做权限划分
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
System.out.println(bookList.getBook(i));
}
}
}
添加书籍——AddOperation
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class AddOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是添加书籍操作");
System.out.println("请输入您要添加的书籍名称:");
String booksName = scanner.nextLine();
//假设书籍已经有这本书了
if (bookList.contains(booksName)) {
System.err.println("书籍在当前书架上已经存在了,无需添加");
}
System.out.println("请输入您要添加的书籍作者:");
String author = scanner.nextLine();
System.out.println("请输入您要添加的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要添加的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.addNewBook(booksName,author,price,type);
System.out.println("添加书籍成功!");
}
}
下架书籍——RemoveOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class RemoveOperation implements IOperation {
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("您现在进行的是下架书籍操作");
System.out.println("请输入要下架的图书名称:");
String booksName = scanner.next();
bookList.removeBook(booksName,bookList);
}
}
更新书籍——UpdateOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是更新书籍操作");
System.out.println("请输入您要更新的书籍名称:");
String booksName = scanner.nextLine();
//书籍有这本书
if (!bookList.contains(booksName)) {
System.err.println("书籍不存在,无法更新");
}
System.out.println("请输入您要更新的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要更新的书籍借阅情况:");
Boolean isBorrowed = scanner.nextBoolean();
System.out.println("请输入您要更新的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.updateBook( booksName, type, isBorrowed, price, bookList);
System.out.println("更新书籍成功!");
}
}
查找书籍——FindOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是查找书籍操作");
System.out.println("请输入您要查找的书籍名称:");
String booksName = scanner.nextLine();
bookList.findBook(booksName,bookList);
}
}
借阅书籍——BorrowOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
归还书籍——ReturnOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是归还书籍操作");
System.out.println("请输入您要归还的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.returnBook(booksName,bookList);
}
}
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.*;
import java.util.Scanner;
public class AdminUser extends User {
public AdminUser(String name) {
super(name);
this.operations = new IOperation[]{
new ListAllBooksOperation(),
new AddOperation(),
new RemoveOperation(),
new UpdateOperation(),
new FindOperation()
};
}
@Override
public int menu() {
System.out.println("==================================");
System.out.println("欢迎" + this.name + "登录图书管理系统");
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("==================================");
System.out.println("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
操作书籍的接口——IOperation
package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;
public interface IOperation {
Scanner scanner = new Scanner(System.in);
//在指定的书架上进行操作处理
void work(BookList bookList);
}
显示当前书籍列表——ListAllBooksOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class ListAllBooksOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("此时您进行的是展示书籍列表的操作");
//具体书籍在书架类中保存,我们调用的就是书架类提供的方法
//套接口的最大目的就是做权限划分
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
System.out.println(bookList.getBook(i));
}
}
}
添加书籍——AddOperation
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class AddOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是添加书籍操作");
System.out.println("请输入您要添加的书籍名称:");
String booksName = scanner.nextLine();
//假设书籍已经有这本书了
if (bookList.contains(booksName)) {
System.err.println("书籍在当前书架上已经存在了,无需添加");
}
System.out.println("请输入您要添加的书籍作者:");
String author = scanner.nextLine();
System.out.println("请输入您要添加的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要添加的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.addNewBook(booksName,author,price,type);
System.out.println("添加书籍成功!");
}
}
下架书籍——RemoveOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class RemoveOperation implements IOperation {
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("您现在进行的是下架书籍操作");
System.out.println("请输入要下架的图书名称:");
String booksName = scanner.next();
bookList.removeBook(booksName,bookList);
}
}
更新书籍——UpdateOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是更新书籍操作");
System.out.println("请输入您要更新的书籍名称:");
String booksName = scanner.nextLine();
//书籍有这本书
if (!bookList.contains(booksName)) {
System.err.println("书籍不存在,无法更新");
}
System.out.println("请输入您要更新的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要更新的书籍借阅情况:");
Boolean isBorrowed = scanner.nextBoolean();
System.out.println("请输入您要更新的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.updateBook( booksName, type, isBorrowed, price, bookList);
System.out.println("更新书籍成功!");
}
}
查找书籍——FindOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是查找书籍操作");
System.out.println("请输入您要查找的书籍名称:");
String booksName = scanner.nextLine();
bookList.findBook(booksName,bookList);
}
}
借阅书籍——BorrowOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
归还书籍——ReturnOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是归还书籍操作");
System.out.println("请输入您要归还的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.returnBook(booksName,bookList);
}
}
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;
public interface IOperation {
Scanner scanner = new Scanner(System.in);
//在指定的书架上进行操作处理
void work(BookList bookList);
}
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class ListAllBooksOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("此时您进行的是展示书籍列表的操作");
//具体书籍在书架类中保存,我们调用的就是书架类提供的方法
//套接口的最大目的就是做权限划分
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
System.out.println(bookList.getBook(i));
}
}
}
添加书籍——AddOperation
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class AddOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是添加书籍操作");
System.out.println("请输入您要添加的书籍名称:");
String booksName = scanner.nextLine();
//假设书籍已经有这本书了
if (bookList.contains(booksName)) {
System.err.println("书籍在当前书架上已经存在了,无需添加");
}
System.out.println("请输入您要添加的书籍作者:");
String author = scanner.nextLine();
System.out.println("请输入您要添加的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要添加的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.addNewBook(booksName,author,price,type);
System.out.println("添加书籍成功!");
}
}
下架书籍——RemoveOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class RemoveOperation implements IOperation {
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("您现在进行的是下架书籍操作");
System.out.println("请输入要下架的图书名称:");
String booksName = scanner.next();
bookList.removeBook(booksName,bookList);
}
}
更新书籍——UpdateOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是更新书籍操作");
System.out.println("请输入您要更新的书籍名称:");
String booksName = scanner.nextLine();
//书籍有这本书
if (!bookList.contains(booksName)) {
System.err.println("书籍不存在,无法更新");
}
System.out.println("请输入您要更新的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要更新的书籍借阅情况:");
Boolean isBorrowed = scanner.nextBoolean();
System.out.println("请输入您要更新的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.updateBook( booksName, type, isBorrowed, price, bookList);
System.out.println("更新书籍成功!");
}
}
查找书籍——FindOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是查找书籍操作");
System.out.println("请输入您要查找的书籍名称:");
String booksName = scanner.nextLine();
bookList.findBook(booksName,bookList);
}
}
借阅书籍——BorrowOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
归还书籍——ReturnOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是归还书籍操作");
System.out.println("请输入您要归还的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.returnBook(booksName,bookList);
}
}
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class AddOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是添加书籍操作");
System.out.println("请输入您要添加的书籍名称:");
String booksName = scanner.nextLine();
//假设书籍已经有这本书了
if (bookList.contains(booksName)) {
System.err.println("书籍在当前书架上已经存在了,无需添加");
}
System.out.println("请输入您要添加的书籍作者:");
String author = scanner.nextLine();
System.out.println("请输入您要添加的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要添加的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.addNewBook(booksName,author,price,type);
System.out.println("添加书籍成功!");
}
}
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class RemoveOperation implements IOperation {
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("您现在进行的是下架书籍操作");
System.out.println("请输入要下架的图书名称:");
String booksName = scanner.next();
bookList.removeBook(booksName,bookList);
}
}
更新书籍——UpdateOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是更新书籍操作");
System.out.println("请输入您要更新的书籍名称:");
String booksName = scanner.nextLine();
//书籍有这本书
if (!bookList.contains(booksName)) {
System.err.println("书籍不存在,无法更新");
}
System.out.println("请输入您要更新的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要更新的书籍借阅情况:");
Boolean isBorrowed = scanner.nextBoolean();
System.out.println("请输入您要更新的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.updateBook( booksName, type, isBorrowed, price, bookList);
System.out.println("更新书籍成功!");
}
}
查找书籍——FindOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是查找书籍操作");
System.out.println("请输入您要查找的书籍名称:");
String booksName = scanner.nextLine();
bookList.findBook(booksName,bookList);
}
}
借阅书籍——BorrowOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
归还书籍——ReturnOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是归还书籍操作");
System.out.println("请输入您要归还的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.returnBook(booksName,bookList);
}
}
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class UpdateOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是更新书籍操作");
System.out.println("请输入您要更新的书籍名称:");
String booksName = scanner.nextLine();
//书籍有这本书
if (!bookList.contains(booksName)) {
System.err.println("书籍不存在,无法更新");
}
System.out.println("请输入您要更新的书籍类别:");
String type = scanner.nextLine();
System.out.println("请输入您要更新的书籍借阅情况:");
Boolean isBorrowed = scanner.nextBoolean();
System.out.println("请输入您要更新的书籍价格:");
double price = scanner.nextDouble();
// 吃掉n
String str = scanner.nextLine();
//产生书籍对象保存到书架上
bookList.updateBook( booksName, type, isBorrowed, price, bookList);
System.out.println("更新书籍成功!");
}
}
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是查找书籍操作");
System.out.println("请输入您要查找的书籍名称:");
String booksName = scanner.nextLine();
bookList.findBook(booksName,bookList);
}
}
借阅书籍——BorrowOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
归还书籍——ReturnOperation
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是归还书籍操作");
System.out.println("请输入您要归还的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.returnBook(booksName,bookList);
}
}
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借阅书籍操作");
System.out.println("请输入您要借阅的书籍名称:");
Scanner scanner = new Scanner(System.in);
String booksName = scanner.nextLine();
bookList.isBorrowed(booksName,bookList);
}
}
package book_management.operation.impl; import book_management.book.Book; import book_management.book.BookList; import book_management.operation.IOperation; import java.util.Scanner; public class ReturnOperation implements IOperation { @Override public void work(BookList bookList) { System.out.println("您现在进行的是归还书籍操作"); System.out.println("请输入您要归还的书籍名称:"); Scanner scanner = new Scanner(System.in); String booksName = scanner.nextLine(); bookList.returnBook(booksName,bookList); } }
主方法——程序的入口
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}
package book_management;
import book_management.book.BookList;
import book_management.user.AdminUser;
import book_management.user.NormalUser;
import book_management.user.User;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 1.此时图书馆只有一个书架
BookList bookList = new BookList();
// 2.登录操作
User user = login();
// 3.开始进行选择
while (true) {
int choice = user.menu();
if (choice == -1) {
System.out.println("系统退出");
break;
} else {
user.doOperation(bookList,choice);
}
}
}
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的姓名:");
String name = scanner.nextLine();
System.out.println("请选择您的身份:1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(name);
} else if (choice == 0) {
return new AdminUser(name);
} else {
throw new NoSuchElementException("键入有误,没有选项");
}
}
}



