Java实现图书管理系统
面向对象思想
找到对象,创建对象,使用对象
图书管理中找到对象:书,书架,针对书架的各项操作,用户
书:属性包含书名,价格,类型,作者,是否被借阅
书架:书的集合(数组),书实际存放的数量,书架的容量,获取/设置书的数量
书架的操作:增删改查书,借阅书,归还书(行为都设置为类,用一个接口来抽象),接口内包含具体操作的work方法
用户: 普通用户(可以借阅/归还图书),管理员用户(可以增加,修改,删除书,显示全部图书),不同的用户对象内存储着不同类型操作的实例化对象, 在用户类内部维护着一个操作接口类型数组, 具体存储的对象由子类决定
首先建一个入口类, 创建书架, 进行登录操作(返回用户对象, 此处用户是一个父类, 返回来的实例对象根据登录操作的选择而分为普通用户和管理员用户), 接下来进行菜单选择, 返回操作选项(对书架进行操作 操作选项为数字对应操作数组的下标), 根据不同类型的用户调用不同的操作, 将书架对象传入
进入操作方法后,根据不同的操作选项返回实例化不同的操作返回给操作接口类型, 然后再调用不同操作类重写的work方法进行具体的操作
项目中具体类的继承关系和接口的实现关系
其中 增删改都要查询的操作, 增加时需要校验是否已存在, 删除时也是要找到对应的对象, 修改时需要将之前的对象删除, 放入修改完的对象, 所以需要继承查询操作, 修改需要继承删除的操作
Main类:
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;
public class Main {
/**
* 登陆,创建用户
* @return 用户对象
*/
public static User login() {
System.out.println("请输入用户名: ");
Scanner scanner = new Scanner(System.in);
String username = scanner.nextLine();
System.out.println("你好,"+username);
while (true) {
System.out.println("请输入用户类型: 1.管理员 2.普通用户");
int choice = scanner.nextInt();
if(choice == 1) {
return new AdminUser(username);
} else if(choice == 2) {
return new NormalUser(username);
} else {
System.out.println("输入错误,请重新输入!");
}
}
}
public static void main(String[] args) {
//创建书架
BookList bookList = new BookList();
//用户登陆,获取用户对象
User user = login();
while(true) {
//菜单选择操作
int choice = user.menu();
//将操作选项和书架对象传入进行操作
user.operate(choice,bookList);
if(choice == 0) {
break;
}
}
}
}
Operation接口:
package operation;
import book.BookList;
public interface IOperation {
//重写操作的方法
void work(BookList bookList);
}
User类
package user;
import book.BookList;
import operation.IOperation;
public abstract class User {
//用户名
private String username;
//支持的操作类型集合
protected IOperation[] operations;
public User(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
//打印菜单类 交给下面的类实现
public abstract int menu();
//用户作出对应的操作
public void operate(int choice, BookList bookList) {
//获取到对应的操作对象
IOperation operation = operations[choice];
operation.work(bookList);
}
}