【java】图书管理系统
时间:2024-04-03 12:05:42 来源:网络cs 作者:利杜鹃 栏目:卖家故事 阅读:
有了前几篇文章关于封装、继承、多态、接口等的介绍,想必各位读者对java面向对象的思想有了一定的认识。接下来这篇文章就让我们趁热打铁,利用所学知识做一个小项目图书管理系统吧
目录
一、图书类
1、book类
2、bookList类
二、功能实现
1、IOperation接口
2、查找图书
3、借阅图书
4、归还图书
5、新增图书
6、删除图书
7、显示图书
8、退出系统
三、用户类
四、主函数逻辑实现
总结
一、图书类
图书管理系统,顾名思义,起码要先有书被管理。因此我们应当先定义好于书相关的类。
1、book类
先定义一下单本书的特性,一本书肯定会包含书名、作者、价格等信息,我们可以建立一个book类来描述每本书的特性:
package book;public class Book { private String name; private String author; private int price; private boolean IsBorrowed; public Book(String name, String author, int price) { this.name = name; this.author = author; this.price = price; } public String getName() { return name; } public boolean isBorrowed() { return IsBorrowed; } public void setBorrowed(boolean borrowed) { this.IsBorrowed = borrowed; } @Override public String toString() { return "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + (IsBorrowed?", 已借出":", 未借出"); }}
2、bookList类
既然要做管理系统,那就不可能只处理一本书了,我们需要管理的是许多本特性各异的书。那么如何来存储这些信息呢?我们可以建立一个列表类来记录我们的图书信息:
package book;public class BookList { private Book[] books=new Book[20]; private int userSize; public BookList() { books[0]=new Book("海贼王","尾田荣一郎",17); books[1]=new Book("火影忍者","尾田荣一郎",19); books[2]=new Book("红楼梦","曹雪芹",45); books[3]=new Book("西游记","吴承恩",40); books[4]=new Book("三国演义","罗贯中",37); this.userSize=5; } public int getUserSize() { return userSize; } public void setUserSize(int userSize) { this.userSize = userSize; } public boolean isFull(){ if(this.userSize==books.length){ return true; }else{ return false; } } public Book getBook(int pos){ return books[pos]; } public void setBook(int pos,Book book){ books[pos]=book; }}
二、功能实现
已经存储好书本信息后, 我们就要明确我们究竟要实现哪些功能?
具体实现就由小编来带大家一一介绍吧
1、IOperation接口
为了功能实现的方便,我们通过接口来实现各个功能,先定义一个接口IOperation:
public interface IOperation { void work(BookList bookList);}
接着就可以通过重写接口中的work方法来实现各个的功能了,并且由于多态性,我们可以将各种不同功能的接口按顺序放在一个数组里,通过数组访问来实现不同功能,大大提高了效率。
如果你不知道多态是什么的话,可以看看小编之前的文章面向对象三大特性之多态 哦
2、查找图书
public class FindOperatino implements IOperation{ @Override public void work(BookList bookList) { System.out.println("查找图书………………"); System.out.println("请输入你要查找的书名:"); Scanner in =new Scanner(System.in); String bookname=in.nextLine(); int Size= bookList.getUserSize(); for(int i=0;i<Size;i++){ Book book=bookList.getBook(i); if(book.getName().equals(bookname)){ System.out.println("找到了这本书:"); System.out.println(book); return; } } System.out.println("没有你要找的书!"); }}
3、借阅图书
public class BorrowedOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("借阅图书………………"); System.out.println("请输入你要借阅的书名:"); Scanner in =new Scanner(System.in); String bookname=in.nextLine(); int Size= bookList.getUserSize(); for(int i=0;i<Size;i++){ Book book=bookList.getBook(i); if(book.getName().equals(bookname)){ System.out.println("借阅成功!"); book.setBorrowed(true); //System.out.println(book); return; } } System.out.println("没有你要借阅的书!"); }}
4、归还图书
public class ReturnOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("归还图书………………"); System.out.println("请输入你要归还的图书:"); Scanner in =new Scanner(System.in); String bookname=in.nextLine(); int Size= bookList.getUserSize(); for(int i=0;i<Size;i++){ Book book=bookList.getBook(i); if(book.getName().equals(bookname)&&book.isBorrowed()){ System.out.println("归还成功!"); book.setBorrowed(false); //System.out.println(book); return; } } System.out.println("没有你要归还的书!"); }}
5、新增图书
public class AddOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("新增图书………………"); Scanner in=new Scanner(System.in); if(bookList.isFull()){ System.out.println("书架满了,无法新增图书了!"); return; } System.out.println("请输入图书的名称:"); String name=in.nextLine(); System.out.println("请输入图书的作者:"); String author=in.nextLine(); System.out.println("请输入图书的价格:"); int price=in.nextInt(); Book book=new Book(name,author,price); int pos= bookList.getUserSize(); bookList.setBook(pos,book); bookList.setUserSize(pos+1); }}
6、删除图书
public class DeleteOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("删除图书………………"); System.out.println("请输入你要删除的图书:"); Scanner in =new Scanner(System.in); String bookname=in.nextLine(); int Size= bookList.getUserSize(); for(int i=0;i<Size;i++){ Book book=bookList.getBook(i); if(book.getName().equals(bookname)){ for(int j=i;j<Size;j++){ Book bookl=bookList.getBook(j+1); bookList.setBook(j,bookl); } bookList.setUserSize(Size-1); System.out.println("删除成功!"); //System.out.println(book); return; } } System.out.println("没有你要删除的书!"); }}
7、显示图书
public class ShowOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("显示图书………………"); int Size= bookList.getUserSize(); for(int i=0;i<Size;i++){ Book book=bookList.getBook(i); System.out.println(book); } }}
8、退出系统
public class ExitOperation implements IOperation { @Override public void work(Bookshelf bookshelf) { System.out.println("退出图书..."); int sz=bookshelf.getBooknum(); // 遍历置为 null for (int i = 0; i <sz ; i++) { bookshelf.setBooks(i,null); } System.out.println("图书系统正在退出中..."); // 系统退出 System.exit(-1); }}
这时我们就可以用如下方法来整合了:
super(name); this.iOperations=new IOperation[]{ new ExitOperation(), new FindOperatino(), new AddOperation(), new DeleteOperation(), new ShowOperation() };
这样就可以通过数组的不同下标来实现功能了,会变得方便许多。
三、用户类
作为一个图书管理系统,我们应当设置不同的用户特性,如增删书籍应该是管理员才有的权限,借阅书籍是普通用户需要实现的功能,但同时他们又有许多的共性,如姓名等信息,这时我们就可以利用继承的思想先定义一个父类User来记录用户的共性:
abstract public class User { protected String name; protected IOperation[] iOperations; public User(String name) { this.name = name; } public void doIoperation(int choice, BookList bookList){ this.iOperations[choice].work(bookList); } public abstract int menu();}
接着我们就可以写出各个具体的子类用户了
管理员用户:
public class AdminUser extends User { public AdminUser(String name) { super(name); this.iOperations=new IOperation[]{ new ExitOperation(), new FindOperatino(), new AddOperation(), new DeleteOperation(), 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 in=new Scanner(System.in); int choice=in.nextInt(); return choice; }}
普通用户:
public class NormalUser extends User{ public NormalUser(String name) { super(name); this.iOperations=new IOperation[]{ new ExitOperation(), new FindOperatino(), 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("**************************"); System.out.println("请输入你的操作:"); Scanner in=new Scanner(System.in); int choice=in.nextInt(); return choice; }}
四、主函数逻辑实现
public class Main { public static User login(){ Scanner in =new Scanner(System.in); System.out.println("欢迎来到图书管理系统"); System.out.println("请输入你的名字:"); String name=in.nextLine(); System.out.println("请输入你的身份:"); String identity=in.nextLine(); if(identity.equals("管理员")){ 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 user=login(); while(true){ int choice=user.menu(); user.doIoperation(choice,bookList); } }}
通过主函数逻辑来整合我们写过的各个模块,从而实现最终功能。
总结
从这个项目中我们可以看到,在父类User中实例化了iOperations对象,建立了一个以IOperation为元素的数组,接着在子类中按顺序建立创建好的功能接口,从而可以直接用下标来访问相应接口,这利用继承、多态、接口等思想,可谓是对面向对象思想的深度诠释。
那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。作者还是一个萌新,如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊
本文链接:https://www.kjpai.cn/gushi/2024-04-03/153216.html,文章来源:网络cs,作者:利杜鹃,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!