思路
全部代码我会放最下面
兄弟们,我又回来了,我们上文聊了聊Java的抽象类和接口,再前面我们聊了封装,继承,多态,我们就基本把Java语法聊的差不多了(重点的内容),所以我们来写一个小项目,通过这个小项目把我们前面聊内容总体复习一遍。好下面我们开始。
我们Java是一门面向对象的语言,因此我们设计的时候,也是以对象为主,因此我们再设计的时候可以先把对象设计出来,再对这个对象来进行一系列的操作(因为我是之前学了c语言,所以这是我认为Java和c语言在设计上最大的区别,我之前在学c语言的时候,写一个小项目,就比如大家可以看看,这个是我之前写的扫雷)我妈给我一巴掌说你为什么要玩游戏我看了眼扫雷。结果有人回应了我看了一眼和我几分相似。我问他你是谁。他说如果你现在不玩以后你怎么写出来。-优快云博客(在写之前我得到了一个写代码的思路。首先知道你要他做什么他的用法,之后再根据他的用法来推断他的功能。再把功能细分(当然这个是大项目的思路,小项目的就不用想直接写)各个突破。)这句话是我在写扫雷的时候写的,这个就明确的体现了,我在写c语言的项目的时候,我的思路是通过用法来推断功能,我们在去实现这个功能就行了,但是在Java中就不一样了,项目要优先考虑对象,而为什么我们要优先考虑对象呢。这个可以看我上一篇,就可以找到答案。(我感觉这个是语言决定的,毕竟每个语言都有他们的特点,不然怎么有存在的必要呢)所以外面写Java项目的时候是先把我们的对象写出来,我们再通过操作这个对象从而来实现一系列的操作,就像你制作了一个傀儡,你通过操作傀儡来进行一系列的操作,因此把这个思想代入图书管理系统,就是我们先创建一个对象,但是这个对象的什么呢,你想我们是不是要通过客户来操作,所以这个对象就是客户,那还有谁呢,是不是还需要一个管理的人员,来进行管理,后面我们要进行什么操作就通过我们创建好的对象来操作就行了。我们把思路整理完了,就可以开始写了
正片开始
对象:普通用户和管理员
我们先创建一个对象,再上面我们也是明白了我们创建两个对象,一个是普通用户(客户),还有一个是管理员,但是这两个虽然有不同,但是还是有很多的共通之处,所以我们可以写一个父类User,我们就先写这个User,我们首先要一个名字,所以我们定义一个String,以及他的构造方法,
以及name的get和set,如果还需要别的功能,我们后面再加。我们把父类创建好了,就可以写子类我们先写普通用户(NormalUser)以下内容都是NormalUser的,没有管理员的
我们先让普通用户继承至父类,因为我们普通用户和管理员要做的不一样,所以我们要再各自的子类中写出他们的菜单,就是选择要进行什么操作,就比如普通用户,我们就有这些功能
如果你还有别的,我就不加,嘻嘻。
所以我们就先写菜单,但是因为我们普通用户和管理员都需要菜单,所以我们可以把菜单写在父类里面(作为一个抽象类,让子类一定要重写)
![]()
所以我们就可以在子类里面写了

应该有人发现了最下面,我们让用户输入了一个数,而这个数就是用户要进行第几个操作的数,而我们怎么操作这个数可以使程序进行正确的操作呢,目前我知道最方便的方法是我创建一个数组,而这个数组里面的内容就是一个方法,我们就可以通过访问数组的第几个元素来实现我们需要访问的方法,而因为不管是管理员还是普通用户,都是需要的,所以我们把这个创建在父类中

而在子类中我们就按照在菜单写的顺序创建一个又一个的方法,因为这个是必要的,所以我们就可以直接写在构造方法里面

所以这些就是一个子类的全部内容

现在你先把上面的全部全部理解一下,我认为啊,上面的全部理解了,你自己就可以把管理员写出来了,所以我直接把代码展示出来

对象:书
以上我们就把对象创建好了。我们就要开始对对象进行操作了。你想我们要管理书籍,所以我们肯定要把书籍书籍创建出来吧。所以我们来想想书籍有哪些基本元素,首先书名要吧,我们在加一个作者,书籍价格,还要什么,在来一个分类吧,就差不多了,噢,还要一个是否借出(还有别的你要加就加呗,反正我不加了),我们把这些属性设计好了,接下来就是写这些的set和get方法就行了,但是不要忘记我们还要写构造方法噢,这样就是我们一本书的全部内容,我们写图书管理也不可能是只有一本书,我们需要一个书的列表,所以我们在创建一个类叫Book List,而这个类的核心就是把书全部存储在这里面,所以我们在Book List里面创建一个Book的数组,而这个数组我们要创建多大啊,这个看你自己噢(你说不是有动态的数据管理吗,嘻嘻,我不会),因此我们就先创建一个固定的就好了,但是还要一个要注意的,就是我们需要一个数来记录我们一共存储了多少本书,我们在Book List里面再加一个int size,我们就来写列表的功能了,首先的最基础的加书和减书,我们大体就把列表做好了,这个放书还是要说一句的,就是我把书放在第二个位子,那这个书的序号是第几个啊,对,第二个,知道的话就应该没有什么问题了, 同时,我们最好是在写列表的时候,先加几个元素,这样有助于我们后面的调试,不然每一次都要输入怎么多,肯定觉得烦。所以我们的BookList就是

写到这里,我们大体就写完了,现在,我们把书和用户都表现出来了,就是问你要的两个对象都出来了,现在我们就是对这两个对象进行一系列的操作了,但是我们先看看这个程序什么样子,所以我们现在来写main方法,首先就是先打印一个像菜单的东西,让用户选择是普通用户还是管理员
假设我们输入1(你问我为什么一直都是写普通用户,因为爱),就是应该来到

我们再看代码Normal User,上面有图片,一直走下去就会发现,我们就是返回了一个int choice,而这个又是怎么调用方法的呢,其实我们上面讲了,就是把方法放在一个数组里面,再通过数组的元素来进行访问,那假如我要进行第一个操作(查看书籍列表),因为我们还没有写,所以什么都不会有,甚至会报错,因为这些操作方法,我先定义了 一个接口(我为什么要定义一个接口,为什么不直接写呢,就可以看我之前写的抽象类和接口),而接口里面就一个抽象方法,所以我没有重写就报错,所以我们现在就写这样查看书籍列表(因为这些就是太基本了,所以很多就直接附代码了)

这里就是有一个book.toString,嘻嘻,这个是我偷偷再book类里面写的,就是为了再打印书籍的时候好看
这些真正实现的写法,就是没有什么理解问题了,就是看就好了,所以我就直接全部放代码了
package objectzj.Operation;
import objectzj.Book;
import objectzj.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void Operation(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入书名");
String name = scanner.next();
System.out.println("请输入作者");
String author = scanner.next();
System.out.println("请输入价格" );
int price = scanner.nextInt();
System.out.println("请输入分类");
String type = scanner.next();
int size = bookList.getSize();
Book book = new Book(name,author,price,type);
bookList.setBookList(book);
}
}
package objectzj.Operation;
import objectzj.Book;
import objectzj.BookList;
import javax.xml.namespace.QName;
import java.util.Scanner;
public class BorrowOperation implements IOperation{
@Override
public void Operation(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要借的书籍名称");
String name = scanner.next();
for(int i = 0;i<bookList.getSize();i++){
Book book = bookList.getBookList(i);
if(name.equals(book.getName())){
if(!book.isBorrow()){
book.setBorrow(true);
System.out.println("已成功借阅");
return;
}else {
System.out.println("该书已被借出");
return;
}
}
}
System.out.println("该书查找不到");
}
}
package objectzj.Operation;
import objectzj.Book;
import objectzj.BookList;
import java.util.Scanner;
public class DelOperation implements IOperation{
@Override
public void Operation(BookList bookList) {
System.out.println("请输入要删除书籍的书名");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
for(int i = 0;i<bookList.getSize();i++){
Book book = bookList.getBookList(i);
if(name.equals(book.getName())){
if(i == bookList.getSize()- 1){
bookList.setSize(bookList.getSize() - 1);
System.out.println("删除成功");
return;
}
else {
Book booklast =bookList.getBookList(bookList.getSize() - 1);
bookList.setBookList(i, booklast);
bookList.setSize(bookList.getSize() - 2 );
System.out.println("删除成功");
return;
}
}
}
System.out.println("查找不到该书籍");
}
}
package objectzj.Operation;
import objectzj.Book;
import objectzj.BookList;
public class ExitOperation implements IOperation{
@Override
public void Operation(BookList bookList) {
System.out.println("再见");
System.exit(0);
}
}
package objectzj.Operation;
import objectzj.Book;
import objectzj.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation{
@Override
public void Operation(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要查找的书籍名字");
String name = scanner.next();
for (int i = 0;i<bookList.getSize();i++){
Book book = new BookList().getBookList(i);
if(name.equals(book.getName())){
System.out.println("找到了,小标为"+i);
return;
}
}
System.out.println("查找不到你要的书籍");
}
}
package objectzj.Operation;
import objectzj.Book;
import objectzj.BookList;
public class ListOperation implements IOperation{
@Override
public void Operation(BookList bookList) {
System.out.println("查看书籍列表");
for(int i = 0;i<bookList.getSize();i++){
Book book = bookList.getBookList(i);
System.out.println("["+i+"] "+book.toString());
}
}
}
package objectzj.Operation;
import objectzj.Book;
import objectzj.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation{
@Override
public void Operation(BookList bookList) {
System.out.println("请输入你要还书的书名");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
for(int i = 0;i<bookList.getSize();i++){
Book book = bookList.getBookList(i);
if(name.equals(book.getName())){
if(book.isBorrow()){
book.setBorrow(false);
System.out.println("已成功还书");
return;
}else {
System.out.println("该书还未被借阅");
return;
}
}
}
System.out.println("该书查找不到");
}
}
这个是接口
package objectzj.Operation;
import jdk.dynalink.Operation;
import objectzj.BookList;
public interface IOperation {
void Operation(BookList bookList);
}
这些就是这些操作方法的实现
好了,拜拜
9442



被折叠的 条评论
为什么被折叠?



