Menu
Coddy logo textTech

Classes Livro e Usuário

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 78 de 87.

challenge icon

Desafio

Fácil

Vamos continuar construindo o Sistema de Gerenciamento de Biblioteca expandindo as classes Book e User da lição anterior. Agora você adicionará a capacidade de os usuários pegarem livros emprestados, criando uma conexão real entre essas duas entidades.

Você organizará seu código em três arquivos:

  • Book.java: Aprimore sua classe Book do desafio anterior. Mantenha toda a funcionalidade existente (isbn, title, author, isAvailable com getters/setters e getDetails()). Agora adicione um campo privado borrowedBy do tipo String que armazena o ID do usuário que pegou o livro emprestado (ou null se não estiver emprestado). Adicione um getter para borrowedBy e um setter que também atualize isAvailable adequadamente—quando um livro é emprestado (borrowedBy é definido com um valor não nulo), ele se torna indisponível; quando devolvido (definido como null), ele se torna disponível novamente.
  • User.java: Expanda sua classe User para rastrear livros emprestados. Mantenha os campos id, name, construtor, getters e toString() existentes. Adicione um campo privado ArrayList<Book> chamado borrowedBooks (inicialize-o no construtor). Crie um método borrowBook(Book book) que adiciona o livro à lista do usuário e define o borrowedBy do livro como o ID deste usuário. Crie um método returnBook(Book book) que remove o livro da lista e define borrowedBy como null. Adicione um método getBorrowedCount() que retorna quantos livros o usuário possui atualmente.
  • Main.java: Demonstre o sistema de empréstimo em ação. Você receberá cinco entradas: ISBN, título, autor de um livro, e depois o ID e o nome do usuário.

    Crie um Book e um User com essas entradas. Imprima os detalhes do livro e o status de disponibilidade. Em seguida, faça o usuário pegar o livro emprestado. Imprima a disponibilidade do livro novamente, seguida por quem o pegou emprestado no formato Borrowed by: [userId]. Imprima quantos livros o usuário possui no formato [name] has [count] book(s). Por fim, faça o usuário devolver o livro e imprima a disponibilidade mais uma vez.

Você receberá cinco entradas em ordem: ISBN (String), title (String), author (String), user ID (String) e user name (String).

Por exemplo, com as entradas 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 e Alice, sua saída seria:

[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: true

Este desafio baseia-se diretamente no seu trabalho anterior, adicionando o relacionamento crucial entre livros e usuários que torna um sistema de biblioteca funcional. Você usará composição (User "tem" Books) e verá como as mudanças em um objeto podem afetar outro por meio de métodos bem projetados!

Experimente você mesmo

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler informações do livro
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // Ler informações do usuário
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Criar um objeto Book com isbn, title e author
        Book book = new Book(isbn, title, author);
        
        // Criar um objeto User com userId e userName
        User user = new User(userId, userName);
        
        // Imprimir os detalhes do livro usando getDetails()
        System.out.println(book.getDetails());
        
        // Imprimir se o livro está disponível (formato: "Available: true" ou "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // Fazer o usuário pegar o livro emprestado
        user.borrowBook(book);
        
        // Imprimir a disponibilidade do livro novamente
        System.out.println("Available: " + book.isAvailable());
        
        // Imprimir quem o pegou emprestado
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // Imprimir quantos livros o usuário possui
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // Fazer o usuário devolver o livro
        user.returnBook(book);
        
        // Imprimir a disponibilidade mais uma vez
        System.out.println("Available: " + book.isAvailable());
    }
}

Todas as lições de Programação Orientada a Objetos