diff --git a/avaliacoes/restaurante/pom.xml b/avaliacoes/restaurante/pom.xml new file mode 100644 index 0000000..357b724 --- /dev/null +++ b/avaliacoes/restaurante/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + com.restaurante + restaurante + 1.0-SNAPSHOT + + + 17 + 17 + + + \ No newline at end of file diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/Main.java b/avaliacoes/restaurante/src/main/java/com/restaurante/Main.java new file mode 100644 index 0000000..c6fed11 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/Main.java @@ -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 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 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 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 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."); + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/CreateClienteController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/CreateClienteController.java new file mode 100644 index 0000000..40158e6 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/CreateClienteController.java @@ -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 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 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; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/DeleteClienteController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/DeleteClienteController.java new file mode 100644 index 0000000..367f795 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/DeleteClienteController.java @@ -0,0 +1,40 @@ +package com.restaurante.controllers.cliente; + +import com.restaurante.dao.ClienteDAO; +import com.restaurante.view.ClienteView; + +/** + * Controller responsável por excluir um cliente do sistema. + * + * Esta classe interage com a camada de visualização ({@link ClienteView}) + * para capturar o CPF do cliente a ser removido e utiliza a {@link ClienteDAO} + * para realizar a exclusão no banco de dados. + * + * Exibe mensagens ao usuário informando se a remoção foi bem-sucedida ou não. + * + */ +public class DeleteClienteController { + + /** 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(); + + /** + * Executa o processo de remoção de um cliente com base no CPF fornecido pelo usuário. + * + * Caso o cliente seja encontrado e removido com sucesso, uma mensagem de confirmação + * é exibida. Caso contrário, informa que o cliente não foi encontrado. + */ + public void executar() { + String cpf = view.capturarCpf(); + boolean removido = dao.remover(cpf); + + if (removido) { + view.mostrarMensagem("Cliente removido com sucesso!"); + } else { + view.mostrarMensagem("Cliente não encontrado."); + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/SearchClienteController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/SearchClienteController.java new file mode 100644 index 0000000..9d5b2ef --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/SearchClienteController.java @@ -0,0 +1,32 @@ +package com.restaurante.controllers.cliente; + +import com.restaurante.dao.ClienteDAO; +import com.restaurante.model.Cliente; +import com.restaurante.view.ClienteView; + +/** + * Controller responsável por listar todos os clientes cadastrados no sistema. + * + * Esta classe utiliza a {@link ClienteDAO} para recuperar os clientes do banco de dados + * e a {@link ClienteView} para exibi-los ao usuário. + * + */ +public class SearchClienteController { + + /** 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(); + + /** + * Executa a listagem de todos os clientes cadastrados. + * + * Recupera a lista de clientes por meio do DAO e exibe cada cliente na tela. + */ + public void executar() { + for (Cliente c : dao.listar()) { + view.mostrar(c); + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/CreateEnderecoController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/CreateEnderecoController.java new file mode 100644 index 0000000..b71928c --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/CreateEnderecoController.java @@ -0,0 +1,50 @@ +package com.restaurante.controllers.endereco; + +import com.restaurante.dao.EnderecoDAO; +import com.restaurante.model.Endereco; +import com.restaurante.view.EnderecoView; + +import java.util.List; + +/** + * Controller responsável pela criação e listagem de endereços no sistema. + * + * Esta classe permite que o usuário cadastre um novo endereço e o adicione à lista atual, + * além de fornecer acesso à listagem completa dos endereços armazenados. + * + * Utiliza {@link EnderecoView} para interagir com o usuário e {@link EnderecoDAO} + * para persistência dos dados. + */ +public class CreateEnderecoController { + + /** Objeto de acesso a dados para endereços. */ + private EnderecoDAO dao = new EnderecoDAO(); + + /** Interface de entrada e saída para o usuário. */ + private EnderecoView view = new EnderecoView(); + + /** + * Cria um novo endereço com base nas informações fornecidas pelo usuário. + * + * O endereço é adicionado à lista local e também salvo no banco de dados. + * + * @param listaEnderecos lista local de endereços onde o novo endereço será adicionado + */ + public void criarEndereco(List listaEnderecos) { + Endereco novo = view.capturarEndereco(); + listaEnderecos.add(novo); + dao.salvarEndereco(novo); + view.mostrarMensagem("Endereço criado com sucesso!"); + } + + /** + * Retorna a lista de endereços cadastrados no sistema. + * + * Este método permite acessar os endereços diretamente da base de dados. + * + * @return uma lista de endereços cadastrados + */ + public List listarEnderecos() { + return dao.listarEnderecos(); + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/DeleteEnderecoController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/DeleteEnderecoController.java new file mode 100644 index 0000000..b219a34 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/DeleteEnderecoController.java @@ -0,0 +1,46 @@ +package com.restaurante.controllers.endereco; + +import com.restaurante.dao.EnderecoDAO; +import com.restaurante.model.Endereco; +import com.restaurante.view.EnderecoView; + +import java.util.List; + +/** + * Controller responsável por excluir endereços do sistema com base no CEP. + * + * Interage com o usuário por meio da {@link EnderecoView} para capturar o CEP + * do endereço a ser removido e utiliza a {@link EnderecoDAO} para realizar a exclusão + * tanto na lista local quanto na persistência (se aplicável). + * + * Exibe mensagens informando se a exclusão foi realizada com sucesso ou se o endereço + * não foi encontrado. + * + */ +public class DeleteEnderecoController { + + /** Objeto de acesso a dados para endereços. */ + private EnderecoDAO dao = new EnderecoDAO(); + + /** Interface de entrada e saída para o usuário. */ + private EnderecoView view = new EnderecoView(); + + /** + * Exclui um endereço da lista com base no CEP informado pelo usuário. + * + * O método busca o endereço na lista fornecida e, se encontrado, + * o remove e informa o sucesso da operação. Caso contrário, + * informa que o endereço não foi encontrado. + * + * @param listaEnderecos lista de endereços disponíveis no sistema + */ + public void deletarEndereco(List listaEnderecos) { + String cep = view.capturarCep(); + boolean removido = dao.deletarEnderecoPorCep(listaEnderecos, cep); + if (removido) { + view.mostrarMensagem("Endereço removido com sucesso."); + } else { + view.mostrarMensagem("Endereço não encontrado."); + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/SearchEnderecoController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/SearchEnderecoController.java new file mode 100644 index 0000000..53b7730 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/SearchEnderecoController.java @@ -0,0 +1,62 @@ +package com.restaurante.controllers.endereco; + +import com.restaurante.model.Endereco; +import com.restaurante.view.EnderecoView; + +import java.util.List; + +/** + * Controller responsável por listar e buscar endereços cadastrados no sistema. + * + * Esta classe permite ao usuário visualizar todos os endereços disponíveis ou + * realizar buscas específicas por CEP. A exibição dos dados é feita por meio + * da {@link EnderecoView}. + * + * Também disponibiliza um método público para busca direta por CEP, útil para + */ +public class SearchEnderecoController { + + /** Interface de entrada e saída para o usuário. */ + private EnderecoView view = new EnderecoView(); + + /** + * Lista todos os endereços fornecidos na lista. + * + * Utiliza a view para exibir a lista completa. + * + * @param listaEnderecos lista de endereços a serem exibidos + */ + public void listarEnderecos(List listaEnderecos) { + view.mostrarListaEnderecos(listaEnderecos); + } + + /** + * Solicita ao usuário um CEP, busca o endereço correspondente + * na lista fornecida e exibe o resultado. + * + * Caso o CEP não seja encontrado, exibe uma mensagem com valor nulo. + * + * @param listaEnderecos lista de endereços onde será feita a busca + */ + public void buscarPorCep(List listaEnderecos) { + String cep = view.capturarCep(); + Endereco e = buscarPorCep(listaEnderecos, cep); + view.mostrarEndereco(e); + } + + /** + * Busca diretamente por um endereço com o CEP especificado. + * + * Este método pode ser utilizado por outros controllers para reutilização da lógica. + * + * @param listaEnderecos lista de endereços onde será realizada a busca + * @param cep o CEP a ser pesquisado + * @return o endereço correspondente ao CEP ou {@code null} se não for encontrado + */ + public Endereco buscarPorCep(List listaEnderecos, String cep) { + return listaEnderecos.stream() + .filter(end -> end.getCep().equals(cep)) + .findFirst() + .orElse(null); + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/CreateFuncionarioController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/CreateFuncionarioController.java new file mode 100644 index 0000000..43dd589 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/CreateFuncionarioController.java @@ -0,0 +1,58 @@ +package com.restaurante.controllers.funcionario; + +import java.util.List; + +import com.restaurante.dao.FuncionarioDAO; +import com.restaurante.dao.MesaDAO; +import com.restaurante.model.Funcionario; +import com.restaurante.model.Mesa; +import com.restaurante.view.FuncionarioView; + +/** + * Controller responsável por cadastrar um novo funcionário no sistema. + * + * Esta classe interage com a {@link FuncionarioView} para capturar os dados do funcionário, + * incluindo a seleção das mesas existentes para associar, + * e utiliza a {@link FuncionarioDAO} para persistir os dados no armazenamento. + * + * Caso não existam mesas cadastradas, informa o usuário para cadastrá-las antes. + * Exibe mensagens de sucesso ou erro durante o processo. + */ +public class CreateFuncionarioController { + + /** Interface para interação com o usuário. */ + private FuncionarioView funcionarioView = new FuncionarioView(); + + /** Objeto de acesso a dados para funcionários. */ + private FuncionarioDAO funcionarioDAO = new FuncionarioDAO(); + + /** Objeto de acesso a dados para mesas. */ + private MesaDAO mesaDAO = new MesaDAO(); + + /** + * Executa o fluxo de cadastro do funcionário. + * + * Passos: + * - Lista as mesas já cadastradas no sistema. + * - Caso não existam mesas, informa para cadastrar mesas antes. + * - Solicita os dados do funcionário, permitindo associação com mesas existentes. + * - Salva o funcionário no armazenamento. + * - Exibe mensagens de sucesso ou falha na operação. + */ + public void executar() { + try { + List mesasExistentes = mesaDAO.listar(); + + if (mesasExistentes.isEmpty()) { + funcionarioView.mostrarMensagem("Não há mesas cadastradas. Cadastre mesas antes de criar um funcionário."); + return; + } + + Funcionario funcionario = funcionarioView.capturarFuncionarioComMesasExistentes(mesasExistentes); + funcionarioDAO.salvar(funcionario); + funcionarioView.mostrarMensagem("Funcionário cadastrado com sucesso!"); + } catch (Exception e) { + funcionarioView.mostrarMensagem("Erro ao cadastrar funcionário: " + e.getMessage()); + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/DeleteFuncionarioController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/DeleteFuncionarioController.java new file mode 100644 index 0000000..75cb29e --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/DeleteFuncionarioController.java @@ -0,0 +1,39 @@ +package com.restaurante.controllers.funcionario; + +import com.restaurante.dao.FuncionarioDAO; +import com.restaurante.view.FuncionarioView; + +/** + * Controller responsável por excluir um funcionário do sistema com base no CPF. + * + * Esta classe interage com a {@link FuncionarioView} para capturar o CPF do funcionário + * e utiliza a {@link FuncionarioDAO} para realizar a remoção no banco de dados. + * + * Informa ao usuário se a remoção foi bem-sucedida ou se o CPF não foi encontrado. + */ +public class DeleteFuncionarioController { + + /** Interface de entrada e saída com o usuário. */ + private FuncionarioView view = new FuncionarioView(); + + /** Objeto de acesso a dados para funcionários. */ + private FuncionarioDAO dao = new FuncionarioDAO(); + + /** + * Executa o processo de remoção de um funcionário com base no CPF. + * + * Caso o funcionário seja encontrado e removido com sucesso, + * exibe uma mensagem de confirmação. Caso contrário, + * informa que o funcionário não foi encontrado. + */ + public void executar() { + String cpf = view.capturarCpf(); + boolean removido = dao.remover(cpf); + + if (removido) { + view.mostrarMensagem("Funcionário removido com sucesso!"); + } else { + view.mostrarMensagem("Funcionário não encontrado."); + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/SearchFuncionarioController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/SearchFuncionarioController.java new file mode 100644 index 0000000..5809d35 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/SearchFuncionarioController.java @@ -0,0 +1,34 @@ +package com.restaurante.controllers.funcionario; + +import com.restaurante.dao.FuncionarioDAO; +import com.restaurante.model.Funcionario; +import com.restaurante.view.FuncionarioView; + +/** + * Controller responsável por listar todos os funcionários cadastrados no sistema. + * + * Esta classe recupera os dados de todos os funcionários utilizando a {@link FuncionarioDAO} + * e exibe essas informações ao usuário por meio da {@link FuncionarioView}. + * + * Útil para visualização geral e conferência dos registros de funcionários. + */ +public class SearchFuncionarioController { + + /** Interface de entrada e saída com o usuário. */ + private FuncionarioView view = new FuncionarioView(); + + /** Objeto de acesso a dados para funcionários. */ + private FuncionarioDAO dao = new FuncionarioDAO(); + + /** + * Executa a listagem de todos os funcionários cadastrados no sistema. + * + * Recupera a lista de funcionários do DAO e utiliza a view para exibir + * cada registro ao usuário. + */ + public void executar() { + for (Funcionario f : dao.listar()) { + view.mostrar(f); + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/CreateMesaController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/CreateMesaController.java new file mode 100644 index 0000000..efcdc85 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/CreateMesaController.java @@ -0,0 +1,48 @@ +package com.restaurante.controllers.mesa; + +import java.io.IOException; + +import com.restaurante.dao.MesaDAO; +import com.restaurante.model.Mesa; +import com.restaurante.view.MesaView; + +/** + * Controller responsável pela criação de mesas no sistema. + * + * Esta classe interage com o usuário através da {@link MesaView} para capturar + * as informações necessárias sobre a mesa (número e local), cria o objeto {@link Mesa} + * e persiste seus dados usando a {@link MesaDAO}. + * + * Pode lançar exceções de entrada/saída durante o processo de captura dos dados. + */ +public class CreateMesaController { + + /** Objeto de acesso a dados para mesas. */ + private MesaDAO dao; + + /** Interface de entrada e saída para o usuário. */ + private MesaView view; + + /** + * Construtor que inicializa os DAOs e Views necessários. + */ + public CreateMesaController(){ + this.dao = new MesaDAO(); + this.view = new MesaView(); + } + + /** + * Captura os dados da mesa, cria o objeto Mesa e salva no banco de dados. + * + * Informa no console se a mesa foi adicionada com sucesso. + * + * @throws IOException caso ocorra erro na entrada de dados pelo usuário + */ + public void adicionarMesa() throws IOException { + String numero = view.pedirNumeroMesa(); + String local = view.pedirLocalMesa(); + Mesa mesa = new Mesa(numero, local); + dao.salvar(mesa); + System.out.println("Mesa adicionada com sucesso!"); + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/DeleteMesaController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/DeleteMesaController.java new file mode 100644 index 0000000..1ac9e4b --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/DeleteMesaController.java @@ -0,0 +1,46 @@ +package com.restaurante.controllers.mesa; + +import java.io.IOException; + +import com.restaurante.dao.MesaDAO; +import com.restaurante.view.MesaView; + +/** + * Controller responsável pela remoção de mesas do sistema. + * + * Esta classe utiliza a {@link MesaView} para capturar o número da mesa que deve ser removida + * e a {@link MesaDAO} para deletar a mesa da base de dados. + * + * Exibe uma mensagem no console informando que a mesa foi removida, caso existisse. + * + * Pode lançar exceções de entrada/saída durante a captura dos dados. + */ +public class DeleteMesaController { + + /** Objeto de acesso a dados para mesas. */ + private MesaDAO dao; + + /** Interface de entrada e saída para o usuário. */ + private MesaView view; + + /** + * Construtor que inicializa os DAOs e Views necessários. + */ + public DeleteMesaController(){ + this.dao = new MesaDAO(); + this.view = new MesaView(); + } + + /** + * Captura o número da mesa e remove a mesa correspondente do banco de dados. + * + * Exibe mensagem informativa no console, independentemente de a mesa existir ou não. + * + * @throws IOException caso ocorra erro na entrada de dados pelo usuário + */ + public void removerMesa() throws IOException { + String numero = view.pedirNumeroMesa(); + dao.deletar(numero); + System.out.println("Mesa removida (se existia)!"); + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/SearchMesaController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/SearchMesaController.java new file mode 100644 index 0000000..352f8ab --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/SearchMesaController.java @@ -0,0 +1,43 @@ +package com.restaurante.controllers.mesa; + +import java.io.IOException; +import java.util.List; + +import com.restaurante.dao.MesaDAO; +import com.restaurante.model.Mesa; +import com.restaurante.view.MesaView; + +/** + * Controller responsável por listar as mesas cadastradas no sistema. + * + * Esta classe utiliza a {@link MesaDAO} para recuperar a lista de mesas + * e a {@link MesaView} para exibir as mesas ao usuário. + * + * Pode lançar exceções de entrada/saída durante a operação de exibição. + */ +public class SearchMesaController { + + /** Objeto de acesso a dados para mesas. */ + private MesaDAO dao; + + /** Interface de entrada e saída para o usuário. */ + private MesaView view; + + /** + * Construtor que inicializa os DAOs e Views necessários. + */ + public SearchMesaController(){ + this.dao = new MesaDAO(); + this.view = new MesaView(); + } + + /** + * Recupera a lista de mesas do banco de dados e as exibe ao usuário. + * + * @throws IOException caso ocorra erro na operação de exibição + */ + public void listarMesas() throws IOException { + List mesas = dao.listar(); + view.exibirMesas(mesas); + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/CreateProdutoController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/CreateProdutoController.java new file mode 100644 index 0000000..80b6b70 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/CreateProdutoController.java @@ -0,0 +1,51 @@ +package com.restaurante.controllers.produto; + +import java.io.IOException; + +import com.restaurante.dao.ProdutoDAO; +import com.restaurante.model.Produto; +import com.restaurante.view.ProdutoView; + +/** + * Controller responsável pela criação de produtos no sistema. + * + * Esta classe captura os dados do produto através da {@link ProdutoView}, + * cria um novo objeto {@link Produto} e persiste no banco de dados + * utilizando a {@link ProdutoDAO}. + * + * Pode lançar exceções relacionadas à entrada de dados durante a captura. + * + * Informa ao usuário sobre o sucesso da operação via console. + */ +public class CreateProdutoController { + + /** Objeto de acesso a dados para produtos. */ + private ProdutoDAO dao; + + /** Interface de entrada e saída para o usuário. */ + private ProdutoView view; + + /** + * Construtor que inicializa os objetos DAO e View. + */ + public CreateProdutoController() { + dao = new ProdutoDAO(); + view = new ProdutoView(); + } + + /** + * Captura os dados do produto, cria o objeto Produto e salva no banco de dados. + * + * Exibe uma mensagem de sucesso no console após a operação. + * + * @throws IOException caso ocorra erro durante a entrada de dados + */ + public void adicionarProduto() throws IOException { + String nome = view.pedirNomeProduto(); + float valor = view.pedirValorProduto(); + + dao.salvar(new Produto(nome, valor)); + System.out.println("Produto adicionado com sucesso!"); + } +} + diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/DeleteProdutoController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/DeleteProdutoController.java new file mode 100644 index 0000000..10144e7 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/DeleteProdutoController.java @@ -0,0 +1,44 @@ +package com.restaurante.controllers.produto; + +import java.io.IOException; + +import com.restaurante.dao.ProdutoDAO; +import com.restaurante.view.ProdutoView; + +/** + * Controller responsável pela remoção de produtos do sistema com base no nome. + * + * Esta classe interage com a {@link ProdutoView} para capturar o nome do produto + * a ser removido e utiliza a {@link ProdutoDAO} para realizar a exclusão no banco de dados. + * + * Exibe mensagem informativa no console após a remoção. + */ +public class DeleteProdutoController { + + /** Objeto de acesso a dados para produtos. */ + private ProdutoDAO dao; + + /** Interface de entrada e saída para o usuário. */ + private ProdutoView view; + + /** + * Construtor que inicializa os objetos DAO e View. + */ + public DeleteProdutoController() { + dao = new ProdutoDAO(); + view = new ProdutoView(); + } + + /** + * Captura o nome do produto e remove o produto correspondente do banco de dados. + * + * Exibe mensagem no console informando que o produto foi removido. + * + * @throws IOException caso ocorra erro na entrada de dados pelo usuário + */ + public void removerProduto() throws IOException { + String nome = view.pedirNomeProduto(); + dao.removerPorNome(nome); + System.out.println("Produto removido!"); + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/SearchProdutoController.java b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/SearchProdutoController.java new file mode 100644 index 0000000..72b4c0f --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/SearchProdutoController.java @@ -0,0 +1,45 @@ +package com.restaurante.controllers.produto; + +import java.io.IOException; +import java.util.List; + +import com.restaurante.dao.ProdutoDAO; +import com.restaurante.model.Produto; +import com.restaurante.view.ProdutoView; + +/** + * Controller responsável por listar todos os produtos cadastrados no sistema. + * + * Esta classe utiliza a {@link ProdutoDAO} para recuperar a lista de produtos + * e a {@link ProdutoView} para exibir essas informações ao usuário. + * + * Pode lançar exceções relacionadas à entrada/saída durante a exibição. + * + * Útil para visualização geral dos produtos disponíveis. + */ +public class SearchProdutoController { + + /** Objeto de acesso a dados para produtos. */ + private ProdutoDAO dao; + + /** Interface de entrada e saída para o usuário. */ + private ProdutoView view; + + /** + * Construtor que inicializa os objetos DAO e View. + */ + public SearchProdutoController() { + dao = new ProdutoDAO(); + view = new ProdutoView(); + } + + /** + * Recupera a lista de todos os produtos cadastrados e os exibe ao usuário. + * + * @throws IOException caso ocorra erro na operação de exibição + */ + public void listarProdutos() throws IOException { + List produtos = dao.listarTodos(); + view.exibirProdutos(produtos); + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/dao/ClienteDAO.java b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/ClienteDAO.java new file mode 100644 index 0000000..0899d61 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/ClienteDAO.java @@ -0,0 +1,132 @@ +package com.restaurante.dao; + +import com.restaurante.model.Cliente; +import com.restaurante.model.Endereco; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +/** + * Data Access Object (DAO) para manipulação persistente de dados de clientes. + * + * Esta classe realiza operações de leitura, escrita e remoção de clientes + * em um arquivo de texto denominado {@code clientes.txt}. + * + * O cliente é salvo com seu endereço serializado em formato simples (CSV), + * e na leitura o endereço é desserializado para o objeto {@link Endereco}. + * + * O arquivo é manipulado diretamente, e erros de E/S são tratados com mensagens no console. + * + */ +public class ClienteDAO { + + /** Nome do arquivo usado para armazenar os dados dos clientes. */ + private static final String ARQUIVO = "clientes.txt"; + + /** + * Salva um cliente no arquivo, adicionando ao final do arquivo existente. + * + * O endereço do cliente, se existir, é serializado no formato "tipo,numero,cep". + * + * @param cliente o cliente a ser salvo + */ + public void salvar(Cliente cliente) { + try (PrintWriter writer = new PrintWriter(new FileWriter(ARQUIVO, true))) { + String enderecoStr = ""; + Endereco e = cliente.getEndereco(); + if (e != null) { + // formato: tipo,numero,cep + enderecoStr = e.getTipo() + "," + e.getNumero() + "," + e.getCep(); + } + writer.println(cliente.getNome() + ";" + + cliente.getCpf() + ";" + + cliente.getNumFid() + ";" + + enderecoStr); + } catch (IOException ex) { + System.out.println("Erro ao salvar cliente: " + ex.getMessage()); + } + } + + /** + * Lista todos os clientes armazenados no arquivo. + * + * Realiza a leitura do arquivo, desserializando as informações do cliente + * e seu endereço (quando presente) para objetos correspondentes. + * + * @return uma lista contendo todos os clientes encontrados no arquivo; + * lista vazia se o arquivo não existir ou estiver vazio + */ + public List listar() { + List clientes = new ArrayList<>(); + File file = new File(ARQUIVO); + + if (!file.exists()) { + return clientes; + } + + try (Scanner scanner = new Scanner(file)) { + while (scanner.hasNextLine()) { + String linha = scanner.nextLine(); + String[] partes = linha.split(";", 4); + if (partes.length >= 3) { + String nome = partes[0]; + String cpf = partes[1]; + int numFid = Integer.parseInt(partes[2]); + + Endereco endereco = null; + if (partes.length == 4 && !partes[3].isEmpty()) { + String[] dadosEndereco = partes[3].split(","); + if (dadosEndereco.length == 3) { + String tipo = dadosEndereco[0]; + int numero = Integer.parseInt(dadosEndereco[1]); + String cep = dadosEndereco[2]; + endereco = new Endereco(tipo, cep, numero); + } + } + + clientes.add(new Cliente(nome, cpf, endereco, numFid)); + } + } + } catch (IOException ex) { + System.out.println("Erro ao ler clientes: " + ex.getMessage()); + } + + return clientes; + } + + /** + * Remove um cliente do arquivo com base no CPF informado. + * + * A operação recarrega todos os clientes, remove o cliente com o CPF especificado + * e reescreve o arquivo com os dados atualizados. + * + * @param cpf o CPF do cliente que deve ser removido + * @return {@code true} se um cliente foi removido; {@code false} caso contrário + */ + public boolean remover(String cpf) { + List clientes = listar(); + boolean removido = clientes.removeIf(c -> c.getCpf().equals(cpf)); + + if (removido) { + try (PrintWriter writer = new PrintWriter(new FileWriter(ARQUIVO))) { + for (Cliente c : clientes) { + String enderecoStr = ""; + Endereco e = c.getEndereco(); + if (e != null) { + enderecoStr = e.getTipo() + "," + e.getNumero() + "," + e.getCep(); + } + writer.println(c.getNome() + ";" + + c.getCpf() + ";" + + c.getNumFid() + ";" + + enderecoStr); + } + } catch (IOException ex) { + System.out.println("Erro ao reescrever arquivo: " + ex.getMessage()); + } + } + + return removido; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/dao/EnderecoDAO.java b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/EnderecoDAO.java new file mode 100644 index 0000000..4aca861 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/EnderecoDAO.java @@ -0,0 +1,109 @@ +package com.restaurante.dao; + +import com.restaurante.model.Endereco; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Data Access Object (DAO) responsável pela persistência e manipulação de dados de endereços. + * + * Esta classe realiza operações de salvar, listar e deletar endereços em um arquivo de texto + * denominado {@code enderecos.txt}, armazenando as informações no formato delimitado por ponto e vírgula. + * + * Trata exceções de E/S exibindo mensagens no console. + * + */ +public class EnderecoDAO { + + /** Nome do arquivo usado para armazenar os endereços. */ + private static final String ARQUIVO = "enderecos.txt"; + + /** + * Salva um endereço no arquivo, adicionando ao final do arquivo existente. + * + * O endereço é formatado como "tipo;numero;cep" para armazenamento. + * + * @param endereco o endereço a ser salvo + */ + public void salvarEndereco(Endereco endereco) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(ARQUIVO, true))) { + writer.write(formatarEndereco(endereco)); + writer.newLine(); + System.out.println("Endereço salvo no arquivo com sucesso."); + } catch (IOException e) { + System.out.println("Erro ao salvar endereço no arquivo: " + e.getMessage()); + } + } + + /** + * Formata os dados do endereço para o formato de texto que será salvo no arquivo. + * + * @param e o endereço a ser formatado + * @return string formatada contendo tipo, número e CEP separados por ponto e vírgula + */ + private String formatarEndereco(Endereco e) { + return e.getTipo() + ";" + e.getNumero() + ";" + e.getCep(); + } + + /** + * Lista todos os endereços armazenados no arquivo. + * + * Realiza a leitura do arquivo, cria objetos {@link Endereco} e os adiciona a uma lista. + * + * @return lista contendo todos os endereços encontrados no arquivo; + * lista vazia caso o arquivo não exista ou esteja vazio + */ + public List listarEnderecos() { + List lista = new ArrayList<>(); + try (BufferedReader reader = new BufferedReader(new FileReader(ARQUIVO))) { + String linha; + while ((linha = reader.readLine()) != null) { + String[] partes = linha.split(";"); + if (partes.length == 3) { + String tipo = partes[0]; + int numero = Integer.parseInt(partes[1]); + String cep = partes[2]; + lista.add(new Endereco(tipo, cep, numero)); + } + } + } catch (FileNotFoundException e) { + // Arquivo não existe ainda, não é considerado erro + } catch (IOException e) { + System.out.println("Erro ao ler arquivo de endereços: " + e.getMessage()); + } + return lista; + } + + /** + * Remove um endereço da lista com base no CEP e atualiza o arquivo com a lista atualizada. + * + * @param lista lista de endereços em memória + * @param cep o CEP do endereço que deve ser removido + * @return {@code true} se algum endereço foi removido; {@code false} caso contrário + */ + public boolean deletarEnderecoPorCep(List lista, String cep) { + boolean removido = lista.removeIf(e -> e.getCep().equals(cep)); + if (removido) { + salvarListaAtualizada(lista); + } + return removido; + } + + /** + * Salva a lista atualizada de endereços no arquivo, sobrescrevendo o conteúdo existente. + * + * @param lista a lista atualizada de endereços + */ + private void salvarListaAtualizada(List lista) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(ARQUIVO, false))) { + for (Endereco e : lista) { + writer.write(formatarEndereco(e)); + writer.newLine(); + } + } catch (IOException e) { + System.out.println("Erro ao salvar arquivo atualizado: " + e.getMessage()); + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/dao/FuncionarioDAO.java b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/FuncionarioDAO.java new file mode 100644 index 0000000..2b1f52c --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/FuncionarioDAO.java @@ -0,0 +1,144 @@ +package com.restaurante.dao; + +import com.restaurante.model.Funcionario; +import com.restaurante.model.Mesa; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +/** + * Data Access Object (DAO) responsável pela persistência e manipulação de dados dos funcionários. + * + * Esta classe realiza operações de salvar, listar e remover funcionários + * em um arquivo de texto denominado {@code funcionarios.txt}. + * + * Os funcionários são armazenados com suas mesas associadas serializadas em formato texto. + * + * Os dados das mesas são serializados como "numero,local" separados por pipe "|". + * + * Exibe mensagens no console em caso de erros de I/O. + * + */ +public class FuncionarioDAO { + + /** Nome do arquivo usado para armazenar os dados dos funcionários. */ + private static final String ARQUIVO = "funcionarios.txt"; + + /** + * Salva um funcionário no arquivo, adicionando ao final. + * + * Serializa a lista de mesas associadas ao funcionário no formato + * "numero,local|numero,local|...". + * + * @param funcionario o funcionário a ser salvo + */ + public void salvar(Funcionario funcionario) { + try (PrintWriter writer = new PrintWriter(new FileWriter(ARQUIVO, true))) { + StringBuilder sbMesas = new StringBuilder(); + if (funcionario.getMesas() != null) { + for (int i = 0; i < funcionario.getMesas().size(); i++) { + Mesa m = funcionario.getMesas().get(i); + sbMesas.append(m.getNumero()).append(",").append(m.getLocal()); + if (i < funcionario.getMesas().size() - 1) { + sbMesas.append("|"); + } + } + } + writer.println(funcionario.getNome() + ";" + + funcionario.getCpf() + ";" + + funcionario.getCtp() + ";" + + funcionario.getCargo() + ";" + + sbMesas.toString()); + } catch (IOException e) { + System.out.println("Erro ao salvar funcionário: " + e.getMessage()); + } + } + + /** + * Lista todos os funcionários armazenados no arquivo. + * + * Desserializa as informações dos funcionários e suas mesas para objetos correspondentes. + * + * @return lista com todos os funcionários encontrados no arquivo; + * lista vazia se o arquivo não existir ou estiver vazio + */ + public List listar() { + List funcionarios = new ArrayList<>(); + File file = new File(ARQUIVO); + + if (!file.exists()) { + return funcionarios; + } + + try (BufferedReader reader = new BufferedReader(new FileReader(ARQUIVO))) { + String linha; + while ((linha = reader.readLine()) != null) { + String[] partes = linha.split(";", 5); + if (partes.length >= 5) { + String nome = partes[0]; + String cpf = partes[1]; + String ctp = partes[2]; + String cargo = partes[3]; + String mesasStr = partes[4]; + + List mesas = new ArrayList<>(); + if (!mesasStr.isEmpty()) { + String[] mesasArray = mesasStr.split("\\|"); + for (String mesaDados : mesasArray) { + String[] dados = mesaDados.split(","); + if (dados.length == 2) { + mesas.add(new Mesa(dados[0], dados[1])); + } + } + } + funcionarios.add(new Funcionario(nome, cpf, null, ctp, cargo, mesas)); + } + } + } catch (IOException e) { + System.out.println("Erro ao ler funcionários: " + e.getMessage()); + } + + return funcionarios; + } + + /** + * Remove um funcionário do arquivo com base no CPF informado. + * + * Recarrega todos os funcionários, remove o funcionário com o CPF especificado + * e reescreve o arquivo com os dados atualizados. + * + * @param cpf o CPF do funcionário a ser removido + * @return {@code true} se um funcionário foi removido; {@code false} caso contrário + */ + public boolean remover(String cpf) { + List funcionarios = listar(); + boolean removido = funcionarios.removeIf(f -> f.getCpf().equals(cpf)); + + if (removido) { + try (PrintWriter writer = new PrintWriter(new FileWriter(ARQUIVO))) { + for (Funcionario f : funcionarios) { + StringBuilder sbMesas = new StringBuilder(); + if (f.getMesas() != null) { + for (int i = 0; i < f.getMesas().size(); i++) { + Mesa m = f.getMesas().get(i); + sbMesas.append(m.getNumero()).append(",").append(m.getLocal()); + if (i < f.getMesas().size() - 1) { + sbMesas.append("|"); + } + } + } + writer.println(f.getNome() + ";" + + f.getCpf() + ";" + + f.getCtp() + ";" + + f.getCargo() + ";" + + sbMesas.toString()); + } + } catch (IOException e) { + System.out.println("Erro ao reescrever arquivo: " + e.getMessage()); + } + } + + return removido; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/dao/MesaDAO.java b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/MesaDAO.java new file mode 100644 index 0000000..80ec4b8 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/MesaDAO.java @@ -0,0 +1,91 @@ +package com.restaurante.dao; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +import com.restaurante.model.Mesa; + +/** + * Data Access Object (DAO) responsável pela persistência e manipulação dos dados das mesas. + * + * Esta classe realiza operações de salvar, listar e deletar mesas em um arquivo de texto + * denominado {@code mesas.txt}, armazenando as informações no formato delimitado por ponto e vírgula. + * + * Operações suportadas: + *
    + *
  • Salvar uma mesa (append no arquivo)
  • + *
  • Listar todas as mesas
  • + *
  • Deletar uma mesa pelo número e atualizar o arquivo
  • + *
+ * + * Exceções de I/O são propagadas para o chamador tratar. + */ +public class MesaDAO { + + /** Nome do arquivo usado para armazenar as mesas. */ + private static final String FILE_NAME = "mesas.txt"; + + /** + * Salva uma mesa no arquivo, adicionando ao final do arquivo existente. + * + * O formato utilizado para armazenamento é "numero;local". + * + * @param mesa a mesa a ser salva + * @throws IOException caso ocorra erro na operação de escrita no arquivo + */ + public void salvar(Mesa mesa) throws IOException { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_NAME, true))) { + writer.write(mesa.getNumero() + ";" + mesa.getLocal()); + writer.newLine(); + } + } + + /** + * Lista todas as mesas armazenadas no arquivo. + * + * Realiza a leitura do arquivo, criando objetos {@link Mesa} para cada linha. + * + * @return lista contendo todas as mesas encontradas no arquivo; + * lista vazia caso o arquivo não exista ou esteja vazio + * @throws IOException caso ocorra erro na operação de leitura do arquivo + */ + public List listar() throws IOException { + List mesas = new ArrayList<>(); + File arquivo = new File(FILE_NAME); + + if (!arquivo.exists()) { + return mesas; + } + + try (BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME))) { + String linha; + while ((linha = reader.readLine()) != null) { + String[] dados = linha.split(";"); + mesas.add(new Mesa(dados[0], dados[1])); + } + } + return mesas; + } + + /** + * Remove uma mesa do arquivo com base no número informado. + * + * A operação recarrega todas as mesas, remove a mesa com o número especificado, + * e reescreve o arquivo com as mesas restantes. + * + * @param numero o número da mesa que deve ser removida + * @throws IOException caso ocorra erro na operação de leitura ou escrita no arquivo + */ + public void deletar(String numero) throws IOException { + List mesas = listar(); + try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_NAME))) { + for (Mesa m : mesas) { + if (!m.getNumero().equals(numero)) { + writer.write(m.getNumero() + ";" + m.getLocal()); + writer.newLine(); + } + } + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/dao/ProdutoDAO.java b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/ProdutoDAO.java new file mode 100644 index 0000000..eb99711 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/ProdutoDAO.java @@ -0,0 +1,87 @@ +package com.restaurante.dao; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +import com.restaurante.model.Produto; + +/** + * Data Access Object (DAO) responsável pela persistência e manipulação dos dados dos produtos. + * + * Esta classe realiza operações de salvar, listar e remover produtos + * em um arquivo de texto denominado {@code produtos.txt}, + * armazenando as informações no formato delimitado por ponto e vírgula. + * + * Exceções de I/O são propagadas para o chamador tratar. + * + */ +public class ProdutoDAO { + + /** Nome do arquivo usado para armazenar os produtos. */ + private static final String FILE_NAME = "produtos.txt"; + + /** + * Salva um produto no arquivo, adicionando ao final do arquivo existente. + * + * O formato utilizado para armazenamento é "nome;valor". + * + * @param produto o produto a ser salvo + * @throws IOException caso ocorra erro na operação de escrita no arquivo + */ + public void salvar(Produto produto) throws IOException { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_NAME, true))) { + writer.write(produto.getNome() + ";" + produto.getValorProd()); + writer.newLine(); + } + } + + /** + * Lista todos os produtos armazenados no arquivo. + * + * Realiza a leitura do arquivo, criando objetos {@link Produto} para cada linha. + * + * @return lista contendo todos os produtos encontrados no arquivo; + * lista vazia caso o arquivo não exista ou esteja vazio + * @throws IOException caso ocorra erro na operação de leitura do arquivo + */ + public List listarTodos() throws IOException { + List produtos = new ArrayList<>(); + File arquivo = new File(FILE_NAME); + + if (!arquivo.exists()) { + return produtos; + } + + try (BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME))) { + String linha; + while ((linha = reader.readLine()) != null) { + String[] dados = linha.split(";"); + produtos.add(new Produto(dados[0], Float.parseFloat(dados[1]))); + } + } + return produtos; + } + + /** + * Remove um produto do arquivo com base no nome informado. + * + * A operação recarrega todos os produtos, remove o produto com o nome especificado, + * e reescreve o arquivo com os produtos restantes. + * + * @param nome o nome do produto que deve ser removido + * @throws IOException caso ocorra erro na operação de leitura ou escrita no arquivo + */ + public void removerPorNome(String nome) throws IOException { + List produtos = listarTodos(); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_NAME))) { + for (Produto p : produtos) { + if (!p.getNome().equals(nome)) { + writer.write(p.getNome() + ";" + p.getValorProd()); + writer.newLine(); + } + } + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/model/Cliente.java b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Cliente.java new file mode 100644 index 0000000..621758b --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Cliente.java @@ -0,0 +1,46 @@ +package com.restaurante.model; + +/** + * Representa um cliente do restaurante, que é uma especialização de {@link Pessoa}. + * + * Além dos atributos herdados de Pessoa (nome, cpf, endereço), + * o cliente possui um número de fidelidade. + * + * @see Pessoa + */ +public class Cliente extends Pessoa { + + /** Número de fidelidade do cliente. */ + private int numFid; + + /** + * Construtor para criar um cliente com nome, CPF, endereço e número de fidelidade. + * + * @param nome nome do cliente + * @param cpf CPF do cliente + * @param endereco endereço do cliente + * @param numFid número de fidelidade do cliente + */ + public Cliente(String nome, String cpf, Endereco endereco, int numFid) { + super(nome, cpf, endereco); + this.numFid = numFid; + } + + /** + * Obtém o número de fidelidade do cliente. + * + * @return número de fidelidade + */ + public int getNumFid() { + return numFid; + } + + /** + * Define o número de fidelidade do cliente. + * + * @param numFid novo número de fidelidade + */ + public void setNumFid(int numFid) { + this.numFid = numFid; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/model/Endereco.java b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Endereco.java new file mode 100644 index 0000000..5ca3c7f --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Endereco.java @@ -0,0 +1,92 @@ +package com.restaurante.model; + +/** + * Representa um endereço com tipo, CEP e número. + * + * Exemplo de tipo: "Rua", "Avenida", etc. + * + * Contém métodos para obter e modificar seus atributos, + * além de um método para retornar uma descrição simples do endereço. + * + */ +public class Endereco { + + /** Tipo do endereço (ex: Rua, Avenida). */ + private String tipo; + + /** Código de Endereçamento Postal (CEP). */ + private String cep; + + /** Número do endereço. */ + private int numero; + + /** + * Construtor para criar um endereço. + * + * @param tipo tipo do endereço (ex: Rua, Avenida) + * @param cep CEP do endereço + * @param numero número do endereço + */ + public Endereco(String tipo, String cep, int numero) { + this.tipo = tipo; + this.cep = cep; + this.numero = numero; + } + + /** + * Obtém o tipo do endereço. + * @return tipo do endereço + */ + public String getTipo() { + return tipo; + } + + /** + * Define o tipo do endereço. + * @param tipo novo tipo do endereço + */ + public void setTipo(String tipo) { + this.tipo = tipo; + } + + /** + * Obtém o CEP do endereço. + * @return CEP do endereço + */ + public String getCep() { + return cep; + } + + /** + * Define o CEP do endereço. + * @param cep novo CEP do endereço + */ + public void setCep(String cep) { + this.cep = cep; + } + + /** + * Obtém o número do endereço. + * @return número do endereço + */ + public int getNumero() { + return numero; + } + + /** + * Define o número do endereço. + * @param numero novo número do endereço + */ + public void setNumero(int numero) { + this.numero = numero; + } + + /** + * Retorna uma descrição simples do endereço no formato "tipo, número". + * + * @return descrição do endereço + */ + public String getEndereco() { + return this.tipo + ", " + this.numero; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/model/Funcionario.java b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Funcionario.java new file mode 100644 index 0000000..345aade --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Funcionario.java @@ -0,0 +1,95 @@ +package com.restaurante.model; + +import java.util.List; + +/** + * Representa um funcionário do restaurante, que é uma especialização de {@link Pessoa}. + * + * Além dos atributos herdados de Pessoa (nome, cpf, endereço), + * o funcionário possui carteira de trabalho (CTP), cargo e uma lista de mesas que ele atende. + * + * @see Pessoa + * + */ +public class Funcionario extends Pessoa { + + /** Número da Carteira de Trabalho e Previdência Social do funcionário. */ + private String ctp; + + /** Cargo ocupado pelo funcionário. */ + private String cargo; + + /** Lista de mesas atribuídas ao funcionário. */ + private List mesas; + + /** + * Construtor para criar um funcionário com nome, CPF, endereço, CTP, cargo e lista de mesas. + * + * @param nome nome do funcionário + * @param cpf CPF do funcionário + * @param endereco endereço do funcionário + * @param ctp número da carteira de trabalho + * @param cargo cargo do funcionário + * @param mesas lista de mesas que o funcionário atende + */ + public Funcionario(String nome, String cpf, Endereco endereco, String ctp, String cargo, List mesas) { + super(nome, cpf, endereco); + this.ctp = ctp; + this.cargo = cargo; + this.mesas = mesas; + } + + /** + * Obtém o número da carteira de trabalho do funcionário. + * + * @return número da CTP + */ + public String getCtp() { + return ctp; + } + + /** + * Define o número da carteira de trabalho do funcionário. + * + * @param ctp novo número da CTP + */ + public void setCtp(String ctp) { + this.ctp = ctp; + } + + /** + * Obtém o cargo do funcionário. + * + * @return cargo do funcionário + */ + public String getCargo() { + return cargo; + } + + /** + * Define o cargo do funcionário. + * + * @param cargo novo cargo do funcionário + */ + public void setCargo(String cargo) { + this.cargo = cargo; + } + + /** + * Obtém a lista de mesas que o funcionário atende. + * + * @return lista de mesas + */ + public List getMesas() { + return mesas; + } + + /** + * Define a lista de mesas que o funcionário atende. + * + * @param mesas nova lista de mesas + */ + public void setMesas(List mesas) { + this.mesas = mesas; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/model/Mesa.java b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Mesa.java new file mode 100644 index 0000000..353e5a3 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Mesa.java @@ -0,0 +1,63 @@ +package com.restaurante.model; + +/** + * Representa uma mesa do restaurante, identificada por número e localização. + * + * Esta classe encapsula os atributos básicos de uma mesa, + * incluindo seu número identificador e o local onde está posicionada. + */ +public class Mesa { + + /** Número identificador da mesa. */ + private String numero; + + /** Localização da mesa no restaurante. */ + private String local; + + /** + * Construtor para criar uma mesa com número e local definidos. + * + * @param numero número identificador da mesa + * @param local localização da mesa + */ + public Mesa(String numero, String local) { + this.numero = numero; + this.local = local; + } + + /** + * Obtém o número da mesa. + * + * @return número da mesa + */ + public String getNumero() { + return numero; + } + + /** + * Define o número da mesa. + * + * @param numero novo número da mesa + */ + public void setNumero(String numero) { + this.numero = numero; + } + + /** + * Obtém a localização da mesa. + * + * @return local da mesa + */ + public String getLocal() { + return local; + } + + /** + * Define a localização da mesa. + * + * @param local nova localização da mesa + */ + public void setLocal(String local) { + this.local = local; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/model/Pessoa.java b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Pessoa.java new file mode 100644 index 0000000..59f83ae --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Pessoa.java @@ -0,0 +1,87 @@ +package com.restaurante.model; + +/** + * Representa uma pessoa genérica com nome, CPF e endereço. + * + * Esta classe serve como base para outras classes que representam + * tipos específicos de pessoas, como Cliente e Funcionario. + * + */ +public class Pessoa { + + /** Nome da pessoa. */ + private String nome; + + /** CPF da pessoa. */ + private String cpf; + + /** Endereço da pessoa. */ + private Endereco endereco; + + /** + * Construtor para criar uma pessoa com nome, CPF e endereço. + * + * @param nome nome da pessoa + * @param cpf CPF da pessoa + * @param endereco endereço da pessoa + */ + public Pessoa(String nome, String cpf, Endereco endereco) { + this.nome = nome; + this.cpf = cpf; + this.endereco = endereco; + } + + /** + * Obtém o nome da pessoa. + * + * @return nome da pessoa + */ + public String getNome() { + return nome; + } + + /** + * Define o nome da pessoa. + * + * @param nome novo nome da pessoa + */ + public void setNome(String nome) { + this.nome = nome; + } + + /** + * Obtém o CPF da pessoa. + * + * @return CPF da pessoa + */ + public String getCpf() { + return cpf; + } + + /** + * Define o CPF da pessoa. + * + * @param cpf novo CPF da pessoa + */ + public void setCpf(String cpf) { + this.cpf = cpf; + } + + /** + * Obtém o endereço da pessoa. + * + * @return endereço da pessoa + */ + public Endereco getEndereco() { + return endereco; + } + + /** + * Define o endereço da pessoa. + * + * @param endereco novo endereço da pessoa + */ + public void setEndereco(Endereco endereco) { + this.endereco = endereco; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/model/Produto.java b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Produto.java new file mode 100644 index 0000000..631bccd --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Produto.java @@ -0,0 +1,121 @@ +package com.restaurante.model; + +/** + * Representa um produto do restaurante, com nome, valor base, + * percentual de lucro e valor do IVA (Imposto sobre Valor Agregado). + * + * O valor do produto pode ser ajustado com base no lucro e no IVA. + */ +public class Produto { + + /** Nome do produto. */ + private String nome; + + /** Valor base do produto (antes de impostos e lucro). */ + private float valorProd; + + /** Percentual de lucro aplicado sobre o valor base (ex: 5%). */ + private int lucro = 5; + + /** Valor do IVA aplicado sobre o valor base (ex: 1.23 corresponde a 23%). */ + private float iva = 1.23f; + + /** + * Construtor para criar produto com nome e valor base. + * Usa valores padrão para lucro (5%) e IVA (1.23). + * + * @param nome nome do produto + * @param valorProd valor base do produto + */ + public Produto(String nome, float valorProd) { + this.nome = nome; + this.valorProd = valorProd; + } + + /** + * Construtor completo para criar produto com todos os parâmetros. + * + * @param nome nome do produto + * @param valorProd valor base do produto + * @param lucro percentual de lucro aplicado + * @param iva valor do IVA aplicado + */ + public Produto(String nome, float valorProd, int lucro, float iva) { + this.nome = nome; + this.valorProd = valorProd; + this.lucro = lucro; + this.iva = iva; + } + + /** + * Obtém o nome do produto. + * + * @return nome do produto + */ + public String getNome() { + return nome; + } + + /** + * Define o nome do produto. + * + * @param nome novo nome do produto + */ + public void setNome(String nome) { + this.nome = nome; + } + + /** + * Obtém o valor base do produto. + * + * @return valor base do produto + */ + public float getValorProd() { + return valorProd; + } + + /** + * Define o valor base do produto. + * + * @param valorProd novo valor base do produto + */ + public void setValorProd(float valorProd) { + this.valorProd = valorProd; + } + + /** + * Obtém o valor do IVA aplicado ao produto. + * + * @return valor do IVA + */ + public float getIva() { + return iva; + } + + /** + * Define o valor do IVA aplicado ao produto. + * + * @param iva novo valor do IVA + */ + public void setIva(float iva) { + this.iva = iva; + } + + /** + * Obtém o percentual de lucro aplicado ao produto. + * + * @return percentual de lucro + */ + public int getLucro() { + return lucro; + } + + /** + * Define o percentual de lucro aplicado ao produto. + * + * @param lucro novo percentual de lucro + */ + public void setLucro(int lucro) { + this.lucro = lucro; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/view/ClienteView.java b/avaliacoes/restaurante/src/main/java/com/restaurante/view/ClienteView.java new file mode 100644 index 0000000..7f5f473 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/ClienteView.java @@ -0,0 +1,78 @@ +package com.restaurante.view; + +import java.util.Scanner; +import com.restaurante.model.Cliente; + +/** + * Classe responsável pela interação com o usuário para operações + * relacionadas a clientes, incluindo captura de dados e exibição de informações. + * + * Utiliza a entrada padrão (Scanner) para capturar dados do usuário. + * + */ +public class ClienteView { + + /** Scanner para entrada de dados via teclado. */ + private Scanner scanner = new Scanner(System.in); + + /** + * Captura os dados básicos de um cliente pelo teclado: + * nome, CPF e número de fidelidade. + * O endereço não é capturado aqui e deve ser setado posteriormente. + * + * @return objeto Cliente criado com os dados capturados + */ + public Cliente capturarCliente() { + System.out.print("Nome: "); + String nome = scanner.nextLine(); + System.out.print("CPF: "); + String cpf = scanner.nextLine(); + System.out.print("Número de Fidelidade: "); + int numFid = Integer.parseInt(scanner.nextLine()); + + return new Cliente(nome, cpf, null, numFid); // Endereço será setado depois + } + + /** + * Captura o CPF do cliente via entrada padrão. + * + * @return CPF capturado como String + */ + public String capturarCpf() { + System.out.print("Digite o CPF do cliente: "); + return scanner.nextLine(); + } + + /** + * Exibe os dados de um cliente formatados no console, + * incluindo nome, CPF, número de fidelidade e, se existir, o endereço. + * + * @param c cliente cujos dados serão exibidos + */ + public void mostrar(Cliente c) { + System.out.println("Nome: " + c.getNome()); + System.out.println("CPF: " + c.getCpf()); + System.out.println("Número de Fidelidade: " + c.getNumFid()); + if (c.getEndereco() != null) + System.out.println("Endereço: " + c.getEndereco().getEndereco() + " - " + c.getEndereco().getCep()); + System.out.println("--------------------------"); + } + + /** + * Exibe uma mensagem genérica no console. + * + * @param msg mensagem a ser exibida + */ + public void mostrarMensagem(String msg) { + System.out.println(msg); + } + + /** + * Retorna o objeto Scanner usado para captura de entrada. + * + * @return Scanner associado à entrada padrão + */ + public Scanner getScanner() { + return scanner; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/view/EnderecoView.java b/avaliacoes/restaurante/src/main/java/com/restaurante/view/EnderecoView.java new file mode 100644 index 0000000..ecb1586 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/EnderecoView.java @@ -0,0 +1,91 @@ +package com.restaurante.view; + +import java.util.List; +import java.util.Scanner; +import com.restaurante.model.Endereco; + +/** + * Classe responsável pela interação com o usuário para operações + * relacionadas a endereços, incluindo captura e exibição de dados. + * Utiliza a entrada padrão (Scanner) para capturar dados do usuário. + * + * Fornece métodos para capturar um endereço completo, capturar um CEP, + * mostrar um endereço individual, mostrar uma lista de endereços e + * exibir mensagens gerais. + */ +public class EnderecoView { + + /** Scanner para entrada de dados via teclado. */ + private Scanner scanner = new Scanner(System.in); + + /** + * Captura os dados necessários para criar um objeto Endereco, + * solicitando tipo, número e CEP ao usuário. + * + * @return objeto Endereco criado com os dados capturados + */ + public Endereco capturarEndereco() { + 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(); + + return new Endereco(tipo, cep, numero); + } + + /** + * Captura o CEP do usuário via entrada padrão. + * + * @return CEP capturado como String + */ + public String capturarCep() { + System.out.print("Digite o CEP: "); + return scanner.nextLine(); + } + + /** + * Exibe as informações de um endereço formatadas no console. + * Caso o endereço seja nulo, exibe uma mensagem informando que + * o endereço não foi encontrado. + * + * @param e endereço a ser exibido + */ + public void mostrarEndereco(Endereco e) { + if (e != null) { + System.out.printf("Endereço: %s, %d, CEP: %s%n", e.getTipo(), e.getNumero(), e.getCep()); + } else { + System.out.println("Endereço não encontrado."); + } + } + + /** + * Exibe uma lista de endereços no console, formatando cada um. + * Caso a lista esteja vazia, exibe uma mensagem informando que + * não há endereços cadastrados. + * + * @param enderecos lista de endereços a ser exibida + */ + public void mostrarListaEnderecos(List enderecos) { + if (enderecos.isEmpty()) { + System.out.println("Nenhum endereço cadastrado."); + } else { + System.out.println("Lista de endereços:"); + for (Endereco e : enderecos) { + System.out.printf("- %s, %d, CEP: %s%n", e.getTipo(), e.getNumero(), e.getCep()); + } + } + } + + /** + * Exibe uma mensagem genérica no console. + * + * @param msg mensagem a ser exibida + */ + public void mostrarMensagem(String msg) { + System.out.println(msg); + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/view/FuncionarioView.java b/avaliacoes/restaurante/src/main/java/com/restaurante/view/FuncionarioView.java new file mode 100644 index 0000000..41c1098 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/FuncionarioView.java @@ -0,0 +1,155 @@ +package com.restaurante.view; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +import com.restaurante.model.Funcionario; +import com.restaurante.model.Mesa; + +/** + * Classe responsável pela interação com o usuário para operações relacionadas a funcionários, + * incluindo captura de dados e exibição de informações. + * + * Permite capturar informações de um funcionário, associando mesas já existentes ou criando novas mesas, + * capturar CPF para buscas ou remoções, mostrar detalhes do funcionário e exibir mensagens genéricas. + * + */ +public class FuncionarioView { + private Scanner scanner = new Scanner(System.in); + + /** + * Captura os dados para criar um funcionário associando mesas já existentes. + * Exibe a lista de mesas disponíveis para seleção e permite que o usuário selecione múltiplas mesas. + * + * @param mesasExistentes lista de mesas já cadastradas e disponíveis para associação + * @return um objeto Funcionario criado com os dados fornecidos e as mesas selecionadas + */ + public Funcionario capturarFuncionarioComMesasExistentes(List mesasExistentes) { + System.out.print("Nome: "); + String nome = scanner.nextLine(); + System.out.print("CPF: "); + String cpf = scanner.nextLine(); + System.out.print("CTP: "); + String ctp = scanner.nextLine(); + System.out.print("Cargo: "); + String cargo = scanner.nextLine(); + + List mesasSelecionadas = new ArrayList<>(); + String opcao = "s"; + + while (opcao.equalsIgnoreCase("s")) { + System.out.println("Mesas disponíveis:"); + for (int i = 0; i < mesasExistentes.size(); i++) { + Mesa m = mesasExistentes.get(i); + System.out.printf("%d - Mesa %s - Local: %s%n", i + 1, m.getNumero(), m.getLocal()); + } + System.out.print("Escolha o número da mesa para associar: "); + int escolha; + try { + escolha = Integer.parseInt(scanner.nextLine()); + } catch (NumberFormatException e) { + System.out.println("Entrada inválida, tente novamente."); + continue; + } + + if (escolha >= 1 && escolha <= mesasExistentes.size()) { + Mesa mesaEscolhida = mesasExistentes.get(escolha - 1); + if (!mesasSelecionadas.contains(mesaEscolhida)) { + mesasSelecionadas.add(mesaEscolhida); + } else { + System.out.println("Mesa já selecionada."); + } + } else { + System.out.println("Opção inválida."); + } + + System.out.print("Deseja adicionar outra mesa? (s/n): "); + opcao = scanner.nextLine(); + } + + return new Funcionario(nome, cpf, null, ctp, cargo, mesasSelecionadas); + } + + /** + * Captura os dados para criar um funcionário incluindo mesas criadas manualmente. + * Permite adicionar múltiplas mesas informando número e local. + * + * @return um objeto Funcionario criado com os dados fornecidos e mesas informadas manualmente + */ + public Funcionario capturarFuncionario() { + System.out.print("Nome: "); + String nome = scanner.nextLine(); + System.out.print("CPF: "); + String cpf = scanner.nextLine(); + System.out.print("CTP: "); + String ctp = scanner.nextLine(); + System.out.print("Cargo: "); + String cargo = scanner.nextLine(); + + List mesas = new ArrayList<>(); + String opcao = "s"; + + while (opcao.equalsIgnoreCase("s")) { + System.out.print("Número da mesa: "); + String numero = scanner.nextLine(); + System.out.print("Local da mesa: "); + String local = scanner.nextLine(); + + mesas.add(new Mesa(numero, local)); + + System.out.print("Deseja adicionar outra mesa? (s/n): "); + opcao = scanner.nextLine(); + } + + return new Funcionario(nome, cpf, null, ctp, cargo, mesas); + } + + /** + * Captura o CPF do funcionário via entrada padrão. + * + * @return CPF capturado como String + */ + public String capturarCpf() { + System.out.print("Digite o CPF do funcionário: "); + return scanner.nextLine(); + } + + /** + * Exibe as informações de um funcionário formatadas no console, + * incluindo nome, CPF, CTP, cargo e mesas associadas. + * + * @param f funcionário cujos dados serão exibidos + */ + public void mostrar(Funcionario f) { + System.out.println("Nome: " + f.getNome()); + System.out.println("CPF: " + f.getCpf()); + System.out.println("CTP: " + f.getCtp()); + System.out.println("Cargo: " + f.getCargo()); + if (f.getMesas() != null && !f.getMesas().isEmpty()) { + System.out.println("Mesas:"); + for (Mesa m : f.getMesas()) { + System.out.println(" - Mesa " + m.getNumero() + " - Local: " + m.getLocal()); + } + } + System.out.println("--------------------------"); + } + + /** + * Exibe uma mensagem genérica no console. + * + * @param msg mensagem a ser exibida + */ + public void mostrarMensagem(String msg) { + System.out.println(msg); + } + + /** + * Retorna o objeto Scanner usado para captura de entrada. + * + * @return Scanner associado à entrada padrão + */ + public Scanner getScanner() { + return scanner; + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/view/MesaView.java b/avaliacoes/restaurante/src/main/java/com/restaurante/view/MesaView.java new file mode 100644 index 0000000..7808df1 --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/MesaView.java @@ -0,0 +1,56 @@ +package com.restaurante.view; + +import java.util.Scanner; +import com.restaurante.model.Mesa; +import java.util.List; + +/** + * Classe responsável pela interação com o usuário para operações + * relacionadas a mesas, incluindo captura e exibição de dados. + * Utiliza a entrada padrão (Scanner) para capturar dados do usuário. + * + * Fornece métodos para pedir o número e o local da mesa, + * além de exibir uma lista de mesas cadastradas. + * + */ +public class MesaView { + + /** Scanner para entrada de dados via teclado. */ + private Scanner scanner = new Scanner(System.in); + + /** + * Solicita ao usuário o número da mesa. + * + * @return número da mesa informado pelo usuário + */ + public String pedirNumeroMesa() { + System.out.print("Número da mesa: "); + return scanner.nextLine(); + } + + /** + * Solicita ao usuário o local da mesa. + * + * @return local da mesa informado pelo usuário + */ + public String pedirLocalMesa() { + System.out.print("Local da mesa: "); + return scanner.nextLine(); + } + + /** + * Exibe a lista de mesas no console. + * Caso a lista esteja vazia, exibe uma mensagem informando que não há mesas cadastradas. + * + * @param mesas lista de mesas a ser exibida + */ + public void exibirMesas(List mesas) { + if (mesas.isEmpty()) { + System.out.println("Nenhuma mesa cadastrada."); + } else { + for (Mesa m : mesas) { + System.out.println("Mesa " + m.getNumero() + " - Local: " + m.getLocal()); + } + } + } +} diff --git a/avaliacoes/restaurante/src/main/java/com/restaurante/view/ProdutoView.java b/avaliacoes/restaurante/src/main/java/com/restaurante/view/ProdutoView.java new file mode 100644 index 0000000..aebe24a --- /dev/null +++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/ProdutoView.java @@ -0,0 +1,74 @@ +package com.restaurante.view; + +import java.util.Scanner; +import java.util.List; +import com.restaurante.model.Produto; + +/** + * Classe responsável pela interface de entrada e saída de dados relacionada aos produtos. + * Utiliza Scanner para capturar dados do usuário e exibe informações dos produtos no console. + * + * Permite capturar o nome e o valor do produto com validação para entrada numérica, + * além de exibir uma lista de produtos formatada. + * + */ +public class ProdutoView { + /** Scanner para entrada de dados do usuário */ + private Scanner scanner; + + /** + * Construtor que inicializa o Scanner para leitura da entrada padrão. + */ + public ProdutoView() { + scanner = new Scanner(System.in); + } + + /** + * Solicita ao usuário o nome do produto. + * + * @return nome do produto informado pelo usuário + */ + public String pedirNomeProduto() { + System.out.print("Nome do produto: "); + return scanner.nextLine(); + } + + /** + * Solicita ao usuário o valor do produto e valida a entrada. + * Repete a solicitação enquanto o valor informado não for válido (float). + * + * @return valor do produto informado pelo usuário + */ + public float pedirValorProduto() { + float valor = 0; + boolean valido = false; + + while (!valido) { + try { + System.out.print("Valor do produto: "); + valor = Float.parseFloat(scanner.nextLine()); + valido = true; + } catch (NumberFormatException e) { + System.out.println("Valor inválido. Tente novamente."); + } + } + + return valor; + } + + /** + * Exibe a lista de produtos no console. + * Caso a lista esteja vazia, exibe uma mensagem informando que nenhum produto foi encontrado. + * + * @param produtos lista de produtos a ser exibida + */ + public void exibirProdutos(List produtos) { + if (produtos.isEmpty()) { + System.out.println("Nenhum produto encontrado."); + } else { + for (Produto p : produtos) { + System.out.printf("Produto: %-20s | Valor: R$ %.2f%n | \n ", p.getNome(), p.getValorProd()); + } + } + } +}