Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Resolução do desafio

Tomando os desafios como uma parte essencial da formação, deixo abaixo minha ideia de resolução:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class CartaoDeCredito {
    private String nomeTitular;
    private double limite;
    private double saldo;
    private List<Produto> compras = new ArrayList<>();

    public CartaoDeCredito (String nomeTitular, double limite) {
        this.nomeTitular = nomeTitular;
        this.limite = limite;
        this.saldo = limite;
    }

    public void comprar (Produto produto) {
        if (saldo >= produto.getPreco()) {
            saldo -= produto.getPreco();
            compras.add(produto);
            System.out.println("Produto adquirido. \nParabéns pela compra!\n");
        } else {
            System.err.printf("Saldo insuficiente. \nSaldo disponível: %.2f \nValor da compra: %.2f\n", saldo,
                    produto.getPreco());
        }
    }
    public void ordenarPorNome () {
        compras.sort(Comparator.comparing(Produto::getDescricao));
    }
    public void listaDeCompras () {
        if (compras.isEmpty()) {
            System.err.println("NENHUMA COMPRA FOI REALIZADA");
        } else {
            ordenarPorNome();
            System.out.println("*----Lista de compras ----*");
            for (Produto produto : this.compras) {
                System.out.println(produto + "\n");
            }
        }
    }
    public void verificarSaldo () {
        System.out.printf("Saldo disponível: %.2f \n", getSaldo());
    }
    public String getNomeTitular () {
        return nomeTitular;
    }
    public double getLimite () {
        return limite;
    }
    public double getSaldo () {
        return saldo;
    }
}
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Produto {
    private String descricao;
    private float preco;
    private static List<Produto> produtosDisponiveis = new ArrayList<>();

    static {
        produtosDisponiveis.add(new Produto("Camiseta", 29.99f));
        produtosDisponiveis.add(new Produto("Calça Jeans", 59.99f));
        produtosDisponiveis.add(new Produto("Tênis", 99.99f));
        produtosDisponiveis.add(new Produto("Relógio", 149.99f));
        produtosDisponiveis.add(new Produto("Mochila", 79.99f));
    }

    public Produto (String descricao, float preco) {
        this.descricao = descricao;
        this.preco = preco;
    }

    public Produto () {
    }

    public String getDescricao () {
        return descricao;
    }

    public double getPreco () {
        return preco;
    }

    public void ordenarPorNome() {
        produtosDisponiveis.sort(Comparator.comparing(Produto::getDescricao));
    }

    public void listarProdutos() {
        System.out.println("*---- Lista de produtos disponíveis ----*");
        ordenarPorNome();
        for (Produto produto : produtosDisponiveis) {
            System.out.printf("Produto %d:\n%s: %.2f \n", produtosDisponiveis.indexOf(produto), produto.getDescricao()
                    , produto.getPreco());
        }
    }
    @Override
    public String toString () {
        return "Produto: " + descricao + "\n" +
                "Preço: " + preco + "\n";
    }
}
2 respostas
solução!
import java.util.Scanner;

public class Menu {

    public void apresentarMenu(){
        Scanner input = new Scanner(System.in);
        int opcao = 0;
        CartaoDeCredito cartao = null;

        Produto p1 = new Produto("Camiseta", 29.99f);
        Produto p2 = new Produto("Calça Jeans", 59.99f);
        Produto p3 = new Produto("Tênis", 99.99f);
        Produto p4 = new Produto("Relógio", 149.99f);
        Produto p5 = new Produto("Mochila", 79.99f);
        Produto lista = new Produto();

        System.out.println("***** Boas vindas às compras! *****");
        while (opcao != -1){
            System.out.println("O que você deseja fazer? \n1- Adicionar cartão\n2-Comprar um novo produto\n" +
                    "3- Verificar os produtos existentes\n4- Verificar saldo do cartão\n5- Listar compras\n6- Sair");
            opcao = input.nextInt();
            switch (opcao){
                case 1:
                    System.out.println("Para adicionar o cartão informe o nome do titular e seu saldo");
                    System.out.println("Informe o nome do titular \n");
                    String nome = input.next();
                    input.nextLine(); // Consumir quebra de linha pendente
                    System.out.println("Informe o saldo do cartão \n");
                    double saldo = input.nextDouble();
                    cartao = new CartaoDeCredito(nome, saldo);
                    break;
                case 2:
                    System.out.println("Ok, vamos listar os produtos e você poderá comprá-los");
                    lista.listarProdutos();
                    System.out.println("Agora, informe o produto a ser comprado");
                    String produto = input.next();

                    if (cartao != null){
                        switch (produto.toUpperCase()){
                            case "CAMISETA":
                                cartao.comprar(p1);
                                break;

                            case "CALÇA JEANS":
                                cartao.comprar(p2);
                                break;

                            case "TÊNIS":
                                cartao.comprar(p3);
                                break;

                            case "TENIS":
                                cartao.comprar(p3);
                                break;

                            case "RELÔGIO":
                                cartao.comprar(p4);
                                break;

                            case "RELOGIO":
                                cartao.comprar(p4);
                                break;

                            case "MOCHILA":
                                cartao.comprar(p5);
                                break;

                            default:
                                System.err.println("INFORME UM PRODUTO VÁLIDO");
                                break;
                        }
                    } else {
                        System.err.println("CARTÃO NÃO ADICIONADO, RETORNAMOS AO MENU PARA VOCê ADICIONAR");
                        break;
                    }
                    break;
                case 3:
                    lista.listarProdutos();
                    break;
                case 4:
                    if (cartao != null){
                        cartao.verificarSaldo();
                        break;
                    } else System.err.println("CARTÃO NÃO ADICIONADO");
                    break;

                case 5:
                    if (cartao != null){
                        cartao.listaDeCompras();
                        break;
                    } else System.err.println("CARTÃO NÃO ADICIONADO");
                    break;
                case 6:
                    System.out.println("Até mais!");
                    opcao = -1;
                    input.close();
                    break;

                default:
                    System.out.println("Informe uma opção válida");
            }
        }
    }
}
public class Main {

    public static void main (String[] args) {
        Menu menu = new Menu();

        menu.apresentarMenu();
    }
}

Olá Maria, tudo bem?

Parabéns pela resolução do desafio! Sua implementação demonstra um entendimento sólido dos conceitos abordados no curso e uma excelente habilidade em modelar as classes da aplicação de forma eficiente e organizada.

Destaco especialmente sua estruturação do código em classes separadas, o que promove uma melhor organização e modularidade do seu projeto. Além disso, a utilização de listas para armazenar os produtos disponíveis e as compras realizadas é uma escolha muito adequada, facilitando a manipulação e o gerenciamento dos dados.

A implementação do menu interativo, utilizando a classe Scanner, é uma excelente forma de interagir com o usuário e tornar a experiência mais intuitiva. A maneira como você tratou cada opção do menu de forma clara e concisa mostra sua habilidade em desenvolver soluções funcionais e user-friendly.

Continue assim, explorando e aprimorando suas habilidades em programação Java.

Um abraço e bons estudos.