前言:为了更好服务于我们的学习,在图书馆里的一系列操作都会被记录在案,无论是管理员还是普通用户,都可以很好的知晓图书是否外借,以及图书馆里现存的书籍,作为管理员可以增删图书,作为普通用户可以借还书籍,以此达到我们的个人需求。
可以看到1对应的是管理员身份,0对应的是普通用户
在图中能知晓管理员菜单:
1对应的操作是查找图书
2对应的操作是新增图书
3对应的操作是删除图书
4对应的操作是显示图书
0对应的操作是退出系统
接下来我们一一完成对应的操作
1查找图书:
此处输入我们要找的书的名字
输出书的相关信息,有书名,作者名,价格,类型,以及是否借出等状态
2新增图书
查阅新增图书之前图书馆有的书:
依次输入新增图书名字,作者,类型及价格
系统整理新增图书信息并进行打印输出
查阅新增图书之后图书馆有的书:
可以看到我们输入的图书信息被录进去了
3删除图书
输入要删除的图书名字
然后再进行显示图书查验是否删除了图书
此时看到《Java图书操作系统》这本书确实被删除了
在图中可以知晓普通用户菜单
1对应的操作是查找图书
2对应的操作是借阅图书
3对应的操作是归还图书
0对应的操作是退出系统
输出书的相关信息,有书名,作者名,价格,类型,以及是否借出等状态
此时我们《三国演义》借阅成功
继续查在系统里查阅三国演义是否借出等状态
可以看出借阅出来了,所以借阅状态成功了,当我们再次借阅《三国演义》的时候就会显示借阅失败,没有此书或已被借出
这就是整体的设计,可能有些地方设计的不是很合格,但是我们作为程序员,我们只关注设计的本身,不关注业务本身,业务的设计每个人都会有自己的想法,所以思维的学习和培养很重要
在详解代码之前,我们需要知道的是在面向对象设计的时候,很多细节处的描写并不是一步到位的,是需要我们一步一步完善改进的,所以对于初学者这也是被劝退的一个点,但是没关系,我们一步步来,知识和经验都是慢慢积累过来的。
我们需要知道的是①在主函数里进行命令的传递,②书这个类在上面的描写中有许多属性,以及借还都需要利用这个包来操作,③各种数字对应的命令,④赋予普通用户和管理员的各种权限,使他们权限不混合。
首先我们可以对书这个类进行属性的定义,由于为了方便后期书籍的借还所以此处在书这个包当中又分了两个类
第一个类写的是书籍的属性,每次放一本书到书架上,都要构造一个书的对象,所以要写一个构造方法,我们在定义属性的时候用private修饰,我们需要实现对外的接口来让类外和包外拿到属性,以及写一个ToString来对外输出打印,代码如下:
在我们的ToString方法里我们对借还书状态进行了改变,为的是符合我们的需求,对书的借还状态一目了然。
我们还需要创建一个书架类,用来存放我们的书籍,在书籍按顺序存放的时候我们可以看作是数组的存放,所以在book这个包里我们又弄了一个书架类
在这里面有不解的是我们为何要对数组下标的元素进行操作呢?我们接着往下看
我们在上文可以看到我们需要查找,借阅,删除等一系列操作,为了方便简洁有效我们直接把各种操作都写成不同的类,放在一个operation包里面
其中我们可以看到还有一个接口类,它的作用就是规范了标准,利于向上转型,因为在这些类里面,都需要引用BookList数组,所以我们直接抽象化出来
在我们的使用者里面又可以分为普通用户和管理员,并且实现一个公共的类,达到共性抽取,且在User里更方便调用两者
在确定调用的对象及对象的方法的时候需要在普通用户,管理员以及User里面实现doOperation方法
我们上面第三步仅仅创建了各种方法的类,并没有具体实现,那我们接下来一一实现:
对所有的方法实现规范,创建一个接口类,并让所有的方法类去继承它:
退出系统:
此处置为null其实也可以不这么做,但是没有null之后在程序运行结束的时候内存才会被回收,当程序一直在运行的时候,内存装满了,这就会发生内存泄漏
到此一个简单的小项目就写成功了,它集合了数组,类和对象,封装,继承,多态,抽象类,接口等知识,学完此项目能有效帮我们巩固基础知识,并且开始真正的认识面向对象。