面向对象练习--简易图书管理系统实现


   通过对简易图书管理系统的实现,对前面面向对象的知识做一简单总结。
(面向对象的相关几篇文章:Java类和对象Java中String类面向对象:继承、组合、多态、抽象类、接口面向对象:Java异常

  本文使用IDEA+JDK1.8版本来实现一个简单的命令行图书管理系统。

  不同于面向过程的设计思路,面向过程在于分析解决某一问题的具体思路,然后使用函数一步一步的按照所想思路完成。而面向对象则是将问题事物分解为一个个的对象,然后依据这些对象在解决问题中所起的作用来具体实现其功能。在Java中,一切皆对象。

1基本要求

  既然一切皆对象,那我们首要的任务则是分析本问题具体包含了哪些对象。

  首先,图书管要有书本(Book),书单(BookList),在一般的图书馆中,又分为管理员(Admin)和一般用户(NormalUser),管理员可能又会根据不同的职位级别不一样,这里为了简化,认为只有一种管理员。

  管理员拥有向图书馆增加书本(AddOperation)、删除书本(DelOperation)、查看所有的书籍信息(DisplayOperation)、检索某本书的信息(FindOperation)。(假定管理员都不借书、还书)。

  普通用户拥有检索某本书的信息(FindOperation)、借书(BorrowOperation)、还书(ReturnOperation)功能。

  无论是管理员还是用户,使用完毕后可以退出系统(ExitOperation)。

  此外假设没有重复的书名,程序中关于增删查的操作都围绕书名。

  由上可以看出,该问题的相关对象基本清晰。下面将逐一实现这些对象的类。

1.1创建类

  为保证最大程度的封装性,将类中的属性尽量用privateprotected修饰。

1.1.1Book

  通常一本书包含如下信息:书名、作者、价格、书籍类型、出版信息(出版社、出版年月)、条形码等等,此处为了简便,取书名、作者、价格、类型即可。对于图书馆,一本书还应该有是否在馆的信息(默认一本书没有被借出,即在馆)。

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;
    }
}

1.1.2BookList

  BookList为书单,即可以表示多本书的信息,所以使用Book数组来存放多本书的信息,此外,还应该包括最大容量capacity(一般认为最大容量不可修改),实际存放的书本数size(不超过最大容量)。

public class BookList {
   
	//最大容量,常量,所以用final
    private final int capacity = 5;
    
    private Book[] books = new Book[capacity];
    //当前书单中书本的个数
    private int size = 0;

    public BookList() {
   
    	//图书馆刚开始就有3本书,价钱是随便打的
        books[size++] = new Book("野草","鲁迅",12.5,"诗集");
        books[size++] = new Book("呐喊","鲁迅",13,"小说集");
        books[size++] = new Book("坟","鲁迅",12.5,"杂文集");
    }
}

1.1.3操作类

  管理员的增加书本是向BookList增加的:

public class AddOperation{
   
	public void operation(BookList booklist){
   
		//增加书籍的相关操作
	}
}

  删除书本是从BookList删除的:

public class DelOperation{
   
	public void operation(BookList booklist){
   
		//删除书籍的相关操作
	}
}

  查看书的信息也是从BookList显示的:

public class DisplayOperation{
   
	public void operation(BookList booklist){
   
		//查看书籍的相关操作
	}
}

  其他的操作类似,可以看出,这些操作类没有属性,并且拥有相同的方法,因此我们可以把这一共性提取出来,作为一个接口,再由这些类来重写具体的操作。为了便于后边代码的简化与书写,尽管退出程序并不跟BoookList有关,也来实现该接口。

1.1.3.1接口

  该接口定义如下:

public interface IOperation {
   
    void operation(BookList bookList);
}
1.1.3.2操作类
1.1.3.2.1AddOperation
public class AddOperation implements IOperation{
   

    @Override
    public void operation(BookList bookList) {
   
        //增加书籍相关操作
    }
}
1.1.3.2.2DelOperation
public class DelOperation implements IOperation{
   

    @Override
    public void operation(BookList bookList) {
   
        //删除书籍相关操作
    }
}
1.1.3.2.3DisplayOperation
public class DelOperation implements IOperation{
   

    @Override
    public void operation(BookList bookList) {
   
        //显示书籍相关操作
    }
}
1.1.3.2.4FindOperation
public class FindOperation implements IOperation{
   

    @Override
    public void operation(BookList bookList) {
   
        //查找书籍相关操作
    }
}
1.1.3.2.5BorrowOperation
public class BorrowOperation implements IOperation{
   

    @Override
    public void operation(BookList bookList) {
   
        //借阅书籍相关操作
    }
}
1.1.3.2.6ReturnOperation
public class ReturnOperation implements IOperation{
   

    @Override
    public void operation(BookList bookList) {
   
        //归还书籍相关操作
    }
}
1.1.3.2.7ExitOperation
public class ExitOperation implements IOperation{
   

    @Override
    public void operation(BookList bookList) {
   
        //退出系统
    }
}

1.1.4用户类

  无论是管理员还是普通用户,都拥有名字、相关的操作、根据相关的操作打印出来的菜单。名字和相关操作为属性,打印菜单为方法,因此,可以将其提取出来,作为父类,让管理员和普通用户都继承自这个类,当有新的级别用户时,也有上边的属性和方法,所以也继承自该类。

  • 在这里不希望此父类能够直接创建对象,因此将该父类作为抽象类。
  • 对于不同类型的用户,打印的菜单也不同&#x
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值