图书管理系统,首先是需要的类:
书籍类、 书籍总体类、 用户类、 管理员类、 主类(用于调用其他类)
对于用户类和管理员类因为其两个类的主要方法都是使用菜单来进行功能的调用,类中的方法相同,因此可以采用抽象类来作为父类,来对两个类进行编写。
书籍类
package Java_01_26_Test;
//Book类 用来表示一本书的讯息
//这些信息用Book类的属性来表示
public class Book {
//原则是能用private尽量用private
//书籍名称
private String name;
//书籍作者
private String author;
//书籍价格
private double price;
//书籍类型
private String type;
//书籍的当前状态:是否被借出 默认为未被借出
private boolean isBorrowed = false;//当前状态
//使用构造方法对这些构造成员进行初始化
public Book(String name, String author, double price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
'}';
}
public String getName() {
return name;
}
public boolean getBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
}
书籍总类:可用于组织多本书
package Java_01_26_Test;
//组织多本书
public class BookList {
//100想相当于BookList的capacity
private Book[] books = new Book[100];
private int size = 0;
public BookList() {
books[0] = new Book("三国演义","罗贯中",100,"古典小说");
books[1] = new Book("西游记","施耐庵",100,"古典小说");
books[2] = new Book("金瓶梅","兰林笑笑生",100,"古典小说");
size = 3;
}
//用于后面需要针对其中的某一本书进行操作
public Book getBook(int index){
return books[index];
}
public void setBook(int index, Book book){
books[index] = book;
}
//得到当前的书籍量
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
抽象类:使用者
package Java_01_26_Test;
import Java_01_26_Test.operation.IOperation;
//使用抽象类,用来作为Admin 和 NormalUser的父类
//不用实例化
abstract public class User {
protected String name;
protected IOperation[] operations;
//这个方法打印用户的菜单
//抽象方法,子类重写
public abstract int menu();
public void doOperation(int choice,BookList booklist) {
//this.operations[choice - 1].work(booklist);
//向上转型
IOperation operation = this.operations[choice - 1];
//取得操作类之后进行操作个方法的调用,多态
operation.work(booklist);
}
}
用户类
package Java_01_26_Test;
import Java_01_26_Test.operation.*;
import java.util.Scanner;
public class NormalUser extends User{
// private String name;
// //接口中的内容是实现了该接口类的实例
// private IOperation[] operations;
public NormalUser(String name){
this.name = name;
this.operations = new IOperation[]{
new FindOperation(),
new BorrowOperation(),
new ReturnOperation(),
new ExitOperation()
};
}
@Override
public int menu() {
System.out.println("=================================");
System.out.println("Hello!"+ name + "欢迎使用图书管理系统");
System.out.println("1、查阅图书信息");
System.out.println("2、借阅图书");
System.out.println("3、归还图书");
System.out.println("4、退出系统");
System.out.println("=================================");
System.out.println("请输入选择: ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
管理员类
package Java_01_26_Test;
import Java_01_26_Test.operation.*;
import java.util.Scanner;
public class Admin extends User{
// private String name;
// //接口中的内容是实现了该接口类的实例
// private IOperation[] operations;
public Admin(String name){
this.name = name;
this.operations = new IOperation[]{
new FindOperation(),
new AddOperation(),
new DelOperation(),
new DisplayOperation(),
new ExitOperation()
};
}
@Override
public int menu() {
System.out.println("=================================");
System.out.println("Hello!"+ name + "欢迎使用图书管理系统");
System.out.println("1、查阅图书信息");
System.out.println("2、新增图书信息");
System.out.println("3、删除图书信息");
System.out.println("4、打印图书列表");
System.out.println("5、退出系统");
System.out.println("=================================");
System.out.println("请输入选择: ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
总类:用于决定是使用者类型
package Java_01_26_Test;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//第一步:先准备好书籍的数据
BookList booklist = new BookList();
//第二步创建用户(涉及登录过程)
User user = login();
//第三步进入主循环
while (true) {
//此时就看user调用的是哪种子类的实例
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);
}
}
在将这些类写好之后,就应该写出功能的实现的类了,先进行分析可得,写出来的功能无非就是增删改查等类型,可以发现实现这些功能的结构大体相同,这样我们就可以使用接口来进行实现。
使用如下接口来表示所需要的操作,之后可以写成数组来进行接口的调用,使用向上转型的方法来进行操作类的调用
package Java_01_26_Test.operation;
import Java_01_26_Test.BookList;
public interface IOperation {
void work(BookList bookList);
}
增加书籍类
package Java_01_26_Test.operation;
import Java_01_26_Test.Book;
import Java_01_26_Test.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
//实现新增一本书籍的操作
Scanner scanner = new Scanner(System.in);
System.out.println("新增书籍");
System.out.println("新增书籍的名称:");
String name = scanner.next();
System.out.println("新增书籍的作者:");
String author = scanner.next();
System.out.println("新增书籍的价格:");
double price = scanner.nextDouble();
System.out.println("新增书籍的类别:");
String type = scanner.next();
Book newBook = new Book(name,author,price,type);
int curSize = bookList.getSize();
bookList.setBook(curSize,newBook);
bookList.setSize(curSize + 1);
System.out.println("新增书籍成功!");
}
}
删除书籍类
package Java_01_26_Test.operation;
import Java_01_26_Test.BookList;
import java.util.Scanner;
public class DelOperation implements IOperation{
@Override
public void work(BookList bookList) {
//实现删除一本制定书籍的操作
Scanner scanner = new Scanner(System.in);
System.out.println("删除书籍");
System.out.println("请输入要删除书籍的名字:");
String name = scanner.next();
int i = 0;
for (i = 0; i < bookList.getSize(); i++) {
if (bookList.getBook(i).getName().equals(name)){
break;
}
}
if (i >= bookList.getSize()){
System.out.println("您输入的书籍" + "[" + name + "]" + "未找到");
return;
}
//如果找到相应的书籍,将书籍删除掉
if (i == bookList.getSize() - 1){
bookList.setSize(bookList.getSize() - 1);
}else{
//把最后一个元素放到 i 的位置
bookList.setBook(i,bookList.getBook(bookList.getSize()-1));
//删除最后一个元素
bookList.setSize(bookList.getSize() - 1);
}
System.out.println("删除成功");
}
}
显示所有书籍
package Java_01_26_Test.operation;
import Java_01_26_Test.BookList;
public class DisplayOperation implements IOperation{
@Override
public void work(BookList bookList) {
//实现显示所有书籍的操作
System.out.println("显示所有书籍");
for (int i = 0; i < bookList.getSize(); i++) {
System.out.println(bookList.getBook(i));
}
}
}
查找指定书籍
package Java_01_26_Test.operation;
import Java_01_26_Test.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
//实现查找一本指定书籍的操作
Scanner scanner = new Scanner(System.in);
System.out.println("查找书籍");
System.out.println("请输入要查找书籍的名字:");
String name = scanner.next();
int i = 0;
for (i = 0; i < bookList.getSize(); i++) {
if (bookList.getBook(i).getName().contains(name)){
System.out.println(bookList.getBook(i));
}
}
}
}
借书类
package Java_01_26_Test.operation;
import Java_01_26_Test.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 name = scanner.next();
int i = 0;
for (;i < bookList.getSize(); i++) {
if(bookList.getBook(i).getName().equals(name)){
break;
}
}
if(i >= bookList.getSize()){
System.out.println("未找到相应书籍");
return;
}
//如果找到相应的书籍,判断是否已经被借阅了
if(bookList.getBook(i).getBorrowed() == true){
System.out.println("当前书已经被借阅");
}else{
bookList.getBook(i).setBorrowed(true);
System.out.println("借阅成功");
}
}
}
还书类
package Java_01_26_Test.operation;
import Java_01_26_Test.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 name = scanner.next();
int i = 0;
for (;i < bookList.getSize(); i++) {
if(bookList.getBook(i).getName().equals(name)){
break;
}
}
if(i >= bookList.getSize()){
System.out.println("未找到相应书籍");
return;
}
//如果找到相应的书籍,判断是否已经被借阅了
if(bookList.getBook(i).getBorrowed() == false){
System.out.println("当前书未被借阅");
}else{
bookList.getBook(i).setBorrowed(false);
System.out.println("归还成功");
}
}
}
结束程序类
package Java_01_26_Test.operation;
import Java_01_26_Test.BookList;
public class ExitOperation implements IOperation{
@Override
public void work(BookList bookList) {
//退出程序
System.out.println("退出程序");
//结束当前JVM对应的java进程
System.exit(0);
}
}