行业知识
用Java实现简易的图书管理系统(超详细)
���录
1.设计背景
2.设计思路
3.模块展示及代码演示
3.1 Book类的实现
3.2 BookList类的实现(书架)
3.3 异常类的实现(OperationException)
3.4 用户类的实现
3.5 操作接口的实现(定义规范)
3.6 操作类的具体实现
3.6.1 增加操作
3.6.2 查找操作
3.6.3 删除操作
3.6.4 显示操作
3.6.5 借书操作
3.6.6 还书操作
3.6.7 退出功能
3.7 管理员类的实现
3.8 读者类的实现
3.9 Test类
4. 整体效果展示
1.设计背景
图书馆作为每个大学或者城市必不可少的部分,其存放的海量书籍与文献使得其管理显得尤为困难,此时图书管理系统就起到了一个重大的作用。本次就将使用java语言中的异常处理,多态,继承,封装,接口等知识点,来综合性的设计与实现出一个简易的图书管理系统。
2.设计思路
①首先我们需要区分出管理员与普通用户,不同的用户所展示的界面不同,利用继承和多态可以实现这一思路;
②我们可以将各个操作都封装起来,单独的设计成一个类,且这些操作都需要遵循一定的规范,而接口实际上就是定义了一种规范,这里可以使用接口来进行实现。
③我们需要将书的属性进行封装,同时设立一个书架类,即存放的是书的数组。
④我们需要实现管理员能够添加书籍,查找书籍,删除书籍以及显示书籍;
⑤读者能够实现查找书籍,借阅书籍以及归还书籍。
3.模块展示及代码演示
3.1 Book类的实现
我们这里书籍的属性有书名、作者、价格、类型以及是否被借出,我们结合封装性,将属性设置为private权限,并提供相应的get方法和set方法,空参构造器,以及一个不包含是否被借出的构造器(布尔值的默认类型就是false,可以不进行初始化)并需要提供对应的toString()方法的重写(具体重写情况看展示效果),代码实现如下:
public class Book { private String name; private String author; private int price; private String type; private boolean isBorrowed; //是否被借出 //构造器 public Book(){ } public Book(String name,String author,int price,String type){ this.author=author; this.name=name; this.price=price; this.type=type; } //get、set方法 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 isBorrowed() { return isBorrowed; } public void setBorrowed(boolean borrowed) { isBorrowed = borrowed; }@Override//重写toString() public String toString() { return "Book{" + "书名:'" + name + '\'' + ", 作者:'" + author + '\'' + ", 价格:" + price + ", 类型:'" + type + '\'' + ", 是否借出:" + isBorrowed + '}'; }} 3.2 BookList类的实现(书架)
BookList类我们主要提供一个ArrayList的泛型数组来进行Book的存储,便于后面对书籍的操作。
BookList类我们提供一个私有的ArrayList的泛型数组,同时在空参构造器中对其初始化,先加入几本书籍,并提供对应的get和set方法,具体代码实现如下:
import java.util.ArrayList;public class BookList { private ArrayList books=new ArrayList(); public BookList() { books.add(new Book("三国演义","罗贯中",19,"小说")); books.add(new Book("西游记","吴承恩",29,"小说")); books.add(new Book("红楼梦","曹雪芹",25,"小说")); } public Book getBook(int pos){ //获取某个位置上的书籍 return books.get(pos); } public void setBook(int pos,Book book){ //设置某个位置上的书籍 books.set(pos,book); } public ArrayList getBooks(){ //获取书架,便于后面的Operation的使用 return books; }} 3.3 异常类的实现(OperationException)
异常的出现一般出现在操作中,我们可以通过自定义异常类的方式来处理不同异常情况的发生(也可以不进行定义),我们的自定义也提供一个空参构造器,和一个有参构造器用来打印异常信息(自定义异常类需要继承Exception类),代码实现如下:
public class OperationException extends Exception{ static final long serialVersionUID=-33875169931L; //空参构造器 public OperationException(){ } public OperationException(String message){ super(message); //Exception类中存在String参数的构造器和message }} 3.4 用户类的实现
用户类中,我们需要定义用户的名字,同时定义一个抽象方法menu()来给子类管理员类和读者类重写(二者的目录不同),同时要提供set和get方法,并提供抽象Operation方法给子类重写使用(子类的目录不同,执行的操作就会存在差异),代码实现如下:
public abstract class User { private String name; public User(String name){ this.name=name; } public User(){ } public abstract void menu(); public String getName(){ return name; } public void setName(String name){ this.name=name; } public abstract void Operation(int n, BookList bookList)throws OperationException;//子类的Operation会抛出异常来处理异常,父类也需要抛出异常,//因为父类抛出异常大小要大于子类重写方法抛出的异常} 3.5 操作接口的实现(定义规范)
我们需要执行的操作有增加,删除,显示,查找等,他们都需要遵循一定的规范,而这个规范就由接口来实现,在增删查改等操作中,他们的主要方式就是工作,即work(),故接口中提供对应的work()方法供接口的实现类,即各种操作进行重写,代码实现如下:
public interface IOperation{ void work(BookList bookList)throws Exception;} 3.6 操作类的具体实现
3.6.1 增加操作
我们需要将操作类实现操作接口,同时为重写的方法提供书架类,便于进行操作。代码实现如下:
添加操作并没有什么异常,在简易图书系统中不需要对书籍的信息进行检验。
import java.util.Scanner;public class AddOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("新增图书!"); Scanner scan=new Scanner(System.in); System.out.println("请输入要新增图书的名字:"); String name=scan.next(); System.out.println("请输入作者的名字:"); String author=scan.next(); System.out.println("请输入图书的价格:"); int price=scan.nextInt(); System.out.println("请输入图书的类型:"); String type=scan.next(); Book book=new Book(name,author,price,type); //新建书籍 bookList.getBooks().add(book); //使用ArrayList的add来进行图书的添加 System.out.println("添加成功!"); }} 3.6.2 查找操作
查找操作只有两种情况,一种是找到了,另一种自然就是没找到,在没找到的时候我们就可以选择抛出一个异常,查找操作的具体实现还是通过遍历来实现,代码如下:
import java.util.Scanner;//查找功能的实现public class FindOperation implements IOperation{ @Override public void work(BookList bookList) throws OperationException { Scanner scan=new Scanner(System.in); System.out.println("请输入你想要查找的书名:"); String name=scan.next(); boolean flag=true; for(int i=0;i