Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions avaliacoes/restaurante/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.restaurante</groupId>
<artifactId>restaurante</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>

</project>
253 changes: 253 additions & 0 deletions avaliacoes/restaurante/src/main/java/com/restaurante/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
package com.restaurante;

import com.restaurante.controllers.cliente.*;
import com.restaurante.controllers.funcionario.*;
import com.restaurante.controllers.mesa.*;
import com.restaurante.controllers.produto.*;
import com.restaurante.controllers.endereco.*;
import com.restaurante.model.Endereco;

import java.util.List;
import java.util.Scanner;

/**
* Classe principal da aplicação Restaurante.
*
* Exibe um menu interativo no console para o usuário gerenciar Clientes, Funcionários, Mesas, Produtos e Endereços.
* Utiliza controllers específicos para realizar operações de criação, listagem, busca e remoção.
* Mantém uma lista compartilhada de endereços em memória para facilitar operações relacionadas a Endereço.
*
* A aplicação encerra quando o usuário escolhe a opção 0.
*
*/
public class Main {

/**
* Ponto de entrada da aplicação.
* Inicializa controllers, lista de endereços e controla o menu principal de opções.
*
* @param args argumentos de linha de comando (não utilizados)
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

// Instancia controllers
CreateClienteController createCliente = new CreateClienteController();
DeleteClienteController deleteCliente = new DeleteClienteController();
SearchClienteController searchCliente = new SearchClienteController();

CreateFuncionarioController createFuncionario = new CreateFuncionarioController();
DeleteFuncionarioController deleteFuncionario = new DeleteFuncionarioController();
SearchFuncionarioController searchFuncionario = new SearchFuncionarioController();

CreateMesaController createMesa = new CreateMesaController();
DeleteMesaController deleteMesa = new DeleteMesaController();
SearchMesaController searchMesa = new SearchMesaController();

CreateProdutoController createProduto = new CreateProdutoController();
DeleteProdutoController deleteProduto = new DeleteProdutoController();
SearchProdutoController searchProduto = new SearchProdutoController();

CreateEnderecoController createEndereco = new CreateEnderecoController();
DeleteEnderecoController deleteEndereco = new DeleteEnderecoController();
SearchEnderecoController searchEndereco = new SearchEnderecoController();

// Carrega lista compartilhada de endereços
List<Endereco> listaEnderecos = createEndereco.listarEnderecos();

int opcao = -1;
while (opcao != 0) {
System.out.println("\n--- MENU PRINCIPAL ---");
System.out.println("1. Cliente");
System.out.println("2. Funcionário");
System.out.println("3. Mesa");
System.out.println("4. Produto");
System.out.println("5. Endereço");
System.out.println("0. Sair");
System.out.print("Escolha uma opção: ");
opcao = Integer.parseInt(scanner.nextLine());

switch (opcao) {
case 1 -> menuCliente(scanner, createCliente, deleteCliente, searchCliente, listaEnderecos);
case 2 -> menuFuncionario(scanner, createFuncionario, deleteFuncionario, searchFuncionario, listaEnderecos);
case 3 -> menuMesa(scanner, createMesa, deleteMesa, searchMesa);
case 4 -> menuProduto(scanner, createProduto, deleteProduto, searchProduto);
case 5 -> menuEndereco(scanner, createEndereco, deleteEndereco, searchEndereco, listaEnderecos);
case 0 -> System.out.println("Saindo...");
default -> System.out.println("Opção inválida.");
}
}

scanner.close();
}

/**
* Menu de operações para a entidade Cliente.
*
* @param scanner Scanner para entrada do usuário
* @param c Controller de criação de cliente
* @param d Controller de remoção de cliente
* @param s Controller de busca/listagem de cliente
* @param listaEnderecos Lista compartilhada de endereços para associar clientes
*/
private static void menuCliente(Scanner scanner,
CreateClienteController c,
DeleteClienteController d,
SearchClienteController s,
List<Endereco> listaEnderecos) {
System.out.println("\n--- CLIENTE ---");
System.out.println("1. Cadastrar");
System.out.println("2. Listar");
System.out.println("3. Remover");
System.out.print("Escolha: ");
int opcao = Integer.parseInt(scanner.nextLine());

switch (opcao) {
case 1 -> c.executar(listaEnderecos);
case 2 -> s.executar();
case 3 -> d.executar();
default -> System.out.println("Opção inválida.");
}
}

/**
* Menu de operações para a entidade Funcionário.
*
* @param scanner Scanner para entrada do usuário
* @param c Controller de criação de funcionário
* @param d Controller de remoção de funcionário
* @param s Controller de busca/listagem de funcionário
* @param listaEnderecos Lista compartilhada de endereços (não utilizada no menu atual, pode ser removida)
*/
private static void menuFuncionario(Scanner scanner,
CreateFuncionarioController c,
DeleteFuncionarioController d,
SearchFuncionarioController s,
List<Endereco> listaEnderecos) {
System.out.println("\n--- FUNCIONÁRIO ---");
System.out.println("1. Cadastrar");
System.out.println("2. Listar");
System.out.println("3. Remover");
System.out.print("Escolha: ");
int opcao = Integer.parseInt(scanner.nextLine());

switch (opcao) {
case 1 -> c.executar();
case 2 -> s.executar();
case 3 -> d.executar();
default -> System.out.println("Opção inválida.");
}
}

/**
* Menu de operações para a entidade Mesa.
*
* @param scanner Scanner para entrada do usuário
* @param c Controller de criação de mesa
* @param d Controller de remoção de mesa
* @param s Controller de busca/listagem de mesa
*/
private static void menuMesa(Scanner scanner,
CreateMesaController c,
DeleteMesaController d,
SearchMesaController s) {
System.out.println("\n--- MESA ---");
System.out.println("1. Adicionar");
System.out.println("2. Listar");
System.out.println("3. Remover");
System.out.print("Escolha: ");
int opcao = Integer.parseInt(scanner.nextLine());

try {
switch (opcao) {
case 1 -> c.adicionarMesa();
case 2 -> s.listarMesas();
case 3 -> d.removerMesa();
default -> System.out.println("Opção inválida.");
}
} catch (Exception e) {
System.out.println("Erro: " + e.getMessage());
}
}

/**
* Menu de operações para a entidade Produto.
*
* @param scanner Scanner para entrada do usuário
* @param c Controller de criação de produto
* @param d Controller de remoção de produto
* @param s Controller de busca/listagem de produto
*/
private static void menuProduto(Scanner scanner,
CreateProdutoController c,
DeleteProdutoController d,
SearchProdutoController s) {
System.out.println("\n--- PRODUTO ---");
System.out.println("1. Adicionar");
System.out.println("2. Listar");
System.out.println("3. Remover");
System.out.print("Escolha: ");
int opcao = Integer.parseInt(scanner.nextLine());

try {
switch (opcao) {
case 1 -> c.adicionarProduto();
case 2 -> s.listarProdutos();
case 3 -> d.removerProduto();
default -> System.out.println("Opção inválida.");
}
} catch (Exception e) {
System.out.println("Erro: " + e.getMessage());
}
}

/**
* Menu de operações para a entidade Endereço.
*
* @param scanner Scanner para entrada do usuário
* @param c Controller de criação de endereço
* @param d Controller de remoção de endereço
* @param s Controller de busca/listagem de endereço
* @param listaEnderecos Lista compartilhada de endereços em memória
*/
private static void menuEndereco(Scanner scanner,
CreateEnderecoController c,
DeleteEnderecoController d,
SearchEnderecoController s,
List<Endereco> listaEnderecos) {
System.out.println("\n--- ENDEREÇO ---");
System.out.println("1. Cadastrar");
System.out.println("2. Listar");
System.out.println("3. Buscar por CEP");
System.out.println("4. Remover");
System.out.print("Escolha: ");
int opcao = Integer.parseInt(scanner.nextLine());

switch (opcao) {
case 1 -> c.criarEndereco(listaEnderecos);
case 2 -> {
if (listaEnderecos.isEmpty()) {
System.out.println("Nenhum endereço cadastrado.");
} else {
System.out.println("Lista de Endereços:");
for (Endereco e : listaEnderecos) {
System.out.printf("%s, %d, CEP: %s%n", e.getTipo(), e.getNumero(), e.getCep());
}
}
}
case 3 -> {
System.out.print("Digite o CEP para busca: ");
String cep = scanner.nextLine();
Endereco endereco = s.buscarPorCep(listaEnderecos, cep);
if (endereco != null) {
System.out.printf("Endereço encontrado: %s, %d, CEP: %s%n",
endereco.getTipo(), endereco.getNumero(), endereco.getCep());
} else {
System.out.println("Endereço não encontrado.");
}
}
case 4 -> d.deletarEndereco(listaEnderecos);
default -> System.out.println("Opção inválida.");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package com.restaurante.controllers.cliente;

import com.restaurante.dao.ClienteDAO;
import com.restaurante.dao.EnderecoDAO;
import com.restaurante.model.Cliente;
import com.restaurante.model.Endereco;
import com.restaurante.view.ClienteView;
import com.restaurante.controllers.endereco.SearchEnderecoController;

import java.util.List;
import java.util.Scanner;

/**
* Controller responsável por lidar com a criação de clientes no sistema.
*
* Esta classe realiza a captura de dados do cliente através da view,
* permite a seleção ou criação de um endereço, associa o endereço ao cliente
* e persiste os dados utilizando os DAOs.
*
* Funciona em conjunto com a camada de visualização ({@link ClienteView}),
* os modelos {@link Cliente} e {@link Endereco}, e os DAOs correspondentes.
*/
public class CreateClienteController {

/** Interface de entrada e saída para o usuário. */
private ClienteView view = new ClienteView();

/** Objeto de acesso a dados para clientes. */
private ClienteDAO dao = new ClienteDAO();

/** Objeto de acesso a dados para endereços. */
private EnderecoDAO enderecoDAO = new EnderecoDAO();

/** Controlador de busca de endereços por CEP. */
private SearchEnderecoController searchEndereco = new SearchEnderecoController();

/** Lista de endereços disponíveis no sistema. */
private List<Endereco> enderecos;

/**
* Executa o fluxo completo de cadastro de um novo cliente.
*
* O método captura os dados do cliente, solicita ao usuário que selecione ou
* cadastre um endereço, associa o endereço ao cliente e salva o cliente no sistema.
*
* @param enderecos lista de endereços existentes no sistema
*/
public void executar(List<Endereco> enderecos) {
this.enderecos = enderecos;

Cliente cliente = view.capturarCliente();
Endereco endereco = buscarOuCriarEndereco();
cliente.setEndereco(endereco);

dao.salvar(cliente);
view.mostrarMensagem("Cliente cadastrado com sucesso!");
}

/**
* Permite ao usuário buscar um endereço existente ou cadastrar um novo.
*
* O método pergunta ao usuário se ele deseja usar um endereço já existente
* (com base no CEP) ou cadastrar um novo endereço preenchendo os dados manualmente.
*
* @return o endereço selecionado ou recém-cadastrado
*/
private Endereco buscarOuCriarEndereco() {
Scanner scanner = view.getScanner();
System.out.println("Deseja:");
System.out.println("1. Escolher um endereço existente");
System.out.println("2. Cadastrar novo endereço");
System.out.print("Opção: ");
int opcao = Integer.parseInt(scanner.nextLine());

if (opcao == 1) {
System.out.print("Digite o CEP do endereço: ");
String cep = scanner.nextLine();
return searchEndereco.buscarPorCep(enderecos, cep);
}

// Criar novo
System.out.print("Tipo (Rua, Av...): ");
String tipo = scanner.nextLine();
System.out.print("Número: ");
int numero = Integer.parseInt(scanner.nextLine());
System.out.print("CEP: ");
String cep = scanner.nextLine();

Endereco novo = new Endereco(tipo, cep, numero);
enderecoDAO.salvarEndereco(novo);
enderecos.add(novo);
return novo;
}
}
Loading