目录
大概功能:
主要步骤:
Main类
book包
Book类
BookList类
operation包
AddOperation类
BorrowedOperation类
DelOperatoion类
ExitOpration类
FindOperation类
IoPeration接口
ReturnOperation类
ShowOperation类
user包
AdminUser类
大概功能:
首先我们看看能实现什么功能
![]()
主要步骤:
记录姓名和身份,根据不同的身份提供对应的操作权限
对此我们需要创建出不同的包和类来实现:
如下图:
Main类
我们需要在Main类中写程序入口,并调用相关类和方法提供操作。
这是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.doIoperations(choice, bookList);
}
}
}
book包
Book类
book类是用来创建一个book的对象,用来表示一个书的信息。该类包含书名、作者、价格、类型等属性,并提供了相应的getter和setter方法。另外还包含一个isBorrowed属性表示书是否被借出,以及相应的getter和setter方法
源代码:
package book;
public class Book {
private String name;
private String author;
private int price;
private String type;
private boolean isLend;//是否被借出
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
public int getPrice() {
return price;
}
public String getType() {
return type;
}
public boolean isLend() {
return isLend;
}
public void setName(String name) {
this.name = name;
}
public void setAuthor(String author) {
this.author = author;
}
public void setPrice(int price) {
this.price = price;
}
public void setType(String type) {
this.type = type;
}
public void setLend(boolean lend) {
isLend = lend;
}
public Book(String name, String author, int 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 + '\'' +
(isLend==true?" 已借出":" 未借出")+
//", isLend=" + isLend +
'}';
}
}
BookList类
书架类是用来实现了一个简单的书籍列表管理功能,可以添加、获取书籍,并检查书籍列表是否已满。
源代码:
package book; public class BookList { private Book[] books=new Book[10]; private int usedSize; public BookList(){ books[0]=new Book("三国演义","罗贯中",10,"小说"); books[1]=new Book("西游记","吴承恩",12,"小说"); books[2]=new Book("红楼梦","曹雪芹",14,"小说"); this.usedSize=3; } public int getUsedSize() { return usedSize; } public void setUsedSize(int usedSize) { this.usedSize = usedSize; } public Book getBook(int pos){ return books[pos]; } public void setBooks(int pos,Book book){ books[pos]=book; } public boolean isFull(){ if(this.usedSize==books.length){ return true; } return false; } }
operation包
AddOperation类
实现图书增加的功能
源代码:
package operation; import book.Book; import book.BookList; import java.sql.SQLOutput; import java.util.Scanner; public class AddOperation implements IoPeration{ public void work(BookList bookList){ System.out.println("新增图书...... "); if(bookList.isFull()){ System.out.println("书架满了,不能新增了"); } System.out.println("请输入你要新增的图书的书名:"); Scanner scanner=new Scanner(System.in); String bookName=scanner.nextLine(); System.out.println("请输入你要新增的图书的作者:"); String author=scanner.nextLine(); System.out.println("请输入你要新增的图书的价格:"); int price=scanner.nextInt(); System.out.println("请输入你要新增的图书的类型:"); String type =scanner.nextLine(); Book book=new Book(bookName,author,price,type); int currentSize=bookList.getUsedSize();//3 bookList.setBooks(currentSize,book); bookList.setUsedSize(currentSize+1); System.out.println("新增图书成功!"); } }
BorrowedOperation类
实现借阅功能
源代码:
package operation; import book.Book; import book.BookList; import java.util.Scanner; public class BorrowedOperation implements IoPeration{ public void work(BookList bookList) { System.out.println("借阅图书...... "); System.out.println("请输入你要借阅的图书的书名:"); Scanner scanner=new Scanner(System.in); String bookName=scanner.nextLine(); int currentSize =bookList.getUsedSize(); for(int i=0;i<currentSize;i++){ Book book=bookList.getBook(i); if(book.getName().equals(bookName)){ book.setLend(true); System.out.println("借阅成功!"); return ; } } System.out.println("借阅失败!"); } }
DelOperatoion类
实现删除图书的功能
源代码:
package operation; import book.Book; import book.BookList; import java.util.Scanner; public class DelOperatoion implements IoPeration{ public void work(BookList bookList){ System.out.println("删除图书...... "); System.out.println("请输入你要删除的图书命:"); Scanner scanner=new Scanner(System.in); String bookName=scanner.nextLine(); int currentSize=bookList.getUsedSize(); int pos=-1; int i; for( i=0;i<currentSize;i++){ Book book =bookList.getBook(i); if(book.getName().equals(bookName)){ pos=i; break; } } if(i>=currentSize){ System.out.println("没有你要找的书"); return; } for(int j=pos;j<currentSize-1;j++) { Book book=bookList.getBook(j+1); bookList.setBooks(j,book); } bookList.setUsedSize(currentSize-1); bookList.setBooks(currentSize-1,null); System.out.println("删除成功!"); } }
ExitOpration类
实现退出功能
源代码:
package operation; import book.BookList; public class ExitOpration implements IoPeration{ public void work(BookList bookList) { System.out.println("退出系统...... "); int currentSize =bookList.getUsedSize(); for(int i=0;i<currentSize;i++){ bookList.setBooks(i,null); } System.exit(0); } }
FindOperation类
实现查找这本书的功能
源代码:
package operation; import book.Book; import book.BookList; import java.util.Scanner; public class FindOperation implements IoPeration{ public void work(BookList bookList){ System.out.println("查找图书......"); System.out.println("请输入你要查找的图书名: "); Scanner scanner=new Scanner(System.in); String bookName=scanner.nextLine(); int currentSize=bookList.getUsedSize(); for(int i=0;i<currentSize;i++){ Book book =bookList.getBook(i); if(book.getName().equals(bookName)){ System.out.println("找到了这本书:"); System.out.println(book); return ; } } System.out.println("没有你要找的书......"); } }
IoPeration接口
这个接口用于表示对书籍列表进行操作的行为,具体的操作逻辑由实现该接口的类来实现。通过定义接口,可以实现对书籍列表的不同操作(例如添加书籍、删除书籍、查找书籍等)的统一表示和调用。
源代码:
package operation; import book.BookList; public interface IoPeration { void work(BookList bookList); }
ReturnOperation类
实现归还图书的功能
源代码:
package operation; import book.Book; import book.BookList; import java.util.Scanner; public class ReturnOperation implements IoPeration{ public void work(BookList bookList) { System.out.println("归还图书...... "); System.out.println("请输入你要归还的图书的书名:"); Scanner scanner=new Scanner(System.in); String bookName=scanner.nextLine(); int currentSize =bookList.getUsedSize(); for(int i=0;i<currentSize;i++){ Book book=bookList.getBook(i); if(book.getName().equals(bookName)){ book.setLend(false); System.out.println("归还成功!"); return ; } } System.out.println("归还失败!"); } }
ShowOperation类
实现显示图书功能
源代码:
package operation; import book.Book; import book.BookList; public class ShowOperation implements IoPeration{ @Override public void work(BookList bookList) { System.out.println("显示图书...... "); int currentSize=bookList.getUsedSize(); for(int i=0;i<currentSize;i++){ Book book =bookList.getBook(i); System.out.println(book); } } }
user包
AdminUser类
实现管理员用户的操作
源代码:
package user;
import operation.*;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
this.ioPerations=new IoPeration[]{
new ExitOpration(),
new FindOperation(),
new AddOperation(),
new DelOperatoion(),
new ShowOperation(),
};
}
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.println("*******************");
System.out.println("请输入你的操作:");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
return choice;
}
}
NormalUser类
实现普通用户的操作功能
源代码:
package user;
import operation.*;
import java.util.Scanner;
public class NormalUser extends User {
public NormalUser(String name) {
super(name);
this.ioPerations = new IoPeration[]{
new ExitOpration(),
new FindOperation(),
new BorrowedOperation(),
new ReturnOperation(),
new ShowOperation()
};
}
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.println("*******************");
System.out.println("请输入你的操作:");
Scanner scanner=new Scanner(System.in);
int choice=scanner.nextInt();
return choice;
}
}
User类
根据用户操作身份,统一表示不同的操作类型。
源代码:
package user;
import book.BookList;
import operation.IoPeration;
public abstract class User {
protected String name;
protected IoPeration[] ioPerations;
public User(String name){
this.name=name;
}
public abstract int menu();
public void doIoperations(int choice, BookList bookList){
this.ioPerations[choice].work(bookList);
}
}