一、项目分布:
Book类: 定义了书的一些属性(书名,作者,价格,分类,状态)并且写了属性的get、set方法
BookList类:用于管理书籍列表,并且写了属性的get、set方法
IOperate接口:操作的接口,操作方法:查询/查阅,删除/借阅,增加/还书,显示书籍列表
Operation等类:实现了操作的具体实现
抽象类User:定义了用户的基本属性和一个执行特定操作的方法。子类会继承这个类,并实现menu()方法来定义用户的具体菜单选项。然后,在具体的用户对象中,可以通过选择菜单选项并调用方法来执行相应的操作。具体的操作和功能将取决于子类的实现和IOperation接口的定义。
AdminUser类:继承自User类。这个类用于表示管理员用户,并提供了特定的操作和菜单选项。
NormalUser类:继承自User类。这个类用于表示普通用户,并提供了特定的操作和菜单选项。
Main类:Main中的主函数开启整个项目。写了登录函数(1、普通用户,2、管理员)
二、代码展示:
1.Book类
package book;
public class Book {
private String bookName;
private String author;
private int price;
private String type;
private boolean isLend;
public Book(String bookName, String author, int price, String type) {
this.bookName = bookName;
this.author = author;
this.price = price;
this.type = type;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isLend() {
return isLend;
}
public void setLend(boolean lend) {
isLend = lend;
}
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", " + (isLend == true ? "已借出" : "未借出") +
'}';
}
}
2.BookList类
package book;
public class BookList {
private Book[] bookList = new Book[10];
private int usedSize;
public BookList() {
bookList[0] = new Book("三国演义", "罗贯中", 10, "小说");
bookList[1] = new Book("西游记", "吴承恩", 9, "小说");
bookList[2] = new Book("红楼梦", "曹雪芹", 11, "小说");
this.usedSize = 3;
}
public int getUsedSize() {
return usedSize;
}
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
public Book getBook(int pos) {
return bookList[pos];
}
public void setBook(int pos, Book book) {
this.bookList[pos] = book;
}
public boolean isFull() {
return usedSize >= bookList.length;
}
}
3.Operation等类
//AddOperation
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("新增图书.....");
int cur = bookList.getUsedSize();
if (bookList.isFull()){
System.out.println("满了,新增失败");
return;
}
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要新增图书的书名:");
String bookName = scanner.nextLine();
System.out.println("请输入你要新增图书的作者:");
String author = scanner.nextLine();
System.out.println("请输入你要新增图书的价格:");
int price = scanner.nextInt();
scanner.nextLine();
System.out.println("请输入你要新增图书的类型:");
String type = scanner.nextLine();
Book book = new Book(bookName, author, price, type);
bookList.setBook(cur, book);
bookList.setUsedSize(cur+1);
System.out.println("新增成功!");
}
}
//=========================================================================
//BorrowOperation
package operation;
import book.BookList;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("借阅图书.....");
System.out.println("请输入你要借阅的图书的书名:");
String bookName = scanner.nextLine();
int cur = bookList.getUsedSize();
for (int i = 0; i < cur; i++) {
if (bookList.getBook(i).getBookName().equals(bookName)) {
bookList.getBook(i).setLend(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("借阅失败!");
}
}
//=========================================================================
//DelOperation
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class DelOperation implements IOperation{
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
int cur = bookList.getUsedSize();
int pos = -1;
System.out.println("删除图书.....");
System.out.println("请输入你要删除的图书的书名:");
String bookName = scanner.nextLine();
int i = 0;
for (; i < cur; i++) {
Book book = bookList.getBook(i);
if (book.getBookName().equals(bookName)) {
pos = i;
break;
}
}
if (i >= cur) {
System.out.println("没有你要找的书!");
}
for (int j = pos; j < cur-1; j++) {
Book book = bookList.getBook(j+1);
bookList.setBook(j, book);
}
bookList.setUsedSize(cur-1);
bookList.setBook(cur-1, null);
System.out.println("删除成功!");
}
}
//=========================================================================
//ExitOperation
package operation;
import book.BookList;
public class ExitOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("退出系统.....");
int cur = bookList.getUsedSize();
for (int i = 0; i < cur; i++) {
bookList.setBook(i, null);
}
System.exit(0);
}
}
//=========================================================================
//FindOperation
package operation;
import book.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation{
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
int cur = bookList.getUsedSize();
System.out.println("寻找图书.....");
System.out.println("请输入你要查找的图书的书名:");
String bookName = scanner.nextLine();
for (int i = 0; i < cur; i++) {
if (bookList.getBook(i).getBookName().equals(bookName)) {
System.out.println("找到了");
System.out.println(bookList.getBook(i));
return;
}
}
System.out.println("没找到!!");
}
}
//=========================================================================
//ReturnOperation
package operation;
import book.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("归还图书.....");
System.out.println("请输入你要归还的图书的书名:");
String bookName = scanner.nextLine();
int cur = bookList.getUsedSize();
for (int i = 0; i < cur; i++) {
if (bookList.getBook(i).getBookName().equals(bookName)) {
bookList.getBook(i).setLend(false);
System.out.println("归还成功!");
return;
}
}
System.out.println("归还失败!");
}
}
//=========================================================================
//ShowOperation
package operation;
import book.BookList;
public class ShowOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("显示图书.....");
int cur = bookList.getUsedSize();
for (int i = 0; i < cur; i++) {
System.out.println(bookList.getBook(i));
}
}
}
4.IOperation接口
package operation;
import book.BookList;
public interface IOperation {
public void work(BookList bookList);
}
5.User抽象类
package user;
import book.BookList;
import operation.IOperation;
public abstract class User {
protected String name;
protected IOperation[] iOperation;
public User(String name) {
this.name = name;
}
public void doIOperation(int choice, BookList bookList) {
this.iOperation[choice].work(bookList);
}
public abstract int menu();
}
6.AdminUser类
package user;
import operation.*;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
this.iOperation = new IOperation[]{
new ExitOperation(),
new FindOperation(),
new AddOperation(),
new DelOperation(),
new ShowOperation()
};
}
@Override
public int menu() {
System.out.println("*****管理员菜单*****");
Scanner scanner = new Scanner(System.in);
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("请输入你要进行的操作:");
int choice = scanner.nextInt();
return choice;
}
}
7.NormalUser类
package user;
import operation.*;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.iOperation = new IOperation[]{
new ExitOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation()
};
}
@Override
public int menu() {
System.out.println("*****普通用户菜单*****");
Scanner scanner = new Scanner(System.in);
System.out.println("1.查找图书");
System.out.println("2.借阅图书");
System.out.println("3.归还图书");
System.out.println("0.退出系统");
System.out.println("********************");
System.out.println("请输入你要进行的操作:");
int choice = scanner.nextInt();
return choice;
}
}
8.Main类
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;
public class Main {
public static User login(){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = scanner.nextLine();
System.out.println("请输入你的身份: 1. 管理员 2. 普通用户");
int choice = scanner.nextInt();
if (choice == 1) {
AdminUser adminUser = new AdminUser(name);
return adminUser;
} else {
NormalUser normalUser = new NormalUser(name);
return normalUser;
}
}
public static void main(String[] args) {
BookList bookList = new BookList();
User user = login();
while (true) {
int choice = user.menu();
user.doIOperation(choice, bookList);
}
}
}
三、实现结果
四、重点总结
总的来说,这段代码构建了一个图书管理系统的基础框架,其中AdminUser类用于管理员对图书进行各种管理操作。然而,具体的功能实现可能需要依赖其他部分的代码以及IOperation接口的具体实现。最重要的是利用接口实现多种类的互动。
这段代码体现了面向对象编程(OOP)的一些重要概念和特征:
-
抽象和封装:
BookList
类和User
类都对相关的概念进行了抽象和封装。BookList
类封装了图书列表的管理功能,而User
类抽象了用户的基本特征和行为。 -
继承:
AdminUser
类继承自User
类,继承了User
类的属性和方法,并可以通过重写menu
方法来定制管理员用户的特定行为。 -
多态:通过使用抽象类和接口(如
IOperation
),可以实现多态性。不同的操作可以通过实现IOperation
接口来提供不同的行为。 -
对象交互:通过
doIOperation
方法和iOperation
数组,对象之间可以进行交互。管理员用户可以执行不同的操作,这些操作与图书列表进行交互。
这些面向对象编程的特性使得代码更具有模块化、可扩展性和可维护性。不同的类和对象负责不同的功能,并且可以通过继承和多态来灵活地扩展和定制行为。
所以,这段代码是面向对象编程的一个示例,它利用了对象、类、继承、多态等面向对象的概念来构建图书管理系统的一部分。这样的设计有助于提高代码的复用性和可维护性。