图书管理系统是对"类和对象","继承和多态","抽象类和接口"以及对数组的进一步总结,涉及到了很多方面的知识,因此非常重要,要好好理解。
对于这个程序,我们首先要创建一个新的JAVA文件,并创建出主函数。其次,我们就要开始思考这个图书管理系统所涉及的对象有哪些。我们首先可以想到 ——书,想到书,我们也会想到需要书架来摆放书。所以,我们可以先创建一个"book"这样一个包,里面可以用来存放书和书架。
在Book这个类中,我们可以将书这个类定义出来,定义书名,作者,价格,类型,是否被借出等属性
同时,生成构造方法,"toString",以及"Getter and Setter"。
构造方法中,省略了"isBorrowed",是因为其默认为"false"(即未借出)
Book类就定义好了,这样我们就可以在BookList类中将我们想要存放的书定义出来,我们首先先定义一个数组Book[],用来存放书籍,并将其实例化确定数组的大小。同时创建"usedSize"用来读取当前Book[]数组中的图书数量。
其次,我们同样创建出BookList的构造方法,并初始化:
由于许多功能的实现都离不开usedSize,因此我们把usedSize的Getter and Setter创建出来
这样我们就得到了一个简易的图书室,里面放了四本书。
除了书籍之外,我们还需要有管理者和借阅书籍的普通用户。因此我们再创建一个user类,
由于管理者和普通用户存在一些相同点,所以我们可以创建一个父类,将二者的共同点放在父类中,实现代码的复用。
首先可以考虑的相同点有姓名,性别等,所以我们可以先在User父类中,将这些相同点定义出来,并添加其构造方法。
因为是继承的关系,所以子类需要重写父类的构造方法。
有了用户那么必定存在各种操作,因此,我们创建一个"operation"包,将各种操作类放在里面,
由于这些操作,操作的对象都是BookList,因此我们可以写一个接口,里面写一个抽象方法"work()",再通过接口,重写抽象方法。
重写的方法,例如AddOperation:
......
这样我们的大致框架就搭建出来了。
现在应该在主函数中将这些对象实现交互,对于没有实现的内容进行填充。
想要进入程序中,首先我们需要登录,我们创建一个简单的登录方法。通过Scanner进行输入,再通过choice的选择,实例化出user的类型。
在实例化出不同的对象后,这些对象也有单独的菜单可供选择,例如管理人员可以删除,新增......普通用户可以借阅,归还......
因此各用户类中,创建一个menu()函数。由于二者都存在menu()函数,所以可以在父类user中写一个抽象方法menu(),再重写父类的抽象方法。
存在这些功能后,用户必定会选择其中一个功能进行实现,所以存在选择:
选择后,将选择的值返回到menu()方法,在通过while循环实现反复执行:
后面需要做的就是,真正的实现,将各个操作放入用户类中, 我们采取在User父类中创建一个数组IOPeration[],因为各个操作都是使用了IOPeration接口,所以使用IOPeration类型的数组。
其后在子类的构造方法中,定义:
为了实现这些功能我们在User父类中编写了一个doOperation的方法,通过刚才的数组下标的方式访问不同的work()方法,实现了多态。
再在主函数中调用此方法
具体运行实现一下:
这样完整的框架结构就搭建完成了,接下来就是各个操作的实现了。
=========================================================================
我们先来实现最简单的
一、退出系统
只需要简单的一步,就可以实现退出系统,但我们同样可以将其内存释放后再退出系统,若要释放其内存则我们需要创建一个setBooks()方法,用于将每本书都设置为空。在BookList中创建,我们同时创建getBooks():
具体的实现:
二、查找图书
先输入查找的书名,再遍历,得到每一本书,再将遍历到的每一本书和输入的书名进行比对,通过.equal(),如果找到了就显示信息,并return出来,如果遍历完都没有找到,则退出循环后输出"没有这本书"。
三、显示图书
显示图书就是遍历得到一个下标就打印一次,最终完成全部书籍的打印
四、新增图书
新增就是先输入新增图书的信息,然后将这些信息用来实例化出一个Book book对象,将这个对象放在currentSize为下标的位置上,最后再将currentSize+1即可。
注意:发现一个问题就是要将nextLine写完了再写nextInt,如果插在中间则无法进行输入。
五、删除图书
删除图书的具体流程就是通过输入,确定你要删除的图书,然后再遍历数组,查找是否存在你要删除的书籍,如果没有就直接跳出,并返回,如果有,则将变量index设置为当前的i值,说明要删除的书籍就是i下标的元素,再通过覆盖的方法,通过setBooks和getBooks用后者将前者覆盖,最后将空间-1即可。
六、借阅图书
借阅图书我们同样先输入书名进行遍历,如果找到后则将book.setBorrowed设为true。
我们这里可以将Book中的to String函数稍作修改,使其可以用中文显示借阅的状态
七、归还图书
归还图书和借阅图书几乎没有差别,就是将true改为false即可
图书系统就完成了。