学习了类和对象之后,就可以自己来做个小的项目来提升自己的能力了。本文章就来说明如何来做一个简单的图书管理系统。写一些小项目是一种很锻炼逻辑和熟悉语法的好方法。
在做这些项目的时候,要明白一点是我们的Java是面向对象的,要使用面向对象的思想来完成。先想想大概需要什么对象,比如书,用户等。不要想着一步就能想到全部的内容,要慢慢来,按照逻辑的过程写出代码。
下面标题中有(1)(2)之类的说明还没有写完或者需要写出其他部分的代码才能继续这部分的代码。截图没有截包的导入,报错的时候大多是包没有导入,要记着导入包。
一、大致的框架
图书管理系统,图书是一定需要的,要创建一个图书类,包括图书的书名、作者名、书的单价、书的类型、是否借出图书。用户也是一定需要的,所以要创建一个用户类。现在为了增加难度,我想要设置两个用户类:一个是管理员类,可以让管理员对图书进行管理,管理员对图书进行增删查改;一个就是普通的用户类,借阅归还图书。同时,两个类对应的菜单是不相同的。其他的内容就在写代码的时候在进行补充。
为了更好的管理代码,贴近实际开发,我们要使用Java中的包,同时每一个Java文件中只写一个类。
二、Main类(1/3)
main方法是所有程序的入口,所以要先创建。
创建了之后,不知道要写什么,就先放着,把知道的写出来。
三、Book包
在idea中新建一个Book包,用来存放图书相关的类。
1、Book类
创建一个Book类来定义书。
按照我们前面的想法,使用Java的封装的特点,用私有化的权限定义一些书的属性。这些属性创建之后,需要进行初始化,可以使用构造方法,也可以使用Setter和Getter方法。我们最好两个都写上,在后面的使用中就比较方便一点。同时,重写Book类中的toString方法,方便打印。
public class Book {
private String bookName;
private String authorName;
private double price;
private String type;
private boolean isBorrowed;
public Book(String bokName, String authorName, double price, String type) {
this.bookName = bokName;
this.authorName = authorName;
this.price = price;
this.type = type;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bokName) {
this.bookName = bokName;
}
public String getAuthorName() {
return authorName;
}
public void setAuthorName(String authorName) {
this.authorName = authorName;
}
public double getPrice() {
return price;
}
public void setPrice(double 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;
}
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + '\'' +
", authorName='" + authorName + '\'' +
", price=" + price +
", type='" + type + '\'' +
(isBorrowed ? " 已借出" : " 未借出") +
'}';
}
}
现在是单个的书类创建好了。但是图书馆中,并不是一个图书,而是很多的图书排成一排。这个时候,就想到了数组。创建一个Book类的数组,用来模拟这个书架。想一想,放在Book类里面是不合理的,所以要新创建一个类,用来管理图书。
2、BookList类
创建一个BookList类来定义书架,在BookList类里面定义一个Book类的数组,还应该定义一个变量表示有多少本书。因为一个书架上不一定是满书的状态。在构造方法里面定义BooK数组大小为5个,初始化3本书。
BookList里面需要什么方法呢?获取书架上某一个位置的书、改变书架上某一个位置的书、获取书架上书的数量、当书减少或增加时改变书的数量。
public class BookList {
private Book[] books;
private int BookUseSize;
public BookList() {
books = new Book[5];
books[0] = new Book("三国演义", "施耐庵", 68.8, "小说");
books[1] = new Book("水浒传", "罗贯中", 56.6, "小说");
books[2] = new Book("西游记", "吴承恩", 60, "小说");
this.BookUseSize = 3;
}
/**
* 设置书
* 用来设置\改变某个下标的书,
* @param i 某个书的下标
* @param book 书
*/
public void setBooks(int i, Book book) {
if (i >= books.length) {
expansion();
}
books[i] = book;
}
/**
* 得到pos下标的书
* 返回某个下标的书的信息
* @param i 请求的下标
* @return Book类型,包含书的成员
*/
public Book getPo