图书管理系统

mac2024-01-23  37

package package_bookmanager.book; public class Book { private String name; private String id; private String author; private int price; private String type; private boolean isBorrowed; public Book(String name, String id, String author, int price, String type, boolean isBorrowed) { this.name = name; this.id = id; this.author = author; this.price = price; this.type = type; this.isBorrowed = isBorrowed; } public String getName() { return name; } public String getId() { return id; } @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", id='" + id + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' + ", isBorrowed=" + isBorrowed + '}'; } public boolean isBorrowed() { return isBorrowed; } public void setBorrowed(boolean borrowed) { isBorrowed = borrowed; } } package package_bookmanager.book; public class BookList { private Book[] books = new Book[100]; private int size; public BookList() { books[0] = new Book("金瓶梅", "001", "兰陵笑笑生", 100, "古典名著", false); books[1] = new Book("水浒传", "002", "施耐庵", 100, "古典名著", false); books[2] = new Book("西游记", "003", "吴承恩", 100, "古典名著", false); size = 3; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public Book getBook(int index) { return books[index]; } public void setBook(int index, Book book) { books[index] = book; } } package package_bookmanager.operation; import package_bookmanager.book.Book; import package_bookmanager.book.BookList; import java.util.Scanner; public class AddOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("新增一本书籍"); Scanner scanner = new Scanner(System.in); System.out.println("请输入书名:"); String name = scanner.next(); System.out.println("请输入序号:"); String id = scanner.next(); System.out.println("请输入作者: "); String author = scanner.next(); System.out.println("请输入价格:"); int price = scanner.nextInt(); System.out.println("请输入类别: "); String type = scanner.next(); Book book = new Book(name, id, author, price, type, false); bookList.setBook(bookList.getSize(), book); bookList.setSize(bookList.getSize() + 1); } } package package_bookmanager.operation; import package_bookmanager.book.Book; import package_bookmanager.book.BookList; import java.util.Scanner; public class BorrowOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("借阅书籍"); Scanner scanner = new Scanner(System.in); System.out.println("请输入要借阅的书的编号: "); String id = scanner.next(); for (int i = 0; i < bookList.getSize(); i++) { Book book = bookList.getBook(i); if (!book.getId().equals(id)) { continue; } // 执行具体的借书操作 if (book.isBorrowed()) { System.out.println("这本书已经被借走了!"); break; } book.setBorrowed(true); } } } package package_bookmanager.operation; import package_bookmanager.book.Book; import package_bookmanager.book.BookList; import java.util.Scanner; public class DelOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("删除书籍"); Scanner scanner = new Scanner(System.in); System.out.println("请输入要删除的序号: "); String id = scanner.next(); // 先查找 int i = 0; for (; i < bookList.getSize(); i++) { Book book = bookList.getBook(i); if (book.getId().equals(id)) { // 找到了 break; } } if (i >= bookList.getSize()) { // 没找到 System.out.println("未找到要删除的书籍!"); return; } // 处理找到了的情况 // 直接用最后一个元素覆盖当前要删除的元素 // 再进行尾删. Book lastBook = bookList.getBook(bookList.getSize() - 1); bookList.setBook(i, lastBook); bookList.setSize(bookList.getSize() - 1); System.out.println("删除成功!"); } } package package_bookmanager.operation; import package_bookmanager.book.BookList; public class ExitOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("goodbye!"); System.exit(0); } } package package_bookmanager.operation; import package_bookmanager.book.Book; import package_bookmanager.book.BookList; import java.util.Scanner; public class FindOperation implements IOperation { @Override public void work(BookList bookList) { System.out.println("查找书籍"); Scanner scanner = new Scanner(System.in); System.out.println("请输入要查找的书名: "); String name = scanner.next(); int count = 0; for (int i = 0; i < bookList.getSize(); i++) { Book book = bookList.getBook(i); if (book.getName().equals(name)) { // 打印这本书的信息 System.out.println(book); count++; } } if (count == 0) { System.out.println("没找到此书"); } else { System.out.println("共计找到 " + count + " 本书!"); } } } package package_bookmanager.operation; import package_bookmanager.book.BookList; public interface IOperation { void work(BookList bookList); } package package_bookmanager.operation; import package_bookmanager.book.BookList; public class PrintAllOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("打印所有书籍信息"); for (int i = 0; i < bookList.getSize(); i++) { System.out.println(bookList.getBook(i)); } System.out.println("共计 " + bookList.getSize() + " 本书!"); } } package package_bookmanager.operation; import package_bookmanager.book.Book; import package_bookmanager.book.BookList; import java.util.Scanner; public class ReturnOperation implements IOperation { @Override public void work(BookList bookList) { System.out.println("归还书籍"); Scanner scanner = new Scanner(System.in); System.out.println("请输入要归还的书的编号: "); String id = scanner.next(); for (int i = 0; i < bookList.getSize(); i++) { Book book = bookList.getBook(i); if (!book.getId().equals(id)) { continue; } // 执行具体的还书操作 if (!book.isBorrowed()) { System.out.println("这本书已经被归还了!"); break; } book.setBorrowed(false); } } } ```java package package_bookmanager.user; import package_bookmanager.operation.*; import java.util.Scanner; public class Admin extends User { public Admin(String name) { super(name); operations = new IOperation[]{ new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new PrintAllOperation(), }; } @Override public int menu() { System.out.println("============"); System.out.println("hello " + name); 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.println("请输入您的选择: "); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); return choice; } } package package_bookmanager.user; import package_bookmanager.operation.*; import java.util.Scanner; public class NormalUser extends User{ public NormalUser(String name) { super(name); // 在这里构造 operation 数组 // 我们让数组中 operation 对象的顺序和菜单中的序号相匹配 operations = new IOperation[]{ new ExitOperation(), new FindOperation(), new BorrowOperation(), new ReturnOperation() }; } @Override public int menu() { System.out.println("============"); System.out.println("hello " + name); System.out.println("1. 查找图书"); System.out.println("2. 借阅图书"); System.out.println("3. 归还图书"); System.out.println("0. 退出"); System.out.println("============"); System.out.println("请输入您的选择: "); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); // close 本质上是在关闭 System.in // 由于后面还需要用到 System.in, 此处不能盲目关闭. // scanner.close(); return choice; } } package package_bookmanager.user; import package_bookmanager.book.BookList; import package_bookmanager.operation.IOperation; abstract public class User { protected String name; // 持有当前用户支持的操作对象 protected IOperation[] operations; public User(String name) { this.name = name; } // 打印一个操作菜单. 不同的用户 // 支持的操作不同, 对应的菜单也就不同 abstract public int menu(); // 根据用户输入的选项(menu返回结果) // 调用对应的操作对象 // 注意多态在这个代码中的体现 public void doOperation(int choice, BookList bookList) { operations[choice].work(bookList); } } package package_bookmanager; import package_bookmanager.book.BookList; import package_bookmanager.user.Admin; import package_bookmanager.user.NormalUser; import package_bookmanager.user.User; 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(); user.doOperation(choice, bookList); } } public static User login() { Scanner scanner = new Scanner(System.in); System.out.println("请输入您的姓名:"); String name = scanner.next(); System.out.println("请输入您的角色:(1 普通用户 2 管理员)"); int role = scanner.nextInt(); if (role == 1) { return new NormalUser(name); } return new Admin(name); } }
最新回复(0)