JAVA修炼秘籍(番外篇)第二章:《图书馆管理系统》

18 篇文章 0 订阅
13 篇文章 0 订阅

往期:
JAVA 修炼秘籍第一章:《痛苦的折磨》
JAVA 修炼秘籍第二章:《逐渐魔化》
JAVA 修炼秘籍第三章:《绝地反击》
JAVA 修炼秘籍第四章:《闭关修炼》
JAVA 修炼秘籍第五章:《卧薪尝胆》
JAVA 修炼秘籍第六章:《鏖战》
JAVA 修炼秘籍第七章:《面向对象编程》
JAVA修炼秘籍(番外篇)第一章:《这四道代码题,你真的会吗?》


图中每一段代码都进行了注释,一点点看。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源代码:对应图片顺序

package book;
//书类
public class Book {
    private String name;//书名
    private String author;//作者
    private int price;//价格
    private String type;//类型
    private boolean isBorrowed;//状态
    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 name;
    }//过去书名

    public void setName(String name) {//更改书名
        this.name = name;
    }//修改书名

    public String getAuthor() {//获得作者
        return author;
    }//获取作者

    public void setAuthor(String author) {//更改作者
        this.author = author;
    }//修改作者

    public int getPrice() {//获得价格
        return price;
    }//获取价格

    public void setPrice(int price) {//更改价格
        this.price = price;
    }//修改价格

    public String getType() {//获得类型
        return type;
    }

    public void setType(String type) {//更改类型
        this.type = type;
    }//修改类型

    public boolean getisBorrowed() {//获得状态
        return isBorrowed;
    }//获取状态

    public void setBorrowed(boolean borrowed) {//更改状态
        isBorrowed = borrowed;
    }//修改状态·

    @Override
    public String toString() {//打印图书
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", isBorrowed=" + isBorrowed +
                '}';
    }
}

package book;
//书的存储类
public class BookList {
    private int bookSize;//书籍数量
    private Book[] books=new Book[10];//书籍顺序表
    public BookList() {
        books[0]=new Book("鲨鱼辣椒","李富贵",20,"反派");//存入书籍
        books[1]=new Book("蝎子莱莱","王二狗",10,"反派");//存入书籍
        books[2]=new Book("蜻蜓队长","张狗蛋",60,"正义");//存入书籍
        books[3]=new Book("丸子轮","刘铁根",55,"正义");//存入书籍
        books[4]=new Book("蜘蛛侦探","赵三立",93,"正义");//存入书籍
        this.bookSize=5;//更改书籍数量
    }
    public int getBookSize() {
        return bookSize;
    }//获得书籍数量

    public void setBookSize(int booksize) {
        this.bookSize = booksize;
    }//更改书籍数量

    public Book getBooks(int pos) {
        return books[pos];
    }//获得pos位置的书籍

    public void setBooks(Book books, int pos) {
        this.books[pos] = books;
    }//更改pos位置的书籍
}


package opeartion;

import book.BookList;
//接口,为所有操作提供通用接口
public interface IOperation {
    void work(BookList bookList);
}
//新增图书类
package opeartion;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOperation {//链接接口
    //重写word方法
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书");//提示
        Scanner scan=new Scanner(System.in);//实例对象
        System.out.println("请输入图书的书名:");//提示
        String name=scan.nextLine();//输入书名
        System.out.println("请输入图书的作者:");//提示
        String author= scan.nextLine();//输入作者
        System.out.println("请输入图书的类型:");//提示
        String type=scan.nextLine();//输入类型
        System.out.println("请输入图书的价格:");//提示
        int price=scan.nextInt();//输入价格
        Book book=new Book(name,author,price,type);//得到一本新书
        int size= bookList.getBookSize();//获取书籍数量
        for(int i=0;i<size;i++){//检查是否有重复名称的书籍
            Book book1=bookList.getBooks(i);//获取顺序表中的每一本书
            if(book1.getName().equals(name)){//如有相同
                System.out.println("此书已存在");//提示
                return ;//提前结束
            }
        }
        bookList.setBooks(book,size);//在顺序表尾部添加新书
        bookList.setBookSize(size+1);//书籍数量+1
        System.out.println("增书成功");//提示
    }
}
//借阅图书类
package opeartion;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOperation{//链接接口
    //重写word方法
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入要借阅的书名:");//提示
        Scanner scan=new Scanner(System.in);//实例对象
        String name=scan.nextLine();//输入书名
        int size=bookList.getBookSize();//获取书记数量
        for(int i=0;i<size;i++){//检查书籍是否可以借阅
            Book book=bookList.getBooks(i);//获取顺序表中的每一本书
            if(book.getName().equals(name)){//如有相同名称书籍
                if(!book.getisBorrowed()){//如书籍没借出
                    book.setBorrowed(true);//修改书籍状态
                    System.out.println("借阅成功");//提示
                    return ;//提前结束
                }else{//如书籍已借出
                    System.out.println("此书已经借阅出去。");//提示
                    return ;//提前结束
                }
            }
        }
        System.out.println("没有此书,无法借阅");//提示,循环结束没有找到此书
    }
}
//显示图书类
package opeartion;

import book.Book;
import book.BookList;

public class DisplayOperation implements IOperation{//链接接口
    //重写word方法
    @Override
    public void work(BookList bookList) {
        int size=bookList.getBookSize();//获取书籍数量
        for(int i=0;i<size;i++){//遍历顺序表
            Book book=bookList.getBooks(i);//获取顺序表i下标书籍
            System.out.println(book);//打印获取的书籍
        }
    }
}```

```java
//退出系统类
package opeartion;

import book.BookList;

public class ExitOperation implements IOperation{//链接接口
    //重写word方法
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统");//提示
        System.exit(0);//结束程序
    }
}
//查找图书类
package opeartion;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOperation{//链接接口
    //重写word方法
    @Override
    public void work(BookList bookList) {
        Scanner scan=new Scanner(System.in);//实例对象
        System.out.println("请输入要查找的书名:");//提示
        String name=scan.nextLine();//输入书名
        int size=bookList.getBookSize();//获取书籍数量
        for (int i = 0; i <size ; i++) {//遍历顺序表
            Book book=bookList.getBooks(i);//获取顺序表中的每一本书
            if(book.getName().equals(name)){//如有相同
                System.out.println(book);//打印书籍
                return ;//提前结束
            }
        }
        System.out.println("不存在此书");//提示不存在。
    }
}
//删除图书类
package opeartion;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class RemoveOperation implements IOperation{//链接接口
    //重写word方法
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入要删除的书名:");//提示
        Scanner scan=new Scanner(System.in);//实例对象
        String name=scan.nextLine();//输入书名
        int size=bookList.getBookSize();//获取书籍长度
        int pos=-1;//判断作用,覆盖作用
        for (int i = 0; i < size; i++) {//遍历顺序表
            Book book=bookList.getBooks(i);//获取顺序表中的每一本书
            if(book.getName().equals(name)){//如有相同
                pos=i;//存储下标
                break;//结束循环
            }
        }
        if(pos!=-1){//如找到了,pos则不等于 -1
            while(pos<size-1){//循环从要删除书籍位置的下标到书籍数量减1的位置
                Book book=bookList.getBooks(pos+1);//获取pos下一个位置的书籍
                bookList.setBooks(book,pos);//用pos下一个位置的书籍覆盖当前pos位置的书籍
                pos++;//pos到下一个位置
            }
            bookList.setBookSize(size-1);//全部覆盖结束后书籍数量减1
            System.out.println("删除成功");//提示
            return ;//提前结束
        }
        System.out.println("删除失败");//提示顺序表中没有此书,删除失败
    }
}
//归还图书类
package opeartion;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOperation{//链接接口
    //重写word方法
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入要归还的书名:");//提示
        Scanner scan=new Scanner(System.in);//实例对象
        String name=scan.nextLine();//输入书名
        int size=bookList.getBookSize();//获取书籍数量
        for(int i=0;i<size;i++){//遍历顺序表
            Book book=bookList.getBooks(i);//获取顺序表的每一本书籍
            if(book.getName().equals(name)){//如有相同
                if(book.getisBorrowed()){//如还未归还
                    book.setBorrowed(false);//修改当前书籍状态
                    System.out.println("归还成功");//提示
                    return ;//提前结束
                }else{//如已归还
                    System.out.println("此书已经归还。");//提示
                    return ;//提前结束
                }
            }
        }
        System.out.println("没有此书,无法归还");//提示顺序表中没有此书。
    }
}
//用户类
package user;


import book.BookList;
import opeartion.IOperation;

public class User {
    protected String name;//用户名
    protected IOperation[] iOperation;//不同用户身份会有不同的操作,这里只提供一个数组。
    public User(String name) {
        this.name = name;
    }//构造方法
    public int menu(){//父类方法
        return -1;
    }
    public void doOpeartion(int choice, BookList bookList){
        this.iOperation[choice].work(bookList);//通过用户输入的操作数字,对书籍顺序表进行相应的操作。
    }
}

//普通用户类
package user;

import opeartion.*;

import java.util.Scanner;

public class NormalUser extends User{//普通用户类继承于用户类
    public NormalUser(String name) {//通过父类中提供的操作数组重新提供相应功能能
        super(name);//
        this.iOperation=new IOperation[]{
                new ExitOperation(),//输入0对应退出
                new FindOperation(),//输入1对应查找
                new BorrowOperation(),//输入2对应借阅
                new ReturnOperation()//输入3对应归还
        };
    }
    public int menu(){//重写父类方法,打印普通用户菜单
        System.out.println("*-*-*-*-*-*-*-*-*-*用户菜单*-*-*-*-*-*-*-*-*-*");//提示
        System.out.println("hello "+this.name+", 欢迎来到图书小练习");//提示
        System.out.println("1.查找图书");//提示
        System.out.println("2.借阅图书");//提示
        System.out.println("3.归还图书");//提示
        System.out.println("0.退出系统");//提示
        Scanner scan=new Scanner(System.in);//实例对象
        int choice=scan.nextInt();//输入操作数字
        return choice;//返回用户选择的操作数字
    }
}
//管理用户类
package user;

import opeartion.*;

import java.util.Scanner;

public class AdminUser extends User{//管理员用户类继承于用户类
    public AdminUser(String name) {//通过父类中提供的操作数组重新提供相应功能能
        super(name);//
        this.iOperation=new IOperation[]{
                new ExitOperation(),//输入0对应退出
                new FindOperation(),//输入1对应查找
                new AddOperation(),//输入2对应新增
                new RemoveOperation(),//输入3对应删除
                new DisplayOperation()//输入4对应显示
        };
    }
    public int menu(){//重写父类方法,打印管理员用户菜单
        System.out.println("*-*-*-*-*-*-*-*-*-*管理员菜单*-*-*-*-*-*-*-*-*-*");//提示
        System.out.println("hello "+this.name+", 欢迎来到图书小练习");//提示
        System.out.println("1.查找图书");//提示
        System.out.println("2.新增图书");//提示
        System.out.println("3.删除图书");//提示
        System.out.println("4.显示图书");//提示
        System.out.println("0.退出系统");//提示
        Scanner scan=new Scanner(System.in);//实例对象
        int choice=scan.nextInt();//输入操作数字
        return choice;//返回用户选择的操作数字
    }
}
//运行类
package user;

import book.BookList;

import java.util.Scanner;

public class Main {
    public static User signin(){//获得用户类型
        System.out.println("请输入姓名:");//提示
        Scanner scan=new Scanner(System.in);//实例对象
        String name=scan.nextLine();//输入用户姓名
        System.out.println("请输入身份:1.管理员  2.用户");//提示
        int choice=scan.nextInt();//输入用户身份
        if(choice==1){//如是管理
            return new AdminUser(name);//返回类型为,User父类的AdminUser子类。
        }else{//如是普通
            return new NormalUser(name);//返回类型为,User父类的NormalUser子类。
        }
    }
    public static void main(String[] args) {//主函数
        BookList bookList=new BookList();//实例对象
        User user=signin();//得到用户输入的身份
        while(true){//死循环,直到用户主动退出
            int choice = user.menu();//user的身份取决于菜单的打印,choice保存用户在菜单中选择的操作数字。
            user.doOpeartion(choice, bookList);//传入用户输入的数字,传入顺序表
        }
    }
}
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值