图书管理系统的用来为实现用户更快的借取书籍和归还书籍。 管理者更方便的进行管理,录入书籍信息和查找书籍的信息。 没有图书管理系统我们会大大增加人力资源和资源的浪费,所以我们需要实现图书管理系统使用户有更好的体验,使管理者也更好的管理图书。
首先这里我们可以看到当我们输入用户名之后会出现两个选项,管理者/普通用户,当我们选择后出现的菜单是不同的,我们需要用到封装来将我们的代码更加有序简洁,方便后续管理和升级
这里是我们当前图书的所有的书籍,书籍名称,作者,书籍类型,书籍的价格和该书是否被借出。
当我们这样看完之后我们可以在写代码的时候可以把不同的类放在方不同的包下,方便我们能够理解和解决哪个包下出现了问题。
这里是我们Book类中来创建书籍的属性,书的属性都是由private修饰的,我们需要用get和set来引用被private修饰的方法。
package Book;
public class Book {
private String name;
private String anthor;
private String type;
private int price;
private boolean isBorrowed;
public Book(String name, String anthor, String type, int price) {
this.name = name;
this.anthor = anthor;
this.type = type;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAnthor() {
return anthor;
}
public void setAnthor(String anthor) {
this.anthor = anthor;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", anthor='" + anthor + '\'' +
", type='" + type + '\'' +
", price=" + price +
", isBorrowed=" + isBorrowed +
'}';
}
}
package BookList;
import Book.Book;
public class BookList {
//这里的BookList来存放我们所有的书,定义一个数组来存放我们录入的书籍
//我们定义一个变量来记录当下我们书籍共有多少本书。
private Book[] books=new Book[10];
private int currentSum;
public BookList() {
books[0]=new Book("三国演义","罗贯中","小说",80);
books[1]=new Book("红楼梦","曹雪芹","小说",70);
currentSum = 2;
}
public int getCurrentSum() {
// 这里是我们返回书的当前个数
return currentSum;
}
public void setCurrentSum(int currentSum) {
//这里是我们当前放了几本书
this.currentSum = currentSum;
}
public void setBooks(int pos,Book book){
//这里是将一本书book放到books下标currentSum位置处
books[pos]=book;
}
public Book getBooks(int pos){
//获取books中的下标值中的一本书
return books[pos];
}
}
这里是我们的创建的操作包下的一些方法,这里我们可以定义一个接口,让这些类中实现这个接口
package Operation;
import BookList.BookList;
//这里是我们的IOperation的接口
public interface IOperation {
void work(BookList bookList);
//这里我们将我们需要操作的BookList作为参数传进去
//这个是我们新增图书的操作方法(方法还没有写),其他的也是实现IOperation接口,这里不写到上面了
public class Add implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("新增图书");
}
}
User包下分为用户和管理员以及管理员,我们通过User这个父母来引用子类 这样我们就可以选择我们的身份信息
package User;
import BookList.BookList;
import Operation.IOperation;
import Book.Book;
public abstract class User {
protected String name;//这里是我们的用户名
IOperation[] iOperations;
public User(String name) {
this.name = name;
}
public abstract int menu();//这是我们的菜单,通过不同的选择进入到管理者菜单或者普通用户菜单
public void DoOperation(int choice, BookList bookList){
iOperations[choice].work(bookList);
//来访问iOperation下标为choice中的方法
}
}
package User;
import Operation.*;
import java.util.Scanner;
public class AdminUser extends User{
//extends扩展User类
public AdminUser(String name) {
super(name);
//定义的接口数组引用对象初始化管理员数组
iOperations=new IOperation[]{
new Exit(),
new Add(),
new Delete(),
new Find(),
new Show()
};
}
@Override
public int menu() {
System.out.println("***************管理者***************");
System.out.println("************ 1.新增图书 *********");
System.out.println("************ 2.删除图书 *********");
System.out.println("************ 3.查找图书 *********");
System.out.println("************ 4.显示图书 *********");
System.out.println("************ 0.退出系统 *********");
System.out.print("请输入要选择的操作:>");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
return choice;
}
}
package User;
import Operation.*;
import java.util.Scanner;
public class NomalUser extends User{
public NomalUser(String name) {
super(name);
iOperations=new IOperation[]{
//定义的接口数组引用对象用来初始化用户数组
new Exit(),
new Borrow(),
new Return(),
new Find()
};
}
@Override
public int menu() {
System.out.println("****************普通用户******************");
System.out.println("*********** 1.借阅图书 **************");
System.out.println("*********** 2.归还图书 **************");
System.out.println("*********** 3.查找图书 **************");
System.out.println("*********** 0.退出系统 **************");
System.out.print("请输入要选择的操作:>");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
return choice;
}
}
我们定义一个Login来实现我们代码最开始运行的功能,Main方法中来运行我们的代码,查看是否正常运行。
import BookList.BookList;
import User.AdminUser;
import User.NomalUser;
import User.User;
import java.util.Scanner;
public class Main {
public static User Login(){
System.out.print("请输入你的用户名:>");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
System.out.print("您是否为管理员? 1.是 0.不是,请选择:>");
int choice=scanner.nextInt();
if(choice==1){
//是管理
return new AdminUser(name);//直接new出一个实例将name放到该类方法中
}else{
//是用户
return new NomalUser(name);
}
}
public static void main(String[] args) {
BookList bookList=new BookList();//实例化BookList
User user=Login();//返回的是哪一个类下的结果
int choice =user.menu();//菜单的选择用choice来接收
System.out.println("choice"+choice);
user.DoOperation(choice,bookList);
//访问我们doperation中下标choice的work方法
}
}
package Operation;
import BookList.BookList;
public interface IOperation {
void work(BookList bookList);//这里我们将我们需要操作的BookList作为参数传进去
}
package Operation;
import Book.Book;
import BookList.BookList;
import java.util.Scanner;
public class Add implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("新增图书");
System.out.print("请输入你想要增加的图书:>");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
int currentSum= bookList.getCurrentSum();//我们当前目录下书的数量
for(int i=0;i<currentSum;i++){
Book book=bookList.getBooks(i);//或者目录下标为i的书给到book中
if(book.getName().equals(name)){
//如果book中的name和我们需要新增图书的name相同说明目录中有我们需要新增的书
System.out.println("该目录下有我们需要新增的书籍,无法新增....");
return;
}
}
System.out.print("请输入书的作者:>");
String author=scanner.nextLine();
System.out.print("请输入书的类型:>");
String type=scanner.nextLine();
System.out.print("请输入书的价格:>");
int price=scanner.nextInt();
Book book=new Book(name,author,type,price);//实例化一本书
bookList.setBooks(currentSum,book);//放书到目录中,参数是位置和书
bookList.setCurrentSum(currentSum+1);//存放+1本书
System.out.println("新增成功");
}
}
package Operation;
import BookList.BookList;
import java.util.Scanner;
import Book.Book;
public class Delete implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("删除图书");
System.out.print("请输入要删除的图书名:>");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
int pos=0;//记录我们要删除的位置
int i=0;
for(;i<bookList.getCurrentSum();i++){
Book book=bookList.getBooks(i);
if(book.getName().equals(name)){
pos=i;
break;
}
}
if(i>=bookList.getCurrentSum()){
//i超出我们目录长度说明没有找到
System.out.println("未能找到您要删除的图书,请您重新检查");
return;
}
//走到这里说明我们可以找到我们想要删除的书籍
for(int j=pos;j<bookList.getCurrentSum()-1;j++){
//因为我们需要用的j+1,长度减1避免数组越界
Book book=bookList.getBooks(j+1);
bookList.setBooks(j,book);
}
System.out.println("删除图书成功......!");
bookList.setCurrentSum(bookList.getCurrentSum()-1);//图书删除后记得-1
}
}
package Operation;
import BookList.BookList;
import java.util.Scanner;
import Book.Book;
public class Borrow implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("借阅图书");
System.out.print("请输入您要借阅的图书:>");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
for(int i=0;i< bookList.getCurrentSum();i++){
Book book=bookList.getBooks(i);
if(book.getName().equals(name)){
if(book.isBorrowed()){
System.out.println("不好意思,这本书已经被借出!");
return;
}
book.setBorrowed(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("没有找到此类书籍");
}
}
package Operation;
import BookList.BookList;
import java.util.Scanner;
import Book.Book;
public class Return implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("归还图书");
System.out.print("请输入你要归还的图书名:>");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
for(int i=0;i<bookList.getCurrentSum();i++){
Book book=bookList.getBooks(i);
if(book.getName().equals(name)){
if(book.isBorrowed()){
book.setBorrowed(false);
System.out.println("归还图书成功");
return;
}
}
}
System.out.println("该目录没有您要归还的书籍");
}
}
package Operation;
import BookList.BookList;
import Book.Book;
import java.util.Scanner;
public class Find implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("查找图书");
System.out.print("请输入你想要查找的书名称:>");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
for(int i=0;i< bookList.getCurrentSum();i++){
Book book=bookList.getBooks(i);
if(book.getName().equals(name)){
//名字相同说明书在当前目录下
System.out.println(book);
return;
}
}
System.out.println("您要查找的书不再当前目录下,请重新确认.....");
}
}
package Operation;
import BookList.BookList;
public class Exit implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("退出系统");
System.exit(0);//退出系统
}
}
package Operation;
import BookList.BookList;
public class Exit implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("退出系统");
System.exit(0);//退出系统
}
}
package User;
import BookList.BookList;
import Operation.IOperation;
import Book.Book;
public abstract class User {
protected String name;//这里是我们的用户名
IOperation[] iOperations;
public User(String name) {
this.name = name;
}
public abstract int menu();//这是我们的菜单,通过不同的选择进入到管理者菜单或者普通用户菜单
public void DoOperation(int choice, BookList bookList){
iOperations[choice].work(bookList);
//来访问iOperation下标为choice中的方法
}
}
package User;
import Operation.*;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
iOperations=new IOperation[]{
new Exit(),
new Add(),
new Delete(),
new Find(),
new Show()
};
}
@Override
public int menu() {
System.out.println("***************管理者***************");
System.out.println("************ 1.新增图书 *********");
System.out.println("************ 2.删除图书 *********");
System.out.println("************ 3.查找图书 *********");
System.out.println("************ 4.显示图书 *********");
System.out.println("************ 0.退出系统 *********");
System.out.print("请输入要选择的操作:>");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
return choice;
}
}
package User;
import Operation.*;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
iOperations=new IOperation[]{
new Exit(),
new Add(),
new Delete(),
new Find(),
new Show()
};
}
@Override
public int menu() {
System.out.println("***************管理者***************");
System.out.println("************ 1.新增图书 *********");
System.out.println("************ 2.删除图书 *********");
System.out.println("************ 3.查找图书 *********");
System.out.println("************ 4.显示图书 *********");
System.out.println("************ 0.退出系统 *********");
System.out.print("请输入要选择的操作:>");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
return choice;
}
}
package BookList;
import Book.Book;
public class BookList {
//这里的BookList来存放我们所有的书,定义一个数组来存放我们录入的书籍
//我们定义一个变量来记录当下我们书籍共有多少本书。
private Book[] books=new Book[10];
private int currentSum;
public BookList() {
books[0]=new Book("三国演义","罗贯中","小说",80);
books[1]=new Book("红楼梦","曹雪芹","小说",70);
currentSum = 2;
}
public int getCurrentSum() {
// 这里是我们返回书的当前个数
return currentSum;
}
public void setCurrentSum(int currentSum) {
//这里是我们当前放了几本书
this.currentSum = currentSum;
}
public void setBooks(int pos,Book book){
//这里是将一本书book放到books下标currentSum位置处
books[pos]=book;
}
public Book getBooks(int pos){
//获取books中的下标值中的一本书
return books[pos];
}
}
#Book包下代码
package Book;
public class Book {
private String name;
private String anthor;
private String type;
private int price;
private boolean isBorrowed;
public Book(String name, String anthor, String type, int price) {
this.name = name;
this.anthor = anthor;
this.type = type;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAnthor() {
return anthor;
}
public void setAnthor(String anthor) {
this.anthor = anthor;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", anthor='" + anthor + '\'' +
", type='" + type + '\'' +
", price=" + price +
", isBorrowed=" + isBorrowed +
'}';
}
}
import BookList.BookList;
import User.AdminUser;
import User.NomalUser;
import User.User;
import java.util.Scanner;
public class Main {
public static User Login(){
System.out.print("请输入你的用户名:>");
Scanner scanner=new Scanner(System.in);
String name=scanner.nextLine();
System.out.print("您是否为管理员? 1.是 0.不是,请选择:>");
int choice=scanner.nextInt();
if(choice==1){
//是管理
return new AdminUser(name);//直接new出一个实例将name放到该类方法中
}else{
//是用户
return new NomalUser(name);
}
}
public static void main(String[] args) {
BookList bookList=new BookList();//实例化BookList
User user=Login();//返回的是哪一个类目下的结果
while(true) {
int choice = user.menu();//菜单的选择用choice来接收
// System.out.println("choice" + choice);
user.DoOperation(choice, bookList);//访问我们doperation中下标choice的work方法
}
}
}
有什么不足的地方希望大佬可以指导一下!!谢谢,希望后续可以升级图书管理系统!!