本节主要是,利用前面所学的知识点:类,抽象类,封装,继承,多态,接口等进行的一个简单的代码练习。
1、简单的登录
2、管理端
3、用户端
先创建 package book
创建 Book 类, 表示一本书
public class Book { private String name; private String author; private int price; private String type; private boolean isBorrowed = false; public Book(String name, String author, int price, String type) { this.name = name; this.author = author; this.price = price; this.type = type; } }
创建 BookList 类, 用来保存 N 本书.
public class BookList { private Book[] books = new Book[10]; private int size = 0; // 弄几个初始值, 方便后续测试. public BookList() { books[0] = new Book("三国演义", "罗贯中", 100, "小说"); books[1] = new Book("水浒传", "施耐庵", 100, "小说"); books[2] = new Book("西游记", "吴承恩", 100, "小说"); } public Book getBook(int pos) { return books[pos]; } public void setBook(int pos, Book book) { books[pos] = book; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } }
先创建 package operation
public interface IOperation { void work(BookList booklist); }
接下来创建一组操作类, 每个类对应一个用户的动作.
AddOperation DelOperation FindOperation RemoveOperation DisplayOperation BorrowOperation ReturnOperation ExitOperation
先把空类创建好, 不着急实现细节.
抽象出 Operation 的好处: 让操作和操作之间低耦合, 让操作和用户之间低耦合.
先创建 package user
创建 User 类, 这是一个抽象类
// User 类是一个抽象类, 每个子类需要做两件事情 // 1. 初始化对应的操作数组 // 2. 实现 Menu 菜单 abstract public class User { protected String name; protected IOperation[] operations; // 显示菜单 abstract public int menu(); // 根据用户选项执行操作 public void doOperation(int choice, BookList bookList) { operations[choice].work(bookList); } }
创建普通用户类, 是 User 的子类.
public class NormalUser extends User { public NormalUser(String name) { this.name = name; this.operations = new IOperation[] { new ExitOperation(), new FindOperation(), new BorrowOperation(), new ReturnOperation() }; } @Override public int menu() { System.out.println("============================="); System.out.println("Hello " + this.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(); return choice; } }
创建管理员用户类
public class Admin extends User { public Admin(String name) { this.name = name; this.operations = new IOperation[] { new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new DisplayOperation() }; } @Override public int menu() { System.out.println("============================="); System.out.println("Hello " + this.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(); scanner.close(); return choice; } }
创建 Main 类和 main 方法, 搭建整体逻辑
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 表示管理员, 0 表示普通用户):"); int who = scanner.nextInt(); if (who == 1) { return new Admin(name); } return new NormalUser(name); } }
可以先测试下代码的基本框架是否存在问题.