目录
一、前言
二、内容需求
三、类的设计
(一)图书类
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; } @Override public 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; } else return false; }}
(二)操作类
1.添加图书AddOperation类
在这个类实现对图书的增加,先输入书的信息,然后 new 一本书。
package operation;import book.Book;import book.BookList;import java.util.Scanner;public class AddOperation implements IOperation { @Override public 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 { @Override 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)) { 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 { @Override 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(); 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 { @Override public 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 { @Override public 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 { @Override 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)) { 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的分享内容,感谢大家的支持,我们下次再见!!!