book(包)
operation(功能包)
user(使用者包)
package book;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 14:45
* Description:书
*/
public class Book {
private String name;//书名
private String author;//作者
private double price;//价格
private String type;//类型
private boolean state;//书的状态(已借出or未借出)
//对书进行初始化,书的状态不用进行初始化(默认未借出)
public Book(String name, String author, double price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
this.state = state;
}
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 isState() {
return state;
}
public void setState(boolean state) {
this.state = state;
}
@Override
public String toString() {
return "[" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", " + (state == true ? "已借出" : "未借出") +
']';
}
}
package book;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 14:52
* Description:书架
*/
public class BookList {
private Book[] books = new Book[10];
private int usedSize;
public BookList() {
books[0] = new Book("三国演义","罗贯中",19.9,"小说");
books[1] = new Book("西游记","吴承恩",29.9,"小说");
books[2] = new Book("红楼梦","曹雪芹",26.9,"小说");
usedSize = 3;
}
public Book getBooks(int pos) {//输入下标获取该下标的这本书
return books[pos];
}
public void setBooks(int pos, Book book) {//输入下标和一本书,在该下标放入一本书
this.books[pos] = book;
}
public int getUsedSize() {
return usedSize;
}
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
}
package operation;
import book.BookList;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:07
* Description:接口
*/
public interface IOperation {
void work(BookList bookList);
}
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:09
* Description:查找书籍信息
*/
public class FindOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println();
System.out.println("查找图书");
System.out.println("------------------------");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书的名称:");
String name = scanner.nextLine();
//获取书架中图书数量
int size = bookList.getUsedSize();
//根据名字查找
for (int i = 0; i < size; i++) {
Book book = bookList.getBooks(i);
if (book.getName().equals(name)) {
System.out.println(book);
return;
}
}
System.out.println("未找到该书。");
}
}
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:04
* Description:新增书籍
*/
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println();
System.out.println("添加图书");
System.out.println("------------------------");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:");
String name = scanner.nextLine();
System.out.print("请输入作者:");
String author = scanner.nextLine();
System.out.print("请输入书的类型:");
String type = scanner.nextLine();
System.out.print("请输入价格:");
double price = scanner.nextDouble();
Book book = new Book(name, author, price, type);
bookList.setBooks(bookList.getUsedSize(), book);//将书放入书架
bookList.setUsedSize(bookList.getUsedSize()+1);//书籍数量+1
}
}
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:05
* Description:删除书籍
*/
public class DelOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println();
System.out.println("删除图书");
System.out.println("------------------------");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要删除的书名:");
String name = scanner.nextLine();
//获取书架中现在有几本书
int size = bookList.getUsedSize();
int i = 0;
//根据书名找到这个本书的下标
for (i = 0; i < size; i++) {
Book book = bookList.getBooks(i);
if (book.getName().equals(name)) {
break;
}
}
if (i == size) {
System.out.println("删除失败,未找到该书。");
return;
}
//通过前移将书删除
for (i = 0; i < size - 1; i++) {
bookList.setBooks(i,bookList.getBooks(i + 1));
}
bookList.setUsedSize(bookList.getUsedSize()-1);//书架中图书数量-1
System.out.println("删除成功。");
}
}
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:05
* Description:借阅书籍
*/
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println();
System.out.println("借阅图书");
System.out.println("------------------------");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要借书的名称:");
String name = scanner.nextLine();
//获取书架中现在有几本书
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBooks(i);
//判断在书架中是否有这本书
if (book.getName().equals(name)) {
//判断书是否被借走
if (!book.isState()) {
System.out.println("借阅成功!");
book.setState(true);//将书的状态改为已借出
return;
} else {
System.out.println("借阅失败,该书已被别人借走。");
return;
}
}
}
System.out.println("借阅失败,未找到该书。");
}
}
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:10
* Description:归还书籍
*/
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println();
System.out.println("归还图书");
System.out.println("------------------------");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要还书的名称:");
String name = scanner.nextLine();
//获取书架中现在有几本书
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBooks(i);
//判断在书架中是否有这本书
if (book.getName().equals(name)) {
//判断书是否已被借走
if (book.isState()) {
System.out.println("归还成功!");
book.setState(false);//将书的状态改为未借出
return;
} else {
System.out.println("归还失败,该书已还未被借走。");
return;
}
}
}
System.out.println("归还失败,未找到该书。");
}
}
package operation;
import book.Book;
import book.BookList;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:06
* Description:打印全部书籍信息
*/
public class DisplayOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println();
System.out.println("显示全部图书");
System.out.println("------------------------");
int size = bookList.getUsedSize();
for (int i = 0; i < size; i++) {
Book book = bookList.getBooks(i);
System.out.println(book);
}
}
}
import book.BookList;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:08
* Description:退出系统
*/
public class ExitOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println();
System.out.println("退出系统。");
System.out.println("------------------------");
System.exit(0);
}
}
package user;
import book.BookList;
import operation.IOperation;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:11
* Description:使用者
*/
abstract public class User {
protected String userName;//使用者姓名
protected IOperation[] iOperations;//功能数组
public User(String userName) {
this.userName = userName;
}
public abstract int menu();
//输入选择,调用不同的功能
public void doOperation(int choice, BookList bookList) {
this.iOperations[choice].work(bookList);//动态绑定
}
}
package user;
import operation.*;
import java.util.Scanner;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:13
* Description:管理员
*/
public class AdminUser extends User{
public AdminUser(String userName) {
super(userName);
//管理员功能
this.iOperations = new IOperation[] {
new ExitOperation(),
new FindOperation(),
new AddOperation(),
new DelOperation(),
new DisplayOperation()
};
}
@Override
public int menu() {
System.out.println();
System.out.println("hello " + this.userName + " 欢迎来到图书馆");
while(true) {
System.out.println("------------------------");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
System.out.println("3.删除图书");
System.out.println("4.显示全部图书");
System.out.println("0.退出系统");
System.out.println("------------------------");
System.out.print("请输入你的操作:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
//保证输入数字有效
if (choice > 4 || choice < 0) {
System.out.println("输入有误请重新输入。");
} else {
return choice;
}
}
}
}
package user;
import operation.*;
import java.util.Scanner;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:13
* Description:学生
*/
public class NormalUser extends User{
public NormalUser (String userName) {
super(userName);
//用户功能
this.iOperations = new IOperation[] {
new ExitOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation(),
};
}
@Override
public int menu() {
System.out.println();
System.out.println("hello "+this.userName+" 欢迎来到图书馆");
while(true) {
System.out.println("------------------------");
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("0.退出系统");
System.out.println("------------------------");
System.out.print("请输入你的操作:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
//保证输入数字有效
if (choice > 3 || choice < 0) {
System.out.println("输入有误请重新输入。");
} else {
return choice;
}
}
}
}
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;
/**
* User: gu'jiu
* Date: 2022-05-18
* Time: 15:20
* Description:图书管理系统
*/
public class Test {
public static User login() {
System.out.println("欢迎使用图书管理系统");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入您的姓名:");
String name = scanner.nextLine();
while(true){
System.out.println("-----------------------------");
System.out.println("请选择您的身份:1>管理员 2>普通用户");
System.out.print("请输入:");
int choice = scanner.nextInt();
//保证输入数字有效
if (choice == 1) {
return new AdminUser(name);
} else if (choice == 2) {
return new NormalUser(name);
} else {
System.out.println("输入有误,请重新输入。");
}
}
}
public static void main(String[] args) {
BookList bookList = new BookList();
User user = login();//向上转型
while(true){
int choice = user.menu();
user.doOperation(choice, bookList);
}
}
}
主函数中的user.doOperation(choice, bookList);
中的doOperation
方法比较难理解,我们来解释一下
1.user.
引用的可能是两个对象
2.在实例化
这对象的时候,在构造方法中,我们已经将iOperations[]
准备好了。
3.根据输入下标
(例如:2)访问相应对象,再调用work
方法。
|
以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!