这个系统上来需要输入你的姓名,然后选择身份后才可进入,身份有管理员身份和普通用户身份,管理员可有增删查和显示图书的功能,而普通用户可以查找图书,借阅图书,以及归还图书
的功能,不论是管理员还是普通用户输入0都会推出系统。源码其中包括图书类Book,存放图书的顺序表类BookList,业务类Operation里面包含着各个业务处理,最后还有使用者类User里面包含管理员AdminUser和普通用户类NormalUser,最后是一个主函数即为整个程序的入口,以下为源代码:
图书类
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)? " 已被借出":" 未被借出")+ '}'; } }
图书顺序表类
package book; public class BookList {//存放图书的顺序表 private Book[] books = new Book[10];//图书数组 private int UsedSize;//图书有效个数 public BookList(){//构造方法 先默认三本书 books[0] = new Book("三国演义","罗贯中",50,"小说"); books[1] = new Book("水浒传","施耐庵",50,"小说"); books[2] = new Book("西游记","吴承恩",50,"小说"); this.UsedSize = 3; } public int getUsedSize() { return UsedSize; }//得到当前有效元素个数 public void setUsedSize(int usedSize) { UsedSize = usedSize; }//修改当前元素个数 //获取pos位置上的书 public Book getBook(int pos) { return this.books[pos]; } //设置pos下标为一本书 添加一本书 也就是get set方法 public void setBooks(int pos,Book book) { this.books[pos] = book; } }
各个操作包
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("新增图书"); System.out.println("请输入图书的名字:"); String name = input.next(); System.out.println("请输入图书的作者:"); String author = input.next(); System.out.println("请输入图书的类型:"); String type = input.next(); System.out.println("请输入图书的价格:"); int price = input.nextInt(); Book book = new Book(name,author,price,type);//新增图书的所有信息 int size = bookList.getUsedSize(); bookList.setBooks(size,book);//size位置(最后一个位置)上的书改为此书 bookList.setUsedSize(size + 1);//有效图书加一 System.out.println("添加成功"); } }
package operation; import book.Book; import book.BookList; public class BorrowOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("借阅图书"); System.out.println("请输入你要借阅的图书名字"); String name = input.nextLine(); for (int i = 0; i < bookList.getUsedSize(); i++) { Book book = bookList.getBook(i);//得到所有图书的信息 if(name.equals(book.getName())){//找到了 book.setBorrowed(true);//把借阅状态给为true System.out.println("借阅成功"); System.out.println(book);//打印这个图书信息 return; } } System.out.println("没有你要借阅的这本书"); } }
package operation; import book.Book; import book.BookList; public class DelOperation implements IOperation { @Override public void work(BookList bookList) { System.out.println("删除图书"); System.out.println("请输入要删除的图书"); String name = input.nextLine(); int size = bookList.getUsedSize(); int index = 0;//存储找到的下标 int i = 0; for (; i < size - 1; i++) { Book book = bookList.getBook(i);//寻找所有书 if(name.equals(book.getName())){ index = i;//找到的要删除的下标 break; } } if(i >= size){ System.out.println("没有你要删除的书"); return; } for (int j = 0; j < size - 1; j++) { Book book = bookList.getBook(j + 1);//获得j后面的图书 bookList.setBooks(j,book);//让j位置的书被j+1位置的书所覆盖 } bookList.setBooks(size,null);//让最后一本书置空 bookList.setUsedSize(size - 1);//让有效元素减一 } }
package operation; import book.Book; import book.BookList; public class DispalyOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("打印图书"); for (int i = 0; i < bookList.getUsedSize(); i++) { Book book = bookList.getBook(i); System.out.println(book); } } }
package operation; import book.BookList; public class ExitOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("退出系统"); System.exit(0); } }
package operation; import book.Book; import book.BookList; public class FindOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("查找图书"); String name = input.nextLine(); int size = bookList.getUsedSize(); for (int i = 0; i < size; i++) { Book book = bookList.getBook(i); if(name.equals(book.getName())){ System.out.println("找到此书,信息如下:"); System.out.println(book); return; } } System.out.println("未找到此书"); } }
package operation; import book.BookList; import java.util.Scanner; public interface IOperation {//设置接口 方便各个操作实现 void work(BookList bookList); Scanner input = new Scanner(System.in); }
package operation; import book.Book; import book.BookList; public class ReturnOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("归还图书"); System.out.println("请输入你要归还的图书名字"); String name = input.nextLine(); for (int i = 0; i < bookList.getUsedSize(); i++) { Book book = bookList.getBook(i); if(name.equals(book.getName())){ book.setBorrowed(false); System.out.println("归还成功"); System.out.println(book); return; } } System.out.println("没有你要归还的这本书"); } }
使用者类
package user; import operation.*; import java.util.Scanner; public class AdminUser extends User{//管理员 public AdminUser(String name) {//构造方法 super(name); this.iOperation = new IOperation[]{//包含各种操作 new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new DispalyOperation() }; } public int menu(){ System.out.println("=====管理员菜单====="); System.out.println("Hello " + this.name + "欢迎来到图书系统"); System.out.println("1.查找图书"); System.out.println("2.新增图书"); System.out.println("3.删除图书"); System.out.println("4.显示图书"); //System.out.println("5.修改图书"); System.out.println("0.退出菜单"); System.out.println("=================="); Scanner input = new Scanner(System.in); int choice = input.nextInt(); return choice;//返回用户的选择 } }
package user; import operation.*; import java.util.Scanner; public class NormalUser extends User{ public NormalUser(String name) { super(name); this.iOperation = new IOperation[]{ new ExitOperation(), new FindOperation(), new BorrowOperation(), new ReturnOperation() }; } public int menu(){ System.out.println("=====普通成员菜单====="); System.out.println("Hello " + this.name + "欢迎来到次图书馆"); System.out.println("1.查找图书"); System.out.println("2.借阅图书"); System.out.println("3.归还图书"); System.out.println("0.退出菜单"); System.out.println("=================="); Scanner input = new Scanner(System.in); int choice = input.nextInt(); return choice; } }
package user; import book.BookList; import operation.IOperation; //使用者类 public abstract class User {//抽象类 方便 管理员合 普通用户继承 protected String name; protected IOperation[] iOperation;//操作组合 public User(String name){ this.name = name; } public abstract int menu();//列表方法 方便后面的动态绑定 public void doWork(int choice, BookList bookList){//**** 选择及其顺序表 iOperation[choice].work(bookList);//前面是对象的选择数组 后面是对象的方法 //进入顺序表的各个操作 } }
主函数:
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 input = new Scanner(System.in); String name = input.next(); System.out.println("请输入身份 1 -> 管理员 0-> 普通成员"); int choice = input.nextInt(); if(choice == 1) return new AdminUser(name);//管理员 类 if(choice == 0) return new NormalUser(name);//普通用户类 return null; } public static void main(String[] args) { BookList bookList = new BookList(); User user = login();//会引用那个对象取决于你返回的对象 向上转型 *** 进入logic方法 while(true) {//直到用户想退出为止 int choice = user.menu();//动态绑定 选择列表 //根据你 的选择 调用合适的操作 user.doWork(choice, bookList); //*** 进入各个选择操作 } } }
运行截图: