这是一个对于Java中知识点的类,抽象类,封装,继承,多态,接口等进行的一个简单的代码练习,对于实际的图书管理系统还需要一点的优化
目录
前言
效果展示
功能模块
书架
定义书的类
创建书架
用户
User用户类
AdminUser管理员
NormalUser普通用户
功能
接口
FindOperation 查找图书
AddOperation添加图书
DelOperation删除图书
BorrowOperation借阅图书
DisOperation 打印图书
RetOperation归还图书
ExitOperation退出系统
整合
总结
我们先来看看效果
首先是我们的管理员端:
再下是我们的普通用户端:
我们先试着模块化出来功能合计
1.简单的登录
2.管理端
·查阅图书
·增加图书
·删除图书
·打印图书
·退出系统
3.用户端
·查阅图书
·借阅图书
·归还图书
·退出
我们先将类中的功能创建好
IOperation为我们所有功能的接口 很多童鞋就疑惑为何要这么做,我们直接将其定义到一个类中不可以吗,答案是可以的!,但是我们为了链接知识点 所以将其进行分化!
我们先来定义一个书的类,首先一本书有书名、作者、价格、类型以及是否已被借出
public class Book {private String name;//书名private String author;//作者private int price;//价格private String type;//类型private boolean isBorrwed;//是否借出
}
因为这些都是private类型 所以我们还需要提供一个方法来提供给使用者来调用
教大家快捷方法为Alt+Insert
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 isBorrwed() {return isBorrwed;}public void setBorrwed(boolean borrwed) {isBorrwed = borrwed;}@Overridepublic String toString() {return "book{" +" 书名='" + name + '\'' +", 作者='" + author + '\'' +", 价格=" + price +", 类型='" + type + '\'' +((isBorrwed==true)?", 已被借出":", 未被借出") +'}';}
我们创建一个BookList类当做书架,用来存放我们的书籍
public class BookList {private Book[] books=new Book[10];private int BookSize;public BookList(){books[0]=new Book("三国演义","罗贯中",17,"小说");books[1]=new Book("西游记","吴承恩",47,"小说");books[2]=new Book("水浒传","施耐庵",37,"小说");this.BookSize=3;}public int getBookSize() {return BookSize;}public void setBookSize(int bookSize) {BookSize = bookSize;}/*** 获取到pos位置的一本书* @param pos* @return*/public Book getpos(int pos){return books[pos];}/*** 新加入一本书* @param pos* @param book*/public void setBooks(int pos,Book book){this.books[pos]=book;}
}
我们现在可以看到已经对书架进行了初始化,现在书架上的书有三国演义、西游记、水浒传
我们要使用User来实现多态继承
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);}
}
管理员要实现的功能为查找、新增、删除、打印、退出系统
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("Hai!"+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);return scanner.nextInt();}
}
AdminUser类继承了User用户类,并且实现了管理员对应的功能
普通用户要实现的功能为查找、借阅、归还、退出系统
public class NormalUser extends User {public NormalUser(String name){super(name);this.iOperations =new IOperation[]{new Exitoperation(),new Findoperation(),new Borrowoperation(),new Retoperation()};}public int menu(){System.out.println("=======用户菜单=======");System.out.println("Hai!"+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);return scanner.nextInt();}}
public interface IOperation {Scanner scanner=new Scanner(System.in);public void work(BookList bookList);
}
我们此功能实现是非常简单的,保存好用户要查找的图书并且使用类name.equals()来查找图书即可
public class Findoperation implements IOperation{public void work(BookList booklist) {System.out.println("查找图书");System.out.println("请输入你要查找的书名");String name=scanner.nextLine();int size=booklist.getBookSize();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("没有找到你要查找的书");}
}
我们要给已存在的书架加入一本书,将新书存放到顺序表之后即可
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.getBookSize();booklist.setBooks(size,book);booklist.setBookSize(++size);System.out.println("新增图书成功");}
}
需要注意的地方是我们一定要切记添加图书后记得要改变bookSize的值
此功能的实现与查找类似,在查找的基础上增加了删除,需要用到的知识点为顺序表的删除,删除需要将后续的书前移,并且将最后一个置为 空
public class Deloperation implements IOperation{public void work(BookList booklist) {System.out.println("删除图书");System.out.println("请输入要删除的图书的名字");String name=scanner.nextLine();int size= booklist.getBookSize();for (int i = 0; i < size; i++) {Book book= booklist.getpos(i);if(name.equals(book.getName())){while(i
切记将书架的最后一位置为空避免泄露,需要注意到的还是要将bookSize的值进行修改
首先利用查找的原理找到我们要寻找的书,找到后修改其状态即可
public class Borrowoperation implements IOperation {public void work(BookList booklist) {System.out.println("借阅图书");System.out.println("请输入你要借的书名");String name=scanner.nextLine();int size=booklist.getBookSize();for (int i = 0; i
需要注意的是记得将要借阅的书类型修改为true
按照顺序表原理依次打印即可
public class Displayoperation implements IOperation{public void work(BookList booklist) {System.out.println("打印图书");int size= booklist.getBookSize();for (int i = 0; i < size; i++) {Book book= booklist.getpos(i);System.out.println(book);}}
}
首先要查找书库是否存在此书,如果存在将其类型修改为false
public class Retoperation implements IOperation{public void work(BookList booklist) {System.out.println("归还图书");System.out.println("请输入你要归还的书名");String name=scanner.nextLine();int size=booklist.getBookSize();for (int i = 0; i
退出系统
public class Exitoperation implements IOperation{public void work(BookList booklist) {System.out.println("退出系统");System.exit(0);}
}
我们需要使用Main来将所有的功能进行串联
public class Main {public static User login(){System.out.println("请输入你的姓名");Scanner scanner=new Scanner(System.in);String name=scanner.next();System.out.println("请输入你的身份 1--》管理员 0--》普通用户");int choice=scanner.nextInt();if(choice==1){return new AdminUser(name);}else if(choice==0) {return new NormalUser(name);}else {System.out.println("输入错误,退出系统");return null;}}public static void main(String[] args) {BookList bookList=new BookList();User user=login();//发生了向上转型while(true){int choice=user.menu();//发生了动态绑定 多态//根据choice调用合适的操作user.dowork(choice,bookList);}}
}
我们来看一下代码写完之后的所有文件
我们现在实现的还是比较简易的,后期将结合MySQL来进行优化,并且在代码实现中也有很多业务上的处理没有实现,后期将会进行修正,感谢大家的支持