java-图书管理系统(接口,继承等面向对象思想)

一,首先,我们需要分析图书管理系统都需要哪些部分组成?

大的方面分为三个部分:图书、用户(管理员和普通用户)、图书系统的功能

图书:

     先是一个关于书籍的类(Book),里边存放当前书籍的书名、作者、类型、价格等信息。

     再是一个关于图书系统的类(BookList),里边存放一个Book数组,包含图书系统里的各种书籍。 

用户:

     由于用户分为管理员和普通用户,但是他们存在姓名及对书籍进行一些操作的共有信息,所以我们首先定一个User父类,里边存放姓名,各自不同的菜单及操作数组。

     管理员和普通用户都为了继承父类,分别是Admin类(管理员)NomalUder类(普通用户),里边分别包含各自从父类继承来的属性以及对方法的重写。

图书系统功能:

     先定义一个各个功能的总接口(Ioperation)

     再是实现这个接口的实现类,来实现增删改查等功能。

二,总体逻辑框架

三个文件夹(book,operation,usr)来控制整个图书管理系统。

三,代码部分

一.我们先看图书系统各个功能这个模块,这也是最简单的部分。在operation文件夹里,包含一个IOperation接口和实现这个接口的各个类。

1>接口

public interface IOperation {

    Scanner scanner=new Scanner(System.in);
    public void work(BookList booklist);
}

 scanner方便后面各个功能从键盘读取数据,比如添加书籍时,需要输入书籍的书名,作者等信息。work方法为后面实现类来重写具体的功能。

2>添加书籍

public class AddOperation implements IOperation {
    @Override
    public void work(BookList booklist) {
        System.out.println("添加书籍");
        System.out.println("请输入图书的名字");
        String name=scanner.next();
        System.out.println("请输入图书的作者");
        String author=scanner.next();
        System.out.println("请输入图书的价格");
        int price=scanner.nextInt();
        System.out.println("请输入图书的类型");
        String type=scanner.next();
        Book book=new Book(name,author,price,type,true);

        //添加图书
        booklist.books[booklist.getSize()]=book;
        //长度加一
        booklist.setSize(booklist.getSize()+1);

    }
}

3>借阅书籍

public class BorrewOperation implements IOperation {
    @Override
    public void work(BookList booklist) {
        System.out.println("BorrowOperation");
        System.out.println("输入需要借阅书籍的名称");
        String name=scanner.next();

        int flag=-1;//记录此书在系统中的位置,没有则为0
        //1.这本书是否存在
        for(int i=0;i<booklist.getSize();i++)
        {
            if(booklist.books[i].name.equals(name))
            {
                flag=i;
                break;
            }
        }
        if(flag==-1)
        {
            System.out.println("没有此图书");
            return ;
        }else{
            if( booklist.books[flag].isBorrowed=false)//已被借
            {
                System.out.println("此图书已被借");
            }else{
                booklist.books[flag].isBorrowed=false;
                System.out.println("借阅成功!");
            }
        }

    }
}

4>删除图书

public class DelOperation implements IOperation {
    @Override
    public void work(BookList booklist) {

        System.out.println("BorrowOperation");
        System.out.println("输入需要删除书籍的名称");
        String name=scanner.next();
        //先查找这本书是否存在

        int flag=-1;
        for(int i=0;i<booklist.getSize();i++)
        {
            if(booklist.books[i].name.equals(name))
            {
                flag=i;
                break;
            }
        }
        if(flag==-1)//没这本书
        {
            System.out.println("没有此图书");
            return ;
        }else{
            for(int j=flag;j<booklist.getSize()-1;j++)
            {
                booklist.books[j]=booklist.getBooks(j+1);
            }
            booklist.setSize(booklist.getSize()-1);
                System.out.println("删除成功!");

        }
    }
}

5>打印书籍信息

public class DisplayOperation implements IOperation {
    @Override
    public void work(BookList booklist) {
        System.out.println("DisplayOperation");
        for(int i=0;i<booklist.getSize();i++)
        {
            System.out.println(booklist.getBooks(i));
        }
    }
}

6>查找图书

public class FindOperation implements IOperation {
    @Override
    public void work(BookList booklist) {
        System.out.println("BorrowOperation");
        System.out.println("输入需要查询书籍的名称");
        String name=scanner.next();
        //先查找这本书是否存在

        int flag=-1;
        for(int i=0;i<booklist.getSize();i++)
        {
            if(booklist.books[i].name.equals(name))
            {
                flag=i;
                break;
            }
        }
        if(flag==-1)//没这本书
        {
            System.out.println("没有此图书");
            return ;
        }else{
            System.out.println(booklist.books[flag].toString());
            System.out.println("查找成功!");
        }
    }
}

7>归还图书

public class ReturnOperation implements IOperation {
    @Override
    public void work(BookList booklist) {
        System.out.println("BorrowOperation");
        System.out.println("输入需要归还书籍的名称");
        String name=scanner.next();
        //先查找这本书是否存在

        int flag=-1;
        for(int i=0;i<booklist.getSize();i++)
        {
            if(booklist.books[i].name.equals(name))
            {
                flag=i;
                break;
            }
        }
        if(flag==-1)//没这本书
        {
            System.out.println("没有此图书,不需要归还");
            return ;
        }else{
            booklist.books[flag].isBorrowed=true;

            System.out.println("还书成功!");
        }
    }
}

8>退出系统

public class Exit  implements IOperation{
    @Override
    public void work(BookList booklist) {
        System.out.println("byebye!");
    }
}

二.看book文件夹部分:包含Book类和BookList类

1>Book类

public class Book {
    public String name;
    public String author;
    public int price;
    public String type;
    public boolean isBorrowed;//是否被借出

    public Book(String name, String author, int price, String type,boolean isBorrowed) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
        this.isBorrowed=true;//表示可借
    }

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

2>BookList类

public class BookList {
    public Book[] books=new Book[10];
    public int size;//标记有效字符个数;
  //构造函数
    public BookList()
    {
        books[0]=new Book("三国演义","罗贯中",23,"小说",true);
        books[1]=new Book("西游记","吴承恩",13,"小说",true);
        books[2]=new Book("水浒传","施耐庵",6,"小说",true);
        this.size=3;
    }

    @Override
    public String toString() {
        return "BookList{" +
                "books=" + Arrays.toString(books) +
                ", size=" + size +
                '}';
    }
   //获取书籍数量
    public int getSize() {
        return size;
    }
  //改变图书系统书籍数目
    public void setSize(int size) {
        this.size = size;
    }
   //添加pos位置的图书
    public void setBooks(int pos,Book book) {
        this.books[pos]=book;
    }
//获取pos位置的图书
    public Book getBooks(int pos) {
        return books[pos];
    }
}

 

三、usr文件夹:包含管理者类和普通用户类

1>User父类

public abstract class User {
    protected String name;

    //接口定义了一个数组,这个数组里边的内容是 实现这个接口的类(FindOperation,BorrewOperation
//等都是实现IOperation接口的类)
    protected IOperation[] operations;

    public abstract int menu();

    //根据用户的操作执行
    public void doOperation(int choice, BookList bookList)
    {
        operations[choice].work(bookList);
    }
}

2>管理员

public class Admin extends User{
    public Admin(String name)
    {
        this.name=name;
        this.operations=new IOperation[]{
                new Exit(),
                new AddOperation(),
                new DelOperation(),
                new DisplayOperation(),
                new FindOperation(),
        };
    }
    @Override
    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.退出系统");
        System.out.println("=================================");
        System.out.println(" 请输入您的选择:");
        Scanner scanner=new Scanner(System.in);
        int choice=scanner.nextInt();

        return choice;
    }
}

3>普通用户

public class NomalUser extends User {

    public NomalUser(String name){
        this.name=name;
        this.operations=new IOperation[]{
                new Exit(),
                new FindOperation(),
                new BorrewOperation(),
                new ReturnOperation(),
                new DisplayOperation()
        };
    }
    @Override
    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.退出系统");
        System.out.println("===================================");
        System.out.println(" 请输入您的选择:");
        Scanner scanner=new Scanner(System.in);
        int choice=scanner.nextInt();
        return choice;
    }
}

四、运行结果

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值