From d34cc67aeca308eb4bf794f4df52fd521a04c909 Mon Sep 17 00:00:00 2001 From: Sugue Date: Thu, 7 Sep 2023 17:25:28 -0300 Subject: [PATCH] ResolucaoProblema --- .../laboojava/console/Start.java | 20 +++-- .../laboojava/entidade/Caderno.java | 55 +++++++++++++ .../laboojava/entidade/Pedido.java | 79 +++++++++++++++++-- .../laboojava/entidade/Produto.java | 18 ++--- .../entidade/constantes/Materias.java | 23 ++++++ .../laboojava/negocio/PedidoNegocio.java | 53 +++++++++---- .../laboojava/negocio/ProdutoNegocio.java | 42 ++++++++-- .../laboojava/utilidade/LeitoraDados.java | 39 +++++++-- 8 files changed, 277 insertions(+), 52 deletions(-) create mode 100644 src/one/digitalinovation/laboojava/entidade/Caderno.java create mode 100644 src/one/digitalinovation/laboojava/entidade/constantes/Materias.java diff --git a/src/one/digitalinovation/laboojava/console/Start.java b/src/one/digitalinovation/laboojava/console/Start.java index edaa3b2..4ce4767 100755 --- a/src/one/digitalinovation/laboojava/console/Start.java +++ b/src/one/digitalinovation/laboojava/console/Start.java @@ -11,6 +11,7 @@ /** * Classe responsável por controlar a execução da aplicação. + * * @author thiago leite */ public class Start { @@ -25,6 +26,7 @@ public class Start { /** * Método utilitário para inicializar a aplicação. + * * @param args Parâmetros que podem ser passados para auxiliar na execução. */ public static void main(String[] args) { @@ -33,7 +35,7 @@ public static void main(String[] args) { String opcao = ""; - while(true) { + while (true) { if (clienteLogado == null) { @@ -48,13 +50,13 @@ public static void main(String[] args) { System.out.println("Selecione uma opção:"); System.out.println("1 - Cadastrar Livro"); System.out.println("2 - Excluir Livro"); - //TODO Desafio: Consultar Livro(nome) + // TODO Desafio: Consultar Livro(nome) System.out.println("3 - Cadastrar Caderno"); System.out.println("4 - Excluir Caderno"); - //TODO Desafio: Consultar Caderno(matéria) + // TODO Desafio: Consultar Caderno(matéria) System.out.println("5 - Fazer pedido"); System.out.println("6 - Excluir pedido"); - //TODO Desafio: Consultar Pedido(código) + // TODO Desafio: Consultar Pedido(código) System.out.println("7 - Listar produtos"); System.out.println("8 - Listar pedidos"); System.out.println("9 - Deslogar"); @@ -73,10 +75,13 @@ public static void main(String[] args) { produtoNegocio.excluir(codigoLivro); break; case "3": - //TODO Cadastrar Caderno + Caderno caderno = LeitoraDados.lerCaderno(); + produtoNegocio.salvar(caderno); break; case "4": - //TODO Excluir Caderno + System.out.println("Digite o código do caderno"); + String codigoCaderno = LeitoraDados.lerDado(); + produtoNegocio.excluir(codigoCaderno); break; case "5": Pedido pedido = LeitoraDados.lerPedido(banco); @@ -97,7 +102,7 @@ public static void main(String[] args) { produtoNegocio.listarTodos(); break; case "8": - //TODO Listar todos os Pedidos + pedidoNegocio.listarTodosPedidos(); break; case "9": System.out.println(String.format("Volte sempre %s!", clienteLogado.getNome())); @@ -116,6 +121,7 @@ public static void main(String[] args) { /** * Procura o usuário na base de dados. + * * @param cpf CPF do usuário que deseja logar na aplicação */ private static void identificarUsuario(String cpf) { diff --git a/src/one/digitalinovation/laboojava/entidade/Caderno.java b/src/one/digitalinovation/laboojava/entidade/Caderno.java new file mode 100644 index 0000000..b355c26 --- /dev/null +++ b/src/one/digitalinovation/laboojava/entidade/Caderno.java @@ -0,0 +1,55 @@ +package one.digitalinovation.laboojava.entidade; + +import one.digitalinovation.laboojava.entidade.constantes.Materias; + +public class Caderno extends Produto { + + private Materias tipo; + + public Materias getTipo() { + return tipo; + } + + public void setTipo(String a) { + + Materias tipo = getTipo(); + + switch (a) { + case "M2": + tipo = Materias.M2; + break; + case "M5": + tipo = Materias.M5; + break; + case "M10": + tipo = Materias.M10; + break; + default: + + System.out.println("Quantidade inválida!"); + return; + + + } + + this.tipo = tipo; + } + + /** + * {@inheritDoc}. + */ + @Override + public double calcularFrete() { + return (getPreco() * getQuantidade()) * (1 + tipo.getFator()); + } + + @Override + public String toString() { + return "Caderno{" + + "Tipo='" + tipo.name() + '\'' + + ", codigo='" + getCodigo() + '\'' + + ", preço='" + getPreco() + '\'' + + '}'; + } + +} diff --git a/src/one/digitalinovation/laboojava/entidade/Pedido.java b/src/one/digitalinovation/laboojava/entidade/Pedido.java index dd66e7c..899f406 100755 --- a/src/one/digitalinovation/laboojava/entidade/Pedido.java +++ b/src/one/digitalinovation/laboojava/entidade/Pedido.java @@ -4,15 +4,82 @@ import java.util.List; /** - * Classe que representa a entidade pedido, qual é a compra dos produtos por um cliente. + * Classe que representa a entidade pedido, qual é a compra dos produtos por um + * cliente. + * * @author thiago leite */ public class Pedido { - //TODO Preencher esta classe + private String codigo; + private Cliente cliente; + private List produtos; + private Double total; + + public Pedido() { // cosntrutor + + this.produtos = new ArrayList<>(); + } + + public void setCodigo(String codigo) { + this.codigo = codigo; + } + + public void setCliente(Cliente cliente) { + this.cliente = cliente; + } + + public void setProdutos(List list) { + produtos = list; + } + + public void setTotal(Double total) { + this.total = total; + } + + public String getCodigo() { + return codigo; + } + + public Cliente getCliente() { + return cliente; + } + + public List getProdutos() { + return produtos; + } + + public Double getTotal() { + return total; + } + + public String getProdutosComprados() { + + StringBuilder produtos = new StringBuilder(); + produtos.append("["); + for (Produto produto : getProdutos()) { + produtos.append(produto.toString()); + produtos.append("Qtd:"); + produtos.append(produto.getQuantidade()); + produtos.append(" "); + + } + produtos.append("] "); + return produtos.toString(); + + } + + @Override + public String toString() { + return "Pedido{" + + "codigo='" + codigo + '\'' + + ", cliente=" + cliente + + ", produtos=" + getProdutosComprados() + + ", total=" + total + + '}'; + + } + + - //codigo - //cliente - //produtos - //total } diff --git a/src/one/digitalinovation/laboojava/entidade/Produto.java b/src/one/digitalinovation/laboojava/entidade/Produto.java index 0de5a60..b7d5470 100755 --- a/src/one/digitalinovation/laboojava/entidade/Produto.java +++ b/src/one/digitalinovation/laboojava/entidade/Produto.java @@ -1,7 +1,9 @@ package one.digitalinovation.laboojava.entidade; /** - * Classe que representa a abstração dos produtos que podem ser vendidos pela loja. + * Classe que representa a abstração dos produtos que podem ser vendidos pela + * loja. + * * @author thiago leite */ public abstract class Produto { @@ -21,7 +23,8 @@ public abstract class Produto { */ private int quantidade; - public Produto() {} + public Produto() { + } public String getCodigo() { return codigo; @@ -47,10 +50,7 @@ public void setQuantidade(int quantidade) { this.quantidade = quantidade; } - /** - * Calcula o preço do frete para os produtos comprados. Este cálculo pode - * variar de acordo com o produto - * @return valor do frete para o determinado produto - */ - //TODO Método de cálculo de frete -} + public abstract double calcularFrete(); + + +} \ No newline at end of file diff --git a/src/one/digitalinovation/laboojava/entidade/constantes/Materias.java b/src/one/digitalinovation/laboojava/entidade/constantes/Materias.java new file mode 100644 index 0000000..c506362 --- /dev/null +++ b/src/one/digitalinovation/laboojava/entidade/constantes/Materias.java @@ -0,0 +1,23 @@ + +package one.digitalinovation.laboojava.entidade.constantes; + +public enum Materias { + + M2(2), + + M5(3), + + M10(5); + + private double mult; + + + Materias(double mult) { + this.mult = mult / 100; + } + + public double getFator() { + return mult; + } + +} diff --git a/src/one/digitalinovation/laboojava/negocio/PedidoNegocio.java b/src/one/digitalinovation/laboojava/negocio/PedidoNegocio.java index 9db032f..e133027 100755 --- a/src/one/digitalinovation/laboojava/negocio/PedidoNegocio.java +++ b/src/one/digitalinovation/laboojava/negocio/PedidoNegocio.java @@ -10,6 +10,7 @@ /** * Classe para manipular a entidade {@link Pedido}. + * * @author thiago leite */ public class PedidoNegocio { @@ -21,6 +22,7 @@ public class PedidoNegocio { /** * Construtor. + * * @param banco Banco de dados para ter armazenar e ter acesso os pedidos */ public PedidoNegocio(Banco banco) { @@ -30,20 +32,21 @@ public PedidoNegocio(Banco banco) { private double calcularTotal(List produtos, Cupom cupom) { double total = 0.0; - for (Produto produto: produtos) { + for (Produto produto : produtos) { total += produto.calcularFrete(); } if (cupom != null) { - return total * (1 - cupom.getDesconto()); + return total * (1 - cupom.getDesconto()); } else { - return total; + return total; } } /** * Salva um novo pedido sem cupom de desconto. + * * @param novoPedido Pedido a ser armazenado */ public void salvar(Pedido novoPedido) { @@ -52,24 +55,31 @@ public void salvar(Pedido novoPedido) { /** * Salva um novo pedido com cupom de desconto. + * * @param novoPedido Pedido a ser armazenado - * @param cupom Cupom de desconto a ser utilizado + * @param cupom Cupom de desconto a ser utilizado */ public void salvar(Pedido novoPedido, Cupom cupom) { - //Definir padrão código - //Pegar data do dia corrente - //Formatar código - - //Setar código no pedido - //Setar cliente no pedido - //Calcular e set total - //Adicionar no banco - //Mensagem + String codigo = "PE%4D%2D%04d"; + LocalDate hoje = LocalDate.now(); + codigo = String.format(codigo, hoje.getYear(), hoje.getMonthValue(), bancoDados.getPedidos().length); + + // Setar código no pedido + novoPedido.setCodigo(codigo); + // Setar cliente no pedido + novoPedido.setCliente(bancoDados.getCliente()); + // Calcular e set total + novoPedido.setTotal(calcularTotal(novoPedido.getProdutos(), cupom)); + // Adicionar no banco + bancoDados.adicionarPedido(novoPedido); + // Mensagem + System.out.println("Pedido salvo com sucesso"); } /** * Exclui um pedido a partir de seu código de rastreio. + * * @param codigo Código do pedido */ public void excluir(String codigo) { @@ -92,9 +102,18 @@ public void excluir(String codigo) { } } - /** - * Lista todos os pedidos realizados. - */ - //TODO Método de listar todos os pedidos + public void listarTodosPedidos() { + + if (bancoDados.getPedidos().length == 0) { + System.out.println("Não existem pedidos cadastrados"); + } else { + + for (Pedido pedido : bancoDados.getPedidos()) { + System.out.println(pedido.toString()); + } + } + } + + } diff --git a/src/one/digitalinovation/laboojava/negocio/ProdutoNegocio.java b/src/one/digitalinovation/laboojava/negocio/ProdutoNegocio.java index 0cbb1e6..9ab4fcc 100755 --- a/src/one/digitalinovation/laboojava/negocio/ProdutoNegocio.java +++ b/src/one/digitalinovation/laboojava/negocio/ProdutoNegocio.java @@ -5,8 +5,11 @@ import java.util.Optional; +import javax.lang.model.util.ElementScanner14; + /** * Classe para manipular a entidade {@link Produto}. + * * @author thiago leite */ public class ProdutoNegocio { @@ -18,6 +21,7 @@ public class ProdutoNegocio { /** * Construtor. + * * @param banco Banco de dados para ter armazenar e ter acesso os produtos */ public ProdutoNegocio(Banco banco) { @@ -26,6 +30,7 @@ public ProdutoNegocio(Banco banco) { /** * Salva um novo produto(livro ou caderno) na loja. + * * @param novoProduto Livro ou caderno que pode ser vendido */ public void salvar(Produto novoProduto) { @@ -35,8 +40,12 @@ public void salvar(Produto novoProduto) { novoProduto.setCodigo(codigo); boolean produtoRepetido = false; - for (Produto produto: bancoDados.getProdutos()) { - if (produto.getCodigo() == novoProduto.getCodigo()) { + for (Produto produto : bancoDados.getProdutos()) { + + // o método .equals é utilizado para a comparação de objetos + // o operador == é usado para a comparação de tipos primitivos (int, double, + // etc...) + if (produto.getCodigo().equals(novoProduto.getCodigo())) { produtoRepetido = true; System.out.println("Produto já cadastrado."); break; @@ -51,23 +60,44 @@ public void salvar(Produto novoProduto) { /** * Exclui um produto pelo código de cadastro. + * * @param codigo Código de cadastro do produto */ public void excluir(String codigo) { - //TODO Implementar a exclusão + int produtoExclusao = -1; + for (int i = 0; i < bancoDados.getProdutos().length; i++) { + + Produto produto = bancoDados.getProdutos()[i]; + if (produto.getCodigo().equals(codigo)) { + produtoExclusao = i; + break; + } + + } + + if (produtoExclusao != -1) { //TODO melhore o codigo + + bancoDados.removerProduto(produtoExclusao); + System.out.println("Produto excluido com sucesso!"); + + }else + { + System.out.println("Produto inexistente!"); + } } /** * Obtem um produto a partir de seu código de cadastro. + * * @param codigo Código de cadastro do produto * @return Optional indicando a existência ou não do Produto */ public Optional consultar(String codigo) { - for (Produto produto: bancoDados.getProdutos()) { + for (Produto produto : bancoDados.getProdutos()) { if (produto.getCodigo().equalsIgnoreCase(codigo)) { - return Optional.of(produto); + return Optional.of(produto); } } @@ -83,7 +113,7 @@ public void listarTodos() { System.out.println("Não existem produtos cadastrados"); } else { - for (Produto produto: bancoDados.getProdutos()) { + for (Produto produto : bancoDados.getProdutos()) { System.out.println(produto.toString()); } } diff --git a/src/one/digitalinovation/laboojava/utilidade/LeitoraDados.java b/src/one/digitalinovation/laboojava/utilidade/LeitoraDados.java index a4a2d65..e60a513 100755 --- a/src/one/digitalinovation/laboojava/utilidade/LeitoraDados.java +++ b/src/one/digitalinovation/laboojava/utilidade/LeitoraDados.java @@ -3,9 +3,11 @@ import one.digitalinovation.laboojava.basedados.Banco; import one.digitalinovation.laboojava.entidade.Pedido; import one.digitalinovation.laboojava.entidade.Livro; +import one.digitalinovation.laboojava.entidade.Caderno; import one.digitalinovation.laboojava.entidade.Produto; import one.digitalinovation.laboojava.entidade.Cupom; import one.digitalinovation.laboojava.entidade.constantes.Genero; +import one.digitalinovation.laboojava.entidade.constantes.Materias; import one.digitalinovation.laboojava.negocio.ProdutoNegocio; import java.util.Optional; @@ -13,6 +15,7 @@ /** * Classe utilitária para auxiliar na leitura de entradas de dados via teclado. + * * @author thiago leite */ public final class LeitoraDados { @@ -21,24 +24,26 @@ public final class LeitoraDados { * Classe do Java para manipular entradas via teclado. */ private static Scanner scanner; - + static { scanner = new Scanner(System.in); } /** * Ler um dado específico + * * @return Dado lido */ public static String lerDado() { - + String texto = scanner.nextLine(); - + return texto; } /** * Ler os dados do livro a ser cadastrado. + * * @return Um livro a partir dos dados de entrada */ public static Livro lerLivro() { @@ -63,12 +68,30 @@ public static Livro lerLivro() { /** * Ler os dados do caderno a ser cadastrado. + * * @return Um caderno a partir dos dados de entrada */ - //TODO Método para ler o caderno + public static Caderno lerCaderno() { + + System.out.println("Cadastrando Caderno..."); + Caderno caderno = new Caderno(); + + System.out.println("Digite a quanditade de matérias M2, M5 ou M10"); + + String materia = lerDado().toUpperCase(); + caderno.setTipo(materia); + + + System.out.println("Digite o preço(padrão 0.0)"); + String preco = lerDado(); + caderno.setPreco(Double.parseDouble(preco)); + + return caderno; + } /** * Ler os dados do pedido e retorna um objeto a partir destes. + * * @return Um pedido a partir dos dados de entrada */ public static Pedido lerPedido(Banco banco) { @@ -100,22 +123,24 @@ public static Pedido lerPedido(Banco banco) { System.out.println("Deseja selecionar mais um produto? s/n"); opcao = lerDado(); - } while("s".equals(opcao)); + } while ("s".equals(opcao)); return pedido; } /** * Ler os dados do cupom e retorna um objeto a partir destes. + * * @return O cupom a partir dos dados de entrada */ public static Optional lerCupom(Banco banco) { - System.out.println("Caso queira utilizar algum cupom escolha entre: CUPOM2, CUPOM5, CUPOM7. Se não desejar, deixe em branco."); + System.out.println( + "Caso queira utilizar algum cupom escolha entre: CUPOM2, CUPOM5, CUPOM7. Se não desejar, deixe em branco."); String desconto = lerDado(); - for (Cupom cupom: banco.getCupons()) { + for (Cupom cupom : banco.getCupons()) { if (cupom.getCodigo().equalsIgnoreCase(desconto)) { return Optional.of(cupom); }