一、图书管理系统样式
管理系统效果图:
通过效果图我们可以看到,首先要实现登录,得到用户姓名和身份,依据用户的身份不同,其菜单栏和用户可以执行的操作不同。
二、图书管理系统具体实现
主要设置以下包和类:
其中book包存放有关书的信息,operation包存放有关用户执行的各种操作 ,user存放有关用户的信息,Main是测试类。
2.1 book包
Book类用来存放有关一本书的详细信息和操作方法,BookList是书架类,记录存放的书。
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; } //打印书的信息 @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' +"图书状态:"+ ((isborrowed==true)? "已被借出":"未被借出")+ '}'; } //获取书名 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 isIsborrowed() { return isborrowed; } //设置书的状态 public void setIsborrowed(boolean isborrowed) { this.isborrowed = isborrowed; } }
public class BookList { //书架存放的书(许多本) private Book[] books; //当前书架上书的数量 int NowSize; //初始化书架 public BookList() { this.books=new Book[20]; //最初存放三本书 books[0]=new Book("三国演义","罗贯中",13,"小说"); books[1]=new Book("西游记","吴承恩",15,"小说"); books[2]=new Book("红楼梦","曹雪芹",12,"小说"); NowSize=3; } //知书的位置(数组下标)从书架获取一本书 public Book getBook(int pos){ return books[pos]; } //在书架相应位置放置一本书 public void SetBook(int pos,Book book){ books[pos]=book; } //获取当前书架上书的数量 public int getNowSize() { return NowSize; } //设置当前书架上书的数量 public void setNowSize(int nowSize) { NowSize = nowSize; } }
2.2 user包
User类是所有类型用户的父类,AdminUser是管理员类型的用户,NormalUser是普通用户类型的用户。
//抽象类 public abstract class User { //用户名字 protected String name; //用户的多种操作 protected Ioperation[] ioperations; //用户初始化 public User(String name) { this.name = name; } //用户的菜单 public abstract int menu(); //用户要执行的操作 public void doperation(int choice, BookList bookList){ ioperations[choice].work(bookList); } }
//管理员用户 public class AdminUser extends User{ public AdminUser(String name) { super(name); //用户的具体操作 this.ioperations=new Ioperation[]{ new ExitOperation(), //退出系统 new SearchOperation(), //查找图书 new AddOperation(), //增加图书 new DeleteOperation(), //删除图书 new ShowOperation(), //查看所有图书 }; } //管理员用户菜单 @Override public int menu() { System.out.println("********************"); System.out.println("hello "+name+" "+"欢迎来到管理员菜单"); 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; } }
//普通用户 public class NormalUser extends User{ public NormalUser(String name) { super(name); //普通用户具体操作 this.ioperations=new Ioperation[]{ new ExitOperation(), //退出系统 new SearchOperation(), //查找图书 new BorrowOperation(), //借用图书 new ReturnOperation(), //归还图书 }; } //普通用户菜单 @Override public int menu() { System.out.println("********************"); System.out.println("hello "+name+" 欢迎来到普通用户菜单"); System.out.println("1. 查找图书"); System.out.println("2. 借阅图书"); System.out.println("3. 归还图书"); System.out.println("0. 退出系统"); System.out.println("********************"); System.out.println("请输入你的选择:"); Scanner scanner=new Scanner(System.in); //用户操作选项 int choice=scanner.nextInt(); return choice; } }
2.3 Main类
//测试类 public class Main { //用户登录 public static User logn(){ System.out.println("请输入你的名字:"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); System.out.println("请输入你的身份:1:管理员 2:普通用户"); 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=logn(); while (true){ int choice=user.menu(); System.out.println("choice :"+choice); //根据choice确定执行哪个对象的特定操作 user.doperation(choice,bookList); } } }
2.4 operation包
AddOperation增加图书操作,BorrowOperation借出图书操作,DeleteOperation删除图书操作,ExitOperation退出系统操作,ReturnOperation归还操作,SearchOperation查找操作,ShowOperation查看所有图书操作,所有的操作针对书架进行,因此建Ioperation一个接口,声明操作书架的方法,每个类实现这个接口。
//接口 public interface Ioperation { void work(BookList bookList); }
//增加图书 public class AddOperation implements Ioperation{ @Override public void work(BookList bookList) { System.out.println("增加图书"); Scanner scanner=new Scanner(System.in); System.out.println("请输入name:"); String name=scanner.nextLine(); System.out.println("请输入author:"); String author=scanner.nextLine(); System.out.println("请输入price:"); int price=scanner.nextInt(); scanner.nextLine(); System.out.println("请输入type:"); String type=scanner.nextLine(); Book book=new Book(name,author,price,type); //判断书架是否已满 if(bookList.getNowSize()==Max_book_count){ System.out.println("书架满了"); return; }else { for (int i = 0; i <bookList.getNowSize(); i++) { //判断书架是否已有此书 if((bookList.getBook(i).getName()).equals(name)){ System.out.println("书架里已有此书,不需再添加"); return; } } //放置书 bookList.SetBook(bookList.getNowSize(), book); //书的数量加1 int count= bookList.getNowSize(); bookList.setNowSize(++count); System.out.println("添加图书成功"); } } }
//借出图书 public class BorrowOperation implements Ioperation{ @Override public void work(BookList bookList) { System.out.println("借出图书"); Scanner scanner=new Scanner(System.in); System.out.println("请输入name:"); String name=scanner.nextLine(); for (int i = 0; i < bookList.getNowSize(); i++) { //判断存在此书 if ((bookList.getBook(i).getName()).equals(name)){ bookList.getBook(i).setIsborrowed(true); System.out.println("借阅图书成功"); return; } } System.out.println("借阅的书不存在"); } }
//删除图书 public class DeleteOperation implements Ioperation{ @Override public void work(BookList bookList) { System.out.println("删除图书"); System.out.println("请输入要删除的书名:"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); for (int i = 0; i < bookList.getNowSize(); i++) { //存在此书 if ((bookList.getBook(i).getName()).equals(name)){ for (int j = i; j < bookList.getNowSize()-1; j++) { bookList.SetBook(j,bookList.getBook(j+1)); } //最后一本书置空 bookList.SetBook(bookList.getNowSize(),null); //书的数量减1 int count=bookList.getNowSize(); bookList.setNowSize(--count); System.out.println("删除图书成功"); return; } } System.out.println("此书不存在"); } }
//归还图书 public class ReturnOperation implements Ioperation{ @Override public void work(BookList bookList) { System.out.println("归还图书"); Scanner scanner=new Scanner(System.in); System.out.println("请输入name:"); String name=scanner.nextLine(); for (int i = 0; i < bookList.getNowSize(); i++) { //存在图书 if ((bookList.getBook(i).getName()).equals(name)){ bookList.getBook(i).setIsborrowed(false); System.out.println("归还图书成功"); return; } } System.out.println("归还的图书不存在"); } }
//查找图书 public class SearchOperation implements Ioperation{ @Override public void work(BookList bookList) { System.out.println("查找图书"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); for (int i = 0; i <bookList.getNowSize();i++) { //图书存在 if ((bookList.getBook(i).getName()).equals(name)){ System.out.println(bookList.getBook(i)); return; } } System.out.println("书库里没有此书"); } }
//查找所有图书 public class ShowOperation implements Ioperation{ @Override public void work(BookList bookList) { System.out.println("打印图书"); for (int i = 0; i < bookList.getNowSize(); i++) { Book book=bookList.getBook(i); System.out.println(book); } } }
//退出系统 public class ExitOperation implements Ioperation{ @Override public void work(BookList bookList) { System.out.println("退出系统"); System.exit(0); } }