目录
一、前言
二、内容需求
三、类的设计
(一)图书类
1.Book 类
2.BookList 类
(二)操作类
1.添加图书AddOperation类
2.借阅图书BorrowOperation类
3.删除图书DelOperation类
4.显示图书ShowOperation类
5.退出系统ExitOperation类
6.查找图书FindOperation类
7.归还图书ReturnOperation类
8.IOperation接口
(三)用户类
1.User 类
2.AdminUser类
3.NormalUser类
(四)Main函数入口
四、运行演示
(一)管理员
(二)普通用户
编辑 五、总结
一、前言
Hello!大家晚上好呀~,我们前面分享了许多关于JavaSE的一些语法知识,今天我们就通过运用前面所学的知识来写一个图书管理系统,让我们对这些知识点掌握得更加熟练。
二、内容需求
1 、简单的登录
2 、管理端
- 查找图书
- 新增图书
- 删除图书
- 显示图书
- 退出系统
3 、用户端
- 查找图书
- 借阅图书
- 归还图书
- 退出系统
三、类的设计
我们创建一个book包,然后在book包里面放一个Book类和一个BookList类;接着创建一个operation包,这里面放的是我们的各种操作方法;然后是我们的user包,里面分别放我们的管理员的类和普通成员的类;最后是我们的Main类,我们的程序从这里开始执行。
(一)图书类
1.Book 类
我们在book 包里面创建 Book 类。该类里面是我们的图书属性,包括书名,作者名,价格、种类、是否被借出,然后给出set和get方法,方便我们后面对数据进行修改,最后重写一下toString()方法,方便打印输出。
package book;public class Book {private String name;private String author;private int price;private String type;private boolean isBorrowed;public Book(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;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +(isBorrowed == true ? " 已借出" : " 未借出") +//", isBorrowed=" + isBorrowed +'}';}
}
2.BookList 类
创建好Book类后就要创建书架类,书架是存放我们的书籍的地方,我们可以在这里面给一个数组,用于存放不同的书。然后定义我们书的数量,这里我们用userSize用来记录我们图书的数量。set和get方法用于我们对userSize的调整,同时我们给出了调整书架里面书的方法。这里我们写一个构造方法,用于把我们的书架初始化为有三本书,指定了书的数量userSize的大小为3。
package book;public class BookList {private Book[] books = new Book[10];private int usedSize;public BookList() {books[0] = new Book("三国演义", "罗贯中", 10, "小说");books[1] = new Book("西游记", "吴承恩", 11, "小说");books[2] = new Book("红楼梦", "曹雪芹", 12, "小说");this.usedSize = 3;}public Book getBook(int pos) {return books[pos];}public void setBook(int pos, Book book) {books[pos] = book;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public boolean isFull() {if (this.usedSize == books.length) {return true;} elsereturn false;}
}
(二)操作类
1.添加图书AddOperation类
在这个类实现对图书的增加,先输入书的信息,然后 new 一本书。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class AddOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("新增图书...");if (bookList.isFull()) {System.out.println("书架满了,不能新增!");return;}System.out.println("请输入你要新增图书的名称:");Scanner scanner = new Scanner(System.in);String bookName = scanner.nextLine();System.out.println("请输入你要新增图书的作者:");String author = scanner.nextLine();System.out.println("请输入你要新增图书的价格:");int price = scanner.nextInt();//scanner在输入输出时,要int在String后面,除非用户scanner.nextLine()来回收nextInt换行scanner.nextLine();System.out.println("请输入你要新增图书的类型:");String type = scanner.nextLine();Book book = new Book(bookName, author, price, type);int currentSize = bookList.getUsedSize();//目前存放3本书bookList.setBook(currentSize, book);bookList.setUsedSize(currentSize + 1);System.out.println("新增图书成功!");}
}
2.借阅图书BorrowOperation类
在这个类里实现图书借阅。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowedOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("借阅图书...");System.out.println("请输入你要借阅的书籍:");Scanner scanner = new Scanner(System.in);String bookName = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(bookName)) {book.setBorrowed(true);System.out.println("借阅成功!");return;}}System.out.println("借阅失败!");}
}
3.删除图书DelOperation类
在这里实现对图书的删除。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class DelOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("删除图书...");System.out.println("请输入你要删除的书籍名称:");Scanner scanner = new Scanner(System.in);String bookName = scanner.nextLine();int currentSize = bookList.getUsedSize();int pos = -1;int i = 0;for (i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(bookName)) {//如果找到这本书就记录它的下标pos = i;break;}}if (i >= currentSize) {System.out.println("没有找到这本书!");return;}//开始删除for (int j = 0; j < currentSize - 1; j++) {Book book = bookList.getBook(j + 1);bookList.setBook(j, book);}System.out.println("删除图书成功!");//修改setUsedSize//把后一个位置的图书往前一个位置存放bookList.setUsedSize(currentSize - 1);//将最后一个位置置为空bookList.setBook(currentSize - 1, null);}
}
4.显示图书ShowOperation类
在这个类里面实实现图书属性的显示。
package operation;import book.Book;
import book.BookList;public class ShowOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("显示图书...");int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);System.out.println(book);}}
}
5.退出系统ExitOperation类
在这里实现对图书管理系统的退出功能。
package operation;import book.BookList;public class ExitOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("退出系统");int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize - 1; i++) {bookList.setBook(i, null);}System.exit(0);}
}
6.查找图书FindOperation类
在这里实现对图书的查找功能。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class FindOperation implements IOperation {public void work(BookList bookList) {System.out.println("查找图书...");System.out.println("请输入你要查找的书籍:");Scanner scanner = new Scanner(System.in);String bookName = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(bookName)) {System.out.println("找到了这本书");System.out.println(book);return;}}System.out.println("没有找到这本书");}
}
7.归还图书ReturnOperation类
在这里实现图书的归还功能。
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class ReturnOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("归还图书...");System.out.println("请输入你要归还的书籍:");Scanner scanner = new Scanner(System.in);String bookName = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(bookName)) {book.setBorrowed(false);System.out.println("归还成功!");return;}}System.out.println("归还失败!");}
}
8.IOperation接口
我们在这里写一个接口,后面我们调用这个接口,就可以重写这个抽象类。
package operation;import book.BookList;public interface IOperation {public void work(BookList bookList);
}
(三)用户类
1.User 类
我们在这里写抽象类,是为了方便对它进行继承。我们的抽象类有name成员,还有IOperation类型的数组,我们可以向接口里面放我们的操作方法,其它的类都实现了我们的接口并且重写了接口里面的work()方法。
package user;import book.BookList;
import operation.IOperation;public abstract class User {protected String name;protected IOperation[] iOperations;public User(String name) {this.name = name;}public abstract int menu();public void doIoperations(int choice, BookList bookList) {this.iOperations[choice].work(bookList);}
}
2.AdminUser类
我们这里实现管理员菜单。
package user;import operation.*;import java.util.Scanner;public class AdminUser extends User {public AdminUser(String name) {super(name);this.iOperations = new IOperation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new ShowOperation()};}public int menu() {System.out.println("*****管理员菜单*****");System.out.println("1.查找图书");System.out.println("2.新增图书");System.out.println("3.删除图书");System.out.println("4.显示图书");System.out.println("0.退出系统");System.out.println("********************");System.out.println("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}
3.NormalUser类
我们在这里先帮父类写构造方法,然后将IOperation进行初始化里面放着是我们普通用户所能进行的一系列操作,再下面就是我们的菜单方法,因为我们的普通用户和管理员所能进行的操作是不一样的,需要同时选择我们的操作。
package user;import operation.*;import java.util.Scanner;public class NormalUser extends User {public NormalUser(String name) {super(name);this.iOperations = new IOperation[]{new ExitOperation(),new FindOperation(),new BorrowedOperation(),new ReturnOperation()};}public int menu() {System.out.println("*****普通用户菜单*****");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("0.退出系统");System.out.println("********************");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}
(四)Main函数入口
我们一开始先new一个BookList——书架,然后开始登录操作输入身份之后,返回一个用户的对象,此时我们拥有了两个对象,一个是书架bookList,还有就是我们的用户对象,然后我们的用户就可以对我们的书架进行一系列的操作。
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;import java.util.Scanner;public class Main {public static User login() {Scanner scanner = new Scanner(System.in);System.out.println("请输入你的姓名:");String name = scanner.nextLine();System.out.println("请输入你的身份:1.管理员 2.普通用户");int choice = scanner.nextInt();if (choice == 1) {AdminUser adminUser = new AdminUser(name);return adminUser;} else {NormalUser normalUser = new NormalUser(name);return normalUser;}}public static void main(String[] args) {BookList bookList = new BookList();//user有可能引用管理员身份,有可能引用普通用户身份while (true) {User user = login();int choice = user.menu();user.doIoperations(choice, bookList);}}
}
程序运行后先打印我们的菜单,顺便返回我们输入的操作,接着拿着我们的操作choice和我们的书架bookList去执行,user.doWork(),拿着我们的choice找到IOperation,运行对应的操作,最终实现我们指定的功能。
四、运行演示
(一)管理员
(二)普通用户
五、总结
我们通过利用前面所学的知识点:类,抽象类,封装,继承,多态,接口等知识,将它们综合运用起来,就可以写出一个简单的图书管理系统,以上就是本期JavaSE的分享内容,感谢大家的支持,我们下次再见!!!