package book_management.book;
/**
每本书对应的实体类
*/
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;
}
public String getName() {
return name;
}
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 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=” + isBorrowed +
‘}’;
}
}
package book_management.book;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 书架类,所有书籍在这个类中存储
*/
public class BookList {
// 使用JDK内置的动态数组
// 保存每个书籍对象
private static List<Book> books = new ArrayList<>();
// 保存所有的书籍名称,作为操作书籍的索引
private static List<String> booksName = new ArrayList<>();
// 静态代码块
static {
// 初始化操作
books.add(new Book("水浒传", "施耐庵",
66.6, "武侠小说"));
books.add(new Book("三国演义", "罗贯中",
88.6, "谋略小说"));
books.add(new Book("西游记", "吴承恩",
99.6, "玄幻小说"));
books.add(new Book("红楼梦", "曹雪芹",
260.6, "经典小说"));
booksName.add("水浒传");
booksName.add("三国演义");
booksName.add("西游记");
booksName.add("红楼梦");
}
/**
* 根据书籍名称判断当前书架上是否存在该书
*
* @param booksName
* @return
*/
public boolean isContains(String booksName) {
// ArrayList.contains();
if (this.booksName.contains(booksName)) {
return true;
} else {
return false;
}
}
public void addBook(Book book) {
books.add(book);
}
public void printBook() {
// 遍历Books数组
Iterator<Book> iterator = books.iterator();
while (iterator.hasNext()) {
Book book = iterator.next();
System.out.println(book);
}
}
public void bookUpdate(String booksName,double price,String type){
Book book = findBook(booksName);
book.setPrice(price);
book.setType(type);
}
public boolean isBorrowed(String booksName){
Book book = findBook(booksName);
return book.isBorrowed();
}
public void borrowBook(String booksName){
//根据书名称找到具体的Book对象
Book book = findBook(booksName);
book.setBorrowed(true);
}
public void returnBook(String booksName){
Book book = findBook(booksName);
book.setBorrowed(false);
}
public void bookUndercarriage(String booksName){
books.remove(booksName);
this.booksName.remove(booksName);
}
private Book findBook(String booksName) {
//需要迭代查找该书
Iterator<Book> iterator = books.iterator();
while (iterator.hasNext()){
Book book = iterator.next();
if (book.getName().equals(booksName)){
return book;
}
}
return null;
}
}
package book_management.operation.impl;
import book_management.book.Book;
import book_management.book.BookList;
import book_management.operation.IOperation;
// 添加书籍操作
public class AddOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是书籍的添加操作");
System.out.println("请输入书籍名称:");
String booksName = scanner.next();
// 需要判断当前书架上是否已经存在该书
if (bookList.isContains(booksName)) {
System.err.println("书架上已经存在该书,无需再次添加~");
return;
}else {
System.out.println("请输入书籍作者:");
String author = scanner.next();
System.out.println("请输入书籍的价格:");
double price = scanner.nextDouble();
System.out.println("请输入书籍的类别:");
String type = scanner.next();
Book book = new Book(booksName,author,price,type);
bookList.addBook(book);
System.out.println("书籍添加成功~~");
}
}
}
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是借书操作~");
System.out.println("请输入您想借的书名:");
String booksName = scanner.next();
//判断这本书是否存在
if (bookList.isContains(booksName)){
//进行具体的借书操作
bookList.borrowBook(booksName);
System.out.println("借书成功~");
}else{
System.err.println("该书籍还没上架,客官再等等哈~~");
}
}
}
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
/**
* 展示当前书架的所有书籍
*/
public class DisplayOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是打印书籍列表操作~~");
bookList.printBook();
}
}
package book_management.operation.impl;
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 .next();
if (bookList.isContains(booksName)){
System.out.println("图书馆有该书~");
}else{
System.out.println("该书还没上架");
}
}
}
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class RemoveOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是书籍下架操作~");
System.out.println("请输入您要下架的书籍名称");
String booksName = scanner.next();
if (bookList.isContains(booksName)){
//具体的下架操作
bookList.bookUndercarriage(booksName);
System.out.println("下架成功~");
}else {
System.err.println("该书不在图书馆中,无法下架");
}
}
}
package book_management.operation.impl;
import book_management.book.BookList;
import book_management.operation.IOperation;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("您现在进行的是还书操作~");
System.out.println("请输入您要还的书籍名称:");
String booksName = scanner.next();
//先判断该书在图书馆是否存在
if (bookList.isContains(booksName)){
//还书操作 判断借出状态
if (bookList.isBorrowed(booksName)){
bookList.returnBook(booksName);
System.out.println("还书成功~");
}else {
System.err.println("该书您就没借~");
}
}else{
System.err.println("该书您还没借");
}
}
}
package book_management.operation.impl;
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.next();
if (bookList.isContains(booksName)){
//具体操作
System.out.println("请输入修改后的价格:");
double price = scanner.nextDouble();
String type = scanner.next();
bookList.bookUpdate(booksName,price,type);
System.out.println("书籍详情修改成功~");
}else{
System.err.println("书籍不存在~");
}
}
}
package book_management.operation;
import book_management.book.BookList;
import java.util.Scanner;
/**
* 操作书籍列表的行为
*/
public interface IOperation {
// 获取用户输入
Scanner scanner = new Scanner(System.in);
// 子类共有的方法,根据传入的BookList来进行增删改查以及借阅操作
void work(BookList bookList);
}
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.*;
// 管理员
/**
* 1.添加书籍
* 2.删除书籍
* 3.更新书籍
* 4.查找书籍
* 5.显示当前书籍列表
* -1.退出
*/
public class AdminUser extends User{
public AdminUser(String userName) {
this.name = userName;
operations = new IOperation[] {
new AddOperation(),
new RemoveOperation(),
new UpdateOperation(),
new FindOperation(),
new DisplayOperation()
};
}
/**
* * 1.添加书籍
* * 2.删除书籍
* * 3.更新书籍
* * 4.查找书籍
* * 5.显示当前书籍列表
* * -1.退出
* @return
*/
@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("请输入您的选择:");
int choice = scanner.nextInt();
// 切记不要在这关闭scanner,当用户输入-1退出时再关闭scanner
return choice;
}
}
package book_management.user;
import book_management.operation.IOperation;
import book_management.operation.impl.*;
// 是普通用户类
public class NormalUser extends User{
/**
* 1.显示当前书籍列表
* 2.查询书籍
* 3.借阅书籍
* 4.归还书籍
* -1.退出
* @param userName
*/
public NormalUser(String userName) {
this.name = userName;
// 规定了普通用户的操作权限
operations = new IOperation[] {
new DisplayOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation()
};
}
// 普通用户类是需要外部来调用的
/**
* * 1.显示当前书籍列表
* * 2.查询书籍
* * 3.借阅书籍
* * 4.归还书籍
* * -1.退出
* @return
*/
@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("请输入您的选择:");
int choice = scanner.nextInt();
// 切记不要在这关闭scanner,当用户输入-1退出时再关闭scanner
return choice;
}
}
package book_management.user;
import book_management.book.BookList;
import book_management.operation.IOperation;
import java.util.Scanner;
/**
* 用户类
*/
public abstract class User {
// 用户输入
protected Scanner scanner = new Scanner(System.in);
// 用户名
protected String name;
// 用户权限,此时这个数组无法初始化,不同的用户权限不同
protected IOperation[] operations;
// 菜单方法,具体实现现在不知道,具体实现交给子类实现
// 返回值就是用户输入的数字,我根据数字来进行相应操作
public abstract int menu();
// 根据用户输入,操作书籍列表
public void doOperation(int choice, BookList bookList) {
operations[choice - 1].work(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.Scanner;
public class Test {
public static void main(String[] args) {
// 用户登录
// 1.输入用户名
// 2.根据用户选择,确定用户身份
User user = login();
BookList bookList = new BookList();
while (true) {
int choice = user.menu();
if (choice == -1){
System.out.println("BayBay~~~");
break;
}
user.doOperation(choice,bookList);
}
}
public static User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = scanner.next();
System.out.println("请输入您的身份,1表示普通用户,0表示管理员");
int choice = scanner.nextInt();
if (choice == 1) {
return new NormalUser(userName);
}
return new AdminUser(userName);
}
}
说明
运行平台:Windows10 家庭版
开发工具:IntelliJ IDEA 2020.1.3 x64
JDK 版本:JDK1.8 一、 项目结果
二、 代码结构
三、 项目的操作与运行
1.普通用户的权限
输入用户名,并输入确定身份
普通用户选择 1 显示当前书籍列表
普通用户选择 2 查阅书籍
普通用户选择 3 借阅书籍
普通用户选择 4 归还书籍
普通用户选择-1 退出系统
2. 管理员的权限
管理员输入 1 添加书籍
管理员输入 2 删除书籍
管理员输入 3 更行书籍
管理员输入 4 查找书籍
管理员输入 5查看书籍列表