网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
那么随着我们的JavaSE初阶的学习博客完结到达尾声,这一篇带着大家做一个小项目,然后借此串联之前所学的内容,达到复习和巩固的效果
首先我们来构建一个大致框架
一个图书管理系统,要有书,放书的地方,管理图书的功能,以及使用者
我们就分别创建三个包和一个Main的程序的入口类,写对应的代码
BOOK
Book介绍
那么我们先从书开始搭建
对于书这个类来说,它有一些属性,比如书名,作者,价格,以及它的类型
它也有一些状态,这里我就用borrowed(即是否被借出的状态)
我们为了达到封装的目的,就要把属性都带上private
那么这里外部类使用的时候就不能访问到相关属性了
怎么办呢?
那就开放一些接口,比如getName用来得到姓名的信息,setName用来修改name的值
然后我们再重写一下Book类的父类Object中的toString方法,以此让用户更方便地获取书籍的信息
Book源码
package book;
/\*\*
\* @ Author 12629
\* @ Date 2022/4/10 11:41
\* @ Description:
\*/
public class Book {
private String name;//书名
private String author;//作者
private int price;//价格
private String type;//类型
private int id;//书号
private boolean isBorrowed;//是否被借出
public Book(int id,String name, String author, int price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
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;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", id=" + id +
", isBorrowed=" + isBorrowed +
'}';
}
}
BookList介绍
那么一个书单(哈哈哈就当作是书架吧)需要书,那我们就给它new几本书出来,但这个时候books其实是一个空的对象数组,它就相当于一个空的书架,我们需要往上面加几本书,那么正好可以利用我们的构造函数初始化一下,让它一开始就有三本书。
再定义一个usedSize,表示书架上书籍的数量
那么同样我们也要设置一些get和set的方法来访问到这些属性
BookList源码
package book;
/\*\*
\* @ Author 12629
\* @ Date 2022/4/10 11:45
\* @ Description:书架类
\*/
public class BookList {
private Book[] books = new Book[10];//这个书架的大小
private int usedSize;//数组中放了几本书
public BookList() {
books[0] = new Book(1,"三国演义","罗贯中",90,"小说");
books[1] = new Book(2,"西游记","吴承恩",78,"小说");
books[2] = new Book(3,"红楼梦","曹雪芹",89,"小说");
this.usedSize = 3;
}
/\*\*
\* 获取当前数组当中的元素的个数
\* @ return
\*/
public int getUsedSize() {
return usedSize;
}
/\*\*
\* 修改当前数组中元素的个数
\* @ param usedSize
\*/
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
//可以再这里面 写所有对数组的操作 借书 还书.......
/\*\*
\* 获取pos下标的书
\* @ param pos
\* @ return
\*/
public Book getPos(int pos) {
return books[pos];
}
/\*\*
\* 给数组的pos位置 放一本书
\* @param pos
\* @param book
\*/
public void setBooks(int pos,Book book) {
books[pos] = book;
}
/\* dpublic void work() {
System.out.println("新增图书!");
}\*/
}
OPERATION
Operation介绍
这个包主要就是写好多好多功能
那么我们为了达到代码复用的理念,这里就要用到接口了
我们在之前有专门对接口进行讲解的博客,不太了解的小伙伴们可以去看看哦
👉一篇带你吃透Java接口
IOpreation(接口)
那么我们要实现的所有功能,都需要去操作,我们可以称为“可操作的”那么需要实现这个功能,我们可以写一个统一的接口,来提高代码的耦合度和复用性,也能够让大家更加熟悉接口的概念。
那么我们的接口中就放一个work方法就OK了
IOperation源码
package operation;
import book.BookList;
/\*\*
\* Created with IntelliJ IDEA.
\* Description: Hello,I would appreciate your comments~
\* User:
\* Date: -04-12
\* Destination:接口,用来实现各类操作
\*/
public interface IOperation {
void work(BookList bookList);
}
AddOperation
那么我们要输入新增图书的各类信息,导入之后,再去BookList上把书塞进去
AddOpreation源码
package operation;
import book.BookList;
/\*\*
\* @ Author 12629
\* @ Date 2022/4/10 11:54
\* @ Description:增加图书
\*/
import book.Book;
import book.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("新增一本书籍!");
System.out.println("请输入书籍的ID");
Scanner scanner = new Scanner(System.in);
int id = scanner.nextInt();
System.out.println("请输入新增书籍的书名: ");
String name = scanner.next();
System.out.println("请输入新增书籍的作者: ");
String author = scanner.next();
System.out.println("请输入新增书籍的类型: ");
String type = scanner.next();
System.out.println("请输入新增书籍的价格: ");
int price = scanner.nextInt();
Book book = new Book(id,name,author, price,type);
bookList.setBooks(bookList.getUsedSize(), book);
bookList.setUsedSize(bookList.getUsedSize() + 1);
}
}
BorrowOperation
源码如下
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
/\*\*
\* @ Author 12629
\* @ Date 2022/4/10 11:56
\* @ Description:
\*/
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("借阅书籍!");
System.out.println("请输入要借阅的书籍的id: ");
Scanner scanner = new Scanner(System.in);
int id = scanner.nextInt();
for (int i = 0; i < bookList.getUsedSize(); i++) {
Book book = bookList.getPos(i);
if (!(id == book.getId())) {
continue;
}
if (book.isBorrowed()) {
System.out.println("此书已经被借走了!");
break;
}
book.setBorrowed(true);
System.out.println("借阅成功");
}
}
}
DelOperation
源码
package operation;
import book.Book;
import book.BookList;
/\*\*
\* Created with IntelliJ IDEA.
\* Description: Hello,I would appreciate your comments~
\* User:
\* Date: -04-12
\* Destination: 删除书籍
\*/
import java.util.Scanner;
public class DelOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("删除书籍!");
System.out.println("请输入您想要删除书籍的id: ");
Scanner scanner = new Scanner(System.in);
int id = scanner.nextInt();
int i = 0;
for (; i < bookList.getUsedSize(); i++) {
Book book = bookList.getPos(i);
if (book.getId()==id) {
break;
}
}
if (i >= bookList.getUsedSize()) {
System.out.println("未找到要找的书籍!");
return;
}
Book lastBook = bookList.getPos(bookList.getUsedSize() - 1);
bookList.setBooks(i, lastBook);
bookList.setUsedSize(bookList.getUsedSize() - 1);
System.out.println("删除成功!");
}
}
DisplayOperation
比较简单,直接上代码
package operation;
import book.Book;
import book.BookList;
/\*\*
\* Created with IntelliJ IDEA.
\* Description: Hello,I would appreciate your comments~
\* User:
\* Date: -04-12
\* Destination: 查看所有图书
\*/
public class DisplayOperation implements IOperation {
public void work(BookList bookList) {
System.out.println("显示图书!");
int currentSize = bookList.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book book = bookList.getPos(i);
System.out.println(book);
}
}
}
ExitOperation
package operation;
import book.BookList;
/\*\*
\* Created with IntelliJ IDEA.
\* Description: Hello,I would appreciate your comments~
\* User:
\* Date: -04-12
\* Destination: 退出系统
\*/
public class ExitOperation implements IOperation {
public void work(BookList bookList) {
//有可能 需要销毁,或者使用到 这个数组当中的所有的数据
System.out.println("退出系统!");
/\*int currentSize = bookList.getUsedSize();
for (int i = 0; i < currentSize; i++) {
bookList.setBooks(i,null);
}\*/
System.exit(0);
}
}
FindOperation
源码
package operation;
![img](https://img-blog.csdnimg.cn/img_convert/417038ca87f5cb2864ab8e9e2d16c585.png)
![img](https://img-blog.csdnimg.cn/img_convert/de3140fe28fa5d88986e6b1be8d4ec55.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
originHeight=646&originWidth=1422&originalType=binary&ratio=1&rotation=0&showTitle=false&size=141145&status=done&style=none&taskId=uec9b8eb2-4c02-4bfa-ba5a-cc99e0f0823&title=)
**源码**
package operation;
[外链图片转存中…(img-8T8bWh6a-1715816144680)]
[外链图片转存中…(img-nxlS1iYs-1715816144680)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!