《Java》图书管理系统

Posted Java冰激凌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Java》图书管理系统相关的知识,希望对你有一定的参考价值。

         这是一个对于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;
    

    @Override
    public 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用户类

我们要使用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);
    

AdminUser管理员

管理员要实现的功能为查找、新增、删除、打印、退出系统

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用户类,并且实现了管理员对应的功能

NormalUser普通用户 

 普通用户要实现的功能为查找、借阅、归还、退出系统

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);

FindOperation 查找图书

 我们此功能实现是非常简单的,保存好用户要查找的图书并且使用类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("没有找到你要查找的书");
    

 AddOperation添加图书

我们要给已存在的书架加入一本书,将新书存放到顺序表之后即可

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的值

 DelOperation删除图书

此功能的实现与查找类似,在查找的基础上增加了删除,需要用到的知识点为顺序表的删除,删除需要将后续的书前移,并且将最后一个置为 空

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<size-1)
                    Book tmp=booklist.getpos(i+1);
                    booklist.setBooks(i,tmp);
                    i++;
                
                booklist.setBooks(size,null);
                booklist.setBookSize(size-1);
                System.out.println("删除成功");
                return ;
            
        
        System.out.println("没有找到你要删除的图书");
    

 切记将书架的最后一位置为空避免泄露,需要注意到的还是要将bookSize的值进行修改

BorrowOperation借阅图书 

首先利用查找的原理找到我们要寻找的书,找到后修改其状态即可

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 <size ; i++) 
             Book book=booklist.getpos(i);
            if(name.equals(book.getName()))
                book.setBorrwed(true);
                System.out.println("借阅成功!");
                System.out.println(book);
                return ;
            
        
        System.out.println("没有此书");
    

需要注意的是记得将要借阅的书类型修改为true 

DisOperation 打印图书 

按照顺序表原理依次打印即可

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);
        
    

 RetOperation归还图书

 首先要查找书库是否存在此书,如果存在将其类型修改为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 <size ; i++) 
            Book book=booklist.getpos(i);
            if(name.equals(book.getName()))
                book.setBorrwed(false);
                System.out.println("归还成功!");
                System.out.println(book);
                return ;
            
        
        System.out.println("没有此书");
    

 ExitOperation退出系统

退出系统

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来进行优化,并且在代码实现中也有很多业务上的处理没有实现,后期将会进行修正,感谢大家的支持

以上是关于《Java》图书管理系统的主要内容,如果未能解决你的问题,请参考以下文章

Java语言------图书馆管理系统(入门简略版)

Java版本:图书管理系统

Java版本:图书管理系统

Xamarin 表单从另一个视图获取数据

求图书馆管理系统C++源代码

Java图书管理系统(菜鸟版)