- 一.book包
- 1.书的类
- 一本书的基本内容:
- 成员变量是private那么我们就需要set和get方法,也需要一个构造方法:
- Tostring的方法也需要加上:
- 2.书的增加是i在书架上操作的,创建一个BookList类
- 首先我们需要让书和书架进行组合,因为书架上会放很多书并且我们这里的书是一个数组那么我们也还需要知道他的实际长度,那么成员变量的定义就是如下:
- 之后我们就要先给书架上放上书,并且记录下现在几本书:
- 1.书的类
- 二.用户包
- 1.父类用户
- 无论是什么用户都是有名字的:
- 这里我们用父类的原因是当我们在程序入口选择用户种类的时候,我们不知道返回的是那种用户,所以无论登入的静态函数返回一个普通用户还是管理员用户他们的类型都是不一样的,所以这里需要用到父类来进行返回类型:
- 然后我们知道不同身份的用户的菜单也是不一样的所以这里的menu方法是需要重写的,那么我就可以知道,父类中的menu方法就是一个申明的作用不需要实现具体内容,那么父类的User就直接是抽象类,menu方法就是抽象的方法:
- 2.普通用户
- 重写的menu:
- 在menu我们需要选择自己要的操作那么就需要来返回我们所需要操作前面的数字(并且将menu方法的返回值设置成int)(管理员系统也是一样的):
- 3.管理员用户
- 重写的menu:
- 1.父类用户
- 三.运行程序入口
- 首先写一个等于的函数来提示用户输入信息:
- 其次我们就需要知道他选择哪种用户:
- 四.操作包
- 1.操作包里面都是写的管理员和普通用户的操作,但是二者的操作是不同的,我们就无法区分哪个方法是哪个用户的操作。所以这里我们在操作包里面需要使用让类实现接口,这样接口就有了功能,我们直接定义接口就可以区分每个方法是属于哪个用户的了。
- 在用户中我们定义一个接口数组就可以在数组中放入对应用户的方法,这样不同用户就可以找到自己的方法:
- 2.这里我们创建了所有的用户需要用到的功能类:
- 3.从程序入口Main中我们可以知道当我们登入之后,我们就已经new好了对应的身份信息了:
- 那么我们知道了对应的身份信息之后就需要找到对应身份的操作有哪些,那么我们就知道在不同用户的类下初始化这个接口,这样当我们拿到了对应身份,接口的功能也就直接就能使用了。
- 普通用户:
- 管理员用户:
- 4.我们需要对操作进行使用,那么我就需要使用这个接口数组来实现我们需要的操作,但是我们需要先得到选择的数组下标,才能操作对应下标所指向的操作:(用户通过对于传入的操作序号知道操作哪个方法,在将书架引用传入,就可以对书架进行操作了)
- 5.这里我们需要再程序入口的地方创建一个书架的对象,然后当用户登入选择了对应的身份系统之后,我们再通过用户在菜单中选择的操作方式传回一个choice来进行接口数组对操作的实例化对象。
- 五.操作内部细节
- 1.查找图书
- 总过程
- 其中需要先说明的是,currentSize是需要通过构造方法来获取他的实际长度的,因为BookList这个类中都是的成员变量都是private修饰的,我们是在不同包中引用肯定是不行的,这里只能通过我们构造一个方法来获取。还有在books数组里面循环的时候,不能直接写成bookList[i]因为bookList不是一个数组类型他是一 个类 类型,而其中的books才是数组,并且books这个数组也是private修饰的成员变量,那么这里我们又需要写一个构造方法:
- 构造了这个方法是为了获取对应下标下的图书是哪本,这样好进行对比。
- 还需要注意的是在进行对比的时候,要写book.getName而不是在equals中只写一个book。
- 2.显示图书
- 这个比较简单,直接通过下标访问就行了,在通过自己的Tostring来打印出来就好了:
- 3.增加图书
- 增添图书的时候会有两种情况,第一种情况就是书架满了就不能在进行增加图书的操作了,第二种情况就是直接在以现有图书长度作为下标来放图书。
- 判断书架是否满了,我们直接在书架的类中写了一个方法来判断书架是否满了:
- 然后书架没满我们就需要将我们增加图书的信息写出来:(这里需要注意的是,如果nextint写在了nextLine之前,那么输入一个整型之后回车,回车是不会被nextint接收的,那么这个回车就会在缓存区中,然后就会被下面type的nextLine接收这个回车,就无法对type进行书写。)
- 然后我们要将我们输入的新书来通过实例化一个book的对象里面,然后通过我们自己在bookList中写的增加图书方法来进行books这个数组增加:(通过书架上书的本数来向书架中增加书)
- 增加好书之后我们需要对useSize进行增加,因为现在的使用的空间就多了1,那么我们需要通过setuseSize的方法来增加useSize的长度:
- 4.删除图书
- 删除图书需要先知道你要删除哪个图书,我们就通过输入要删除书的名字就可以去删除这个书:
- 当我们输入了这个书的名字之后我们就需要通过循环遍历这个书架里面的书数组,找到这个书然后在对他进行删除:、
- 这里面需要注意的是,我们是用book引用bookList.getBook()这个方法,这个方法的返回值又是book所以不要搞成是用book引用了一个bookList的对象:
- 找不到的时候也要写出提示语:
- 之后找到需要删除的书之后我们直接就可以将这个下标的书的后面一本书将这个书的位置来进行覆盖就可以了:
- 这里需要注意的是,我们删除了书,那么就需要将书架里面书的数量进行减少,然后可以将最后一本书,置为null,因为原来的最后一本书在前面的下标位置了,这里就会有两个相同的最后一本书了,那么我们就可以置为null。
- 5.退出图书
- 退出图书比较简单,直接就是一个指令就可以了:
- 如果要细致一点把图书里面的东西都删除那么就需要置为null:
- 6.借阅(归还)图书(借阅归还是一样的)
- 这里我们还是要直接输入我们需要借阅图书的名字:
- 借阅图书我们可以直接循环这个书架,看他有没有这本图书,如果有这本图书我们直接将他的isLend的成员变量设置为false这样就可以知道这本图书是否被借出了:
- 这里面有一个细节,就是将自己写的Tostring方法中的isLend的打印方式改成已借出或者已归还:
- 1.查找图书