图书管理系统,相信大家都不陌生。借书还书等等操作...那么如何用Java来实现呢?
首先,我们从中抽取出一个个对象。
- 管理员的操作:
- 查看某个书籍、新增书籍、删除书籍、打印书籍列表、退出系统。
- 普通用户的操作:
- 查看某个书籍的信息、借阅书籍、归还书籍、退出系统。
- 当然,除了上面这些彩色标注的字样,最重要的还要实现书、书籍列表。
Book
- 属性:书名、作者、价格、类型、是否被借(为了封装尽量使用private)
- 方法:构造方法(用来初始化)、获取书名、获取被借状态、设置被借状态、toString
public class Book {
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;
}
public String getName() {
return name;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
'}';
}
}
BookList
- 属性:书籍列表的长度、列表的最大长度、Book类型的数组
- 方法:构造方法、获取列表长度、设置列表长度、得到指定下标的书、设置指定下标的书
//书籍列表
public class BookList {
private int size;
private int capacity=100;
Book[] books=new Book[capacity];
public BookList() {
books[0]=new Book("西游记","吴承恩",50,"古典文学");
books[1]=new Book("三国演义","罗贯中",60,"古典文学");
books[2]=new Book("从你的全世界路过","张嘉佳",45,"青春文学");
size=3;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public Book getBooks(int index) {
return books[index];
}
public void setBooks(int index,Book book) {
this.books[index] = book;
}
}
我们从删除、增加...操作中,可以发现共同的部分,将其放在一个接口中,然后定义这些操作的类时直接实现这个接口~
IOperation
注意:接口中的方法是抽象方法~
public interface IOperation {
void work(BookList bookList);
}
AddOperation
添加书籍之后设置书籍列表的长度+1
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("添加书籍!");
Scanner sc=new Scanner(System.in);
System.out.println("请输入新增书籍的名称");
String name=sc.next();
System.out.println("请输入新增书籍的作者");
String author=sc.next();
System.out.println("请输入新增书籍的价格");
double price=sc.nextDouble();
System.out.println("请输入新增书籍的类型");
String type=sc.next();
Book book=new Book(name,author,price,type);
bookList.setSize(bookList.getSize()+1);
bookList.setBooks(bookList.getSize()-1,book);
System.out.println("添加书籍成功!");
}
}
BorrowOperation
通过输入书名借阅,判断这本书是否存在,若不存在,提示不存在;若存在,判断是否可借,可借:借完之后将其借阅状态设置为已借(true),不可借:提醒不可借~
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("借阅书籍!");
Scanner sc=new Scanner(System.in);
System.out.println("请输入您想借阅的书籍名称");
String name=sc.next();
int i=0;
for(;i<bookList.getSize();i++){
if(bookList.getBooks(i).getName().equals(name)){
if(bookList.getBooks(i).isBorrowed()==false){
System.out.println("借阅成功!");
bookList.getBooks(i).setBorrowed(true);
}else{
System.out.println("这本书已被借出啦,看看其他书吧~");
}
return;
}
}
if(i>=bookList.getSize()){
System.out.println("您所借阅的这本书不存在!");
}
}
}
DelOperation
注意:删除之后书籍列表长度-1
import java.util.Scanner;
public class DelOperation implements IOperation {
@Override
public void work(BookList bookList) {
//删除书籍相关操作
System.out.println("删除书籍!");
Scanner sc=new Scanner(System.in);
System.out.println("请输入您想删除的书的书名");
String name=sc.next();
int i=0;
for(;i<bookList.getSize();i++){
if(name.equals(bookList.getBooks(i).getName())){
if(i==bookList.getSize()-1){
bookList.setSize(bookList.getSize()-1);
}else{
bookList.setBooks(i,bookList.getBooks(bookList.getSize()-1));
bookList.setSize(bookList.getSize()-1);
}
System.out.println("删除书籍成功!");
break;
}
}
if(i>=bookList.getSize()){
System.out.println("您所删除的书籍不存在");
}
}
}
DisplayOperation
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.getBooks(i));
}
}
}
ExitOperation
System.exit();
public class ExitOperation implements IOperation {
@Override
public void work(BookList bookList) {
//退出程序
System.out.println("退出图书管理系统!byebye~");
System.exit(0);
}
}
FindOperation
使用contains()方法~
import java.util.Scanner;
public class FindOperation implements IOperation {
@Override
public void work(BookList bookList) {
// 查找书籍相关信息
System.out.println("查找书籍!");
Scanner sc=new Scanner(System.in);
System.out.println("请输入您想查找书籍的名称");
String name=sc.next();
int i=0;
for(;i<bookList.getSize();i++){
if(bookList.getBooks(i).getName().contains(name)){
System.out.println(bookList.getBooks(i));
System.out.println("查找成功!");
return;
}
}
if(i>=bookList.getSize()){
System.out.println("您所查找的书籍不存在");
}
}
}
ReturnOperation
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) {
//归还书籍
System.out.println("归还书籍!");
System.out.println("请输入要归还书籍的名称");
Scanner sc=new Scanner(System.in);
String name=sc.next();
int i=0;
for(;i<bookList.getSize();i++){
if(bookList.getBooks(i).getName().equals(name)){
bookList.getBooks(i).setBorrowed(true);
System.out.println("归还成功!");
return;
}
}
if(i>=bookList.getSize()){
System.out.println("归还失败!检查一下是否输入有误~");
}
}
}
管理员和普通用户中有相同的属性和方法,将其提取出来放到一个类中,创建用户时直接继承这个类即可。
User
abstract public class User {
protected String name;
protected IOperation[] operations;
public abstract int menue();
public void doOperation(int choice,BookList bookList){
IOperation operation=this.operations[choice-1];
operation.work(bookList);
// operations[choice-1].work(bookList);
}
}
Admin
import java.util.Scanner;
public class Admin extends User{
public Admin(String name) {
this.name = name;
this.operations=new IOperation[] {
new FindOperation(),
new AddOperation(),
new DelOperation(),
new DisplayOperation(),
new ExitOperation()
};
}
@Override
public int menue() {
System.out.println("===================");
System.out.println("欢迎"+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 sc=new Scanner(System.in);
int choice=sc.nextInt();
return choice;
}
}
NormalUser
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
this.name=name;
this.operations=new IOperation[]{
new FindOperation(),
new BorrowOperation(),
new ReturnOperation(),
new ExitOperation()
};
}
@Override
public int menue() {
System.out.println("===================");
System.out.println("欢迎"+name+"进入新一代智能图书管理系统");
System.out.println("1.查阅书籍信息");
System.out.println("2.借阅书籍");
System.out.println("3.归还书籍");
System.out.println("4.退出系统");
System.out.println("===================");
System.out.println("请输入您的选择");
Scanner sc=new Scanner(System.in);
int choice=sc.nextInt();
return choice;
}
}
Main
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//首先创建一个书籍列表
BookList bookList=new BookList();
//用户登录
User user=login();
//循环操作
while(true){
int choice=user.menue();
user.doOperation(choice,bookList);
}
}
public static User login(){
System.out.println("请输入您的姓名");
Scanner sc= new Scanner(System.in);
String name=sc.next();
System.out.println("请选择您的身份:1.管理员 2.普通用户");
int choice=sc.nextInt();
if(choice==1){
return new Admin(name); //向上转型
}
return new NormalUser(name);
}
}