目录
一、核心需求
1. 简单的登录
2. 管理端
-
整理书籍(该功能为可扩展功能)
-
查阅书籍
-
增加书籍
-
删除书籍
-
打印书籍列表
-
退出
3. 用户端
-
查询书籍
-
借阅书籍
-
归还书籍
-
退出
二、类的设计
1. 创建图书相关的类
先创建 package book
创建 Book 类, 表示一本书;创建 BookList 类, 用来保存 N 本书
2. 创建操作相关的类
先创建 package operation
接下来创建一组操作类, 每个类对应一个用户的动作AddOperation 、DeleteOperation、 FindOperation、DisplayOperation、BorrowOperation、ReturnOperation、UpdateOperation
先把空类创建好, 不着急实现细节. 抽象出 Operation 的好处: 让操作和操作之间低耦合, 让操作和用户之间低耦合.
3. 创建用户相关的类
先创建 package user
创建 User 类, 这是一个抽象类;创建普通用户类, 是 User 的子类;创建管理员用户类
4. 进行整合
创建 Main 方法, 搭建整体逻辑
5. 实现具体的每个 Operation
三、框架建模
四、基本框架代码
book类:
package book_management;
//书本实体类
public class Book {
//书名
private String bookName;
//作者
private String author;
//价格
private double price;
//书籍类别
private String type;
//借阅状态,默认为false
private boolean isBorrowed;
public Book(String bookName,String author,double price,String type){
this.bookName = bookName;
this.author = author;
this.price = price;
this.type = type;
}
//只有需要修改的属性才需要提供setter - price、type、借阅状态
public void setPrice(double price){
this.price = price;
}
public void setType(String type){
this.type = type;
}
public void setBorrowed(boolean borrowed){
isBorrowed = borrowed;
}
public String getBookName(){
return bookName;
}
public String getAuthor(){
return author;
}
public double getPrice(){
return price;
}
public String getType(){
return type;
}
public boolean isBorrowed(){
return isBorrowed;
}
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrowed=" + isBorrowed +
'}';
}
}
bookList类:
package book_management;
import come.B;
import java.util.ArrayList;
import java.util.List;
//书架类
public class BookList {
// books存放了所有当前书架中的书,每个Book对象就是一本书的实体
private static List<Book> books = new ArrayList<>();
// booksName存放了所有的书本名称 - 查询书籍等都是通过书名来操作
private static List<String> bookName = new ArrayList<>();
// 初始化books和booksName,默认将四大名著放入书架中
// 使用static代码块初始化static变量
static {
books.add(new Book("西游记","吴承恩",99.99,"小说"));
books.add(new Book("红楼梦","曹雪芹",108.9,"小说"));
books.add(new Book("水浒传","施耐庵",199.89,"小说"));
books.add(new Book("三国演义","罗贯中",145.39,"小说"));
bookName.add("西游记");
bookName.add("红楼梦");
bookName.add("水浒传");
bookName.add("三国演义");
}
public void displayBooks(){
for (Book book : books){
System.out.println(book);
}
}
public boolean contains(String booksName){
return BookList.bookName.contains(booksName);
}
public void add(Book book){
books.add(book);
bookName.add(book.getBookName());
}
}
Main方法:
package book_management;
import java.util.Scanner;
//整个程序的入口
public class Main {
private static Scanner scanner = new Scanner(System.in);
public static void main (String[] args){
User user = login();
BookList bookList = new BookList();
while(true){
int choice = user.menu();
if(choice == -1){
System.out.println("ByeBye!");
break;
}
user.doOperation(choice,bookList);
}
}
private static User login() {
System.out.println("请输入用户名:");
String name = scanner.next();
System.out.println("请选择您的角色,1为普通用户,0为管理员");
int choice = scanner.nextInt();
if (choice == 1){
return new NormalUser(name);
}
return new AdminUser(name);
}
}
用户类:
package book_management;
//用户类 —— 抽象类
//不知道是普通用户还是管理员
public abstract class User {
//用户名
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 java.util.Scanner;
//操作书架的接口
// 增删改查-借书-还书
// 接口中只有全局常量和抽象方法
public interface IOperation {
// 全局常量,所有接口的子类共享
// static + final共同修饰
Scanner scanner = new Scanner(System.in);
//在对应的书架类进行操作
void work(BookList bookList);
}
//添加书籍
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("现在正在进行添加书籍操作...");
}
}
//借阅书籍
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
}
}
//删除书籍
public class DeleteOperation implements IOperation{
@Override
public void work(BookList bookList) {
}
}
//展示所有书籍
public class DisplayAllBooks implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("您现在正在进行的是查看所有书籍的操作!");
bookList.displayBooks();
}
}
//查找书籍
public class FindOperation implements IOperation{
@Override
public void work(BookList bookList) {
}
}
//归还书籍
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) {
}
}
//更新书籍
public class UpdateOperation implements IOperation{
@Override
public void work(BookList bookList) {
}
}
五、源代码
图书管理系统框架代码
图书管理系统接口代码完善
本小节完^_^