目录
一、类的创建
二、各个类具体的实现
1、book包
Book类
BookList类
2、operation包
IOperation 接口
AddOperation类
BorrowOperation类
DelOperation类
FindOperation类
DisplayOperation类
ReturnOperation类
ExitOperation类
3、user包
User类
AdminUser类
NormalUser类
4、Main类
二、运行结果
一、类的创建 1、首先,我们创建 图书相关的类——先创建一个book包,在包里创建一个Book类表示一本书;创建一个BookList类,用来保存多本书。
2、然后创建 *** 作相关的类——
先创建一个接口 IOperation,然后分别创建 AddOperation、DelOperation、FindOperation、DisplayOperation、BorrowOperation、ReturnOperation、ExitOperation
分别代表用户可以实现的 *** 作(添加、删除、查找、显示、借书、还书、退出)
3、然后我们创建用户相关的类——
AdminUser代表管理员用户类、NormalUser代表普通用户类、而User是一个抽象类,是它们的父类。
4、最后直接创建一个主类,用来搭建整体的逻辑。
二、各个类具体的实现 1、book包 Book类该类为书类,先定义需要的属性,再为每个成员变量提供 getter 和 setter 方法,最后重写一下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) ? " 已经被借出 " : " 未被借出 ") + '}'; } }BookList类
该类为书架类,默认放三本书,提供的方法有获取某位置的的书、在某位置设置某本书。
package book; public class BookList { private Book[] books = new Book[10]; private int usedSize; public BookList() { books[0] = new Book("水浒传","施耐庵",57,"小说"); books[1] = new Book("西游记","吴承恩",39,"小说"); books[2] = new Book("红楼梦","曹雪芹",42,"小说"); this.usedSize = 3; } public int getUsedSize() { return usedSize; } public void setUsedSize(int usedSize) { this.usedSize = usedSize; } public Book getPos(int pos) { return this.books[pos];//获取到pos位置的一本书 } public void setBook(int pos,Book book) { this.books[pos] = book;// 设置Pos下标为一本书 } }2、operation包 IOperation 接口
在接口中定义一个抽象类 work,让其他类实现这个接口,实现具体的work方法。
package operation; import book.BookList; import java.util.Scanner; public interface IOperation { Scanner scanner = new Scanner(System.in); void work(BookList bookList); }AddOperation类
该类为新增图书的具体实现类(新增方法为在最后一本书的后面添加,当然可以有更优化的做法,但是我们重点是面向对象,业务上就暂不细化了)具体实现如下:
package operation; import book.Book; import book.BookList; public class AddOperation implements IOperation{ public void work(BookList bookList) { System.out.println("新增图书!"); System.out.println("请输入图书的名字:"); String name = scanner.nextLine(); System.out.println("请输入图书的作者:"); String author = scanner.nextLine(); System.out.println("请输入图书的类型:"); String type = scanner.nextLine(); System.out.println("请输入图书的价格:"); int price = scanner.nextInt(); Book book = new Book(name,author,price,type); int size = bookList.getUsedSize(); bookList.setBook(size,book); bookList.setUsedSize(size+1); System.out.println("新增图书成功!"); } }BorrowOperation类
本类为借书的具体实现类,主要 *** 作为借完一本书,即可更改图书状态为“已经被借出”,如果没查找到你要借的则显示“没有你要借的这本书”。具体实现如下:
package operation; import book.Book; import book.BookList; public class BorrowOperation implements IOperation{ public void work(BookList bookList) { System.out.println("借阅图书!"); System.out.println("请输入你要借阅的图书的名字:"); String name = scanner.nextLine(); int size = bookList.getUsedSize(); for (int i = 0; i < size; i++) { Book book = bookList.getPos(i); if(name.equals(book.getName())) { book.setBorrowed(true); System.out.println("借阅成功!"); System.out.println(book); return; } } System.out.println("没有你要借阅的这本书!"); } }DelOperation类
删除图书的具体实现类。输入要删除的图书的名字,如果查找到则将该书删除(用顺序表的逻辑实现),如果没找到则提示没有这本书。具体实现如下:
package operation; import book.Book; import book.BookList; public class DelOperation implements IOperation{ public void work(BookList bookList) { System.out.println("删除图书!"); //1、根据书名找到书的位置 System.out.println("请输入你要删除的图书的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); int index = 0;//存储找到的下标 int i = 0; for (; i < currentSize; i++) { Book book = bookList.getPos(i); if(book.getName().equals(name)) { index = i; break; } } if(i >= currentSize) { System.out.println("没有你要删除的这本书!"); return; } // 2、进行删除 for (int j = index; j < currentSize-1; j++) { Book book = bookList.getPos(j+1);//利用getpos()函数让book获取第j+1本书的信息 bookList.setBook(j,book); //把book插入第j个位置 } bookList.setBook(currentSize,null); bookList.setUsedSize(currentSize-1); System.out.println("删除成功!"); } }FindOperation类
该类为查找图书的具体实现类,查找到则打印该图书的信息,否则提示没找到这本书。
package operation; import book.Book; import book.BookList; public class FindOperation implements IOperation{ public void work(BookList bookList) { System.out.println("请输入要查找的书名:"); String name = scanner.nextLine(); int size = bookList.getUsedSize(); for (int i = 0; i < size; i++) { Book book = bookList.getPos(i); if(name.equals(book.getName())) { System.out.println("找到了这本书,信息如下:"); System.out.println(book); return; } } System.out.println("没有找到这本书!"); } }DisplayOperation类
该类为显示图书的具体实现类。就是将书架上所存的书打印到屏幕上,具体实现如下:
package operation; import book.Book; import book.BookList; public class DisplayOperation implements IOperation{ public void work(BookList bookList) { System.out.println("打印图书!"); int size = bookList.getUsedSize(); for (int i = 0; i < size; i++) { Book book = bookList.getPos(i); System.out.println(book); } } }ReturnOperation类
该类为还书的具体实现类。还书之后将书的“isborrowed”的属性改为“未被借出”并提示归还成功,如果没找到对应的图书则提示“没有你要归还的书” 。
package operation; import book.Book; import book.BookList; public class ReturnOperation implements IOperation{ public void work(BookList bookList) { System.out.println("归还图书"); System.out.println("请输入你要归还的图书的名字:"); String name = scanner.nextLine(); int size = bookList.getUsedSize(); for (int i = 0; i < size; i++) { Book book = bookList.getPos(i); if(name.equals(book.getName())) { book.setBorrowed(false); System.out.println("归还成功!"); System.out.println(book); return; } } System.out.println("没有你要归还的这本书!"); } }ExitOperation类
该类为退出程序的基本实现类。System.exit(0)表示正常退出程序。
package operation; import book.BookList; public class ExitOperation implements IOperation{ public void work(BookList bookList) { System.out.println("退出系统!"); System.exit(0); } }3、user包 User类
该类为一个抽象用户类,提供菜单的抽象方法,还有一个IOperation类的数组,里面存放的是各类 *** 作的具体实现类。
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 doWork(int choice, BookList bookList) { iOperations[choice].work(bookList); } }AdminUser类
该类是管理员用户类,重写了User类的menu方法。
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 DisplayOperation() }; } public int menu() { System.out.println("===========管理员菜单==========="); System.out.println("你好," + this.name +" 用户"); System.out.println("1.查找图书"); System.out.println("2.新增图书"); System.out.println("3.删除图书"); System.out.println("4.显示图书"); System.out.println("0.退出系统"); System.out.println("=============================="); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); return choice; } }NormalUser类
该类为普通用户类,menu也经过了重写。
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 BorrowOperation(), new ReturnOperation(), }; } public int menu() { System.out.println("===========普通用户的菜单==========="); System.out.println("你好," + this.name +" 用户"); 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; } }4、Main类
该类为主类,搭建整体框架。最核心的点就在main函数里的几行代码。(用到了向上转型、发生了动态绑定)
import book.BookList; import user.AdminUser; import user.NormalUser; import user.User; import java.util.Scanner; public class Main { public static User login() { System.out.println("请输入你的姓名:"); Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); System.out.println("请输入你的身份:1-》管理员,0-》普通用户"); int choice = scanner.nextInt(); if(choice == 1) { return new AdminUser(name); }else { return new NormalUser(name); } } public static void main(String[] args) { BookList bookList = new BookList(); User user = login();//向上转型 while (true) { int choice = user.menu();//发生了动态绑定 user.doWork(choice, bookList); } } }二、运行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)