Skip to content

Feature/trabalho guiado taimara #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
# TB-Java-Projeto-Guiado-II
# TB-Java-Projeto-Guiado-II


## CRUD de gestão de funcionários é um sistema básico para criar, ler, atualizar
e excluir (CRUD) informações sobre os funcionários de uma empresa.

- Este sistema é interativo com o usuário. Onde ele solicita entradas
do usuário de forma clara e retorna as consultas solicitadas durante o processo.
Também inclui tratamento de erros para lidar com situações inesperadas, como
entradas inválidas ou tentativas de operações em funcionários que não existem.
80 changes: 80 additions & 0 deletions src/Funcionario/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package Funcionario;

import Funcionario.exceptions.ColaboradorJaExistenteException;
import Funcionario.exceptions.ColaboradorNaoEncontradoException;
import Funcionario.models.Area;
import Funcionario.models.Colaborador;
import Funcionario.models.Gestor;
import Funcionario.structures.ArvoreBinaria;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
ArvoreBinaria arvore = new ArvoreBinaria();

Area ti = new Area("TI");
Area rh = new Area("RH");
Gestor gestor1 = new Gestor("Maria");
Gestor gestor2 = new Gestor("João");

Colaborador colaborador1 = new Colaborador(1, "Ana", ti, gestor1);
Colaborador colaborador2 = new Colaborador(2, "Carlos", rh, gestor2);
Colaborador colaborador3 = new Colaborador(3, "Bia", ti, gestor1);

try {
// Criar (Inserir)
arvore.inserir(colaborador1);
arvore.inserir(colaborador2);
arvore.inserir(colaborador3);

Scanner scanner = new Scanner(System.in);
int id;

while (true) {
System.out.print("\nDigite o ID do colaborador que deseja buscar, atualizar ou deletar (ou 0 para sair): ");
try {
id = scanner.nextInt();
if (id == 0) {
System.out.println("Programa encerrado.");
break;
}

try {
Colaborador colaborador = arvore.buscar(id);
System.out.println("Colaborador encontrado: " + colaborador);

scanner.nextLine(); // Limpar o buffer do scanner

System.out.print("Digite o novo nome para atualizar (ou pressione Enter para não atualizar): ");
String novoNome = scanner.nextLine().trim();

if (!novoNome.isEmpty()) {
colaborador.setNome(novoNome);
arvore.atualizar(id, colaborador);
System.out.println("Colaborador atualizado com sucesso: " + colaborador);
}

System.out.print("Deseja deletar este colaborador? (S/N): ");
String opcao = scanner.nextLine().trim().toUpperCase();
if (opcao.equals("S")) {
arvore.deletar(id);
System.out.println("Colaborador deletado com sucesso.");
}
} catch (ColaboradorNaoEncontradoException e) {
System.out.println("Erro: " + e.getMessage());
} catch (ColaboradorJaExistenteException e) {
System.out.println("Erro: " + e.getMessage());
}
} catch (InputMismatchException e) {
System.out.println("Por favor, digite um número válido.");
scanner.nextLine(); // Limpar o buffer do scanner
}
}

} catch (ColaboradorJaExistenteException e) {
System.err.println("Erro ao inserir colaboradores: " + e.getMessage());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package Funcionario.exceptions;

public class ColaboradorJaExistenteException extends GerenciamentoColaboradoresException {
public ColaboradorJaExistenteException(int id) {
super("Colaborador com ID " + id + " já existe.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package Funcionario.exceptions;

public class ColaboradorNaoEncontradoException extends GerenciamentoColaboradoresException {
public ColaboradorNaoEncontradoException(int id) {
super("Colaborador com ID " + id + " não encontrado.");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package Funcionario.exceptions;

public class GerenciamentoColaboradoresException extends Exception {
public GerenciamentoColaboradoresException(String message) {
super(message);
}
}
23 changes: 23 additions & 0 deletions src/Funcionario/models/Area.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package Funcionario.models;

public class Area {
private String nome;

public Area(String nome) {
this.nome = nome;
}

// Getter e Setter
public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

@Override
public String toString() {
return nome;
}
}
53 changes: 53 additions & 0 deletions src/Funcionario/models/Colaborador.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package Funcionario.models;

public class Colaborador {
private int id;
private String nome;
private Area area;
private Gestor gestor;

public Colaborador(int id, String nome, Area area, Gestor gestor) {
this.id = id;
this.nome = nome;
this.area = area;
this.gestor = gestor;
}

// Getters e Setters
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public Area getArea() {
return area;
}

public void setArea(Area area) {
this.area = area;
}

public Gestor getGestor() {
return gestor;
}

public void setGestor(Gestor gestor) {
this.gestor = gestor;
}

@Override
public String toString() {
return "Colaborador{id=" + id + ", nome='" + nome + "', area=" + area + ", gestor=" + gestor + "}";
}
}
23 changes: 23 additions & 0 deletions src/Funcionario/models/Gestor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package Funcionario.models;

public class Gestor {
private String nome;

public Gestor(String nome) {
this.nome = nome;
}

// Getter e Setter
public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

@Override
public String toString() {
return nome;
}
}
108 changes: 108 additions & 0 deletions src/Funcionario/structures/ArvoreBinaria.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package Funcionario.structures;

import Funcionario.exceptions.ColaboradorJaExistenteException;
import Funcionario.exceptions.ColaboradorNaoEncontradoException;
import Funcionario.models.Colaborador;

public class ArvoreBinaria {
private Nodo raiz;

public ArvoreBinaria() {
raiz = null;
}

// Método para inserir um novo colaborador
public void inserir(Colaborador colaborador) throws ColaboradorJaExistenteException {
raiz = inserirRec(raiz, colaborador);
}

private Nodo inserirRec(Nodo raiz, Colaborador colaborador) throws ColaboradorJaExistenteException {
if (raiz == null) {
raiz = new Nodo(colaborador);
return raiz;
}

if (colaborador.getId() < raiz.colaborador.getId())
raiz.esquerda = inserirRec(raiz.esquerda, colaborador);
else if (colaborador.getId() > raiz.colaborador.getId())
raiz.direita = inserirRec(raiz.direita, colaborador);
else
throw new ColaboradorJaExistenteException(colaborador.getId());

return raiz;
}

// Método para buscar um colaborador por ID
public Colaborador buscar(int id) throws ColaboradorNaoEncontradoException {
Colaborador colaborador = buscarRec(raiz, id);
if (colaborador == null) {
throw new ColaboradorNaoEncontradoException(id);
}
return colaborador;
}

private Colaborador buscarRec(Nodo raiz, int id) {
if (raiz == null || raiz.colaborador.getId() == id)
return raiz != null ? raiz.colaborador : null;

if (raiz.colaborador.getId() > id)
return buscarRec(raiz.esquerda, id);

return buscarRec(raiz.direita, id);
}

// Método para deletar um colaborador por ID
public void deletar(int id) throws ColaboradorNaoEncontradoException {
if (buscar(id) != null) {
raiz = deletarRec(raiz, id);
}
}

private Nodo deletarRec(Nodo raiz, int id) {
if (raiz == null) return raiz;

if (id < raiz.colaborador.getId())
raiz.esquerda = deletarRec(raiz.esquerda, id);
else if (id > raiz.colaborador.getId())
raiz.direita = deletarRec(raiz.direita, id);
else {
if (raiz.esquerda == null)
return raiz.direita;
else if (raiz.direita == null)
return raiz.esquerda;

raiz.colaborador = minValorNodo(raiz.direita);
raiz.direita = deletarRec(raiz.direita, raiz.colaborador.getId());
}

return raiz;
}

private Colaborador minValorNodo(Nodo raiz) {
Colaborador minv = raiz.colaborador;
while (raiz.esquerda != null) {
minv = raiz.esquerda.colaborador;
raiz = raiz.esquerda;
}
return minv;
}

// Método para atualizar um colaborador
public void atualizar(int id, Colaborador novoColaborador) throws ColaboradorNaoEncontradoException, ColaboradorJaExistenteException {
deletar(id);
inserir(novoColaborador);
}

// Método para imprimir a árvore em ordem
public void emOrdem() {
emOrdemRec(raiz);
}

private void emOrdemRec(Nodo raiz) {
if (raiz != null) {
emOrdemRec(raiz.esquerda);
System.out.println(raiz.colaborador);
emOrdemRec(raiz.direita);
}
}
}
14 changes: 14 additions & 0 deletions src/Funcionario/structures/Nodo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package Funcionario.structures;

import Funcionario.models.Colaborador;

class Nodo {
Colaborador colaborador;
Nodo esquerda, direita;

public Nodo(Colaborador colaborador) {
this.colaborador = colaborador;
esquerda = direita = null;
}
}