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..325b201
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/Main.java
@@ -0,0 +1,196 @@
+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;
+
+public class Main {
+ 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();
+
+ // Controllers endereço
+ CreateEnderecoController createEndereco = new CreateEnderecoController();
+ DeleteEnderecoController deleteEndereco = new DeleteEnderecoController();
+ SearchEnderecoController searchEndereco = new SearchEnderecoController();
+
+ // Carrega lista de endereços do arquivo para usar em memória (lista compartilhada)
+ 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();
+ }
+
+ 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.");
+ }
+ }
+
+ 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.");
+ }
+ }
+
+ 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());
+ }
+ }
+
+ 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());
+ }
+ }
+
+ 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..72682cb
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/CreateClienteController.java
@@ -0,0 +1,58 @@
+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;
+
+public class CreateClienteController {
+ private ClienteView view = new ClienteView();
+ private ClienteDAO dao = new ClienteDAO();
+ private EnderecoDAO enderecoDAO = new EnderecoDAO();
+ private SearchEnderecoController searchEndereco = new SearchEnderecoController();
+ private List enderecos;
+
+ 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!");
+ }
+
+ 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..498b949
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/DeleteClienteController.java
@@ -0,0 +1,20 @@
+package com.restaurante.controllers.cliente;
+import com.restaurante.dao.ClienteDAO;
+
+import com.restaurante.view.ClienteView;
+
+public class DeleteClienteController {
+ private ClienteView view = new ClienteView();
+ private ClienteDAO dao = new ClienteDAO();
+
+ 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..528fdf4
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/cliente/SearchClienteController.java
@@ -0,0 +1,15 @@
+package com.restaurante.controllers.cliente;
+import com.restaurante.dao.ClienteDAO;
+import com.restaurante.model.Cliente;
+import com.restaurante.view.ClienteView;
+
+public class SearchClienteController {
+ private ClienteView view = new ClienteView();
+ private ClienteDAO dao = new ClienteDAO();
+
+ 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..3874b80
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/CreateEnderecoController.java
@@ -0,0 +1,24 @@
+package com.restaurante.controllers.endereco;
+
+import com.restaurante.dao.EnderecoDAO;
+import com.restaurante.model.Endereco;
+import com.restaurante.view.EnderecoView;
+
+import java.util.List;
+
+public class CreateEnderecoController {
+ private EnderecoDAO dao = new EnderecoDAO();
+ private EnderecoView view = new EnderecoView();
+
+ public void criarEndereco(List listaEnderecos) {
+ Endereco novo = view.capturarEndereco();
+ listaEnderecos.add(novo);
+ dao.salvarEndereco(novo);
+ view.mostrarMensagem("Endereço criado com sucesso!");
+ }
+
+ // 🔧 MÉTODO PÚBLICO NOVO
+ 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..ff9d73f
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/DeleteEnderecoController.java
@@ -0,0 +1,23 @@
+package com.restaurante.controllers.endereco;
+
+import com.restaurante.dao.EnderecoDAO;
+import com.restaurante.model.Endereco;
+import com.restaurante.view.EnderecoView;
+
+import java.util.List;
+
+public class DeleteEnderecoController {
+ private EnderecoDAO dao = new EnderecoDAO();
+ private EnderecoView view = new EnderecoView();
+
+ 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..74bd47a
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/endereco/SearchEnderecoController.java
@@ -0,0 +1,27 @@
+package com.restaurante.controllers.endereco;
+
+import com.restaurante.model.Endereco;
+import com.restaurante.view.EnderecoView;
+
+import java.util.List;
+
+public class SearchEnderecoController {
+ private EnderecoView view = new EnderecoView();
+
+ public void listarEnderecos(List listaEnderecos) {
+ view.mostrarListaEnderecos(listaEnderecos);
+ }
+
+ public void buscarPorCep(List listaEnderecos) {
+ String cep = view.capturarCep();
+ Endereco e = buscarPorCep(listaEnderecos, cep);
+ view.mostrarEndereco(e);
+ }
+
+ public Endereco buscarPorCep(List listaEnderecos, String cep) {
+ return listaEnderecos.stream()
+ .filter(end -> end.getCep().equals(cep))
+ .findFirst()
+ .orElse(null);
+ }
+}
\ No newline at end of file
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..48593a9
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/CreateFuncionarioController.java
@@ -0,0 +1,33 @@
+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;
+
+public class CreateFuncionarioController {
+
+ private FuncionarioView funcionarioView = new FuncionarioView();
+ private FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
+ private MesaDAO mesaDAO = new MesaDAO();
+
+ 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..5022716
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/DeleteFuncionarioController.java
@@ -0,0 +1,19 @@
+package com.restaurante.controllers.funcionario;
+import com.restaurante.dao.FuncionarioDAO;
+import com.restaurante.view.FuncionarioView;
+
+public class DeleteFuncionarioController {
+ private FuncionarioView view = new FuncionarioView();
+ private FuncionarioDAO dao = new FuncionarioDAO();
+
+ 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..a772928
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/funcionario/SearchFuncionarioController.java
@@ -0,0 +1,19 @@
+package com.restaurante.controllers.funcionario;
+
+
+
+import com.restaurante.dao.FuncionarioDAO;
+import com.restaurante.model.Funcionario;
+import com.restaurante.view.FuncionarioView;
+
+
+public class SearchFuncionarioController {
+ private FuncionarioView view = new FuncionarioView();
+ private FuncionarioDAO dao = new FuncionarioDAO();
+
+ 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..d378e42
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/CreateMesaController.java
@@ -0,0 +1,27 @@
+package com.restaurante.controllers.mesa;
+
+import java.io.IOException;
+
+import com.restaurante.dao.MesaDAO;
+import com.restaurante.model.Mesa;
+import com.restaurante.view.MesaView;
+
+public class CreateMesaController {
+ private MesaDAO dao;
+ private MesaView view;
+
+ public CreateMesaController(){
+ this.dao = new MesaDAO();
+ this.view = new MesaView();
+ }
+
+ 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..2ebe2bd
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/DeleteMesaController.java
@@ -0,0 +1,24 @@
+package com.restaurante.controllers.mesa;
+
+import java.io.IOException;
+
+import com.restaurante.dao.MesaDAO;
+import com.restaurante.view.MesaView;
+
+public class DeleteMesaController {
+ private MesaDAO dao;
+ private MesaView view;
+
+ public DeleteMesaController(){
+ this.dao = new MesaDAO();
+ this.view = new MesaView();
+ }
+
+ 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..ced9275
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/mesa/SearchMesaController.java
@@ -0,0 +1,23 @@
+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;
+
+public class SearchMesaController {
+ private MesaDAO dao;
+ private MesaView view;
+
+ public SearchMesaController(){
+ this.dao = new MesaDAO();
+ this.view = new MesaView();
+ }
+
+ 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..089e356
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/CreateProdutoController.java
@@ -0,0 +1,26 @@
+package com.restaurante.controllers.produto;
+
+import java.io.IOException;
+
+import com.restaurante.dao.ProdutoDAO;
+import com.restaurante.model.Produto;
+import com.restaurante.view.ProdutoView;
+
+public class CreateProdutoController {
+ private ProdutoDAO dao;
+ private ProdutoView view;
+
+ public CreateProdutoController() {
+ dao = new ProdutoDAO();
+ view = new ProdutoView();
+ }
+
+ 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..c185e49
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/DeleteProdutoController.java
@@ -0,0 +1,23 @@
+package com.restaurante.controllers.produto;
+
+import java.io.IOException;
+
+import com.restaurante.dao.ProdutoDAO;
+import com.restaurante.view.ProdutoView;
+
+public class DeleteProdutoController {
+ private ProdutoDAO dao;
+ private ProdutoView view;
+
+ public DeleteProdutoController() {
+ dao = new ProdutoDAO();
+ view = new ProdutoView();
+ }
+
+ 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..12f6227
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/controllers/produto/SearchProdutoController.java
@@ -0,0 +1,24 @@
+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;
+
+public class SearchProdutoController {
+ private ProdutoDAO dao;
+ private ProdutoView view;
+
+ public SearchProdutoController() {
+ dao = new ProdutoDAO();
+ view = new ProdutoView();
+ }
+
+ 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..541e602
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/ClienteDAO.java
@@ -0,0 +1,96 @@
+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;
+
+public class ClienteDAO {
+ private static final String ARQUIVO = "clientes.txt";
+
+ // Salva cliente com endereço serializado
+ 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 clientes desserializando endereço
+ 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 cliente pelo CPF
+ 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..92646b6
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/EnderecoDAO.java
@@ -0,0 +1,65 @@
+package com.restaurante.dao;
+
+import com.restaurante.model.Endereco;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class EnderecoDAO {
+ private static final String ARQUIVO = "enderecos.txt";
+
+ 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());
+ }
+ }
+
+ private String formatarEndereco(Endereco e) {
+ return e.getTipo() + ";" + e.getNumero() + ";" + e.getCep();
+ }
+
+ 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, tudo bem
+ } catch (IOException e) {
+ System.out.println("Erro ao ler arquivo de endereços: " + e.getMessage());
+ }
+ return lista;
+ }
+
+ public boolean deletarEnderecoPorCep(List lista, String cep) {
+ boolean removido = lista.removeIf(e -> e.getCep().equals(cep));
+ if (removido) {
+ salvarListaAtualizada(lista);
+ }
+ return removido;
+ }
+
+ 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..d4aaf59
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/FuncionarioDAO.java
@@ -0,0 +1,107 @@
+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;
+
+public class FuncionarioDAO {
+ private static final String ARQUIVO = "funcionarios.txt";
+
+ // Salvar funcionário no arquivo com mesas serializadas
+ 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());
+ }
+ }
+
+ // Listar todos os funcionários do arquivo, desserializando as mesas
+ 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;
+ }
+
+ // Remover funcionário pelo CPF
+ 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..7c0a4ad
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/MesaDAO.java
@@ -0,0 +1,48 @@
+package com.restaurante.dao;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.restaurante.model.Mesa;
+
+public class MesaDAO {
+ private static final String FILE_NAME = "mesas.txt";
+
+ 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();
+ }
+ }
+
+ 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;
+ }
+
+ 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..b54181e
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/dao/ProdutoDAO.java
@@ -0,0 +1,50 @@
+package com.restaurante.dao;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.restaurante.model.Produto;
+
+public class ProdutoDAO {
+ private static final String FILE_NAME = "produtos.txt";
+
+ 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();
+ }
+ }
+
+ 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;
+ }
+
+ 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..be2d735
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Cliente.java
@@ -0,0 +1,18 @@
+package com.restaurante.model;
+
+public class Cliente extends Pessoa{
+ private int numFid;
+
+ public Cliente(String nome, String cpf,Endereco endereco,int numFid) {
+ super(nome, cpf, endereco );
+ this.numFid = numFid;
+ }
+
+ public int getNumFid() {
+ return numFid;
+ }
+
+ public void setNumFid(int numFid) {
+ this.numFid = numFid;
+ }
+}
\ No newline at end of file
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..72520a5
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Endereco.java
@@ -0,0 +1,42 @@
+package com.restaurante.model;
+
+public class Endereco {
+ private String tipo;
+ private String cep;
+ private int numero;
+
+ public Endereco(String tipo, String cep, int numero) {
+ this.tipo = tipo;
+ this.cep = cep;
+ this.numero = numero;
+ }
+
+ public String getTipo() {
+ return tipo;
+ }
+
+ public void setTipo(String tipo) {
+ this.tipo = tipo;
+ }
+
+ public String getCep() {
+ return cep;
+ }
+
+ public void setCep(String cep) {
+ this.cep = cep;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+
+ public void setNumero(int numero) {
+ this.numero = numero;
+ }
+
+ 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..707076e
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Funcionario.java
@@ -0,0 +1,40 @@
+package com.restaurante.model;
+
+import java.util.List;
+
+public class Funcionario extends Pessoa{
+ private String ctp;
+ private String cargo;
+ private List mesas;
+
+ 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;
+ }
+
+ public String getCtp() {
+ return ctp;
+ }
+
+ public void setCtp(String ctp) {
+ this.ctp = ctp;
+ }
+
+ public String getCargo() {
+ return cargo;
+ }
+
+ public void setCargo(String cargo) {
+ this.cargo = cargo;
+ }
+
+ public List getMesas() {
+ return 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..15bd081
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Mesa.java
@@ -0,0 +1,27 @@
+package com.restaurante.model;
+
+public class Mesa {
+ private String numero;
+ private String local;
+
+ public Mesa(String numero, String local) {
+ this.numero = numero;
+ this.local = local;
+ }
+
+ public String getNumero() {
+ return numero;
+ }
+
+ public void setNumero(String numero) {
+ this.numero = numero;
+ }
+
+ public String getLocal() {
+ return local;
+ }
+
+ public void setLocal(String local) {
+ this.local = local;
+ }
+}
\ No newline at end of file
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..41b2330
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Pessoa.java
@@ -0,0 +1,32 @@
+package com.restaurante.model;
+
+public class Pessoa {
+ private String nome;
+ private String cpf;
+ private Endereco endereco;
+
+ public Pessoa(String nome, String cpf,Endereco endereco) {
+ this.nome = nome;
+ this.cpf = cpf;
+ this.endereco = endereco;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+ public String getCpf() {
+ return cpf;
+ }
+ public void setCpf(String cpf) {
+ this.cpf = cpf;
+ }
+ public Endereco getEndereco() {
+ return endereco;
+ }
+ 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..bc9d4ae
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/model/Produto.java
@@ -0,0 +1,55 @@
+package com.restaurante.model;
+
+public class Produto {
+ private String nome;
+ private float valorProd;
+
+
+ private int lucro = 5;
+ private float iva = (float) 1.23;
+
+
+ public Produto(String nome, float valorProd) {
+ this.nome = nome;
+ this.valorProd = valorProd;
+ }
+
+ public Produto(String nome, float valorProd, int lucro, float iva) {
+ this.nome = nome;
+ this.valorProd = valorProd;
+ this.lucro = lucro;
+ this.iva = iva;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public float getValorProd() {
+ return valorProd;
+ }
+
+ public void setValorProd(float valorProd) {
+ this.valorProd = valorProd;
+ }
+
+ public float getIva() {
+ return iva;
+ }
+
+ public void setIva(float iva) {
+ this.iva = iva;
+ }
+
+ public int getLucro() {
+ return lucro;
+ }
+
+ public void setLucro(int lucro) {
+ this.lucro = lucro;
+ }
+}
\ No newline at end of file
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..2418b1e
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/ClienteView.java
@@ -0,0 +1,41 @@
+package com.restaurante.view;
+
+import java.util.Scanner;
+import com.restaurante.model.Cliente;
+
+public class ClienteView {
+ private Scanner scanner = new Scanner(System.in);
+
+ 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
+ }
+
+ public String capturarCpf() {
+ System.out.print("Digite o CPF do cliente: ");
+ return scanner.nextLine();
+ }
+
+ 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("--------------------------");
+ }
+
+ public void mostrarMensagem(String msg) {
+ System.out.println(msg);
+ }
+
+ 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..5047153
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/EnderecoView.java
@@ -0,0 +1,50 @@
+package com.restaurante.view;
+
+import java.util.List;
+import java.util.Scanner;
+import com.restaurante.model.Endereco;
+
+public class EnderecoView {
+ private Scanner scanner = new Scanner(System.in);
+
+ 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);
+ }
+
+ public String capturarCep() {
+ System.out.print("Digite o CEP: ");
+ return scanner.nextLine();
+ }
+
+ 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.");
+ }
+ }
+
+ 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());
+ }
+ }
+ }
+
+ 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..d673f82
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/FuncionarioView.java
@@ -0,0 +1,113 @@
+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;
+
+public class FuncionarioView {
+ private Scanner scanner = new Scanner(System.in);
+
+ 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);
+ }
+
+ 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);
+ }
+
+ public String capturarCpf() {
+ System.out.print("Digite o CPF do funcionário: ");
+ return scanner.nextLine();
+ }
+
+ 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("--------------------------");
+ }
+
+ public void mostrarMensagem(String msg) {
+ System.out.println(msg);
+ }
+
+ 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..cf2044a
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/MesaView.java
@@ -0,0 +1,33 @@
+package com.restaurante.view;
+
+import java.util.Scanner;
+
+import com.restaurante.model.Mesa;
+
+import java.util.List;
+
+public class MesaView {
+ private Scanner scanner = new Scanner(System.in);
+
+ public String pedirNumeroMesa() {
+ System.out.print("Número da mesa: ");
+ return scanner.nextLine();
+ }
+
+ public String pedirLocalMesa() {
+ System.out.print("Local da mesa: ");
+ return scanner.nextLine();
+ }
+
+ 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..b8e08ab
--- /dev/null
+++ b/avaliacoes/restaurante/src/main/java/com/restaurante/view/ProdutoView.java
@@ -0,0 +1,45 @@
+package com.restaurante.view;
+
+import java.util.Scanner;
+import java.util.List;
+import com.restaurante.model.Produto;
+
+public class ProdutoView {
+ private Scanner scanner;
+
+ public ProdutoView() {
+ scanner = new Scanner(System.in);//Cria um objeto "scanner" que vai ler o que é digitado no terminal (System.in)
+ }
+
+ public String pedirNomeProduto() {
+ System.out.print("Nome do produto: ");
+ return scanner.nextLine(); //Aguarda o usuário a digitar uma linha de texto e retorna esse valor para o controller. Util para textos com espaços.
+ }
+
+ public float pedirValorProduto() {
+ float valor = 0;
+ boolean valido = false;//variavel para ver se a entrada q o usuário digitou é válida
+
+ while (!valido) {//continua pedindo o preço do produto até que o usuário dê uma entrada válida
+ try {
+ System.out.print("Valor do produto: ");
+ valor = Float.parseFloat(scanner.nextLine()); //converte a entrada o usuario String para float
+ valido = true;
+ } catch (NumberFormatException e) {//se der errado, aciona a exceção e exibe uma mensagem de erro
+ System.out.println("Valor inválido. Tente novamente.");
+ }
+ }
+
+ return valor; // retorna para o controller
+ }
+
+ public void exibirProdutos(List produtos) {
+ if (produtos.isEmpty()) {
+ System.out.println("Nenhum produto encontrado.");
+ } else {
+ for (Produto p : produtos) {//loop for each que percorre a todos os produtos da lista, para cada produto, ele retorna o nome e o preço
+ System.out.printf("Produto: %-20s | Valor: R$ %.2f%n | \n ", p.getNome(), p.getValorProd());
+ }
+ }
+ }
+}
diff --git a/case-study/the-gym/gym/pom.xml b/case-study/the-gym/gym/pom.xml
new file mode 100644
index 0000000..1ee756a
--- /dev/null
+++ b/case-study/the-gym/gym/pom.xml
@@ -0,0 +1,16 @@
+
+
+ 4.0.0
+
+ com.gym
+ gym
+ 1.0-SNAPSHOT
+
+
+ 17
+ 17
+
+
+
\ No newline at end of file
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Aluno.java b/case-study/the-gym/gym/src/main/java/com/gym/Aluno.java
new file mode 100644
index 0000000..e50209e
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Aluno.java
@@ -0,0 +1,203 @@
+package com.gym;
+
+
+import java.util.List;
+
+/**
+ * Representa um aluno com dados pessoais, planos, endereço,
+ * contatos e documentos associados.
+ */
+public class Aluno {
+
+ /** Matrícula do aluno. */
+ private int matricula;
+
+ /** Nome completo do aluno. */
+ private String nome;
+
+ /** Data de nascimento do aluno no formato String. */
+ private String dataNasc;
+
+ /** Email do aluno. */
+ private String email;
+
+ /** Plano associado ao aluno. */
+ private Plano plano;
+
+ /** Endereço residencial do aluno. */
+ private Endereco endereco;
+
+ /** Lista de contatos do aluno (telefone, celular, etc). */
+ private List contatos;
+
+ /** Documento do aluno (RG, CPF, etc). */
+ private Documento documento;
+
+ /**
+ * Construtor para criar um objeto Aluno com todos os atributos.
+ *
+ * @param matricula matrícula do aluno
+ * @param nome nome completo do aluno
+ * @param documento documento do aluno
+ * @param dataNasc data de nascimento do aluno
+ * @param email email do aluno
+ * @param endereco endereço residencial do aluno
+ * @param plano plano associado ao aluno
+ * @param contatos lista de contatos do aluno
+ */
+ public Aluno(int matricula, String nome, Documento documento, String dataNasc, String email, Endereco endereco,
+ Plano plano, List contatos) {
+ this.matricula = matricula;
+ this.nome = nome;
+ this.documento = documento;
+ this.dataNasc = dataNasc;
+ this.email = email;
+ this.endereco = endereco;
+ this.plano = plano;
+ this.contatos = contatos;
+ }
+
+ /**
+ * Obtém a matrícula do aluno.
+ *
+ * @return matrícula do aluno
+ */
+ public int getMatricula() {
+ return matricula;
+ }
+
+ /**
+ * Define a matrícula do aluno.
+ *
+ * @param matricula nova matrícula
+ */
+ public void setMatricula(int matricula) {
+ this.matricula = matricula;
+ }
+
+ /**
+ * Obtém o nome completo do aluno.
+ *
+ * @return nome do aluno
+ */
+ public String getNome() {
+ return nome;
+ }
+
+ /**
+ * Define o nome completo do aluno.
+ *
+ * @param nome novo nome do aluno
+ */
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ /**
+ * Obtém a data de nascimento do aluno.
+ *
+ * @return data de nascimento do aluno
+ */
+ public String getDataNasc() {
+ return dataNasc;
+ }
+
+ /**
+ * Define a data de nascimento do aluno.
+ *
+ * @param dataNasc nova data de nascimento
+ */
+ public void setDataNasc(String dataNasc) {
+ this.dataNasc = dataNasc;
+ }
+
+ /**
+ * Obtém o email do aluno.
+ *
+ * @return email do aluno
+ */
+ public String getEmail() {
+ return email;
+ }
+
+ /**
+ * Define o email do aluno.
+ *
+ * @param email novo email do aluno
+ */
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ /**
+ * Obtém o plano associado ao aluno.
+ *
+ * @return plano do aluno
+ */
+ public Plano getPlano() {
+ return plano;
+ }
+
+ /**
+ * Define o plano associado ao aluno.
+ *
+ * @param plano novo plano do aluno
+ */
+ public void setPlano(Plano plano) {
+ this.plano = plano;
+ }
+
+ /**
+ * Obtém o endereço residencial do aluno.
+ *
+ * @return endereço do aluno
+ */
+ public Endereco getEndereco() {
+ return endereco;
+ }
+
+ /**
+ * Define o endereço residencial do aluno.
+ *
+ * @param endereco novo endereço do aluno
+ */
+ public void setEndereco(Endereco endereco) {
+ this.endereco = endereco;
+ }
+
+ /**
+ * Obtém a lista de contatos do aluno.
+ *
+ * @return lista de contatos
+ */
+ public List getContatos() {
+ return contatos;
+ }
+
+ /**
+ * Define a lista de contatos do aluno.
+ *
+ * @param contatos nova lista de contatos
+ */
+ public void setContatos(List contatos) {
+ this.contatos = contatos;
+ }
+
+ /**
+ * Obtém o documento do aluno.
+ *
+ * @return documento do aluno
+ */
+ public Documento getDocumento() {
+ return documento;
+ }
+
+ /**
+ * Define o documento do aluno.
+ *
+ * @param documento novo documento do aluno
+ */
+ public void setDocumento(Documento documento) {
+ this.documento = documento;
+ }
+}
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Assinatura.java b/case-study/the-gym/gym/src/main/java/com/gym/Assinatura.java
new file mode 100644
index 0000000..377abd3
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Assinatura.java
@@ -0,0 +1,108 @@
+package com.gym;
+
+/**
+ * Representa uma assinatura que vincula um aluno a um plano,
+ * com datas de início e término do contrato.
+ */
+public class Assinatura {
+
+ /** Plano associado à assinatura. */
+ private Plano plano;
+
+ /** Aluno associado à assinatura. */
+ private Aluno aluno;
+
+ /** Data de início do contrato no formato String. */
+ private String dataContrato;
+
+ /** Data final do contrato no formato String. */
+ private String dataFinal;
+
+ /**
+ * Construtor para criar uma assinatura com todos os atributos.
+ *
+ * @param plano plano associado à assinatura
+ * @param aluno aluno vinculado à assinatura
+ * @param dataContrato data de início do contrato
+ * @param dataFinal data de término do contrato
+ */
+ public Assinatura(Plano plano, Aluno aluno, String dataContrato, String dataFinal) {
+ this.plano = plano;
+ this.aluno = aluno;
+ this.dataContrato = dataContrato;
+ this.dataFinal = dataFinal;
+ }
+
+ /**
+ * Obtém o plano associado à assinatura.
+ *
+ * @return plano da assinatura
+ */
+ public Plano getPlano() {
+ return plano;
+ }
+
+ /**
+ * Define o plano associado à assinatura.
+ *
+ * @param plano novo plano da assinatura
+ */
+ public void setPlano(Plano plano) {
+ this.plano = plano;
+ }
+
+ /**
+ * Obtém o aluno associado à assinatura.
+ *
+ * @return aluno da assinatura
+ */
+ public Aluno getAluno() {
+ return aluno;
+ }
+
+ /**
+ * Define o aluno associado à assinatura.
+ *
+ * @param aluno novo aluno da assinatura
+ */
+ public void setAluno(Aluno aluno) {
+ this.aluno = aluno;
+ }
+
+ /**
+ * Obtém a data de início do contrato.
+ *
+ * @return data de início do contrato
+ */
+ public String getDataContrato() {
+ return dataContrato;
+ }
+
+ /**
+ * Define a data de início do contrato.
+ *
+ * @param dataContrato nova data de início
+ */
+ public void setDataContrato(String dataContrato) {
+ this.dataContrato = dataContrato;
+ }
+
+ /**
+ * Obtém a data final do contrato.
+ *
+ * @return data final do contrato
+ */
+ public String getDataFinal() {
+ return dataFinal;
+ }
+
+ /**
+ * Define a data final do contrato.
+ *
+ * @param dataFinal nova data final
+ */
+ public void setDataFinal(String dataFinal) {
+ this.dataFinal = dataFinal;
+ }
+}
+
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Atendente.java b/case-study/the-gym/gym/src/main/java/com/gym/Atendente.java
new file mode 100644
index 0000000..62d74a5
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Atendente.java
@@ -0,0 +1,52 @@
+package com.gym;
+
+
+/**
+ * Representa um atendente, que é um tipo específico de funcionário,
+ * possuindo um número de guichê associado.
+ */
+public class Atendente extends Funcionario {
+
+ /** Número do guichê do atendente. */
+ private int guiche;
+
+ /**
+ * Construtor para criar um atendente com todas as informações necessárias,
+ * incluindo os dados herdados da classe Funcionário e o número do guichê.
+ *
+ * @param nome nome do atendente
+ * @param documento documento do atendente
+ * @param telefone telefone do atendente
+ * @param email e-mail do atendente
+ * @param turno turno de trabalho do atendente
+ * @param salario salário do atendente
+ * @param cargo cargo do atendente
+ * @param ctps carteira de trabalho do atendente
+ * @param endereco endereço do atendente
+ * @param guiche número do guichê do atendente
+ */
+ public Atendente(String nome, Documento documento, String telefone, String email,
+ String turno, String salario, String cargo, String ctps, Endereco endereco, int guiche) {
+ super(nome, documento, telefone, email, turno, salario, cargo, ctps, endereco);
+ this.guiche = guiche;
+ }
+
+ /**
+ * Obtém o número do guichê do atendente.
+ *
+ * @return número do guichê
+ */
+ public int getGuiche() {
+ return guiche;
+ }
+
+ /**
+ * Define o número do guichê do atendente.
+ *
+ * @param guiche novo número do guichê
+ */
+ public void setGuiche(int guiche) {
+ this.guiche = guiche;
+ }
+}
+
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Avaliacao.java b/case-study/the-gym/gym/src/main/java/com/gym/Avaliacao.java
new file mode 100644
index 0000000..7874bac
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Avaliacao.java
@@ -0,0 +1,222 @@
+package com.gym;
+
+
+/**
+ * Representa uma avaliação física realizada para um aluno,
+ * contendo dados como gênero, data, altura, peso, IMC, doenças e o treinador avaliador.
+ */
+public class Avaliacao {
+
+ /** Gênero do aluno avaliado (ex: 'f' para feminino, 'm' para masculino). */
+ private char genero;
+
+ /** Data em que a avaliação foi realizada. */
+ private String data;
+
+ /** Altura do aluno em metros. */
+ private float altura;
+
+ /** Peso do aluno em quilogramas. */
+ private float peso;
+
+ /** Índice de Massa Corporal calculado. */
+ private float imc;
+
+ /** Informações sobre doenças do aluno, se houver. */
+ private String doencas;
+
+ /** Aluno avaliado. */
+ private Aluno aluno;
+
+ /** Treinador responsável pela avaliação. */
+ private Treinador avaliador;
+
+ /**
+ * Construtor para criar uma avaliação com os dados fornecidos.
+ * Calcula automaticamente o IMC baseado na altura e peso.
+ *
+ * @param genero gênero do aluno ('f' ou 'm')
+ * @param data data da avaliação
+ * @param altura altura em metros
+ * @param peso peso em kg
+ * @param doencas doenças do aluno, se houver
+ * @param aluno objeto Aluno avaliado
+ * @param avaliador treinador que realizou a avaliação
+ */
+ public Avaliacao(char genero, String data, float altura, float peso, String doencas, Aluno aluno,
+ Treinador avaliador) {
+ this.genero = genero;
+ this.data = data;
+ this.altura = altura;
+ this.peso = peso;
+ this.doencas = doencas;
+ this.aluno = aluno;
+ this.avaliador = avaliador;
+ calcularImc();
+ }
+
+ /**
+ * Calcula o Índice de Massa Corporal (IMC) baseado no peso e altura.
+ * Fórmula: peso / (altura * altura)
+ */
+ void calcularImc() {
+ imc = peso / (altura * altura);
+ }
+
+ /**
+ * Retorna o gênero em forma textual.
+ *
+ * @return "Feminino" se gênero for 'f', caso contrário "Masculino"
+ */
+ String mostrarGenero() {
+ if (genero == 'f') {
+ return "Feminino";
+ } else {
+ return "Masculino";
+ }
+ }
+
+ /**
+ * Obtém o gênero do aluno.
+ *
+ * @return caractere representando o gênero ('f' ou 'm')
+ */
+ public char getGenero() {
+ return genero;
+ }
+
+ /**
+ * Define o gênero do aluno.
+ *
+ * @param genero caractere representando o gênero ('f' ou 'm')
+ */
+ public void setGenero(char genero) {
+ this.genero = genero;
+ }
+
+ /**
+ * Obtém a data da avaliação.
+ *
+ * @return data da avaliação no formato String
+ */
+ public String getData() {
+ return data;
+ }
+
+ /**
+ * Define a data da avaliação.
+ *
+ * @param data data da avaliação no formato String
+ */
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ /**
+ * Obtém a altura do aluno em metros.
+ *
+ * @return altura em metros
+ */
+ public float getAltura() {
+ return altura;
+ }
+
+ /**
+ * Define a altura do aluno em metros.
+ *
+ * @param altura altura em metros
+ */
+ public void setAltura(float altura) {
+ this.altura = altura;
+ }
+
+ /**
+ * Obtém o peso do aluno em quilogramas.
+ *
+ * @return peso em kg
+ */
+ public float getPeso() {
+ return peso;
+ }
+
+ /**
+ * Define o peso do aluno em quilogramas.
+ *
+ * @param peso peso em kg
+ */
+ public void setPeso(float peso) {
+ this.peso = peso;
+ }
+
+ /**
+ * Obtém o Índice de Massa Corporal (IMC) calculado.
+ *
+ * @return valor do IMC
+ */
+ public float getImc() {
+ return imc;
+ }
+
+ /**
+ * Define o valor do Índice de Massa Corporal (IMC).
+ *
+ * @param imc valor do IMC
+ */
+ public void setImc(float imc) {
+ this.imc = imc;
+ }
+
+ /**
+ * Obtém as informações sobre doenças do aluno.
+ *
+ * @return descrição das doenças
+ */
+ public String getDoencas() {
+ return doencas;
+ }
+
+ /**
+ * Define as informações sobre doenças do aluno.
+ *
+ * @param doencas descrição das doenças
+ */
+ public void setDoencas(String doencas) {
+ this.doencas = doencas;
+ }
+
+ /**
+ * Obtém o aluno avaliado.
+ *
+ * @return objeto Aluno
+ */
+ public Aluno getAluno() {
+ return aluno;
+ }
+
+ /**
+ * Define o aluno avaliado.
+ *
+ * @param aluno objeto Aluno
+ */
+ public void setAluno(Aluno aluno) {
+ this.aluno = aluno;
+ }
+
+ /**
+ * Obtém o treinador responsável pela avaliação.
+ *
+ * @return objeto Treinador
+ */
+ public Treinador getAvaliador() {
+ return avaliador;
+ }
+
+ /**
+ * Define o treinador responsável pela avaliação.
+ *
+ * @param avaliador objeto Treinador
+ */
+ public void setAvaliador(Treinador avaliador) {
+ this.avaliador = avaliador;
+ }
+}
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Contato.java b/case-study/the-gym/gym/src/main/java/com/gym/Contato.java
new file mode 100644
index 0000000..2cbce75
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Contato.java
@@ -0,0 +1,62 @@
+package com.gym;
+
+
+/**
+ * Representa um contato de uma pessoa ou entidade, contendo o tipo do contato e o conteúdo.
+ * Exemplo de tipos podem ser telefone, email, celular, etc.
+ */
+public class Contato {
+
+ /** Tipo do contato (ex: telefone, email, etc). */
+ private TipoContato tipo;
+
+ /** Conteúdo do contato (ex: número de telefone, endereço de email). */
+ private String conteudo;
+
+ /**
+ * Construtor que cria um contato com o tipo e o conteúdo especificados.
+ *
+ * @param tipo tipo do contato (ex: telefone, email)
+ * @param conteudo conteúdo do contato (ex: número ou endereço)
+ */
+ public Contato(TipoContato tipo, String conteudo) {
+ this.tipo = tipo;
+ this.conteudo = conteudo;
+ }
+
+ /**
+ * Obtém o tipo do contato.
+ *
+ * @return tipo do contato
+ */
+ public TipoContato getTipo() {
+ return tipo;
+ }
+
+ /**
+ * Define o tipo do contato.
+ *
+ * @param tipo tipo do contato
+ */
+ public void setTipo(TipoContato tipo) {
+ this.tipo = tipo;
+ }
+
+ /**
+ * Obtém o conteúdo do contato.
+ *
+ * @return conteúdo do contato
+ */
+ public String getConteudo() {
+ return conteudo;
+ }
+
+ /**
+ * Define o conteúdo do contato.
+ *
+ * @param conteudo conteúdo do contato
+ */
+ public void setConteudo(String conteudo) {
+ this.conteudo = conteudo;
+ }
+}
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Documento.java b/case-study/the-gym/gym/src/main/java/com/gym/Documento.java
new file mode 100644
index 0000000..12feab6
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Documento.java
@@ -0,0 +1,63 @@
+package com.gym;
+
+
+/**
+ * Representa um documento de identificação com tipo e conteúdo.
+ * Exemplos de tipos podem ser CPF, RG, CNH, etc.
+ */
+public class Documento {
+
+ /** Tipo do documento (ex: CPF, RG, CNH). */
+ private TipoDoc tipo;
+
+ /** Conteúdo do documento (ex: número do documento). */
+ private String conteudo;
+
+ /**
+ * Construtor que cria um documento com tipo e conteúdo especificados.
+ *
+ * @param tipo tipo do documento
+ * @param conteudo conteúdo do documento
+ */
+ public Documento(TipoDoc tipo, String conteudo) {
+ this.tipo = tipo;
+ this.conteudo = conteudo;
+ }
+
+ /**
+ * Obtém o tipo do documento.
+ *
+ * @return tipo do documento
+ */
+ public TipoDoc getTipo() {
+ return tipo;
+ }
+
+ /**
+ * Define o tipo do documento.
+ *
+ * @param tipo tipo do documento
+ */
+ public void setTipo(TipoDoc tipo) {
+ this.tipo = tipo;
+ }
+
+ /**
+ * Obtém o conteúdo do documento.
+ *
+ * @return conteúdo do documento
+ */
+ public String getConteudo() {
+ return conteudo;
+ }
+
+ /**
+ * Define o conteúdo do documento.
+ *
+ * @param conteudo conteúdo do documento
+ */
+ public void setConteudo(String conteudo) {
+ this.conteudo = conteudo;
+ }
+}
+
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Endereco.java b/case-study/the-gym/gym/src/main/java/com/gym/Endereco.java
new file mode 100644
index 0000000..3f8c340
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Endereco.java
@@ -0,0 +1,108 @@
+package com.gym;
+
+
+/**
+ * Representa um endereço com CEP, bairro, rua e número.
+ */
+public class Endereco {
+
+ /** Código de Endereçamento Postal (CEP). */
+ private String cep;
+
+ /** Bairro do endereço. */
+ private String bairro;
+
+ /** Nome da rua. */
+ private String rua;
+
+ /** Número do imóvel na rua. */
+ private int numero;
+
+ /**
+ * Construtor para criar um endereço com todos os dados especificados.
+ *
+ * @param cep código postal do endereço
+ * @param bairro bairro do endereço
+ * @param rua nome da rua
+ * @param numero número do imóvel
+ */
+ public Endereco(String cep, String bairro, String rua, int numero) {
+ this.cep = cep;
+ this.bairro = bairro;
+ this.rua = rua;
+ this.numero = numero;
+ }
+
+ /**
+ * Obtém o CEP do endereço.
+ *
+ * @return o CEP
+ */
+ public String getCep() {
+ return cep;
+ }
+
+ /**
+ * Define o CEP do endereço.
+ *
+ * @param cep o CEP a ser definido
+ */
+ public void setCep(String cep) {
+ this.cep = cep;
+ }
+
+ /**
+ * Obtém o bairro do endereço.
+ *
+ * @return o bairro
+ */
+ public String getBairro() {
+ return bairro;
+ }
+
+ /**
+ * Define o bairro do endereço.
+ *
+ * @param bairro o bairro a ser definido
+ */
+ public void setBairro(String bairro) {
+ this.bairro = bairro;
+ }
+
+ /**
+ * Obtém o nome da rua do endereço.
+ *
+ * @return a rua
+ */
+ public String getRua() {
+ return rua;
+ }
+
+ /**
+ * Define o nome da rua do endereço.
+ *
+ * @param rua a rua a ser definida
+ */
+ public void setRua(String rua) {
+ this.rua = rua;
+ }
+
+ /**
+ * Obtém o número do imóvel.
+ *
+ * @return o número do imóvel
+ */
+ public int getNumero() {
+ return numero;
+ }
+
+ /**
+ * Define o número do imóvel.
+ *
+ * @param numero o número a ser definido
+ */
+ public void setNumero(int numero) {
+ this.numero = numero;
+ }
+}
+
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Funcionario.java b/case-study/the-gym/gym/src/main/java/com/gym/Funcionario.java
new file mode 100644
index 0000000..d0f0fb9
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Funcionario.java
@@ -0,0 +1,168 @@
+package com.gym;
+
+
+/**
+ * Representa um funcionário, que é uma extensão da classe Pessoa,
+ * incluindo informações de contato, turno, salário, cargo, CTPS e endereço.
+ */
+public class Funcionario extends Pessoa {
+
+ /** Telefone do funcionário. */
+ private String telefone;
+
+ /** Email do funcionário. */
+ private String email;
+
+ /** Turno de trabalho do funcionário. */
+ private String turno;
+
+ /** Salário do funcionário. */
+ private String salario;
+
+ /** Cargo ocupado pelo funcionário. */
+ private String cargo;
+
+ /** Carteira de Trabalho e Previdência Social (CTPS) do funcionário. */
+ private String ctps;
+
+ /** Endereço do funcionário. */
+ private Endereco endereco;
+
+ /**
+ * Construtor que cria um funcionário com todos os atributos especificados.
+ *
+ * @param nome nome do funcionário (herdado de Pessoa)
+ * @param documento documento do funcionário (herdado de Pessoa)
+ * @param telefone telefone de contato
+ * @param email email de contato
+ * @param turno turno de trabalho
+ * @param salario salário
+ * @param cargo cargo ocupado
+ * @param ctps carteira de trabalho
+ * @param endereco endereço residencial
+ */
+ public Funcionario(String nome, Documento documento, String telefone, String email,
+ String turno, String salario, String cargo, String ctps, Endereco endereco) {
+ super(nome, documento);
+ this.telefone = telefone;
+ this.email = email;
+ this.turno = turno;
+ this.salario = salario;
+ this.cargo = cargo;
+ this.ctps = ctps;
+ this.endereco = endereco;
+ }
+
+ /**
+ * Obtém o telefone do funcionário.
+ * @return telefone
+ */
+ public String getTelefone() {
+ return telefone;
+ }
+
+ /**
+ * Define o telefone do funcionário.
+ * @param telefone telefone a ser definido
+ */
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ /**
+ * Obtém o email do funcionário.
+ * @return email
+ */
+ public String getEmail() {
+ return email;
+ }
+
+ /**
+ * Define o email do funcionário.
+ * @param email email a ser definido
+ */
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ /**
+ * Obtém o turno de trabalho do funcionário.
+ * @return turno
+ */
+ public String getTurno() {
+ return turno;
+ }
+
+ /**
+ * Define o turno de trabalho do funcionário.
+ * @param turno turno a ser definido
+ */
+ public void setTurno(String turno) {
+ this.turno = turno;
+ }
+
+ /**
+ * Obtém o salário do funcionário.
+ * @return salário
+ */
+ public String getSalario() {
+ return salario;
+ }
+
+ /**
+ * Define o salário do funcionário.
+ * @param salario salário a ser definido
+ */
+ public void setSalario(String salario) {
+ this.salario = salario;
+ }
+
+ /**
+ * Obtém o cargo do funcionário.
+ * @return cargo
+ */
+ public String getCargo() {
+ return cargo;
+ }
+
+ /**
+ * Define o cargo do funcionário.
+ * @param cargo cargo a ser definido
+ */
+ public void setCargo(String cargo) {
+ this.cargo = cargo;
+ }
+
+ /**
+ * Obtém a CTPS do funcionário.
+ * @return CTPS
+ */
+ public String getCtps() {
+ return ctps;
+ }
+
+ /**
+ * Define a CTPS do funcionário.
+ * @param ctps CTPS a ser definida
+ */
+ public void setCtps(String ctps) {
+ this.ctps = ctps;
+ }
+
+ /**
+ * Obtém o endereço do funcionário.
+ * @return endereço
+ */
+ public Endereco getEndereco() {
+ return endereco;
+ }
+
+ /**
+ * Define o endereço do funcionário.
+ * @param endereco endereço a ser definido
+ */
+ public void setEndereco(Endereco endereco) {
+ this.endereco = endereco;
+ }
+
+}
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Main.java b/case-study/the-gym/gym/src/main/java/com/gym/Main.java
new file mode 100644
index 0000000..5961184
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Main.java
@@ -0,0 +1,158 @@
+package com.gym;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Classe principal para executar um exemplo do sistema de academia.
+ *
+ * Esta classe cria objetos representando as entidades principais do sistema:
+ * alunos, treinadores, atendentes, planos, avaliações e assinaturas.
+ *
+ * Inicialmente, são criados endereços e documentos para os usuários.
+ * Em seguida, são criados os contatos, planos, e as entidades propriamente ditas.
+ *
+ * Após a criação, os dados são exibidos no console, demonstrando as informações
+ * armazenadas para cada tipo de entidade.
+ *
+ * Essa classe serve como ponto de entrada para testes e demonstração do sistema.
+ */
+public class Main {
+ /**
+ * Método principal que inicializa os dados de exemplo e exibe as informações no console.
+ *
+ * @param args argumentos da linha de comando (não utilizados)
+ */
+ public static void main(String[] args) {
+ // Criação dos endereços de alunos, treinadores e atendentes
+ Endereco enderecoAluno1 = new Endereco("22290-000", "Botafogo", "Rua Mercurio", 123);
+ Endereco enderecoAluno2 = new Endereco("23000-100", "Copacabana", "Rua Atlântica", 321);
+ Endereco enderecoTreinador1 = new Endereco("21860-147", "Benfica", "Rua Marte", 112);
+ Endereco enderecoTreinador2 = new Endereco("20350-050", "Maria da Graça", "Rua Jupiter", 223);
+ Endereco enderecoAtendente1 = new Endereco("22040-117", "Centro", "Rua Vênus", 456);
+ Endereco enderecoAtendente2 = new Endereco("23040-020", "Jacarepagua", "Rua Terra", 789);
+
+ // Criação dos documentos
+ Documento docAluno1 = new Documento(TipoDoc.CPF, "123.456.789-00");
+ Documento docAluno2 = new Documento(TipoDoc.CPF, "987.654.321-00");
+ Documento docTreinador1 = new Documento(TipoDoc.RG, "MG-12.345.678");
+ Documento docTreinador2 = new Documento(TipoDoc.RG, "ES-15.345.879");
+ Documento docAtendente1 = new Documento(TipoDoc.CNH, "RJ-98.765.432");
+ Documento docAtendente2 = new Documento(TipoDoc.CNH, "SP-10.765.289");
+
+ // Criação das listas de contatos para os alunos
+ List contatosAluno1 = new ArrayList<>();
+ contatosAluno1.add(new Contato(TipoContato.EMAIL, "maria@email.com"));
+ contatosAluno1.add(new Contato(TipoContato.TELEFONE, "(21)98913-8865"));
+ contatosAluno1.add(new Contato(TipoContato.INSTAGRAM, "mariasilvaa"));
+
+ List contatosAluno2 = new ArrayList<>();
+ contatosAluno2.add(new Contato(TipoContato.EMAIL, "joao@email.com"));
+ contatosAluno2.add(new Contato(TipoContato.TELEFONE, "(21)98773-8887"));
+ contatosAluno2.add(new Contato(TipoContato.INSTAGRAM, "joaopedroo"));
+
+ // Criação dos planos de assinatura
+ Plano plano1 = new Plano("Mensal", 150.0f, "10/07/2025", "01/07/2025", "Cartão");
+ Plano plano2 = new Plano("Anual", 1200.0f, "01/01/2025", "31/12/2025", "Dinheiro");
+
+ // Criação dos alunos
+ Aluno aluno1 = new Aluno(12345, "Maria Silva", docAluno1, "10/05/1995", "maria@email.com", enderecoAluno1, plano1, contatosAluno1);
+ Aluno aluno2 = new Aluno(54321, "João Pedro", docAluno2, "15/08/1990", "joao@email.com", enderecoAluno2, plano2, contatosAluno2);
+
+ // Criação dos treinadores
+ Treinador treinador1 = new Treinador("Carlos Souza", docTreinador1, "(21)98888-8888", "carlos@email.com", "Manhã", "3000.00", "Treinador", "12345", enderecoTreinador1, "CREF123456");
+ Treinador treinador2 = new Treinador("Mariana Lima", docTreinador2, "(21)97777-5555", "mariana@email.com", "Noite", "3200.00", "Treinadora", "67890", enderecoTreinador2, "CREF654321");
+
+ // Criação dos atendentes
+ Atendente atendente1 = new Atendente("Ana Paula", docAtendente1, "(21)97777-7777", "ana@email.com", "Tarde", "2000.00", "Atendente", "54321", enderecoAtendente1, 5);
+ Atendente atendente2 = new Atendente("Lucas Silva", docAtendente2, "(21)96666-6666", "lucas@email.com", "Manhã", "2100.00", "Atendente", "98765", enderecoAtendente2, 7);
+
+ // Criação das avaliações físicas dos alunos
+ Avaliacao avaliacao1 = new Avaliacao('f', "01/07/2025", 1.65f, 60f, "Nenhuma", aluno1, treinador1);
+ Avaliacao avaliacao2 = new Avaliacao('m', "05/07/2025", 1.80f, 85f, "Hipertensão", aluno2, treinador2);
+
+ // Criação das assinaturas dos alunos
+ Assinatura assinatura1 = new Assinatura(plano1, aluno1, "01/07/2025", "31/07/2025");
+ Assinatura assinatura2 = new Assinatura(plano2, aluno2, "01/01/2025", "31/12/2025");
+
+ // Listas para manipulação
+ List alunos = new ArrayList<>();
+ alunos.add(aluno1);
+ alunos.add(aluno2);
+
+ List avaliacoes = new ArrayList<>();
+ avaliacoes.add(avaliacao1);
+ avaliacoes.add(avaliacao2);
+
+ List assinaturas = new ArrayList<>();
+ assinaturas.add(assinatura1);
+ assinaturas.add(assinatura2);
+
+ List treinadores = new ArrayList<>();
+ treinadores.add(treinador1);
+ treinadores.add(treinador2);
+
+ List atendentes = new ArrayList<>();
+ atendentes.add(atendente1);
+ atendentes.add(atendente2);
+
+ // Impressão dos dados dos alunos, avaliações e assinaturas
+ for (int i = 0; i < alunos.size(); i++) {
+ Aluno a = alunos.get(i);
+ Avaliacao av = avaliacoes.get(i);
+ Assinatura as = assinaturas.get(i);
+ System.out.println("\n=== DADOS DO ALUNO " + (i + 1) + " ===");
+ System.out.println("Nome: " + a.getNome());
+ System.out.println("Matrícula: " + a.getMatricula());
+ System.out.println("Documento: " + a.getDocumento().getTipo() + " - " + a.getDocumento().getConteudo());
+ System.out.println("Data de Nascimento: " + a.getDataNasc());
+ System.out.println("Email: " + a.getEmail());
+ System.out.println("Endereço: " + a.getEndereco().getRua() + ", " + a.getEndereco().getNumero() + " - " + a.getEndereco().getBairro());
+ System.out.println("Plano: " + a.getPlano().getTipo() + ", Valor: R$ " + a.getPlano().getValor());
+ System.out.println("Contatos:");
+ for (Contato c : a.getContatos()) {
+ System.out.println(" " + c.getTipo() + ": " + c.getConteudo());
+ }
+ System.out.println("\n=== AVALIAÇÃO DO ALUNO " + (i + 1) + " ===");
+ System.out.println("Data: " + av.getData());
+ System.out.println("Altura: " + av.getAltura() + " m");
+ System.out.println("Peso: " + av.getPeso() + " kg");
+ System.out.println("IMC: " + String.format("%.2f", av.getImc()));
+ System.out.println("Gênero: " + av.mostrarGenero());
+ System.out.println("Doenças: " + av.getDoencas());
+ System.out.println("\n=== ASSINATURA DO ALUNO " + (i + 1) + " ===");
+ System.out.println("Plano: " + as.getPlano().getTipo());
+ System.out.println("Data do Contrato: " + as.getDataContrato());
+ System.out.println("Data Final: " + as.getDataFinal());
+ }
+
+ // Impressão dos dados dos treinadores
+ for (int i = 0; i < treinadores.size(); i++) {
+ Treinador t = treinadores.get(i);
+ System.out.println("\n=== DADOS DO TREINADOR " + (i + 1) + " ===");
+ System.out.println("Nome: " + t.getNome());
+ System.out.println("Documento: " + t.getDocumento().getTipo() + " - " + t.getDocumento().getConteudo());
+ System.out.println("Telefone: " + t.getTelefone());
+ System.out.println("Email: " + t.getEmail());
+ System.out.println("Turno: " + t.getTurno());
+ System.out.println("Salário: R$ " + t.getSalario());
+ System.out.println("Cargo: " + t.getCargo());
+ System.out.println("CREF: " + t.getCref());
+ }
+
+ // Impressão dos dados dos atendentes
+ for (int i = 0; i < atendentes.size(); i++) {
+ Atendente a = atendentes.get(i);
+ System.out.println("\n=== DADOS DO ATENDENTE " + (i + 1) + " ===");
+ System.out.println("Nome: " + a.getNome());
+ System.out.println("Documento: " + a.getDocumento().getTipo() + " - " + a.getDocumento().getConteudo());
+ System.out.println("Telefone: " + a.getTelefone());
+ System.out.println("Email: " + a.getEmail());
+ System.out.println("Turno: " + a.getTurno());
+ System.out.println("Salário: R$ " + a.getSalario());
+ System.out.println("Cargo: " + a.getCargo());
+ System.out.println("Guichê: " + a.getGuiche());
+ }
+ }
+}
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Pessoa.java b/case-study/the-gym/gym/src/main/java/com/gym/Pessoa.java
new file mode 100644
index 0000000..fae4ee8
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Pessoa.java
@@ -0,0 +1,65 @@
+package com.gym;
+
+/**
+ * Representa uma pessoa genérica no sistema, com nome e documento de identificação.
+ *
+ * Essa classe pode ser utilizada como superclasse para entidades que representam pessoas,
+ * como funcionários, alunos, treinadores, entre outros.
+ */
+public class Pessoa {
+
+ /** Nome completo da pessoa. */
+ private String nome;
+
+ /** Documento de identificação da pessoa (CPF, RG, CNH, etc). */
+ private Documento documento;
+
+ /**
+ * Construtor que inicializa uma nova pessoa com nome e documento.
+ *
+ * @param nome Nome completo da pessoa.
+ * @param documento Documento de identificação da pessoa.
+ */
+ public Pessoa(String nome, Documento documento) {
+ this.nome = nome;
+ this.documento = documento;
+ }
+
+ /**
+ * Obtém o nome da pessoa.
+ *
+ * @return Nome completo da pessoa.
+ */
+ public String getNome() {
+ return nome;
+ }
+
+ /**
+ * Define o nome da pessoa.
+ *
+ * @param nome Novo nome para a pessoa.
+ */
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ /**
+ * Obtém o documento de identificação da pessoa.
+ *
+ * @return Documento da pessoa.
+ */
+ public Documento getDocumento() {
+ return documento;
+ }
+
+ /**
+ * Define o documento de identificação da pessoa.
+ *
+ * @param documento Novo documento da pessoa.
+ */
+ public void setDocumento(Documento documento) {
+ this.documento = documento;
+ }
+
+}
+
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Plano.java b/case-study/the-gym/gym/src/main/java/com/gym/Plano.java
new file mode 100644
index 0000000..8e07eac
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Plano.java
@@ -0,0 +1,131 @@
+package com.gym;
+
+/**
+ * Representa um plano de matrícula ou assinatura para um aluno.
+ * Contém informações sobre tipo do plano, valor, datas importantes e forma de pagamento.
+ */
+public class Plano {
+
+ /** Tipo do plano (ex: Mensal, Anual). */
+ private String tipo;
+
+ /** Valor do plano. */
+ private float valor;
+
+ /** Data de vencimento do plano. */
+ private String dataVencimento;
+
+ /** Data da matrícula do aluno no plano. */
+ private String dataMatricula;
+
+ /** Forma de pagamento utilizada (ex: Cartão, Dinheiro). */
+ private String formaPagamento;
+
+ /**
+ * Construtor que inicializa o plano com seus dados principais.
+ *
+ * @param tipo Tipo do plano.
+ * @param valor Valor do plano.
+ * @param dataVencimento Data de vencimento do plano.
+ * @param dataMatricula Data da matrícula do aluno no plano.
+ * @param formaPagamento Forma de pagamento utilizada.
+ */
+ public Plano(String tipo, float valor, String dataVencimento, String dataMatricula, String formaPagamento) {
+ this.tipo = tipo;
+ this.valor = valor;
+ this.dataVencimento = dataVencimento;
+ this.dataMatricula = dataMatricula;
+ this.formaPagamento = formaPagamento;
+ }
+
+ /**
+ * Obtém o tipo do plano.
+ *
+ * @return Tipo do plano.
+ */
+ public String getTipo() {
+ return tipo;
+ }
+
+ /**
+ * Define o tipo do plano.
+ *
+ * @param tipo Novo tipo do plano.
+ */
+ public void setTipo(String tipo) {
+ this.tipo = tipo;
+ }
+
+ /**
+ * Obtém o valor do plano.
+ *
+ * @return Valor do plano.
+ */
+ public float getValor() {
+ return valor;
+ }
+
+ /**
+ * Define o valor do plano.
+ *
+ * @param valor Novo valor do plano.
+ */
+ public void setValor(float valor) {
+ this.valor = valor;
+ }
+
+ /**
+ * Obtém a data de vencimento do plano.
+ *
+ * @return Data de vencimento do plano.
+ */
+ public String getDataVencimento() {
+ return dataVencimento;
+ }
+
+ /**
+ * Define a data de vencimento do plano.
+ *
+ * @param dataVencimento Nova data de vencimento.
+ */
+ public void setDataVencimento(String dataVencimento) {
+ this.dataVencimento = dataVencimento;
+ }
+
+ /**
+ * Obtém a data de matrícula do aluno no plano.
+ *
+ * @return Data de matrícula.
+ */
+ public String getDataMatricula() {
+ return dataMatricula;
+ }
+
+ /**
+ * Define a data de matrícula do aluno no plano.
+ *
+ * @param dataMatricula Nova data de matrícula.
+ */
+ public void setDataMatricula(String dataMatricula) {
+ this.dataMatricula = dataMatricula;
+ }
+
+ /**
+ * Obtém a forma de pagamento utilizada no plano.
+ *
+ * @return Forma de pagamento.
+ */
+ public String getFormaPagamento() {
+ return formaPagamento;
+ }
+
+ /**
+ * Define a forma de pagamento do plano.
+ *
+ * @param formaPagamento Nova forma de pagamento.
+ */
+ public void setFormaPagamento(String formaPagamento) {
+ this.formaPagamento = formaPagamento;
+ }
+}
+
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/TipoContato.java b/case-study/the-gym/gym/src/main/java/com/gym/TipoContato.java
new file mode 100644
index 0000000..14d8d69
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/TipoContato.java
@@ -0,0 +1,17 @@
+package com.gym;
+
+
+/**
+ * Enumeração que representa os tipos de contato possíveis para uma pessoa.
+ * Pode ser Email, Telefone ou Instagram.
+ */
+public enum TipoContato {
+ /** Contato do tipo e-mail. */
+ EMAIL,
+
+ /** Contato do tipo telefone. */
+ TELEFONE,
+
+ /** Contato do tipo Instagram. */
+ INSTAGRAM
+}
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/TipoDoc.java b/case-study/the-gym/gym/src/main/java/com/gym/TipoDoc.java
new file mode 100644
index 0000000..9481817
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/TipoDoc.java
@@ -0,0 +1,18 @@
+package com.gym;
+
+
+/**
+ * Enumeração que representa os tipos de documentos pessoais.
+ * Pode ser CPF, RG ou CNH.
+ */
+public enum TipoDoc {
+ /** Documento do tipo CPF (Cadastro de Pessoas Físicas). */
+ CPF,
+
+ /** Documento do tipo RG (Registro Geral). */
+ RG,
+
+ /** Documento do tipo CNH (Carteira Nacional de Habilitação). */
+ CNH
+}
+
diff --git a/case-study/the-gym/gym/src/main/java/com/gym/Treinador.java b/case-study/the-gym/gym/src/main/java/com/gym/Treinador.java
new file mode 100644
index 0000000..f4286b8
--- /dev/null
+++ b/case-study/the-gym/gym/src/main/java/com/gym/Treinador.java
@@ -0,0 +1,53 @@
+package com.gym;
+
+
+/**
+ * Representa um treinador, que é um tipo especializado de funcionário.
+ *
+ * Esta classe estende a classe {@link Funcionario} e adiciona o atributo
+ * {@code cref}, que é o registro profissional do treinador.
+ */
+public class Treinador extends Funcionario {
+
+ /** Registro profissional do treinador (CREF). */
+ private String cref;
+
+ /**
+ * Construtor para criar um treinador com seus dados completos.
+ *
+ * @param nome Nome do treinador
+ * @param documento Documento pessoal do treinador
+ * @param telefone Telefone de contato
+ * @param email Email de contato
+ * @param turno Turno de trabalho
+ * @param salario Salário do treinador
+ * @param cargo Cargo ocupado
+ * @param ctps Carteira de Trabalho e Previdência Social
+ * @param endereco Endereço residencial
+ * @param cref Registro profissional do treinador (CREF)
+ */
+ public Treinador(String nome, Documento documento, String telefone, String email,
+ String turno, String salario, String cargo, String ctps, Endereco endereco, String cref) {
+ super(nome, documento, telefone, email, turno, salario, cargo, ctps, endereco);
+ this.cref = cref;
+ }
+
+ /**
+ * Obtém o registro profissional (CREF) do treinador.
+ *
+ * @return o número do CREF
+ */
+ public String getCref() {
+ return cref;
+ }
+
+ /**
+ * Define o registro profissional (CREF) do treinador.
+ *
+ * @param cref o número do CREF a ser definido
+ */
+ public void setCref(String cref) {
+ this.cref = cref;
+ }
+}
+