Java——简易图书管理系统

1.功能介绍

本个图书管理系统的功能主要分为两个方面:

1.管理员的:查找图书,新增图书,删除图书,显示图书,退出系统

2.普通用户的:查找图书,借阅图书,归还图书,显示图书,退出系统

2.图书管理系统的整体框架

 3.搭框架

3.1对一本书进行处理

1.将一本书和书架分别写成同一个包中的不同类

2.对一本书的信息和方法进行封装(写书的构造方法时,不用写是否借出的信息,因为默认是false)

3.重写toString方法

    public String toString() {
        return "Book{" +
                "书名:'" + name + '\'' +
                ", 作者:'" + author + '\'' +
                ", 类型:'" + type + '\'' +
                ", 价格:" + price +
                ", 是否借出:" + (isBrrowed?"已借出":"未借出") +
                '}';
    }

注意:重写toString方法时,要对是否借出的信息进行判断,如果是true就返回字符串“已借出”,false返回字符串“未借出”

3.2对书架进行处理

1.定义一个书架(用数组存储每一本书,数组的类型为Book,书架的默认长度设为10),

  private Book[]books=new Book[10];

2.调用构造函数对书架进行初始化(默认放3本书进去)

    public BookList(){
    this.books[0]=new Book("三国演义","罗贯中","小说",99);
    this.books[1]=new Book("西游记","吴承恩","小说",149);
    this.books[2]=new Book("红楼梦","曹雪芹","小说",129);
    }

3.设置一个变量useSize来记录当前的数量

4.对书架这个类进行封装

注意:

对书架调用getter和setter方法时,我们获取的是书架这个数组里面的书,而不是书架这个数组

   public Book getBooks(int pos) {
        return books[pos];
    }

    public void setBooks(Book book,int pos) {
        this.books[pos] = book;
    }

3.3对各种方法的实现

不管是管理员还是普通用户,实现的功能几乎都是对书架这个数组的增删查改,我们实现一个工作的接口,让每一个功能类都实现这个接口,重写接口里面的方法,从而方便后续使用接口类型的数组管理这些方法

注意:在退出系统这个功能里面,我们好像没有用到书架的数组吧,但为什么也要实现IFunctiong这个接口呢?

答:在后面我们是将每一个功能的类作为IFunction这个接口类型的数组的元素,通过数组去调用每一个功能,实现了功能调用的统一性

思考:

我们的删除图书,查找图书,以及借阅和归还图书是不是都需要实现一个查找功能,有没有方法方法简化一下代码啊?

我们可以实现一个接口,接口里面实现一个查找的方法,然后再用需要查找方法的类实现这个接口就行

public interface IFind {
    public static int Find(BookList bookList, String name){
        for (int i = 0; i <bookList.getUseSize() ; i++) {
            if(bookList.getBooks(i).getName().equals(name)){
                return i;
            }
        }
        return -1;
    }
}

3.4对管理员和普通用户进行处理

管理员和普通用户有许多共性的地方,比如:姓名,菜单,各自的功能

所以我们要将这些共性的东西抽取到父类里面


User(父类):

因为子类管理员和普通用户的菜单和姓名还有各种方法的存储具有共性,所以我

public abstract class User {
    private String name;
    public IFunction[]iFunctions;
    public abstract int menu();

    public User(String name) {
        this.name = name;
    }
}
Administrator(管理员),OrdinaryUser(普通用户)(子类):

对父类的构造方法和抽象方法进行重写,并将对应的类存放在iFunctions这个数组里面

public class OrdinaryUser extends User{
    public OrdinaryUser(String name) {
        super(name);
        iFunctions=new IFunction[]{new Exit(),new FindBook(),new BrrowedBook(),new ReturnBook(),new ShowBook()};
    }

    @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.println("***************************");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你要进行的操作:");
        return scanner.nextInt();
    }
}

3.5测试类里面实现身份的选择

public static User identity(){
    Scanner scanner=new Scanner(System.in);
    System.out.println("请输入你的姓名:");
    while (true){
        String name=scanner.nextLine();
        System.out.println("请选择你的身份: 1.管理员  2.普通用户");
        int choose= scanner.nextInt();
        if (choose==1){
            return new Administrator(name);
        } else if (choose==2) {
            return new OrdinaryUser(name);
        }
        else {
            System.out.println("操作错误,请重新选择:");
        }
    }
}

3.6主函数实现一个大体的逻辑

    public static void main(String[] args) {
        BookList bookList=new BookList();
User user=identity();
        System.out.println("欢迎"+(user instanceof Administrator?"管理员":"普通用户")+user.getName()+"来到图书管理系统");
        while (true){
         int choose=user.menu();
         user.iFunctions[choose].work(bookList);
        }
    }

1.创建一个书架

2.对身份进行判断

3.打印一个欢迎语

4.对操作菜单和操作进行循环

4.对各种功能的实现

所有代码已上传至码云:登录 - Gitee.com

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值