一、图书管理系统菜单
🍓管理员菜单
1.查找图书
2.新增图书
3.删除图书
4.显示图书
0.退出系统
---------------------------------------------------------------------------------------------------------------------------------
🌼用户菜单
1.查找图书
2.借阅图书
3.归还图书
0.退出系统
二、实现基本框架
先建立一个新的文件,命名为TestBook,在文件内建立两个包,分别命名为user(用户)、book(图书)。
先写book相关的代码。于是,我们先在book包中新建一个java类,名为:Book。
显示图书时,我们希望它能显示出所有图书的名称、作者、价格、类型和图书目前是否借出。
private String name;//书名
private String author;//作者
private int price;//价格
private String type;//类型
private boolean isBorrowed;//是否被借出,初始值是false,在构造方法中不用写
右击鼠标,选择Generate,选择Getter and Setter 选项,点击shift,点最后一个,就能全选:
自动生成:
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;
}
再写它们的构造方法:
当我们新增一本图书时,它默认就是未被借出的,所以不用构造方法。
快捷键:alt+insert。按ctrl,可以多选,直接生成下面代码块:
public Book(String name, String author, int price, String type) {//构造方法
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
我们再右键选择Generate,选择ToString,全选,点OK,自动生成:
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrowed=" + isBorrowed +
'}';
}
此时,在book包中新建一个类:BookList(书架):
在这个书架中,我们希望能在里面固定的位置放书,并且能知道放了几本书:
private Book[] books=new Book[10];//这个书架可以放十本书
private int usedSize;//记录下当前book数组中有几本书
然后依旧是右键Generate ,getter and setter,自动生成:
当前界面:
我们还记得在C语言中,我们用到的 define,用define语句来定义一个常量,同理,我们这边也可以定义一个能放多少本书的常量:
private static final int DEFAULT_SIZE=10;
private Book[] books=new Book[DEFAULT_SIZE];
我们这边就是先按思路慢慢写,慢慢补充。在后面,我会放完整的代码。
book包已经告一段落了,现在来写user包。
我们在user包中新建三个类:AdminUser(管理员)、NormalUser(用户)、User。
NormalUser、AdminUser,这也就是我们图书管理系统面对的两个对象了,管理员和用户,他们具有一些相同的属性。我们就可以写一个User类,让两个类去继承,来省一些代码了。
🥗我们先写User类叭~
package user;
public class User {
protected String name;//名字.这边的protect代表的是名字的权限。如果是private,它只能在同一个包的同一类使用。就不能让AdminUser类继承了。
//写public的话,权限太大了,不是很好。
public User(String name) {//构造方法
this.name = name;
}
}
所以在AdminUser类中:
package user;
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
}
}
可以直接用快捷键,alt+insert,直接生成构造方法。
同理,NormalUser类中:
package user;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
}
}
我们书的属性和用户属性的包和类已经写了大概。我们现在回归到我前面列的功能上:
然后,我们就会发现我们想要实现的功能和操作基本上是针对图书的。所以,这边,我们可以选择直接在图书book包中写方法,也可以选择另外再创建一个包。
我这边是新建了一个包,命名为:opera,再创建一个接口命名为IOPeration。
创建接口:点oper,右击,点击java Class:
然后页面为:
创建接口:
package opera;
import book.BookList;
public interface IOPeration {//创建接口
void work(BookList bookList);//抽象方法
//功能主要是针对图书的,也就是针对书架。
}
我们在opera(实现功能的包)中,创建两个类,AddOperation、FindOperation,这两个类。
我们会发现这两个类的实现也都要依靠BookList(书架)来实现。所以,在这两个类中,实现接口:
FindOperation类中:
package opera;
import book.BookList;
public class FindOperation implements IOPeration{//继承
@Override
public void work(BookList bookList) {//重写IOPeration类中的work方法
System.out.println("查找图书!");
}
}
AddOperation类中:
package opera;
import book.BookList;
public class AddOperation implements IOPeration {
public void work(BookList bookList){
System.out.println("新增图书!");
}
}
同理,新建类DelOperation(删除图书):
package opera;
import book.BookList;
public class DelOperation implements IOPeration{
@Override
public void work(BookList bookList) {
System.out.println("删除图书!");
}
}
新建一个类:ShowOperation(显示图书):
package opera;
import book.BookList;
public class ShowOperation implements IOPeration{
@Override
public void work(BookList bookList) {
System.out.println("打印所有图书!");
}
}
再新建一个类:ExitOperation(退出系统):
package opera;
import book.BookList;
public class ExitOperation implements IOPeration{
@Override
public void work(BookList bookList) {
System.out.println("退出系统!");
}
}
新建一个BrrowOperation类(借阅图书):
package opera;
import book.BookList;
public class BrrowOperation implements IOPeration{
@Override
public void work(BookList bookList) {
System.out.println("借阅图书!");
}
}
再新建一个类:ReturnOperation(借阅图书):
package opera;
import book.BookList;
public class ReturnOperation implements IOPeration{
@Override
public void work(BookList bookList) {
System.out.println("归还图书!");
}
}
接着,我们来细化我们的类。
🍅我们还没有给user添加菜单。
我们先给管理员添加菜单:
public void menu(){
System.out.println("____________________________________");
System.out.println("1.查找图书");
System.out.println("2.新增图书");
S