Search code examples
javaarraysarraylistsystembluej

Library system - Borrowing a book


I've been working on a library system for a few weeks now, but have a problem whilst trying to initialize the "borrow" feature for the system. I would really appreciate if someone could help me out. Here is the code I have so far for the "borrow" feature.

Library class - includes faulty borrow

private List collection;

public Library()
{
    collection = new ArrayList<Book>();
}

public void addBook(Book book)
{
    collection.add(book);
}

public String searchTitle(String titleSearch) {
    if (titleSearch == null) return "\n No Books Avaliable ";
    for(int i = 0; i < collection.size(); i++){
        if(titleSearch.equalsIgnoreCase(collection.get(i).getTitle())){
            return collection.get(i).toString();
        }
    }
    return "\n No Books Avaliable "; //reachable only if no book found
}

public String toString()
{
    String total = "\n ";
    for (int i=0; i<collection.size(); i++)
    {
        Book b = collection.get(i);
        total = total + b.toString();
    }

    return total;
}
    public void borrowBook(String title) {
    int found = 0;
    for (Book b : collection) {
        if (collection.getTitle().equals(title)) {
            if (found == 0) {
                found = 1;
                }
            if (!book.isBorrowed()) {
                book.borrowed();
                found = 2;
                break;
            };
        }
    }
    if (found == 0) {
        System.out.println("Sorry, this book is not in our catalog.");
    } else if (found == 1) {
        System.out.println("Sorry, this book is already borrowed.");
    } else if (found == 2) {
        System.out.println("You successfully borrowed " + title);
    }
}

}

This is the Book class

public Book(int isbn, String author, String title, String genre, int  
 numcopies)
{

    this.isbn = isbn;
    this.author = author;
    this.title = title;
    this.genre = genre;
    this.numcopies = numcopies;


}

public int getISBN()
{
    return isbn;
}
public String getAuthor()
{
    return author;
}
public String getTitle()
{
    return title;
}
public String getGenre()
{
    return genre;
}
public String toString()
{
    return "\nISBN: " +isbn + "\nAuthor: " +author + "\nTitle: " +title + 
  "\nGenre: " +genre + "\nNumber Of Copies " +numcopies +"\n ";
}

}


Solution

  • Change your borrowBook method as

     public void borrowBook(String title) 
     {
        int found = 0;
        for (Book b : collection) 
        {
            if (b.getTitle().equals(title)) 
            {
               if (found == 0) 
        {
                found = 1;
            }
            if (!b.isBorrowed()) 
        {
                b.borrowed=true;
                found = 2;
                break;
            }
        }
    }
        if (found == 0) {
            System.out.println("Sorry, this book is not in our catalog.");
        } else if (found == 1) {
            System.out.println("Sorry, this book is already borrowed.");
        } else if (found == 2) {
            System.out.println("You successfully borrowed " + title);
        }
    }
    

    and add boolean borrowed variable and boolean isBorrowed() method to Book class where isBorrowed() will just return the value of borrowed variable.