Menu
Coddy logo textTech

Sistema de Empréstimos

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

challenge icon

Desafio

Fácil

Vamos continuar construindo o Sistema de Gerenciamento de Biblioteca criando um sistema de empréstimo adequado com uma classe Library que gerencia a coleção de livros e usuários. É aqui que seu sistema começa a parecer uma biblioteca real — rastreando quem está com o quê e aplicando as regras de empréstimo!

Você organizará seu código em quatro arquivos:

  • Book.java: Mantenha sua classe Book do desafio anterior com toda a sua funcionalidade — isbn, title, author, isAvailable, borrowedBy, getDetails() e os getters/setters apropriados.
  • User.java: Mantenha sua classe User com id, name, o ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() e toString().
  • Library.java: Crie a classe central Library que gerencia tudo. Sua biblioteca deve manter dois ArrayLists — um para objetos Book e outro para objetos User. Inclua estes métodos:

    addBook(Book book) - adiciona um livro à coleção da biblioteca.

    registerUser(User user) - adiciona um usuário aos usuários registrados da biblioteca.

    findBookByIsbn(String isbn) - pesquisa nos livros e retorna o Book com o ISBN correspondente, ou null se não for encontrado.

    findUserById(String id) - pesquisa nos usuários e retorna o User com o ID correspondente, ou null se não for encontrado.

    borrowBook(String userId, String isbn) - encontra o usuário e o livro, então, se ambos existirem e o livro estiver disponível, faz o usuário emprestar o livro e imprime [userName] borrowed [bookTitle]. Se o livro não estiver disponível, imprime Book not available. Se o usuário ou livro não for encontrado, imprime Invalid user or book.

    returnBook(String userId, String isbn) - encontra o usuário e o livro, então faz o usuário devolver o livro e imprime [userName] returned [bookTitle]. Se o usuário ou livro não for encontrado, imprime Invalid user or book.

  • Main.java: Reúna seu sistema de biblioteca! Você receberá entradas para dois livros (ISBN, título, autor cada), um usuário (ID, nome) e, em seguida, uma série de operações.

    Crie uma Library, adicione ambos os livros e registre o usuário. Em seguida, processe as operações — você receberá uma string separada por vírgulas onde cada operação é formatada como borrow:userId:isbn ou return:userId:isbn.

    Após processar todas as operações, imprima um resumo mostrando o status de cada livro no formato [isbn]: [Available/Borrowed].

Você receberá as entradas nesta ordem: book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, user ID, user name e, finalmente, a string de operações.

Por exemplo, com as entradas ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice, e borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001, sua saída seria:

Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed

Este desafio reúne composição, encapsulamento e design de métodos para criar um sistema coeso. A classe Library atua como uma coordenadora, delegando a lógica real de empréstimo para as classes User e Book enquanto gerencia a coleção geral!

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 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Ler informações do livro 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Ler informações do usuário
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Ler string de operações (separada por vírgulas, formato: borrow:userId:isbn ou return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: Criar objetos Book para book1 e book2
        
        // TODO: Criar um objeto User
        
        // TODO: Criar uma Library, adicionar ambos os livros e registrar o usuário
        
        // TODO: Dividir operationsStr por "," e processar cada operação
        //       Para cada operação, dividir por ":" para obter action, userId, isbn
        //       Chamar library.borrowBook() ou library.returnBook() adequadamente
        
        // TODO: Imprimir o resumo de cada livro no formato "[isbn]: [Available/Borrowed]"
    }
}

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