JavaSE 图书信息管理系统
文章目录
利用JavaSE语法知识搭建图书信息管理系统
1.书和书架对象创建
既然是图书管理系统,最重要的莫过于图书的创建,这里我们分为书和书架(Book
& BookList
)两个对象,先创建一个包来存储这两个类
-
书类代码示例:
package book; public class Book { private String name; //书名 private String author; //作者 private int price; //价格 private String type; //类型 private boolean isBorrow; //借阅状态 //通过构造方法初始化对象 public Book(String name, String author, int price, String type) { this.name = name; this.author = author; this.price = price; this.type = type; } //获取书籍属性信息方法 public String getName() { return this.name; } public boolean isBorrow() { return this.isBorrow; } //设置书籍属性信息方法 public void setBorrow(boolean borrow) { this.isBorrow = borrow; } //重写toString方法,更好显示书的信息 @Override public String toString() { return "book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' + (isBorrow == true ? ", 已被借阅":", 未被借阅") + '}'; } }
-
书架类代码示例:
package book; public class BookList { private Book[] books; //书架即创建存放书对象的数组 private int size = 3; //书架容量 private int num; //书架实际存放书的数量 public BookList(Book[] books, int Size) { this.books = new Book[Size]; books[0] = new Book("三国演义","罗贯中",25,"小说"); books[1] = new Book("西游记","吴承恩",20,"小说"); books[2] = new Book("水浒传","施耐庵",17,"小说"); this.num = 3; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public Book getBook(int pos) { return books[pos]; } public void setBook(Book book, int pos) { books[pos] = book; } }
2.用户对象创建
先创建一个包来存放用户类:
我们将用户分为两种类型:管理员&&普通用户
先设置一个抽象类,提供姓名与用户菜单
package user;
public abstract class User {
private String name;
public User(String name) {
this.name = name;
}
public abstract void menu();//菜单,需要被子类重写
}
然后分别创建管理员类和普通用户类并继承该抽象类,因为不同用户所需要的功能也不同,功能菜单也不同,所以在编写子类时需要重写父类中的menu()方法
-
管理员类:
package user; public class AdminUser extends User{ public AdminUser(String name) { super(name); } @Override public void menu() { System.out.println("***********管理员**********"); System.out.println("1.查找图书"); System.out.println("2.添加图书"); System.out.println("3.删除图书"); System.out.println("4.展示图书"); System.out.println("0.退出系统"); } }
-
普通用户类:
package user; public class NormalUser extends User{ public NormalUser(String name) { super(name); } @Override public void menu() { System.out.println("*********普通用户*********"); System.out.println("1.查找图书"); System.out.println("2.借阅图书"); System.out.println("3.归还图书"); System.out.println("4.退出系统"); } }
3.Main方法测试
先简单测试一下上面的菜单能否使用,这里构建了一个login()
方法进行登录:
import book.Book;
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) {
return new AdminUser(name);
}
else {
return new NormalUser(name);
}
}
public static void main(String[] args) {
User user = login(); //接受子类对象完成向上转型
user.menu(); //通过父类对象调用子类方法实现动态绑定
}
}
简单测试后发现输入不同身份时菜单也能够正常输出,再进行下一步。
4.创建操作接口
这里创建一个操作接口:
package operation;
import book.BookList;
public interface IOperation {
void work(BookList bookList);//传入书架进行调用
}
创建以下类来实现该接口:
注:实现接口的每个类都要重写接口中的方法(因为接口中的方法默认为抽象方法)
这里先简单举个例子:
所有操作类都继承完接口后,让我们回到用户包内进行操作
5.用户实现操作
这里在原先User类的基础上添加一个抽象方法:
package user;
import book.BookList;
public abstract class User {
private String name;
public User(String name) {
this.name = name;
}
public abstract void menu();
public abstract void operation(int pos, BookList bookList); //用于实现操作类,需要被重写
}
之后User类的子类进行方法重写(注:其中在构造方法处也进行了修改,创建了一个操作数组iOperation
)
-
管理员类:
package user; import book.BookList; import operation.*; public class AdminUser extends User{ public IOperation[] iOperations; public AdminUser(String name) { super(name); iOperations = new IOperation[] { new ExitOperation(), new FindOperation(), new AddOperation(), new DeleteOperation(), new ShowOperation() }; } @Override public void menu() { System.out.println("***********管理员**********"); System.out.println("1.查找图书"); System.out.println("2.添加图书"); System.out.println("3.删除图书"); System.out.println("4.展示图书"); System.out.println("0.退出系统"); } @Override public void operation(int pos, BookList bookList) { iOperations[pos].work(bookList); //通过索引调用对应所需要完成的操作 } }
-
普通用户类:
package user; import book.BookList; import operation.*; public class NormalUser extends User{ public IOperation[] iOperations; public NormalUser(String name) { super(name); iOperations = new IOperation[] { new ExitOperation(), new FindOperation(), new BorrowOperation(), new ReturnOperation()}; } @Override public void menu() { System.out.println("*********普通用户*********"); System.out.println("1.查找图书"); System.out.println("2.借阅图书"); System.out.println("3.归还图书"); System.out.println("0.退出系统"); } @Override public void operation(int pos, BookList bookList) { iOperations[pos].work(bookList); } }
再去修改main函数,简单测试以下:
import book.Book;
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) {
return new AdminUser(name);
}
else {
return new NormalUser(name);
}
}
public static void main(String[] args) {
BookList bookList = new BookList();
User user = login(); //接受子类对象完成向上转型
while(true) {
user.menu(); //通过父类对象调用子类方法实现动态绑定
System.out.println("选择要进行的操作:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
user.operation(choice,bookList);
}
}
}
可见用户已经能够调用需要的操作了,接下来我们再来完善每一个操作功能。
6.操作功能完善
1. 查找功能
package operation;
import 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);
String name = scanner.nextLine();
for (int i = 0;i < bookList.getNum();i++) {
if (bookList.getBook(i).getName().equals(name)) {
System.out.println(bookList.getBook(i));
return;
}
}
System.out.println("查无此书");
}
}
2. 展示图书
package operation;
import book.Book;
import book.BookList;
public class ShowOperation implements IOperation{
@Override
public void work(BookList bookList) {
for (int i = 0;i < bookList.getNum();i++) {
Book book = bookList.getBook(i);
System.out.println(book);
}
}
}
3.添加书籍
package operation;
import book.BookList;
import book.Book;
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("添加图书--");
int num = bookList.getNum();
int size = bookList.getSize();
if (num < size) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入书名:");
String name = scanner.nextLine();
System.out.println("请输入作者:");
String author = scanner.nextLine();
System.out.println("请输入类型:");
String type = scanner.nextLine();
System.out.println("请输入价格:");
int price = scanner.nextInt();
Book book = new Book(name, author, price, type);
for (int i = 0;i < num;i++) {
Book book1 = bookList.getBook(i);
if (book1.getName().equals(name)) {
System.out.println("书籍已存在");
return;
}
}
bookList.setBook(book, num);
bookList.setNum(++num);
System.out.println("添加成功:" + book);
return;
}
System.out.println("书架已满");
}
}
4.删除图书
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class DeleteOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("删除图书--");
System.out.println("请输入要删除的书籍: ");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int num = bookList.getNum();
int size = bookList.getSize();
for (int i = 0;i < num;i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
for (int j = i;j < num - 1;j++) {
bookList.setBook(bookList.getBook(j+1),j);
}
bookList.setNum(--num);
System.out.println("删除成功!!");
return;
}
}
System.out.println("查无此书");
}
}
5.借阅图书
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("借阅图书--");
System.out.println("请输入需要借阅的图书:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int num = bookList.getNum();
for (int i = 0;i < num;i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
if (book.isBorrow()) {
System.out.println("书籍已被借阅!!");
}else {
book.setBorrow(true);
System.out.println("借阅成功!!");
System.out.println(book);
}
return;
}
}
System.out.println("查无此书");
}
}
6.归还书籍
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("归还图书--");
System.out.println("请输入需要归还的图书:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int num = bookList.getNum();
for (int i = 0;i < num;i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
if (book.isBorrow()) {
book.setBorrow(false);
System.out.println("归还成功!!");
System.out.println(book);
}else {
System.out.println("书籍未被借阅");
}
return;
}
}
System.out.println("查无此书");
}
}
7.退出系统
package operation;
import book.BookList;
public class ExitOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("退出系统");
System.exit(0);
}
}
基本的功能已经完成,我们来测试一下:
管理员模式:
普通用户模式:
基于JavaSE搭建的图书信息管理系统已经完成,还有更多的细节需要完善,以及更多的功能等待解锁,尽情期待后续吧!!