当前位置:   article > 正文

【java】图书管理系统_java图书管理系统

java图书管理系统

        有了前几篇文章关于封装、继承、多态、接口等的介绍,想必各位读者对java面向对象的思想有了一定的认识。接下来这篇文章就让我们趁热打铁,利用所学知识做一个小项目图书管理系统吧

目录

一、图书类

1、book类

2、bookList类

二、功能实现

1、IOperation接口

2、查找图书

3、借阅图书

4、归还图书

5、新增图书

6、删除图书

7、显示图书

8、退出系统

三、用户类

四、主函数逻辑实现

总结


一、图书类

        图书管理系统,顾名思义,起码要先有书被管理。因此我们应当先定义好于书相关的类。

1、book类

        先定义一下单本书的特性,一本书肯定会包含书名、作者、价格等信息,我们可以建立一个book类来描述每本书的特性:

  1. package book;
  2. public class Book {
  3. private String name;
  4. private String author;
  5. private int price;
  6. private boolean IsBorrowed;
  7. public Book(String name, String author, int price) {
  8. this.name = name;
  9. this.author = author;
  10. this.price = price;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public boolean isBorrowed() {
  16. return IsBorrowed;
  17. }
  18. public void setBorrowed(boolean borrowed) {
  19. this.IsBorrowed = borrowed;
  20. }
  21. @Override
  22. public String toString() {
  23. return "name='" + name + '\'' +
  24. ", author='" + author + '\'' +
  25. ", price=" + price +
  26. (IsBorrowed?", 已借出":", 未借出");
  27. }
  28. }

2、bookList类

        既然要做管理系统,那就不可能只处理一本书了,我们需要管理的是许多本特性各异的书。那么如何来存储这些信息呢?我们可以建立一个列表类来记录我们的图书信息:

  1. package book;
  2. public class BookList {
  3. private Book[] books=new Book[20];
  4. private int userSize;
  5. public BookList() {
  6. books[0]=new Book("海贼王","尾田荣一郎",17);
  7. books[1]=new Book("火影忍者","尾田荣一郎",19);
  8. books[2]=new Book("红楼梦","曹雪芹",45);
  9. books[3]=new Book("西游记","吴承恩",40);
  10. books[4]=new Book("三国演义","罗贯中",37);
  11. this.userSize=5;
  12. }
  13. public int getUserSize() {
  14. return userSize;
  15. }
  16. public void setUserSize(int userSize) {
  17. this.userSize = userSize;
  18. }
  19. public boolean isFull(){
  20. if(this.userSize==books.length){
  21. return true;
  22. }else{
  23. return false;
  24. }
  25. }
  26. public Book getBook(int pos){
  27. return books[pos];
  28. }
  29. public void setBook(int pos,Book book){
  30. books[pos]=book;
  31. }
  32. }

二、功能实现

       已经存储好书本信息后, 我们就要明确我们究竟要实现哪些功能?

具体实现就由小编来带大家一一介绍吧

1、IOperation接口

为了功能实现的方便,我们通过接口来实现各个功能,先定义一个接口IOperation:

  1. public interface IOperation {
  2. void work(BookList bookList);
  3. }

接着就可以通过重写接口中的work方法来实现各个的功能了,并且由于多态性,我们可以将各种不同功能的接口按顺序放在一个数组里,通过数组访问来实现不同功能,大大提高了效率。

如果你不知道多态是什么的话,可以看看小编之前的文章面向对象三大特性之多态

2、查找图书

  1. public class FindOperatino implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.out.println("查找图书………………");
  5. System.out.println("请输入你要查找的书名:");
  6. Scanner in =new Scanner(System.in);
  7. String bookname=in.nextLine();
  8. int Size= bookList.getUserSize();
  9. for(int i=0;i<Size;i++){
  10. Book book=bookList.getBook(i);
  11. if(book.getName().equals(bookname)){
  12. System.out.println("找到了这本书:");
  13. System.out.println(book);
  14. return;
  15. }
  16. }
  17. System.out.println("没有你要找的书!");
  18. }
  19. }

3、借阅图书

  1. public class BorrowedOperation implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.out.println("借阅图书………………");
  5. System.out.println("请输入你要借阅的书名:");
  6. Scanner in =new Scanner(System.in);
  7. String bookname=in.nextLine();
  8. int Size= bookList.getUserSize();
  9. for(int i=0;i<Size;i++){
  10. Book book=bookList.getBook(i);
  11. if(book.getName().equals(bookname)){
  12. System.out.println("借阅成功!");
  13. book.setBorrowed(true);
  14. //System.out.println(book);
  15. return;
  16. }
  17. }
  18. System.out.println("没有你要借阅的书!");
  19. }
  20. }

4、归还图书

  1. public class ReturnOperation implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.out.println("归还图书………………");
  5. System.out.println("请输入你要归还的图书:");
  6. Scanner in =new Scanner(System.in);
  7. String bookname=in.nextLine();
  8. int Size= bookList.getUserSize();
  9. for(int i=0;i<Size;i++){
  10. Book book=bookList.getBook(i);
  11. if(book.getName().equals(bookname)&&book.isBorrowed()){
  12. System.out.println("归还成功!");
  13. book.setBorrowed(false);
  14. //System.out.println(book);
  15. return;
  16. }
  17. }
  18. System.out.println("没有你要归还的书!");
  19. }
  20. }

5、新增图书

  1. public class AddOperation implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.out.println("新增图书………………");
  5. Scanner in=new Scanner(System.in);
  6. if(bookList.isFull()){
  7. System.out.println("书架满了,无法新增图书了!");
  8. return;
  9. }
  10. System.out.println("请输入图书的名称:");
  11. String name=in.nextLine();
  12. System.out.println("请输入图书的作者:");
  13. String author=in.nextLine();
  14. System.out.println("请输入图书的价格:");
  15. int price=in.nextInt();
  16. Book book=new Book(name,author,price);
  17. int pos= bookList.getUserSize();
  18. bookList.setBook(pos,book);
  19. bookList.setUserSize(pos+1);
  20. }
  21. }

6、删除图书

  1. public class DeleteOperation implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.out.println("删除图书………………");
  5. System.out.println("请输入你要删除的图书:");
  6. Scanner in =new Scanner(System.in);
  7. String bookname=in.nextLine();
  8. int Size= bookList.getUserSize();
  9. for(int i=0;i<Size;i++){
  10. Book book=bookList.getBook(i);
  11. if(book.getName().equals(bookname)){
  12. for(int j=i;j<Size;j++){
  13. Book bookl=bookList.getBook(j+1);
  14. bookList.setBook(j,bookl);
  15. }
  16. bookList.setUserSize(Size-1);
  17. System.out.println("删除成功!");
  18. //System.out.println(book);
  19. return;
  20. }
  21. }
  22. System.out.println("没有你要删除的书!");
  23. }
  24. }

7、显示图书

  1. public class ShowOperation implements IOperation{
  2. @Override
  3. public void work(BookList bookList) {
  4. System.out.println("显示图书………………");
  5. int Size= bookList.getUserSize();
  6. for(int i=0;i<Size;i++){
  7. Book book=bookList.getBook(i);
  8. System.out.println(book);
  9. }
  10. }
  11. }

8、退出系统

  1. public class ExitOperation implements IOperation {
  2. @Override
  3. public void work(Bookshelf bookshelf) {
  4. System.out.println("退出图书...");
  5. int sz=bookshelf.getBooknum();
  6. // 遍历置为 null
  7. for (int i = 0; i <sz ; i++) {
  8. bookshelf.setBooks(i,null);
  9. }
  10. System.out.println("图书系统正在退出中...");
  11. // 系统退出
  12. System.exit(-1);
  13. }
  14. }


        这时我们就可以用如下方法来整合了:

  1. super(name);
  2. this.iOperations=new IOperation[]{
  3. new ExitOperation(),
  4. new FindOperatino(),
  5. new AddOperation(),
  6. new DeleteOperation(),
  7. new ShowOperation()
  8. };

这样就可以通过数组的不同下标来实现功能了,会变得方便许多。

三、用户类

        作为一个图书管理系统,我们应当设置不同的用户特性,如增删书籍应该是管理员才有的权限,借阅书籍是普通用户需要实现的功能,但同时他们又有许多的共性,如姓名等信息,这时我们就可以利用继承的思想先定义一个父类User来记录用户的共性:

  1. abstract public class User {
  2. protected String name;
  3. protected IOperation[] iOperations;
  4. public User(String name) {
  5. this.name = name;
  6. }
  7. public void doIoperation(int choice, BookList bookList){
  8. this.iOperations[choice].work(bookList);
  9. }
  10. public abstract int menu();
  11. }

接着我们就可以写出各个具体的子类用户了

管理员用户:

  1. public class AdminUser extends User {
  2. public AdminUser(String name) {
  3. super(name);
  4. this.iOperations=new IOperation[]{
  5. new ExitOperation(),
  6. new FindOperatino(),
  7. new AddOperation(),
  8. new DeleteOperation(),
  9. new ShowOperation()
  10. };
  11. }
  12. public int menu(){
  13. System.out.println("*********管理员菜单*********");
  14. System.out.println("1.查找图书");
  15. System.out.println("2.新增图书");
  16. System.out.println("3.删除图书");
  17. System.out.println("4.显示图书");
  18. System.out.println("0.退出系统");
  19. System.out.println("**************************");
  20. System.out.println("请输入你的操作:");
  21. Scanner in=new Scanner(System.in);
  22. int choice=in.nextInt();
  23. return choice;
  24. }
  25. }

普通用户:

  1. public class NormalUser extends User{
  2. public NormalUser(String name) {
  3. super(name);
  4. this.iOperations=new IOperation[]{
  5. new ExitOperation(),
  6. new FindOperatino(),
  7. new BorrowedOperation(),
  8. new ReturnOperation()
  9. };
  10. }
  11. public int menu(){
  12. System.out.println("*********普通用户菜单*******");
  13. System.out.println("1.查找图书");
  14. System.out.println("2.借阅图书");
  15. System.out.println("3.归还图书");
  16. System.out.println("0.退出系统");
  17. System.out.println("**************************");
  18. System.out.println("请输入你的操作:");
  19. Scanner in=new Scanner(System.in);
  20. int choice=in.nextInt();
  21. return choice;
  22. }
  23. }

四、主函数逻辑实现

  1. public class Main {
  2. public static User login(){
  3. Scanner in =new Scanner(System.in);
  4. System.out.println("欢迎来到图书管理系统");
  5. System.out.println("请输入你的名字:");
  6. String name=in.nextLine();
  7. System.out.println("请输入你的身份:");
  8. String identity=in.nextLine();
  9. if(identity.equals("管理员")){
  10. AdminUser adminUser=new AdminUser(name);
  11. return adminUser;
  12. }else{
  13. NormalUser normalUser=new NormalUser(name);
  14. return normalUser;
  15. }
  16. }
  17. public static void main(String[] args) {
  18. BookList bookList=new BookList();
  19. User user=login();
  20. while(true){
  21. int choice=user.menu();
  22. user.doIoperation(choice,bookList);
  23. }
  24. }
  25. }

通过主函数逻辑来整合我们写过的各个模块,从而实现最终功能。


总结

        从这个项目中我们可以看到,在父类User中实例化了iOperations对象,建立了一个以IOperation为元素的数组,接着在子类中按顺序建立创建好的功能接口,从而可以直接用下标来访问相应接口,这利用继承、多态、接口等思想,可谓是对面向对象思想的深度诠释。

那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。作者还是一个萌新,如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/923796
推荐阅读
相关标签
  

闽ICP备14008679号