1
resposta

[Projeto] Mudança no sistema.

Resolvi mesclar os estudos das variáveis de datas com os estudos de classes, invés de pegarmos a quantidade de dias de atraso "na mão" fiz uma regra de negocio através de datas, onde pega a data de retirada do pedido e calcula quantos dias se passaram para calcular o valor da multa.
(Coloquei um prazo de 2 dias para entrega do livro)
Tem algo que eu posso melhorar ou ajustar?
Main:

package br.com.atividade.nove;

public class Main {
    public static void main(String[] args) {
        Pedido pedido1 = new Pedido("Marco Aurélio","02/01/2026");
        pedido1.exibirDetalhes();
    }
}

Class Pedido:

package br.com.atividade.nove;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class Pedido {
    private String titulo;
    private LocalDate dataRetirada = LocalDate.now();
    private static final int PERIODO_DEVOLUCAO = 2;
    private static final double TAXA_ATRASO = 2.5;
    private LocalDate dataDevolucao;


    public Pedido(String titulo, String data) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        this.titulo = titulo;
        this.dataDevolucao = LocalDate.parse(data,formatter);
    }

    public int calcularDiasDePosse(){
        int dias = (int) ChronoUnit.DAYS.between(dataRetirada, dataDevolucao);
        return dias;
    }

public String formatarDatas(LocalDate data){
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    return data.format(formatter);
}

    public void exibirDetalhes(){

        if (calcularDiasDePosse()>PERIODO_DEVOLUCAO) {

            System.out.printf("""
                    Livro: %s
                    Dias de atraso: %d
                    Multa: %.2f
                    Dia da retirada: %s
                    Dia da devolução: %s
                    """, titulo, calcularDiasDePosse()-PERIODO_DEVOLUCAO, ((calcularDiasDePosse()-PERIODO_DEVOLUCAO) * TAXA_ATRASO),
                    formatarDatas(dataRetirada),formatarDatas(dataDevolucao));
        } else {
            System.out.printf("""
                    Livro: %s
                    Foi devolvido dentro do prazo.
                    """, titulo);
        }
    }
}

Retorno:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Dalton! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de LocalDate para manipular datas, utilizou muito bem o ChronoUnit para calcular intervalos e ainda compreendeu a importância de métodos auxiliares como formatarDatas para deixar a saída mais clara.

Uma dica interessante para o futuro é permitir que a data de retirada também seja passada no construtor, tornando o código mais flexível. Assim:

public Pedido(String titulo, String dataRetirada, String dataDevolucao) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    this.titulo = titulo;
    this.dataRetirada = LocalDate.parse(dataRetirada, formatter);
    this.dataDevolucao = LocalDate.parse(dataDevolucao, formatter);
}

Isso faz com que seja possível simular diferentes cenários de retirada e devolução sem depender apenas do LocalDate.now().

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!