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 criando o Sistema de Gerenciamento de Biblioteca, desenvolvendo um sistema adequado de empréstimos com uma classe Library que gerencia a coleção de livros e usuários. É aqui que seu sistema começa a parecer uma biblioteca de verdade: acompanhando quem está com cada item 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 todas as suas funcionalidades: isbn, title, author, isAvailable, borrowedBy, getDetails() e os getters/setters apropriados.
  • User.java: Mantenha sua classe User com id, name, o borrowedBooks ArrayList, 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 entre os livros e retorna o Book com o ISBN correspondente, ou null se não for encontrado.

    findUserById(String id) - pesquisa entre os 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 pegar o livro emprestado e imprime [userName] borrowed [bookTitle]. Se o livro não estiver disponível, imprima Book not available. Se o usuário ou o livro não for encontrado, imprima 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 o livro não for encontrado, imprima Invalid user or book.

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

    Crie uma Library, adicione os dois livros e registre o usuário. Em seguida, processe as operações: você receberá uma string separada por vírgulas, em que cada operação terá o formato borrow:userId:isbn ou return:userId:isbn.

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

Você receberá os dados de entrada nesta ordem: ISBN de book1, título de book1, autor de book1, ISBN de book2, título de book2, autor de book2, ID do usuário, nome do usuário e, por fim, 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 criação de métodos para desenvolver um sistema coeso. A classe Library atua como uma coordenadora, delegando a lógica efetiva de empréstimo às classes User e Book enquanto gerencia a coleção como um todo!

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 (separadas por vírgula, 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() conforme o caso
        
        // TODO: Imprimir resumo para cada livro no formato "[isbn]: [Available/Borrowed]"
    }
}

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

Pratique por conta própria: Compilador de Java online