diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e10e727
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/.metadata/
diff --git a/Lab03/.classpath b/Lab03/.classpath
new file mode 100644
index 0000000..f029363
--- /dev/null
+++ b/Lab03/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Lab03/.gitignore b/Lab03/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/Lab03/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/Lab03/.project b/Lab03/.project
new file mode 100644
index 0000000..942ffe9
--- /dev/null
+++ b/Lab03/.project
@@ -0,0 +1,17 @@
+
+
+ Lab03
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/Lab03/.settings/org.eclipse.core.resources.prefs b/Lab03/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/Lab03/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/Lab03/.settings/org.eclipse.jdt.core.prefs b/Lab03/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..062ed70
--- /dev/null
+++ b/Lab03/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,14 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=19
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=19
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=19
diff --git a/Lab03/src/Cliente.java b/Lab03/src/Cliente.java
new file mode 100644
index 0000000..e020332
--- /dev/null
+++ b/Lab03/src/Cliente.java
@@ -0,0 +1,53 @@
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+
+public class Cliente {
+ // Atributos
+ private String nome;
+ private String endereco;
+ private ArrayList listaVeiculos;
+ protected static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Método construtor
+ public Cliente(String nome, String endereco, ArrayList listaVeiculos) {
+ this.nome = nome;
+ this.endereco = endereco;
+ this.listaVeiculos = listaVeiculos;
+
+ }
+
+ public Cliente() {
+
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public void adicionaVeiculo(Veiculo veiculo) {
+ this.listaVeiculos.add(veiculo);
+ }
+
+ public ArrayList getListaVeiculos() {
+ return listaVeiculos;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLINTE\nNome: " + getNome() + "\nEndereco: " + getEndereco() + "\nVeiculos: " + getListaVeiculos() + "\n";
+ return str;
+ }
+}
diff --git a/Lab03/src/ClientePF.java b/Lab03/src/ClientePF.java
new file mode 100644
index 0000000..2d75f55
--- /dev/null
+++ b/Lab03/src/ClientePF.java
@@ -0,0 +1,153 @@
+import java.util.ArrayList;
+import java.util.Date;
+
+public class ClientePF extends Cliente {
+ // Atributos
+ final String cpf;
+ private Date dataNascimento;
+ private String educacao;
+ private String genero;
+ private String classeEconomica;
+ private Date dataLicenca;
+
+
+ // Métodos construtores
+ public ClientePF(String nome, String endereco, ArrayList listaVeiculos, String cpf, Date dataNascimento,
+ String educacao, String genero, String classeEconomica, Date dataLicenca) {
+ super(nome, endereco, listaVeiculos);
+ this.cpf = cpf;
+ this.dataNascimento = dataNascimento;
+ this.educacao = educacao;
+ this.genero = genero;
+ this.classeEconomica = classeEconomica;
+ this.dataLicenca = dataLicenca;
+ }
+
+ public ClientePF(String cpf) {
+ super();
+ this.cpf = cpf;
+ }
+
+ // Setters e getters
+ public void setDataNascimento(Date dataNascimento) {
+ this.dataNascimento = dataNascimento;
+ }
+
+ public void setEducacao(String educacao) {
+ this.educacao = educacao;
+ }
+
+ public void setGenero(String genero) {
+ this.genero = genero;
+ }
+
+ public void setClasseEconomica(String classeEconomica) {
+ this.classeEconomica = classeEconomica;
+ }
+
+ public void setDataLicenca(Date dataLicenca) {
+ this.dataLicenca = dataLicenca;
+ }
+
+ public Date getDataNascimento() {
+ return dataNascimento;
+ }
+
+ public String getEducacao() {
+ return educacao;
+ }
+
+ public String getGenero() {
+ return genero;
+ }
+
+ public String getClasseEconomica() {
+ return classeEconomica;
+ }
+
+ public Date getDataLicenca() {
+ return dataLicenca;
+ }
+
+ public String getCPF() {
+ return cpf;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLIENTE PF\nNome: " + getNome() + "\nData de Nascimento: " + datasFormatadas.format(getDataNascimento()) +
+ "\nEndereco: " + getEndereco() + "\nEducacao: " + getEducacao() + "\nGenero: " + getGenero() +
+ "\nClasse Economica: " + getClasseEconomica() + "\nData da licenca: " + datasFormatadas.format(getDataLicenca())
+ + "\nCPF: " + getCPF() + "\nVeiculos: " + getListaVeiculos() + "\n";
+ return str;
+ }
+
+ public static int calculaVerificador(String cpf, int n) {
+ // Função auxiliar à função validarCPF responsável por calcular os digitos verificadores do CPF
+ // O parâmetro n indica quantos dígitos do CPF serão usados no cálculo (8 para o 1º dígito e 9 para o 2°)
+
+ int digito; /* variável que armazena cada índice do CPF */
+ int multiplicador = 2; /* variável auxiliar responável por armazenar o valor ao qual cada dígito será multiplicado */
+ int soma = 0; /* variável responsável por quantabilizar a soma dos produtos de cada dígito pelo multiplicador */
+ int resto; /* resto da divisão de soma por 11 */
+
+ for (int i = n; i >= 0; i--) {
+ digito = (int) cpf.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ resto = soma % 11;
+ if (resto < 2) {
+ return -1;
+ }
+ else {
+ return 11 - resto;
+ }
+ }
+
+ public static boolean validarCPF(String cpf) {
+ cpf = cpf.replaceAll("[^0-9]+", ""); /* elimina todos os dígitos não numéricos */
+
+ if (cpf.length() != 11) {
+ // verifica se o CPF digitado não possui 11 dígitos
+ return false;
+ }
+
+ int contador = 0; /* conta se todos os dígitos do CPF são iguais */
+ for (int i = 0; i < cpf.length(); i++) {
+ if (cpf.charAt(i) == cpf.charAt(0)) {
+ contador++;
+ }
+ }
+ if (contador == 11) {
+ return false;
+ }
+
+ // Calculando o 1° dígito verificador
+ int verificador1 = calculaVerificador(cpf, 8);
+ if (verificador1 == -1) {
+ if (cpf.charAt(9) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador1 != ((int) cpf.charAt(9) - 48)) {
+ return false;
+ }
+ }
+
+ // Calculando o 2° dígito verificador
+ int verificador2 = calculaVerificador(cpf, 9);
+ if (verificador2 == -1 && cpf.charAt(10) != '0') {
+ return false;
+ }
+ else {
+ if (verificador2 != ((int) cpf.charAt(10) - 48)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/Lab03/src/ClientePJ.java b/Lab03/src/ClientePJ.java
new file mode 100644
index 0000000..38a01ec
--- /dev/null
+++ b/Lab03/src/ClientePJ.java
@@ -0,0 +1,120 @@
+import java.util.ArrayList;
+import java.util.Date;
+
+public class ClientePJ extends Cliente {
+ // Atributos
+ final String cnpj;
+ private Date dataFundacao;
+
+ // Construtor
+ public ClientePJ(String nome, String endereco, ArrayList listaVeiculos, String cnpj, Date dataFundacao) {
+ super(nome, endereco, listaVeiculos);
+ this.cnpj = cnpj;
+ this.dataFundacao = dataFundacao;
+ }
+
+ public ClientePJ(String cnpj) {
+ super();
+ this.cnpj = cnpj;
+ }
+
+ // Setters e getters
+ public void setDataFundacao(Date dataFundacao) {
+ this.dataFundacao = dataFundacao;
+ }
+
+ public Date getDataFundacao() {
+ return dataFundacao;
+ }
+
+ public String getCNPJ() {
+ return cnpj;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLIENTE PJ\nNome: " + getNome() + "\nEndereco: " + getEndereco() +
+ "\nData da fundacao da empresa: " + datasFormatadas.format(getDataFundacao()) + "\nCNPJ: " + getCNPJ()
+ + "\nVeiculos: " + getListaVeiculos() + "\n";
+ return str;
+ }
+
+ public static int calculaVerificador(String cnpj, int n) {
+ // Função auxiliar à função validarCPF responsável por calcular os digitos verificadores do CPF
+ // O parâmetro n indica quantos dígitos do CPF serão usados no cálculo (11 para o 1º dígito e 12 para o 2°)
+
+ int digito; /* variável que armazena cada índice do CPF */
+ int multiplicador = 2; /* variável auxiliar responável por armazenar o valor ao qual cada dígito será multiplicado */
+ int soma = 0; /* variável responsável por quantabilizar a soma dos produtos de cada dígito pelo multiplicador */
+ int resto; /* resto da divisão de soma por 11 */
+
+ for (int i = n; i >= n - 7; i--) {
+ digito = (int) cnpj.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ multiplicador = 2;
+ for (int i = n - 8; i >= 0; i--) {
+ digito = (int) cnpj.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ resto = soma % 11;
+ if (resto < 2) {
+ return -1;
+ }
+ else {
+ return 11 - resto;
+ }
+ }
+
+ // Validando o CNPJ
+ public static boolean validarCNPJ(String cnpj) {
+ cnpj = cnpj.replaceAll("[^0-9]+", ""); /* elimina todos os dígitos não numéricos */
+
+ if (cnpj.length() != 14) {
+ // verifica se o CNPj digitado não possui 14 dígitos
+ return false;
+ }
+
+ int contador = 0; /* conta se todos os dígitos do CPF são iguais */
+ for (int i = 0; i < cnpj.length(); i++) {
+ if (cnpj.charAt(i) == cnpj.charAt(0)) {
+ contador++;
+ }
+ }
+ if (contador == 14) {
+ return false;
+ }
+
+ // Calculando o 1° dígito verificador
+ int verificador1 = calculaVerificador(cnpj, 11);
+ if (verificador1 == -1) {
+ if (cnpj.charAt(12) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador1 != ((int) cnpj.charAt(12) - 48)) {
+ return false;
+ }
+ }
+
+ // Calculando o 2° dígito verificador
+ int verificador2 = calculaVerificador(cnpj, 12);
+ if (verificador2 == -1) {
+ if (cnpj.charAt(13) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador2 != ((int) cnpj.charAt(13) - 48)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/Lab03/src/Main.java b/Lab03/src/Main.java
new file mode 100644
index 0000000..d93ca35
--- /dev/null
+++ b/Lab03/src/Main.java
@@ -0,0 +1,183 @@
+import java.util.Scanner;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+
+public class Main {
+ public static void leituraDeDados(String tipo, Seguradora seguradora, Scanner entrada) throws Exception{
+ // Método que realiza a leitura de dados e o cadastro de um clientepf e de um clientepj na seguradora
+ SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+ if (tipo == "CPF") {
+ System.out.println("Digite seu CPF utilizando apenas caracteres numericos: ");
+ String cpf = entrada.nextLine();
+ if(ClientePF.validarCPF(cpf) == false) {
+ System.out.println("CPF invalido. Verifique-o e digite-o novamente com os digitos corretos.");
+ cpf = entrada.nextLine();
+ }
+ else
+ System.out.println("CPF valido!");
+
+ System.out.println("Digite seu nome completo: ");
+ String nome = entrada.nextLine();
+
+ System.out.println("Digite a data de seu nascimento no formato dd/MM/yyyy: ");
+ Date dataNascimento = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite a data de sua licenca no formato dd/MM/yyyy: ");
+ Date dataLicenca = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite seu endereço: ");
+ String endereco = entrada.nextLine();
+
+ System.out.println("Digite seu grau de escolaridade: ");
+ String educacao = entrada.nextLine();
+
+ System.out.println("Digite seu genero: ");
+ String genero = entrada.nextLine();
+
+ System.out.println("Digite sua classe economica: ");
+ String classeEconomica = entrada.nextLine();
+
+ System.out.println("Digite seu numero de veiculos: ");
+ Integer nVeiculos = Integer.parseInt(entrada.nextLine());
+ ArrayList listaVeiculos = new ArrayList();
+ for (int i = 0; i < nVeiculos; i++) {
+ Veiculo veiculo = new Veiculo();
+ System.out.printf("Digite a marca do veiculo %d: ", i + 1);
+ veiculo.setMarca(entrada.nextLine());
+ System.out.printf("Digite o modelo do veiculo %d: ", i + 1);
+ veiculo.setModelo(entrada.nextLine());
+ System.out.printf("Digite a placa do veiculo %d: ", i + 1);
+ veiculo.setPlaca(entrada.nextLine());
+ System.out.printf("Digite o ano de fabricacao do veiculo %d: ", i + 1);
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ veiculo.setAnoFabricacao(anoFabricacao);
+ listaVeiculos.add(veiculo);
+ System.out.println(veiculo); /* método toString() da classe Veiculo */
+ }
+
+ ClientePF clientepf = new ClientePF(nome, endereco, listaVeiculos, cpf, dataNascimento, educacao, genero, classeEconomica, dataLicenca);
+ if (seguradora.cadastrarCliente(clientepf) == true) {
+ System.out.println("Cliente PF cadastrado com sucesso!");
+ System.out.println(clientepf); /* método toString() da classe ClientePF */
+ }
+ else
+ System.out.println("Erro de cadastro: cliente ja cadastrado anteriormente");
+ System.out.println();
+ }
+
+ else if (tipo == "CNPJ") {
+ System.out.println("Digite seu CNPJ utilizando apenas caracteres numericos: ");
+ String cnpj = entrada.nextLine();
+ if (ClientePJ.validarCNPJ(cnpj) == false) {
+ System.out.println("CNPJ invalido. Verifique-o e digite-o novamente com os digitos corretos.");
+ cnpj = entrada.nextLine();
+ }
+ else
+ System.out.println("CNPJ valido!");
+
+ System.out.println("Digite o nome de sua empresa: ");
+ String nome = entrada.nextLine();
+
+ System.out.println("Digite a data de fundacao de sua empresa no formato dd/MM/yyyy: ");
+ Date dataFundacao = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite o endereco de sua empresa: ");
+ String endereco = entrada.nextLine();
+
+ System.out.println("Digite seu numero de veiculos: ");
+ Integer nVeiculos = Integer.parseInt(entrada.nextLine());
+ ArrayList listaVeiculos = new ArrayList();
+ for (int i = 0; i < nVeiculos; i++) {
+ Veiculo veiculo = new Veiculo();
+ System.out.printf("Digite a marca do veiculo %d: ", i + 1);
+ veiculo.setMarca(entrada.nextLine());
+ System.out.printf("Digite o modelo do veiculo %d: ", i + 1);
+ veiculo.setModelo(entrada.nextLine());
+ System.out.printf("Digite a placa do veiculo %d: ", i + 1);
+ veiculo.setPlaca(entrada.nextLine());
+ System.out.printf("Digite o ano de fabricacao do veiculo %d: ", i + 1);
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ veiculo.setAnoFabricacao(anoFabricacao);
+ listaVeiculos.add(veiculo);
+ System.out.println(veiculo); /* método toString() da classe Veiculo */
+ }
+
+ ClientePJ clientepj = new ClientePJ(nome, endereco, listaVeiculos, cnpj, dataFundacao);
+ if (seguradora.cadastrarCliente(clientepj) == true) {
+ System.out.println("Cliente PJ cadastrado com sucesso!");
+ System.out.println(clientepj); /* método toString() da classe ClientePJ */
+ }
+ else
+ System.out.println("Erro de cadastro: cliente ja cadastrado anteriormente");
+ System.out.println();
+ }
+ }
+ public static void main(String[] args) throws Exception {
+ // Instanciando um objeto da classe Seguradora
+ Scanner entrada = new Scanner(System.in);
+ SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+ ArrayList listaClientes = new ArrayList();
+ ArrayList listaSinistros = new ArrayList();
+ Seguradora seguradora = new Seguradora("Unicamp Seguros", "11999981571", "seguros@dac.unicamp.br", "DAC", listaSinistros, listaClientes);
+ System.out.println(seguradora); /* método toString() da classe Seguradora */
+ System.out.println();
+
+ // Cadastrando um cliente PF
+ Veiculo meuVeiculo = new Veiculo("DCV1516", "Renault", "Duster", 2018);
+ ArrayList listaVeiculos = new ArrayList();
+ listaVeiculos.add(meuVeiculo);
+ Date dataNascimento = datasFormatadas.parse("15/09/2004");
+ Date dataLicenca = datasFormatadas.parse("20/01/2023");
+ if (ClientePF.validarCPF("46423644802") == false)
+ System.out.println("CPF invalido.");
+ ClientePF clientepf = new ClientePF("Daniel", "Rua Doutor Zuquim 1782", listaVeiculos, "46423644802", dataNascimento,
+ "Ensino medio completo", "Masculino", "Classe media", dataLicenca);
+
+ if (seguradora.cadastrarCliente(clientepf) == true) {
+ System.out.println("Cliente PF cadastrado com sucesso!");
+ System.out.println(clientepf); /* método toString() da classe ClientePF */
+ }
+ else
+ System.out.println("Erro de cadastro: cliente ja cadastrado anteriormente");
+ System.out.println();
+
+ // Gerando um sinistro do clientepf cadastrado anteriormente
+ Date dataSinistro = datasFormatadas.parse("16/04/2023");
+ if (seguradora.gerarSinistro(dataSinistro, "Rua Alfredo Pujol 321", meuVeiculo, clientepf) == true) {
+ System.out.println("Sinistro gerado com sucesso!");
+ }
+ else
+ System.out.println("Erro ao gerar sinistro. Sinistro ja gerado anteriormente.");
+ System.out.println();
+
+ // Visualizando um sinistro
+ if (seguradora.visualizarSinistro(clientepf.getNome()) == false)
+ System.out.println("Erro ao visualizar sinistro. O cliente em questao nao tem nenhum sinistro.");
+
+
+ // Listando os sinistros
+ System.out.println("LISTA DE SINISTROS GERADOS");
+ System.out.println(seguradora.listarSinistros());
+ System.out.println("FIM DA LISTA");
+
+ // Removendo o clientepf cadastrado da seguradora
+ if (seguradora.removerCliente(clientepf.getNome()) == true)
+ System.out.println("Cliente PF removido com sucesso!");
+ else
+ System.out.println("Erro na remocao. Cliente PF nao encontrado");
+
+ // Recebendo os dados de um cliente PF e cadastrando-o na seguradora (OK)
+ leituraDeDados("CPF", seguradora, entrada);
+
+ // Recebendo os dados de um cliente PJ e cadastrando-o na seguradora (OK)
+ leituraDeDados("CNPJ", seguradora, entrada);
+
+ // Listando os clientes (OK)
+ System.out.println("LISTA DE CLIENTES CADASTRADOS");
+ System.out.println(seguradora.listarClientes());
+ System.out.println("FIM DA LISTA");
+
+ entrada.close();
+ }
+}
\ No newline at end of file
diff --git a/Lab03/src/Seguradora.java b/Lab03/src/Seguradora.java
new file mode 100644
index 0000000..9c5d07f
--- /dev/null
+++ b/Lab03/src/Seguradora.java
@@ -0,0 +1,136 @@
+import java.util.ArrayList;
+import java.util.Date;
+
+public class Seguradora {
+ // Atributos
+ private String nome;
+ private String telefone;
+ private String email;
+ private String endereco;
+ private ArrayList listaSinistros;
+ private ArrayList listaClientes;
+
+ // Método construtor
+ public Seguradora(String nome, String telefone, String email, String endereco, ArrayList < Sinistro> listaSinistros, ArrayList listaClientes) {
+ this.nome = nome;
+ this.telefone = telefone;
+ this.email = email;
+ this.endereco = endereco;
+ this.listaSinistros = listaSinistros;
+ this.listaClientes = listaClientes;
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public ArrayList getListaSinistros() {
+ return listaSinistros;
+ }
+
+ public ArrayList getListaClientes() {
+ return listaClientes;
+ }
+
+ public boolean cadastrarCliente(Cliente cliente) {
+ for (Cliente c : this.listaClientes) {
+ if (c == cliente)
+ return false;
+ }
+ this.listaClientes.add(cliente);
+ return true;
+ }
+
+ public boolean removerCliente(String nome) {
+ for (Cliente cliente : this.listaClientes) {
+ if (cliente.getNome().equals(nome)) {
+ this.listaClientes.remove(cliente);
+ for (Sinistro sinistro : new ArrayList(this.listaSinistros))
+ if (sinistro.getCliente().getNome().equals(nome))
+ this.listaSinistros.remove(sinistro);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public String listarClientes() {
+ String str = "";
+ for (Cliente cliente : this.listaClientes) {
+ str += cliente.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public boolean gerarSinistro(Date data, String endereco, Veiculo veiculo, Cliente cliente) {
+ Sinistro sinistro = new Sinistro();
+ sinistro.setId(1);
+ sinistro.setData(data);
+ sinistro.setEndereco(endereco);
+ sinistro.setCliente(cliente);
+ sinistro.setSeguradora(this);
+ sinistro.setVeiculo(veiculo);
+ for (Sinistro s : this.listaSinistros)
+ if (s.getCliente() == sinistro.getCliente() && s.getData() == sinistro.getData() &&
+ s.getEndereco().equals(sinistro.getEndereco()) && s.getVeiculo() == sinistro.getVeiculo())
+ return false;
+ this.listaSinistros.add(sinistro);
+ return true;
+ }
+
+ public boolean visualizarSinistro(String nome) {
+ boolean flag = false;
+ for (Sinistro sinistro : this.listaSinistros) {
+ if (sinistro.getCliente().getNome() == nome) {
+ System.out.println(sinistro);
+ flag = true;
+ }
+ }
+ return flag;
+ }
+
+ public String listarSinistros() {
+ String str = "";
+ for (Sinistro sinistro : this.listaSinistros) {
+ str += sinistro.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DA SEGURADORA\nNome: " + getNome() + "\nTelefone: " + getTelefone() +
+ "\nEmail: " + getEmail() + "\nEndereco: " + getEndereco() + "\nLista de sinistros: " + getListaSinistros()
+ + "\nLista de clientes: " + getListaClientes() + "\n";
+ return str;
+ }
+}
diff --git a/Lab03/src/Sinistro.java b/Lab03/src/Sinistro.java
new file mode 100644
index 0000000..2864f9c
--- /dev/null
+++ b/Lab03/src/Sinistro.java
@@ -0,0 +1,85 @@
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+public class Sinistro {
+ // Atributos
+ private int id;
+ private Date data;
+ private String endereco;
+ private Seguradora seguradora;
+ private Veiculo veiculo;
+ private Cliente cliente;
+ private static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Método construtor
+ public Sinistro(int id, Date data, String endereco, Seguradora seguradora, Veiculo veiculo, Cliente cliente) {
+ this.id = id;
+ this.data = data;
+ this.endereco = endereco;
+ this.seguradora = seguradora;
+ this.veiculo = veiculo;
+ this.cliente = cliente;
+ }
+
+ public Sinistro() {
+ }
+
+ // Setters e getters
+ public void setId(int id) {
+ Random aleatorio = new Random();
+ this.id = aleatorio.nextInt(100000000);
+ }
+
+ public void setData(Date data) {
+ this.data = data;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public void setSeguradora(Seguradora seguradora) {
+ this.seguradora = seguradora;
+ }
+
+ public void setVeiculo(Veiculo veiculo) {
+ this.veiculo = veiculo;
+ }
+
+ public void setCliente(Cliente cliente) {
+ this.cliente = cliente;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public Date getData() {
+ return data;
+ }
+
+ public Veiculo getVeiculo() {
+ return veiculo;
+ }
+
+ public Seguradora getSeguradora() {
+ return seguradora;
+ }
+
+ public Cliente getCliente() {
+ return cliente;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ @Override
+ public String toString() {
+ String str = "INFORMACOES DO SINISTRO\nId: " + getId() + "\nData: " + datasFormatadas.format(getData()) + "\nVeiculo: " +
+ getVeiculo() + "\nCliente: " + getCliente() +
+ "\nEndereco: " + getEndereco() + "\n";
+ return str;
+ }
+}
diff --git a/Lab03/src/Veiculo.java b/Lab03/src/Veiculo.java
new file mode 100644
index 0000000..fce94b1
--- /dev/null
+++ b/Lab03/src/Veiculo.java
@@ -0,0 +1,58 @@
+public class Veiculo {
+ // Atributos
+ private String placa;
+ private String marca;
+ private String modelo;
+ private int anoFabricacao;
+
+ // Método construtor
+ public Veiculo(String placa, String marca, String modelo, int anoFabricacao) {
+ this.placa = placa;
+ this.marca = marca;
+ this.modelo = modelo;
+ this.anoFabricacao = anoFabricacao;
+ }
+
+ public Veiculo() {
+ }
+
+ // Setters e getters
+ public void setPlaca(String placa) {
+ this.placa = placa;
+ }
+
+ public void setMarca(String marca) {
+ this.marca = marca;
+ }
+
+ public void setModelo(String modelo) {
+ this.modelo = modelo;
+ }
+
+ public void setAnoFabricacao(int anoFabricacao) {
+ this.anoFabricacao = anoFabricacao;
+ }
+
+ public String getPlaca() {
+ return placa;
+ }
+
+ public String getMarca() {
+ return marca;
+ }
+
+ public String getModelo() {
+ return modelo;
+ }
+
+ public int getAnoFabricacao() {
+ return anoFabricacao;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO VEICULO\nPlaca: " + getPlaca() + "\nMarca: " + getMarca() + "\nModelo: " +
+ getModelo() + "\nAno de fabricacao: " + getAnoFabricacao() + "\n";
+ return str;
+ }
+}
diff --git a/Lab04/src/Cadastrar.java b/Lab04/src/Cadastrar.java
new file mode 100644
index 0000000..f1bc1fa
--- /dev/null
+++ b/Lab04/src/Cadastrar.java
@@ -0,0 +1,17 @@
+public enum Cadastrar {
+ CLIENTEPF(1),
+ CLIENTEPJ(2),
+ VEICULO(3),
+ SEGURADORA(4),
+ VOLTAR(5);
+
+ public final int numero; /* constante associada a cada operação */
+
+ Cadastrar(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab04/src/CalcSeguro.java b/Lab04/src/CalcSeguro.java
new file mode 100644
index 0000000..c5b5652
--- /dev/null
+++ b/Lab04/src/CalcSeguro.java
@@ -0,0 +1,16 @@
+public enum CalcSeguro {
+ VALOR_BASE(100.0),
+ FATOR_18_30(1.2),
+ FATOR_30_60(1.0),
+ FATOR_60_90(1.5);
+
+ public final double fator;
+
+ CalcSeguro(double fator) {
+ this.fator = fator;
+ }
+
+ public double getFator() {
+ return fator;
+ }
+}
diff --git a/Lab04/src/Cliente.java b/Lab04/src/Cliente.java
new file mode 100644
index 0000000..c95e737
--- /dev/null
+++ b/Lab04/src/Cliente.java
@@ -0,0 +1,66 @@
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+
+public class Cliente {
+ // Atributos
+ private String nome;
+ private String endereco;
+ private ArrayList listaVeiculos;
+ private double valorSeguro;
+ protected static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Método construtor
+ public Cliente(String nome, String endereco) {
+ this.nome = nome;
+ this.endereco = endereco;
+ valorSeguro = 0.0;
+ listaVeiculos = new ArrayList();
+ }
+
+ public Cliente() {
+
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public void setValorSeguro(double valorSeguro) {
+ this.valorSeguro = valorSeguro;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public double getValorSeguro() {
+ return valorSeguro;
+ }
+
+ public void adicionaVeiculo(Veiculo veiculo) {
+ listaVeiculos.add(veiculo);
+ }
+
+ public ArrayList getListaVeiculos() {
+ return listaVeiculos;
+ }
+
+ public double calculaScore() {
+ return 0.0;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLINTE\nNome: " + getNome() + "\nEndereco: " + getEndereco() + "\nVeiculos: " + getListaVeiculos() + "\n";
+ return str;
+ }
+}
diff --git a/Lab04/src/ClientePF.java b/Lab04/src/ClientePF.java
new file mode 100644
index 0000000..973fd83
--- /dev/null
+++ b/Lab04/src/ClientePF.java
@@ -0,0 +1,102 @@
+import java.util.Date;
+
+public class ClientePF extends Cliente {
+ // Atributos
+ final String cpf;
+ private Date dataNascimento;
+ private String educacao;
+ private String genero;
+ private String classeEconomica;
+ private Date dataLicenca;
+
+
+ // Métodos construtores
+ public ClientePF(String nome, String endereco, String cpf, Date dataNascimento,
+ String educacao, String genero, String classeEconomica, Date dataLicenca) {
+ super(nome, endereco);
+ this.cpf = cpf;
+ this.dataNascimento = dataNascimento;
+ this.educacao = educacao;
+ this.genero = genero;
+ this.classeEconomica = classeEconomica;
+ this.dataLicenca = dataLicenca;
+ }
+
+ public ClientePF(String cpf) {
+ super();
+ this.cpf = cpf;
+ }
+
+ // Setters e getters
+ public void setDataNascimento(Date dataNascimento) {
+ this.dataNascimento = dataNascimento;
+ }
+
+ public void setEducacao(String educacao) {
+ this.educacao = educacao;
+ }
+
+ public void setGenero(String genero) {
+ this.genero = genero;
+ }
+
+ public void setClasseEconomica(String classeEconomica) {
+ this.classeEconomica = classeEconomica;
+ }
+
+ public void setDataLicenca(Date dataLicenca) {
+ this.dataLicenca = dataLicenca;
+ }
+
+ public Date getDataNascimento() {
+ return dataNascimento;
+ }
+
+ public String getEducacao() {
+ return educacao;
+ }
+
+ public String getGenero() {
+ return genero;
+ }
+
+ public String getClasseEconomica() {
+ return classeEconomica;
+ }
+
+ public Date getDataLicenca() {
+ return dataLicenca;
+ }
+
+ public String getCPF() {
+ return cpf;
+ }
+
+ @Override
+ public double calculaScore() {
+ // Calculando a idade do clientePF
+ Date now = new Date();
+ int idade;
+ int anoAux = (now.getYear() - dataNascimento.getYear()) * 365; /* SERÁ??? */
+ int mesAux = (now.getMonth() - dataNascimento.getMonth())* 30;
+ int diaAux = now.getDate() - dataNascimento.getDate();
+ idade = (anoAux + mesAux + diaAux) / 365;
+ // Calculando o score efetivamente
+ if (idade >= 18 && idade < 30)
+ return CalcSeguro.VALOR_BASE.getFator() * CalcSeguro.FATOR_18_30.getFator() * this.getListaVeiculos().size();
+ else if (idade >= 30 && idade < 60)
+ return CalcSeguro.VALOR_BASE.getFator() * CalcSeguro.FATOR_30_60.getFator() * this.getListaVeiculos().size();
+ else
+ return CalcSeguro.VALOR_BASE.getFator() * CalcSeguro.FATOR_60_90.getFator() * this.getListaVeiculos().size();
+
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLIENTE PF\nNome: " + getNome() + "\nData de Nascimento: " + datasFormatadas.format(getDataNascimento()) +
+ "\nEndereco: " + getEndereco() + "\nEducacao: " + getEducacao() + "\nGenero: " + getGenero() +
+ "\nClasse Economica: " + getClasseEconomica() + "\nData da licenca: " + datasFormatadas.format(getDataLicenca())
+ + "\nCPF: " + getCPF() + "\nVeiculos: " + getListaVeiculos() + "\n";
+ return str;
+ }
+}
\ No newline at end of file
diff --git a/Lab04/src/ClientePJ.java b/Lab04/src/ClientePJ.java
new file mode 100644
index 0000000..2549604
--- /dev/null
+++ b/Lab04/src/ClientePJ.java
@@ -0,0 +1,55 @@
+import java.util.Date;
+
+public class ClientePJ extends Cliente {
+ // Atributos
+ final String cnpj;
+ private Date dataFundacao;
+ private int qtdeFuncionarios;
+
+ // Construtor
+ public ClientePJ(String nome, String endereco, String cnpj, Date dataFundacao, int qtdeFuncionarios) {
+ super(nome, endereco);
+ this.cnpj = cnpj;
+ this.dataFundacao = dataFundacao;
+ this.qtdeFuncionarios = qtdeFuncionarios;
+ }
+
+ public ClientePJ(String cnpj) {
+ super();
+ this.cnpj = cnpj;
+ }
+
+ // Setters e getters
+ public void setDataFundacao(Date dataFundacao) {
+ this.dataFundacao = dataFundacao;
+ }
+
+ public void setQtdeFuncionarios(int qtdeFuncionarios) {
+ this.qtdeFuncionarios = qtdeFuncionarios;
+ }
+
+ public Date getDataFundacao() {
+ return dataFundacao;
+ }
+
+ public String getCNPJ() {
+ return cnpj;
+ }
+
+ public int getQtdeFuncionarios() {
+ return qtdeFuncionarios;
+ }
+
+ @Override
+ public double calculaScore() {
+ return CalcSeguro.VALOR_BASE.getFator() * (1 + qtdeFuncionarios / 100) * this.getListaVeiculos().size();
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLIENTE PJ\nNome: " + getNome() + "\nEndereco: " + getEndereco() +
+ "\nData da fundacao da empresa: " + datasFormatadas.format(getDataFundacao()) + "\nCNPJ: " + getCNPJ()
+ + "\nVeiculos: " + getListaVeiculos() + "\nQuantidade de funcionarios: " + getQtdeFuncionarios();
+ return str;
+ }
+}
\ No newline at end of file
diff --git a/Lab04/src/Excluir.java b/Lab04/src/Excluir.java
new file mode 100644
index 0000000..9556734
--- /dev/null
+++ b/Lab04/src/Excluir.java
@@ -0,0 +1,16 @@
+public enum Excluir {
+ CLIENTE(1),
+ VEICULO(2),
+ SINISTRO(3),
+ VOLTAR(4);
+
+ public final int numero; /* constante associada a cada operação */
+
+ Excluir(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab04/src/Listar.java b/Lab04/src/Listar.java
new file mode 100644
index 0000000..c8da61e
--- /dev/null
+++ b/Lab04/src/Listar.java
@@ -0,0 +1,18 @@
+public enum Listar {
+ CLIENTE_SEGURADORA(1),
+ SINISTRO_SEGURADORA(2),
+ SINISTRO_CLIENTE(3),
+ VEICULO_CLIENTE(4),
+ VEICULO_SEGURADORA(5),
+ VOLTAR(6);
+
+ public final int numero; /* constante associada a cada operação */
+
+ Listar(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab04/src/Main.java b/Lab04/src/Main.java
new file mode 100644
index 0000000..f376aff
--- /dev/null
+++ b/Lab04/src/Main.java
@@ -0,0 +1,477 @@
+import java.util.Scanner;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+
+public class Main {
+ public static void Menu(Seguradora seguradora, Scanner entrada) throws Exception {
+ SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+ System.out.println("Bem vindo!");
+ Integer opcao1, opcao2;
+ ArrayList listaSeguradoras = new ArrayList();
+ listaSeguradoras.add(seguradora);
+ do {
+ System.out.println("O que gostaria de fazer agora?");
+ System.out.println("1.Cadastrar;");
+ System.out.println("2.Listar;");
+ System.out.println("3.Excluir;");
+ System.out.println("4.Gerar um sinistro;");
+ System.out.println("5.Transferir seguro;");
+ System.out.println("6.Calcular receita de uma seguradora;");
+ System.out.println("0.Sair.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao1 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao1 == MenuOperacoes.SAIR.getNumero())
+ break;
+
+ else if (opcao1 == MenuOperacoes.CADASTRAR.getNumero()) {
+ System.out.println("Qual tipo de cadastro gostaria de fazer?");
+ System.out.println("1.Cadastrar um clientePF;");
+ System.out.println("2.Cadastrar um clientePJ;");
+ System.out.println("3.Cadastrar um veículo associado a um cliente;");
+ System.out.println("4.Cadastrar uma seguradora;");
+ System.out.println("5.Voltar para as opções anteriores.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao2 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao2 == Cadastrar.VOLTAR.getNumero()) {
+ continue;
+ }
+
+ else if (opcao2 == Cadastrar.CLIENTEPF.getNumero()) {
+ System.out.println("Digite seu CPF: ");
+ String cpf = entrada.nextLine();
+ if(!Validacao.validarCPF(cpf)) {
+ System.out.println("CPF inválido. Verifique-o e digite-o novamente com os dígitos corretos.");
+ cpf = entrada.nextLine();
+ }
+ else
+ System.out.println("CPF válido!");
+
+ System.out.println("Digite seu nome completo: ");
+ String nome = entrada.nextLine();
+ if (Validacao.validarNome(nome))
+ System.out.println("Nome válido!");
+ else {
+ System.out.println("Nome inválido. Digite-o novamente usando apenas letras e espaços, sem caracteres especiais como acento e cedilha");
+ System.out.println("Digite seu nome completo novamente: ");
+ nome = entrada.nextLine();
+ }
+
+ System.out.println("Digite a data de seu nascimento no formato dd/MM/yyyy: ");
+ Date dataNascimento = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite a data de sua licenca no formato dd/MM/yyyy: ");
+ Date dataLicenca = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite seu endereço: ");
+ String endereco = entrada.nextLine();
+
+ System.out.println("Digite seu grau de escolaridade: ");
+ String educacao = entrada.nextLine();
+
+ System.out.println("Digite seu gênero: ");
+ String genero = entrada.nextLine();
+
+ System.out.println("Digite sua classe econômica: ");
+ String classeEconomica = entrada.nextLine();
+
+ ClientePF clientepf = new ClientePF(nome, endereco, cpf, dataNascimento, educacao, genero, classeEconomica, dataLicenca);
+ System.out.println("Digite seu número de veículos: ");
+ Integer nVeiculos = Integer.parseInt(entrada.nextLine());
+ for (int i = 0; i < nVeiculos; i++) {
+ Veiculo veiculo = new Veiculo();
+ System.out.printf("Digite a marca do veículo %d: ", i + 1);
+ veiculo.setMarca(entrada.nextLine());
+ System.out.printf("Digite o modelo do veículo %d: ", i + 1);
+ veiculo.setModelo(entrada.nextLine());
+ System.out.printf("Digite a placa do veículo %d: ", i + 1);
+ veiculo.setPlaca(entrada.nextLine());
+ System.out.printf("Digite o ano de fabricação do veículo %d: ", i + 1);
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ veiculo.setAnoFabricacao(anoFabricacao);
+ clientepf.adicionaVeiculo(veiculo);
+ }
+
+ System.out.println("Digite o nome da seguradora na qual gostaria de se cadastrar: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (seg.cadastrarCliente(clientepf))
+ System.out.println("Cliente PF cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: cliente já cadastrado anteriormente");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao2 == Cadastrar.CLIENTEPJ.getNumero()) {
+ System.out.println("Digite seu CNPJ: ");
+ String cnpj = entrada.nextLine();
+ if (!Validacao.validarCNPJ(cnpj)) {
+ System.out.println("CNPJ inválido. Verifique-o e digite-o novamente com os dígitos corretos.");
+ cnpj = entrada.nextLine();
+ }
+ else
+ System.out.println("CNPJ válido!");
+
+ System.out.println("Digite o nome de sua empresa: ");
+ String nome = entrada.nextLine();
+ if (Validacao.validarNome(nome))
+ System.out.println("Nome válido!");
+ else {
+ System.out.println("Nome inválido. Digite-o novamente usando apenas letras e espaços, sem caracteres especiais como acento e cedilha");
+ System.out.println("Digite o nome de sua empresa novamente: ");
+ nome = entrada.nextLine();
+ }
+
+ System.out.println("Digite a data de fundação de sua empresa no formato dd/MM/yyyy: ");
+ Date dataFundacao = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite o endereço de sua empresa: ");
+ String endereco = entrada.nextLine();
+
+ System.out.println("Digite a quantidade de funcionários de sua empresa: ");
+ Integer qtdeFuncionarios = Integer.parseInt(entrada.nextLine());
+
+ ClientePJ clientepj = new ClientePJ(nome, endereco, cnpj, dataFundacao, qtdeFuncionarios);
+ System.out.println("Digite seu numero de veículos: ");
+ Integer nVeiculos = Integer.parseInt(entrada.nextLine());
+ for (int i = 0; i < nVeiculos; i++) {
+ Veiculo veiculo = new Veiculo();
+ System.out.printf("Digite a marca do veículo %d: ", i + 1);
+ veiculo.setMarca(entrada.nextLine());
+ System.out.printf("Digite o modelo do veículo %d: ", i + 1);
+ veiculo.setModelo(entrada.nextLine());
+ System.out.printf("Digite a placa do veículo %d: ", i + 1);
+ veiculo.setPlaca(entrada.nextLine());
+ System.out.printf("Digite o ano de fabricação do veículo %d: ", i + 1);
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ veiculo.setAnoFabricacao(anoFabricacao);
+ clientepj.adicionaVeiculo(veiculo);
+ }
+
+ System.out.println("Digite o nome da seguradora na qual gostaria de efetuar o cadastro: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (seg.cadastrarCliente(clientepj))
+ System.out.println("Cliente PJ cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: cliente já cadastrado anteriormente.");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao2 == Cadastrar.VEICULO.getNumero()) {
+ Veiculo veiculo = new Veiculo();
+ System.out.printf("Digite a marca do veículo: ");
+ veiculo.setMarca(entrada.nextLine());
+ System.out.printf("Digite o modelo do veículo: ");
+ veiculo.setModelo(entrada.nextLine());
+ System.out.printf("Digite a placa do veículo: ");
+ veiculo.setPlaca(entrada.nextLine());
+ System.out.printf("Digite o ano de fabricação do veículo: ");
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ veiculo.setAnoFabricacao(anoFabricacao);
+ System.out.println("Digite o nome completo do cliente a que deseja adicionar este veículo: ");
+ String nome = entrada.nextLine();
+ seguradora.adicionaVeiculoCliente(veiculo, nome);
+ System.out.println();
+ }
+
+ else if (opcao2 == Cadastrar.SEGURADORA.getNumero()) {
+ System.out.println("Digite o nome da seguradora: ");
+ String nome = entrada.nextLine();
+ System.out.println("Digite o telefone da seguradora: ");
+ String telefone = entrada.nextLine();
+ System.out.println("Digite o email da seguradora: ");
+ String email = entrada.nextLine();
+ System.out.println("Digite o endereço da seguradora: ");
+ String endereco = entrada.nextLine();
+ Seguradora seguradora2 = new Seguradora(nome, telefone, email, endereco);
+ listaSeguradoras.add(seguradora2);
+ System.out.println();
+ }
+ }
+
+ else if (opcao1 == MenuOperacoes.LISTAR.getNumero()) {
+ System.out.println("O que gostaria de listar?");
+ System.out.println("1.Listas clientes por seguradora: ");
+ System.out.println("2.Listar sinistros por seguradora;");
+ System.out.println("3.Listar sinistros por cliente;");
+ System.out.println("4.Listar veículos por cliente;");
+ System.out.println("5.Listar veículos por seguradora;");
+ System.out.println("6.Voltar para as opções anteriores.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao2 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao2 == Listar.VOLTAR.getNumero()) {
+ continue;
+ }
+
+ else if (opcao2 == Listar.CLIENTE_SEGURADORA.getNumero()) {
+ System.out.println("Digite o nome da seguradora da qual deseja listar os clientes: ");
+ String nome = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nome)) {
+ System.out.printf("Lista de clientes cadastrados na seguradora %s\n", nome);
+ System.out.println(seg.listarClientes());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao2 == Listar.SINISTRO_SEGURADORA.getNumero()) {
+ System.out.println("Digite o nome da seguradora da qual deseja listar os sinistros: ");
+ String nome = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nome)) {
+ System.out.printf("Lista de sinistros gerados pela seguradora %s\n", nome);
+ System.out.println(seguradora.listarSinistros());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao2 == Listar.SINISTRO_CLIENTE.getNumero()) {
+ System.out.println("Digite o nome completo do cliente do qual deseja listar os sinistros: ");
+ String nomeCliente = entrada.nextLine();
+ System.out.println("Digite o nome da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (!seg.visualizarSinistro(nomeCliente))
+ System.out.println("Erro ao visualizar sinistro. O cliente em questão não tem nenhum sinistro.");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao2 == Listar.VEICULO_CLIENTE.getNumero()) {
+ System.out.println("Digite o nome completo do cliente do qual deseja listar os veículos: ");
+ String nomeCliente = entrada.nextLine();
+ System.out.println("Digite o nome da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (!seg.visualizarVeiculo(nomeCliente))
+ System.out.println("Erro ao visualizar veículos. O cliente em questão não tem nenhum veículo.");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao2 == Listar.VEICULO_SEGURADORA.getNumero()) {
+ System.out.println("Digite o nome da seguradora da qual deseja listar os veículos: ");
+ String nome = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nome)) {
+ System.out.printf("Lista de veículos cadastrados na seguradora %s\n", nome);
+ System.out.println(seguradora.listarVeiculos());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ System.out.println();
+ }
+ }
+
+ else if (opcao1 == MenuOperacoes.EXCLUIR.getNumero()) {
+ System.out.println("O que gostaria de excluir?");
+ System.out.println("1.Excluir um cliente de uma seguradora;");
+ System.out.println("2.Excluir um veículo de um cliente;");
+ System.out.println("3.Excluir um sinistro de uma seguradora.");
+ System.out.println("4.Voltar para as opções anteriores.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao2 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao2 == Excluir.VOLTAR.getNumero()) {
+ continue;
+ }
+
+ else if (opcao2 == Excluir.CLIENTE.getNumero()) {
+ System.out.println("Digite o nome completo do cliente que deseja remover: ");
+ String nomeCliente = entrada.nextLine();
+ System.out.println("Digite o nome da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (seguradora.removerCliente(nomeCliente))
+ System.out.println("Cliente removido com sucesso!");
+ else
+ System.out.println("Erro na remoção. Cliente não encontrado.");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao2 == Excluir.VEICULO.getNumero()) {
+ System.out.println("Digite a placa do veículo que deseja remover: ");
+ String placa = entrada.nextLine();
+ System.out.println("Digite o nome completo do cliente cujo veículo deseja remover: ");
+ String nomeCliente = entrada.nextLine();
+ System.out.println("Digite o nome da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (seg.removerVeiculo(placa, nomeCliente))
+ System.out.println("Veículo removido com sucesso!");
+ else
+ System.out.println("Erro na remoção. Veículo não encontrado.");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao2 == Excluir.SINISTRO.getNumero()) {
+ System.out.println("Digite a data referente ao sinistro no formato dd/MM/yyyy: ");
+ Date data = datasFormatadas.parse(entrada.nextLine());
+ System.out.println("Digite o endereco referente ao sinistro: ");
+ String endereco = entrada.nextLine();
+ System.out.println("Digite o nome completo do cliente cujo veículo deseja remover: ");
+ String nomeCliente = entrada.nextLine();
+ System.out.println("Digite o nome da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (seg.removerSinistro(data, endereco, nomeCliente))
+ System.out.println("Sinistro removido com sucesso!");
+ else
+ System.out.println("Erro na remoção. Sinistro não encontrado.");
+ }
+ }
+ System.out.println();
+ }
+ }
+
+ else if (opcao1 == MenuOperacoes.GERAR_SINISTRO.getNumero()) {
+ System.out.println("Digite a data referente ao sinistro no formato dd/MM/yyyy: ");
+ Date data = datasFormatadas.parse(entrada.nextLine());
+ System.out.println("Digite o endereco referente ao sinistro: ");
+ String endereco = entrada.nextLine();
+ System.out.println("Digite a placa do veículo envolvido no acidente: ");
+ String placa = entrada.nextLine();
+ System.out.println("Digite seu nome completo: ");
+ String nomeCliente = entrada.nextLine();
+ System.out.println("Digite o nome da seguradora na qual deseja gerar o sinistro: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (seg.gerarSinistro(data, endereco, placa, nomeCliente))
+ System.out.println("Sinistro gerado com sucesso!");
+ else
+ System.out.println("Erro ao gerar sinistro. Sinistro já gerado anteriormente.");
+ }
+ }
+ System.out.println();
+ }
+
+ else if (opcao1 == MenuOperacoes.TRANSFERIR_SEGURO.getNumero()) {
+ System.out.println("Digite o nome da seguradora na qual deseja transferir o seguro entre clientes: ");
+ String nomeSeguradora = entrada.nextLine();
+ System.out.println("Digite o nome do cliente que irá transferir o seguro: ");
+ String nomeCliente1 = entrada.nextLine();
+ System.out.println("Digite o nome do cliente que irá receber o seguro: ");
+ String nomeCliente2 = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora)) {
+ if (seg.transferirSeguro(nomeCliente1, nomeCliente2))
+ System.out.println("Seguro transferido com sucesso!");
+ else
+ System.out.println("Erro ao transferir seguro. Um dos clientes passados não foi encontrado na seguradora.");
+ }
+ }
+ }
+
+ else if (opcao1 == MenuOperacoes.CALCULAR_RECEITA.getNumero()) {
+ System.out.println("Digite o nome da seguradora da qual deseja calcular a receita: ");
+ String nomeSeguradora = entrada.nextLine();
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getNome().equals(nomeSeguradora))
+ System.out.println("Receita da seguradora " + nomeSeguradora + ": " + seg.calcularReceita());
+ }
+ }
+
+ } while(opcao1 != MenuOperacoes.SAIR.getNumero());
+ System.out.println("SAIU DO MENU.");
+ }
+ public static void main(String[] args) throws Exception {
+ // Auxiliares
+ Scanner entrada = new Scanner(System.in);
+ SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Instanciando 1 objeto da classe Seguradora
+ Seguradora seguradora = new Seguradora("Unicamp Seguros", "11999981571", "seguros@dac.unicamp.br", "DAC");
+
+ // Instanciando 2 objetos da classe Veiculo
+ Veiculo veiculo1 = new Veiculo("DCV1516", "Renault", "Duster", 2018);
+ Veiculo veiculo2 = new Veiculo("AMS2001", "Honda", "Civic", 2013);
+
+ // Instanciando 1 objeto da classe ClientePF e cadastrando-o na seguradora
+ Date dataNascimento = datasFormatadas.parse("15/09/2004");
+ Date dataLicenca = datasFormatadas.parse("20/01/2023");
+ if (!Validacao.validarCPF("464.236.448-02"))
+ System.out.println("CPF inválido.");
+ ClientePF clientepf = new ClientePF("Daniel", "Rua Doutor Zuquim 1782", "464.236.448-02", dataNascimento,
+ "Ensino médio completo", "Masculino", "Classe média", dataLicenca);
+ clientepf.adicionaVeiculo(veiculo1);
+ if (seguradora.cadastrarCliente(clientepf))
+ System.out.println("Cliente PF cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: cliente já cadastrado anteriormente");
+ System.out.println();
+
+ // Instanciando 1 objeto da classe ClientePJ e cadastrando-o na seguradora
+ Date dataFundacao = datasFormatadas.parse("21/07/2004");
+ if (!Validacao.validarCNPJ("69.479.158/0001-92"))
+ System.out.println("CNPJ invalido.");
+ ClientePJ clientepj = new ClientePJ("Daniboy Empreendimentos", "Rua Leoncio de Magalhaes 479",
+ "69.479.158/0001-92", dataFundacao, 100);
+ clientepj.adicionaVeiculo(veiculo2);
+ if (seguradora.cadastrarCliente(clientepj))
+ System.out.println("Cliente PJ cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: cliente ja cadastrado anteriormente");
+ System.out.println();
+
+ // Gerando 2 sinistros na seguradora (1 para cada cliente instanciado)
+ Date dataSinistro1 = datasFormatadas.parse("16/04/2023");
+ if (seguradora.gerarSinistro(dataSinistro1, "Rua Alfredo Pujol 321", veiculo1.getPlaca(), clientepf.getNome()))
+ System.out.println("Sinistro gerado com sucesso!");
+ else
+ System.out.println("Erro ao gerar sinistro. Sinistro ja gerado anteriormente.");
+
+ Date dataSinistro2 = datasFormatadas.parse("22/04/2023");
+ if (seguradora.gerarSinistro(dataSinistro2, "Rua Cataguases 754", veiculo2.getPlaca(), clientepj.getNome()))
+ System.out.println("Sinistro gerado com sucesso!");
+ else
+ System.out.println("Erro ao gerar sinistro. Sinistro ja gerado anteriormente.");
+
+ // Chamando os métodos da classe Seguradora
+ System.out.printf("Lista de clientes cadastrados na seguradora %s\n", seguradora.getNome());
+ System.out.println(seguradora.listarClientes());
+ System.out.println("FIM DA LISTA\n");
+
+ if (!seguradora.visualizarSinistro(clientepf.getNome()))
+ System.out.println("Erro ao visualizar sinistro. O cliente em questao nao tem nenhum sinistro.");
+
+ System.out.printf("Lista de sinistros gerados pela seguradora %s\n", seguradora.getNome());
+ System.out.println(seguradora.listarSinistros());
+ System.out.println("FIM DA LISTA\n");
+
+ clientepf.setValorSeguro(seguradora.calcularPrecoSeguroCliente(clientepf));
+ clientepj.setValorSeguro(seguradora.calcularPrecoSeguroCliente(clientepj));
+ System.out.println("Receita da seguradora " + seguradora.getNome() + ": " + seguradora.calcularReceita());
+ // Note que o método calcularReceita() já atualiza o atributo valorSeguro de cada cliente cadastrado na seguradora
+
+ // Chamando o menu de operações
+ Menu(seguradora, entrada);
+
+ entrada.close();
+ }
+}
\ No newline at end of file
diff --git a/Lab04/src/MenuOperacoes.java b/Lab04/src/MenuOperacoes.java
new file mode 100644
index 0000000..3b74ff0
--- /dev/null
+++ b/Lab04/src/MenuOperacoes.java
@@ -0,0 +1,19 @@
+public enum MenuOperacoes {
+ CADASTRAR(1),
+ LISTAR(2),
+ EXCLUIR(3),
+ GERAR_SINISTRO(4),
+ TRANSFERIR_SEGURO(5),
+ CALCULAR_RECEITA(6),
+ SAIR(0);
+
+ public final int numero; /* constante associada a cada operação */
+
+ MenuOperacoes(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab04/src/Seguradora.java b/Lab04/src/Seguradora.java
new file mode 100644
index 0000000..70f7bc0
--- /dev/null
+++ b/Lab04/src/Seguradora.java
@@ -0,0 +1,244 @@
+import java.util.ArrayList;
+import java.util.Date;
+
+public class Seguradora {
+ // Atributos
+ private String nome;
+ private String telefone;
+ private String email;
+ private String endereco;
+ private ArrayList listaSinistros;
+ private ArrayList listaClientes;
+
+ // Método construtor
+ public Seguradora(String nome, String telefone, String email, String endereco) {
+ this.nome = nome;
+ this.telefone = telefone;
+ this.email = email;
+ this.endereco = endereco;
+ listaSinistros = new ArrayList();
+ listaClientes = new ArrayList();
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public ArrayList getListaSinistros() {
+ return listaSinistros;
+ }
+
+ public ArrayList getListaClientes() {
+ return listaClientes;
+ }
+
+ public boolean cadastrarCliente(Cliente cliente) {
+ for (Cliente c : listaClientes) {
+ if (c == cliente)
+ return false;
+ }
+ listaClientes.add(cliente);
+ return true;
+ }
+
+ public boolean removerCliente(String nome) {
+ for (Cliente cliente : new ArrayList(listaClientes)) {
+ if (cliente.getNome().equals(nome)) {
+ listaClientes.remove(cliente);
+ for (Sinistro sinistro : new ArrayList(listaSinistros))
+ if (sinistro.getCliente().getNome().equals(nome))
+ listaSinistros.remove(sinistro);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public String listarClientes() {
+ String str = "";
+ for (Cliente cliente : listaClientes) {
+ str += cliente.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public boolean gerarSinistro(Date data, String endereco, String placa, String nomeCliente) {
+ Sinistro sinistro = new Sinistro(data, endereco, this);
+ for (Cliente cliente : listaClientes) {
+ if (cliente.getNome().equals(nomeCliente)) {
+ sinistro.setCliente(cliente);
+ for (Veiculo veiculo : cliente.getListaVeiculos()) {
+ if (veiculo.getPlaca().equals(placa)) {
+ sinistro.setVeiculo(veiculo);
+ }
+ }
+ }
+ }
+ for (Sinistro s : listaSinistros)
+ if (s.getCliente().equals(sinistro.getCliente()) && s.getData().equals(sinistro.getData()) &&
+ s.getEndereco().equals(sinistro.getEndereco()) && s.getVeiculo().equals(sinistro.getVeiculo()))
+ return false;
+ listaSinistros.add(sinistro);
+ return true;
+ }
+
+ public boolean visualizarSinistro(String nome) {
+ boolean flag = false;
+ for (Sinistro sinistro : listaSinistros) {
+ if (sinistro.getCliente().getNome().equals(nome)) {
+ if (!flag)
+ System.out.printf("Lista de sinistros do cliente %s\n", nome);
+ System.out.println(sinistro);
+ flag = true;
+ }
+ }
+ if (flag)
+ System.out.println("FIM DA LISTA.");
+ return flag;
+ }
+
+ public String listarSinistros() {
+ String str = "";
+ for (Sinistro sinistro : listaSinistros) {
+ str += sinistro.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public boolean removerSinistro(Date data, String endereco, String nomeCliente) {
+ for (Sinistro sinistro : new ArrayList(listaSinistros)) {
+ if (sinistro.getCliente().getNome().equals(nomeCliente) && sinistro.getData().equals(data) && sinistro.getEndereco().equals(endereco)) {
+ listaSinistros.remove(sinistro);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean visualizarVeiculo(String nome) {
+ boolean flag = false;
+ for (Cliente cliente : listaClientes) {
+ if (cliente.getNome().equals(nome)) {
+ for (Veiculo veiculo : cliente.getListaVeiculos()) {
+ if (!flag)
+ System.out.printf("Lista de veiculos do cliente %s\n", nome);
+ System.out.println(veiculo);
+ flag = true;
+ }
+ }
+ }
+ if (flag)
+ System.out.println("FIM DA LISTA.");
+ return flag;
+ }
+
+ public String listarVeiculos() {
+ String str = "";
+ for (Cliente cliente : listaClientes) {
+ for (Veiculo veiculo : cliente.getListaVeiculos()) {
+ str += veiculo.toString() + "\n*\n";
+ }
+ }
+ return str;
+ }
+
+ public void adicionaVeiculoCliente(Veiculo veiculo, String nome) {
+ for (Cliente cliente : listaClientes) {
+ if (cliente.getNome().equals(nome)) {
+ cliente.adicionaVeiculo(veiculo);
+ }
+ }
+ }
+
+ public boolean removerVeiculo(String placa, String nomeCliente) {
+ for (Cliente cliente : listaClientes) {
+ if (cliente.getNome().equals(nomeCliente)) {
+ for (Veiculo veiculo : new ArrayList(cliente.getListaVeiculos())) {
+ if (veiculo.getPlaca().equals(placa)) {
+ cliente.getListaVeiculos().remove(veiculo);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public double calcularPrecoSeguroCliente(Cliente cliente) {
+ // Calculando o numero de sinistros do cliente
+ int nSinistros = 0;
+ for (Sinistro sinistro : listaSinistros) {
+ if (sinistro.getCliente().equals(cliente)) {
+ nSinistros++;
+ }
+ }
+
+ // Calculando o preço efetivamente
+ return cliente.calculaScore() * (1 + nSinistros);
+ }
+
+ public double calcularReceita() {
+ double receita = 0;
+ for (Cliente cliente : listaClientes) {
+ receita += calcularPrecoSeguroCliente(cliente);
+ cliente.setValorSeguro(calcularPrecoSeguroCliente(cliente));
+ }
+ return receita;
+ }
+
+ public boolean transferirSeguro(String nomeCliente1, String nomeCliente2) {
+ // O cliente1 transfere o seguro, enquanto o cliente 2 o recebe
+ Cliente cliente1 = null, cliente2 = null;
+ for (Cliente cliente : listaClientes) {
+ if (cliente.getNome().equals(nomeCliente1))
+ cliente1 = cliente;
+ else if (cliente.getNome().equals(nomeCliente2))
+ cliente2 = cliente;
+ }
+ if (cliente1 == null || cliente2 == null)
+ return false;
+ for (Veiculo veiculo : cliente1.getListaVeiculos())
+ cliente2.adicionaVeiculo(veiculo);
+ cliente1.getListaVeiculos().clear();
+ cliente1.setValorSeguro(0);
+ cliente2.setValorSeguro(calcularPrecoSeguroCliente(cliente2));
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DA SEGURADORA\nNome: " + getNome() + "\nTelefone: " + getTelefone() +
+ "\nEmail: " + getEmail() + "\nEndereco: " + getEndereco() + "\nLista de sinistros: " + getListaSinistros()
+ + "\nLista de clientes: " + getListaClientes() + "\n";
+ return str;
+ }
+}
diff --git a/Lab04/src/Sinistro.java b/Lab04/src/Sinistro.java
new file mode 100644
index 0000000..8c1e25c
--- /dev/null
+++ b/Lab04/src/Sinistro.java
@@ -0,0 +1,80 @@
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+public class Sinistro {
+ // Atributos
+ private final int id;
+ private Date data;
+ private String endereco;
+ private Seguradora seguradora;
+ private Veiculo veiculo;
+ private Cliente cliente;
+ private static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Método construtor
+ public Sinistro(Date data, String endereco, Seguradora seguradora) {
+ this.id = geraId();
+ this.data = data;
+ this.endereco = endereco;
+ this.seguradora = seguradora;
+ }
+
+ // Setters e getters
+ public int geraId(){
+ Random aleatorio = new Random();
+ return aleatorio.nextInt(100000000);
+ }
+
+ public void setData(Date data) {
+ this.data = data;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public void setSeguradora(Seguradora seguradora) {
+ this.seguradora = seguradora;
+ }
+
+ public void setVeiculo(Veiculo veiculo) {
+ this.veiculo = veiculo;
+ }
+
+ public void setCliente(Cliente cliente) {
+ this.cliente = cliente;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public Date getData() {
+ return data;
+ }
+
+ public Veiculo getVeiculo() {
+ return veiculo;
+ }
+
+ public Seguradora getSeguradora() {
+ return seguradora;
+ }
+
+ public Cliente getCliente() {
+ return cliente;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ @Override
+ public String toString() {
+ String str = "INFORMACOES DO SINISTRO\nId: " + getId() + "\nData: " + datasFormatadas.format(getData()) + "\nVeiculo: " +
+ getVeiculo() + "\nCliente: " + getCliente() +
+ "\nEndereco: " + getEndereco() + "\n";
+ return str;
+ }
+}
diff --git a/Lab04/src/Validacao.java b/Lab04/src/Validacao.java
new file mode 100644
index 0000000..40086b8
--- /dev/null
+++ b/Lab04/src/Validacao.java
@@ -0,0 +1,156 @@
+public class Validacao {
+ private static int calculaVerificadorPF(String cpf, int n) {
+ // Função auxiliar à função validarCPF responsável por calcular os digitos verificadores do CPF
+ // O parâmetro n indica quantos dígitos do CPF serão usados no cálculo (8 para o 1º dígito e 9 para o 2°)
+
+ int digito; /* variável que armazena cada índice do CPF */
+ int multiplicador = 2; /* variável auxiliar responável por armazenar o valor ao qual cada dígito será multiplicado */
+ int soma = 0; /* variável responsável por quantabilizar a soma dos produtos de cada dígito pelo multiplicador */
+ int resto; /* resto da divisão de soma por 11 */
+
+ for (int i = n; i >= 0; i--) {
+ digito = (int) cpf.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ resto = soma % 11;
+ if (resto < 2) {
+ return -1;
+ }
+ else {
+ return 11 - resto;
+ }
+ }
+
+ private static int calculaVerificadorPJ(String cnpj, int n) {
+ // Função auxiliar à função validarCPF responsável por calcular os digitos verificadores do CPF
+ // O parâmetro n indica quantos dígitos do CPF serão usados no cálculo (11 para o 1º dígito e 12 para o 2°)
+
+ int digito; /* variável que armazena cada índice do CPF */
+ int multiplicador = 2; /* variável auxiliar responável por armazenar o valor ao qual cada dígito será multiplicado */
+ int soma = 0; /* variável responsável por quantabilizar a soma dos produtos de cada dígito pelo multiplicador */
+ int resto; /* resto da divisão de soma por 11 */
+
+ for (int i = n; i >= n - 7; i--) {
+ digito = (int) cnpj.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ multiplicador = 2;
+ for (int i = n - 8; i >= 0; i--) {
+ digito = (int) cnpj.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ resto = soma % 11;
+ if (resto < 2) {
+ return -1;
+ }
+ else {
+ return 11 - resto;
+ }
+ }
+
+ public static boolean validarCPF(String cpf) {
+ cpf = cpf.replaceAll("[^0-9]+", ""); /* elimina todos os dígitos não numéricos */
+
+ if (cpf.length() != 11) {
+ // verifica se o CPF digitado não possui 11 dígitos
+ return false;
+ }
+
+ int contador = 0; /* conta se todos os dígitos do CPF são iguais */
+ for (int i = 0; i < cpf.length(); i++) {
+ if (cpf.charAt(i) == cpf.charAt(0)) {
+ contador++;
+ }
+ }
+ if (contador == 11) {
+ return false;
+ }
+
+ // Calculando o 1° dígito verificador
+ int verificador1 = calculaVerificadorPF(cpf, 8);
+ if (verificador1 == -1) {
+ if (cpf.charAt(9) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador1 != ((int) cpf.charAt(9) - 48)) {
+ return false;
+ }
+ }
+
+ // Calculando o 2° dígito verificador
+ int verificador2 = calculaVerificadorPF(cpf, 9);
+ if (verificador2 == -1 && cpf.charAt(10) != '0') {
+ return false;
+ }
+ else {
+ if (verificador2 != ((int) cpf.charAt(10) - 48)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static boolean validarCNPJ(String cnpj) {
+ cnpj = cnpj.replaceAll("[^0-9]+", ""); /* elimina todos os dígitos não numéricos */
+
+ if (cnpj.length() != 14) {
+ // verifica se o CNPj digitado não possui 14 dígitos
+ return false;
+ }
+
+ int contador = 0; /* conta se todos os dígitos do CPF são iguais */
+ for (int i = 0; i < cnpj.length(); i++) {
+ if (cnpj.charAt(i) == cnpj.charAt(0)) {
+ contador++;
+ }
+ }
+ if (contador == 14) {
+ return false;
+ }
+
+ // Calculando o 1° dígito verificador
+ int verificador1 = calculaVerificadorPJ(cnpj, 11);
+ if (verificador1 == -1) {
+ if (cnpj.charAt(12) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador1 != ((int) cnpj.charAt(12) - 48)) {
+ return false;
+ }
+ }
+
+ // Calculando o 2° dígito verificador
+ int verificador2 = calculaVerificadorPJ(cnpj, 12);
+ if (verificador2 == -1) {
+ if (cnpj.charAt(13) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador2 != ((int) cnpj.charAt(13) - 48)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static boolean validarNome(String nome) {
+ String nomeAux = nome.replaceAll("[^A-Z, ^a-z, ^\b]", ""); /* ???? */
+ if (nomeAux.equals(nome))
+ return true;
+ else
+ return false;
+ }
+}
diff --git a/Lab04/src/Veiculo.java b/Lab04/src/Veiculo.java
new file mode 100644
index 0000000..fce94b1
--- /dev/null
+++ b/Lab04/src/Veiculo.java
@@ -0,0 +1,58 @@
+public class Veiculo {
+ // Atributos
+ private String placa;
+ private String marca;
+ private String modelo;
+ private int anoFabricacao;
+
+ // Método construtor
+ public Veiculo(String placa, String marca, String modelo, int anoFabricacao) {
+ this.placa = placa;
+ this.marca = marca;
+ this.modelo = modelo;
+ this.anoFabricacao = anoFabricacao;
+ }
+
+ public Veiculo() {
+ }
+
+ // Setters e getters
+ public void setPlaca(String placa) {
+ this.placa = placa;
+ }
+
+ public void setMarca(String marca) {
+ this.marca = marca;
+ }
+
+ public void setModelo(String modelo) {
+ this.modelo = modelo;
+ }
+
+ public void setAnoFabricacao(int anoFabricacao) {
+ this.anoFabricacao = anoFabricacao;
+ }
+
+ public String getPlaca() {
+ return placa;
+ }
+
+ public String getMarca() {
+ return marca;
+ }
+
+ public String getModelo() {
+ return modelo;
+ }
+
+ public int getAnoFabricacao() {
+ return anoFabricacao;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO VEICULO\nPlaca: " + getPlaca() + "\nMarca: " + getMarca() + "\nModelo: " +
+ getModelo() + "\nAno de fabricacao: " + getAnoFabricacao() + "\n";
+ return str;
+ }
+}
diff --git a/Lab05/src/AtualizarFrota.java b/Lab05/src/AtualizarFrota.java
new file mode 100644
index 0000000..86699fa
--- /dev/null
+++ b/Lab05/src/AtualizarFrota.java
@@ -0,0 +1,16 @@
+public enum AtualizarFrota {
+ ADICIONAR_VEICULO(1),
+ REMOVER_VEICULO(2),
+ REMOVER_FROTA(3),
+ VOLTAR(4);
+
+ public final int numero; /* constante associada a cada operação */
+
+ AtualizarFrota(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab05/src/Cadastrar.java b/Lab05/src/Cadastrar.java
new file mode 100644
index 0000000..cccf93d
--- /dev/null
+++ b/Lab05/src/Cadastrar.java
@@ -0,0 +1,18 @@
+public enum Cadastrar {
+ CLIENTEPF(1),
+ CLIENTEPJ(2),
+ VEICULO(3),
+ SEGURADORA(4),
+ FROTA(5),
+ VOLTAR(6);
+
+ public final int numero; /* constante associada a cada operação */
+
+ Cadastrar(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab05/src/CalcSeguro.java b/Lab05/src/CalcSeguro.java
new file mode 100644
index 0000000..fec558c
--- /dev/null
+++ b/Lab05/src/CalcSeguro.java
@@ -0,0 +1,16 @@
+public enum CalcSeguro {
+ VALOR_BASE(10.0),
+ FATOR_18_30(1.25),
+ FATOR_30_60(1.0),
+ FATOR_60_90(1.5);
+
+ public final double fator;
+
+ CalcSeguro(double fator) {
+ this.fator = fator;
+ }
+
+ public double getFator() {
+ return fator;
+ }
+}
diff --git a/Lab05/src/Cliente.java b/Lab05/src/Cliente.java
new file mode 100644
index 0000000..86c6113
--- /dev/null
+++ b/Lab05/src/Cliente.java
@@ -0,0 +1,58 @@
+import java.text.SimpleDateFormat;
+
+public abstract class Cliente {
+ // Atributos
+ private String nome;
+ private String endereco;
+ private String telefone;
+ private String email;
+ protected static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Método construtor
+ public Cliente(String nome, String endereco, String telefone, String email) {
+ this.nome = nome;
+ this.endereco = endereco;
+ this.telefone = telefone;
+ this.email = email;
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ @Override
+ public String toString() {
+ String str = "Nome: " + getNome() + "\nEndereço: " + getEndereco() + "\nTelefone: " + getTelefone()
+ + "\nEmail: " + getEmail();
+ return str;
+ }
+}
diff --git a/Lab05/src/ClientePF.java b/Lab05/src/ClientePF.java
new file mode 100644
index 0000000..be5e7db
--- /dev/null
+++ b/Lab05/src/ClientePF.java
@@ -0,0 +1,89 @@
+import java.util.ArrayList;
+import java.util.Date;
+
+public class ClientePF extends Cliente {
+ // Atributos
+ private final String cpf;
+ private Date dataNascimento;
+ private String educacao;
+ private String genero;
+ private ArrayList listaVeiculos;
+
+ // Métodos construtores
+ public ClientePF(String nome, String endereco, String telefone, String email, String cpf, Date dataNascimento,
+ String educacao, String genero) {
+ super(nome, endereco, telefone, email);
+ this.cpf = cpf;
+ this.dataNascimento = dataNascimento;
+ this.educacao = educacao;
+ this.genero = genero;
+ listaVeiculos = new ArrayList();
+ }
+
+ // Setters e getters
+ public void setDataNascimento(Date dataNascimento) {
+ this.dataNascimento = dataNascimento;
+ }
+
+ public void setEducacao(String educacao) {
+ this.educacao = educacao;
+ }
+
+ public void setGenero(String genero) {
+ this.genero = genero;
+ }
+
+ public Date getDataNascimento() {
+ return dataNascimento;
+ }
+
+ public String getEducacao() {
+ return educacao;
+ }
+
+ public String getGenero() {
+ return genero;
+ }
+
+ public String getCPF() {
+ return cpf;
+ }
+
+ public ArrayList getListaVeiculos() {
+ return listaVeiculos;
+ }
+
+ public boolean cadastrarVeiculo(Veiculo veiculo) {
+ if (listaVeiculos.contains(veiculo)) {
+ return false;
+ }
+ listaVeiculos.add(veiculo);
+ return true;
+ }
+
+ public boolean removerVeiculo(String placa) {
+ for (Veiculo veiculo : new ArrayList(listaVeiculos)) {
+ if (veiculo.getPlaca().equals(placa)) {
+ listaVeiculos.remove(veiculo);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public String listarVeiculos() {
+ String str = "";
+ for (Veiculo veiculo : listaVeiculos) {
+ str += veiculo.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLIENTE PF\n" + super.toString() + "\nData de Nascimento: " + datasFormatadas.format(getDataNascimento())
+ + "\nEducação: " + getEducacao() + "\nGênero: " + getGenero() +
+ "\nCPF: " + getCPF() + "\nLISTA DE VEÍCULOS\n" + listarVeiculos();
+ return str;
+ }
+}
\ No newline at end of file
diff --git a/Lab05/src/ClientePJ.java b/Lab05/src/ClientePJ.java
new file mode 100644
index 0000000..f710a21
--- /dev/null
+++ b/Lab05/src/ClientePJ.java
@@ -0,0 +1,135 @@
+import java.util.ArrayList;
+import java.util.Date;
+
+public class ClientePJ extends Cliente {
+ // Atributos
+ private final String cnpj;
+ private Date dataFundacao;
+ private int qtdeFuncionarios;
+ private ArrayList listaFrota;
+
+ // Construtor
+ public ClientePJ(String nome, String endereco, String telefone, String email, String cnpj,
+ Date dataFundacao, int qtdeFuncionarios) {
+ super(nome, endereco, telefone, email);
+ this.cnpj = cnpj;
+ this.dataFundacao = dataFundacao;
+ this.qtdeFuncionarios = qtdeFuncionarios;
+ listaFrota = new ArrayList();
+ }
+
+ // Setters e getters
+ public void setDataFundacao(Date dataFundacao) {
+ this.dataFundacao = dataFundacao;
+ }
+
+ public void setQtdeFuncionarios(int qtdeFuncionarios) {
+ this.qtdeFuncionarios = qtdeFuncionarios;
+ }
+
+ public Date getDataFundacao() {
+ return dataFundacao;
+ }
+
+ public String getCNPJ() {
+ return cnpj;
+ }
+
+ public int getQtdeFuncionarios() {
+ return qtdeFuncionarios;
+ }
+
+ public ArrayList getListaFrota() {
+ return listaFrota;
+ }
+
+ public boolean cadastrarFrota(Frota frota) {
+ for (Frota f : listaFrota) {
+ if (f.getCode().equals(frota.getCode())) {
+ return false;
+ }
+ }
+ listaFrota.add(frota);
+ return true;
+ }
+
+ public boolean atualizarFrota(String code, Veiculo veiculo) {
+ // Adiciona um veículo a uma frota
+ for (Frota frota : listaFrota) {
+ if (frota.getCode().equals(code)) {
+ if (frota.getListaVeiculos().contains(veiculo)) {
+ return false;
+ }
+ frota.getListaVeiculos().add(veiculo);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean atualizarFrota(String code, String placa) {
+ // Remove um veículo de uma frota
+ for (Frota frota : listaFrota) {
+ if (frota.getCode().equals(code)) {
+ for (Veiculo veiculo : new ArrayList(frota.getListaVeiculos())) {
+ if (veiculo.getPlaca().equals(placa)) {
+ frota.getListaVeiculos().remove(veiculo);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean atualizarFrota(String code) {
+ // Remove a frota inteira
+ for (Frota frota : listaFrota) {
+ if (frota.getCode().equals(code)) {
+ listaFrota.remove(frota);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public ArrayList getVeiculosPorFrota(String code) {
+ ArrayList veiculosFrota = new ArrayList();
+ for (Frota frota : listaFrota) {
+ if (frota.getCode().equals(code)) {
+ for (Veiculo veiculo : frota.getListaVeiculos()) {
+ veiculosFrota.add(veiculo);
+ }
+ break;
+ }
+ }
+ return veiculosFrota;
+ }
+
+ public String listarFrota() {
+ String str = "";
+ for (Frota frota : listaFrota) {
+ str += frota.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public String listarVeiculos() {
+ String str = "";
+ for (Frota frota : listaFrota) {
+ for (Veiculo veiculo : frota.getListaVeiculos()) {
+ str += veiculo.toString() + "\n*\n";
+ }
+ }
+ return str;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLIENTE PJ\n" + super.toString() +"\nData da fundacao da empresa: " +
+ datasFormatadas.format(getDataFundacao()) + "\nCNPJ: " + getCNPJ()
+ + "\nQuantidade de funcionarios: " + getQtdeFuncionarios() + "\nLISTA DE FROTAS\n"
+ + listarFrota();
+ return str;
+ }
+}
\ No newline at end of file
diff --git a/Lab05/src/Condutor.java b/Lab05/src/Condutor.java
new file mode 100644
index 0000000..c474f23
--- /dev/null
+++ b/Lab05/src/Condutor.java
@@ -0,0 +1,106 @@
+import java.util.ArrayList;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
+public class Condutor {
+ private final String cpf;
+ private String nome;
+ private String telefone;
+ private String endereco;
+ private String email;
+ private Date dataNascimento;
+ private ArrayList listaSinistros;
+ private static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Método construtor
+ public Condutor(String cpf, String nome, String telefone, String endereco, String email, Date dataNascimento) {
+ this.cpf = cpf;
+ this.nome = nome;
+ this.telefone = telefone;
+ this.endereco = endereco;
+ this.email = email;
+ this.dataNascimento = dataNascimento;
+ listaSinistros = new ArrayList();
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public void setDataNascimento(Date dataNascimento) {
+ this.dataNascimento = dataNascimento;
+ }
+
+ public String getCpf() {
+ return cpf;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public Date getDataNascimento() {
+ return dataNascimento;
+ }
+
+ public ArrayList getListaSinistros() {
+ return listaSinistros;
+ }
+
+ public String listarSinistros() {
+ String str = "";
+ for (Sinistro sinistro : listaSinistros) {
+ str += sinistro.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public String listarSinistrosId() {
+ String str = "";
+ for (Sinistro sinistro : listaSinistros) {
+ str += sinistro.getId() + "\n*\n";
+ }
+ return str;
+ }
+
+ public void adicionaSinistro(Sinistro sinistro) {
+ listaSinistros.add(sinistro);
+ }
+
+ public void removeSinistro(Sinistro sinistro) {
+ listaSinistros.remove(sinistro);
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CONDUTOR\nCPF: " + getCpf() + "\nNome: " + getNome() + "\nTelefone: " + getTelefone()
+ + "\nEndereço: " + getEndereco() + "\nEmail: " + getEmail() + "\nData de nascimento: " +
+ datasFormatadas.format(getDataNascimento()) + "\nLista de sinistros por Id: " + listarSinistrosId();
+ return str;
+ }
+}
diff --git a/Lab05/src/Excluir.java b/Lab05/src/Excluir.java
new file mode 100644
index 0000000..cf829f8
--- /dev/null
+++ b/Lab05/src/Excluir.java
@@ -0,0 +1,17 @@
+public enum Excluir {
+ CLIENTE(1),
+ VEICULO(2),
+ SEGURO(3),
+ SINISTRO(4),
+ VOLTAR(5);
+
+ public final int numero; /* constante associada a cada operação */
+
+ Excluir(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab05/src/Frota.java b/Lab05/src/Frota.java
new file mode 100644
index 0000000..39d188a
--- /dev/null
+++ b/Lab05/src/Frota.java
@@ -0,0 +1,61 @@
+import java.util.ArrayList;
+
+public class Frota {
+ private String code;
+ private ArrayList listaVeiculos;
+
+ // Método construtor
+ public Frota(String nomeFrota) {
+ code = geraCode(nomeFrota);
+ listaVeiculos = new ArrayList();
+ }
+
+ //Setters e getters
+ public String geraCode(String nomeFrota) {
+ Integer aux = new Integer(nomeFrota.hashCode());
+ return Integer.toString(aux);
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public ArrayList getListaVeiculos() {
+ return listaVeiculos;
+ }
+
+ public String listarVeiculos() {
+ String str = "";
+ for (Veiculo veiculo : listaVeiculos) {
+ str += veiculo.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public boolean adicionaVeiculo(Veiculo veiculo) {
+ if (listaVeiculos.contains(veiculo))
+ return false;
+ listaVeiculos.add(veiculo);
+ return true;
+ }
+
+ public boolean removeVeiculo(Veiculo veiculo) {
+ for (Veiculo v : new ArrayList(listaVeiculos)) {
+ if (v.equals(veiculo)) {
+ listaVeiculos.remove(veiculo);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DA FROTA\n" + "Code: " + getCode() + "\nLISTA DE VEÍCULOS\n" + listarVeiculos();
+ return str;
+ }
+}
diff --git a/Lab05/src/Listar.java b/Lab05/src/Listar.java
new file mode 100644
index 0000000..4a2c5d5
--- /dev/null
+++ b/Lab05/src/Listar.java
@@ -0,0 +1,23 @@
+public enum Listar {
+ CLIENTE_SEGURADORA(1),
+ SEGURO_SEGURADORA(2),
+ SEGURO_CLIENTE(3),
+ SINISTRO_CLIENTE(4),
+ VEICULO_CLIENTEPF(5),
+ FROTA_CLIENTEPJ(6),
+ VEICULO_FROTA(7),
+ CONDUTOR_SEGURO(8),
+ SINISTRO_SEGURO(9),
+ SINISTRO_CONDUTOR(10),
+ VOLTAR(11);
+
+ public final int numero; /* constante associada a cada operação */
+
+ Listar(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab05/src/Main.java b/Lab05/src/Main.java
new file mode 100644
index 0000000..c68d502
--- /dev/null
+++ b/Lab05/src/Main.java
@@ -0,0 +1,385 @@
+import java.util.Scanner;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+
+public class Main {
+ public static void Menu(Seguradora seguradora, Scanner entrada) throws Exception {
+ System.out.println("Bem vindo ao Menu de Operações!");
+ Integer opcao1, opcao2;
+ ArrayList listaSeguradoras = new ArrayList();
+ listaSeguradoras.add(seguradora);
+ do {
+ System.out.println("O que gostaria de fazer agora?");
+ System.out.println("1.Cadastrar;");
+ System.out.println("2.Listar;");
+ System.out.println("3.Excluir;");
+ System.out.println("4.Atualizar uma frota;");
+ System.out.println("5.Gerar um seguroPF");
+ System.out.println("6.Gerar um seguroPJ");
+ System.out.println("7.Gerar um sinistro;");
+ System.out.println("8.Autorizar um condutor;");
+ System.out.println("9.Desautorizar um condutor;");
+ System.out.println("10.Consultar o valor mensal atualizado de um seguro;");
+ System.out.println("11.Calcular receita de uma seguradora;");
+ System.out.println("0.Sair.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao1 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao1 == MenuOperacoes.SAIR.getNumero())
+ break;
+
+ else if (opcao1 == MenuOperacoes.CADASTRAR.getNumero()) {
+ System.out.println("Qual tipo de cadastro gostaria de fazer?");
+ System.out.println("1.Cadastrar um clientePF;");
+ System.out.println("2.Cadastrar um clientePJ;");
+ System.out.println("3.Cadastrar um veículo associado a um clientePF;");
+ System.out.println("4.Cadastrar uma seguradora;");
+ System.out.println("5.Cadastrar uma frota associada a um clientePJ");
+ System.out.println("6.Voltar para as opções anteriores.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao2 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao2 == Cadastrar.VOLTAR.getNumero()) {
+ continue;
+ }
+
+ else if (opcao2 == Cadastrar.CLIENTEPF.getNumero()) {
+ OperacoesMenu.cadastrarClientePF(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Cadastrar.CLIENTEPJ.getNumero()) {
+ OperacoesMenu.cadastrarClientePJ(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Cadastrar.VEICULO.getNumero()) {
+ OperacoesMenu.cadastrarVeiculo(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Cadastrar.SEGURADORA.getNumero()) {
+ OperacoesMenu.cadastrarSeguradora(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Cadastrar.FROTA.getNumero()) {
+ OperacoesMenu.cadastrarFrota(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+ }
+
+ else if (opcao1 == MenuOperacoes.LISTAR.getNumero()) {
+ System.out.println("O que gostaria de listar?");
+ System.out.println("1.Listar clientes por seguradora: ");
+ System.out.println("2.Listar seguros por seguradora;");
+ System.out.println("3.Listar seguros por cliente;");
+ System.out.println("4.Listar sinistros por cliente;");
+ System.out.println("5.Listar veículos por clientePF;");
+ System.out.println("6.Listar frotas por clientePJ;");
+ System.out.println("7.Listar veículos por frota;");
+ System.out.println("8.Listar condutores por seguro;");
+ System.out.println("9.Listar sinistros por seguro;");
+ System.out.println("10.Listar sinistros por condutor;");
+ System.out.println("11.Voltar para as opções anteriores.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao2 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao2 == Listar.VOLTAR.getNumero()) {
+ continue;
+ }
+
+ else if (opcao2 == Listar.CLIENTE_SEGURADORA.getNumero()) {
+ OperacoesMenu.listarClientesSeguradora(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.SEGURO_SEGURADORA.getNumero()) {
+ OperacoesMenu.listarSegurosSeguradora(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.SEGURO_CLIENTE.getNumero()) {
+ OperacoesMenu.listarSegurosCliente(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.SINISTRO_CLIENTE.getNumero()) {
+ OperacoesMenu.listarSinistrosCliente(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.VEICULO_CLIENTEPF.getNumero()) {
+ OperacoesMenu.listarVeiculosClientePF(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.FROTA_CLIENTEPJ.getNumero()) {
+ OperacoesMenu.listarFrotasClientePJ(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.VEICULO_FROTA.getNumero()) {
+ OperacoesMenu.listarVeiculosFrota(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.CONDUTOR_SEGURO.getNumero()) {
+ OperacoesMenu.listarCondutoresSeguro(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.SINISTRO_SEGURO.getNumero()) {
+ OperacoesMenu.listarSinistrosSeguro(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Listar.SINISTRO_CONDUTOR.getNumero()) {
+ OperacoesMenu.listarSinistrosCondutor(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+ }
+
+ else if (opcao1 == MenuOperacoes.EXCLUIR.getNumero()) {
+ System.out.println("O que gostaria de excluir?");
+ System.out.println("1.Excluir um cliente de uma seguradora;");
+ System.out.println("2.Excluir um veículo de um clientePF;");
+ System.out.println("3.Excluir/Cancelar um seguro de um cliente;");
+ System.out.println("4.Excluir um sinistro de um seguro;");
+ System.out.println("5.Voltar para as opções anteriores.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao2 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao2 == Excluir.VOLTAR.getNumero()) {
+ continue;
+ }
+
+ else if (opcao2 == Excluir.CLIENTE.getNumero()) {
+ OperacoesMenu.excluirCliente(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Excluir.VEICULO.getNumero()) {
+ OperacoesMenu.excluirVeiculo(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Excluir.SEGURO.getNumero()) {
+ OperacoesMenu.excluirSeguro(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao2 == Excluir.SINISTRO.getNumero()) {
+ OperacoesMenu.excluirSinistro(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+ }
+
+ else if (opcao1 == MenuOperacoes.ATUALIZAR_FROTA.getNumero()) {
+ System.out.println("De que maneira deseja atualizar a frota?");
+ System.out.println("1.Adicionar um veículo;");
+ System.out.println("2.Remover um veículo;");
+ System.out.println("3.Remover toda a frota.");
+ System.out.println("4.Voltar para as opções anteriores.");
+ System.out.println("Digite apenas o número correspondente a UMA das opções acima: ");
+ opcao2 = Integer.parseInt(entrada.nextLine());
+
+ if (opcao2 == AtualizarFrota.VOLTAR.getNumero()) {
+ continue;
+ }
+ else {
+ OperacoesMenu.atualizarFrota(listaSeguradoras, entrada, opcao2);
+ }
+ System.out.println("***");
+ }
+
+ else if (opcao1 == MenuOperacoes.GERAR_SEGUROPF.getNumero()) {
+ OperacoesMenu.gerarSeguroPF(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao1 == MenuOperacoes.GERAR_SEGUROPJ.getNumero()) {
+ OperacoesMenu.gerarSeguroPJ(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao1 == MenuOperacoes.GERAR_SINISTRO.getNumero()) {
+ OperacoesMenu.gerarSinistro(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao1 == MenuOperacoes.AUTORIZAR_CONDUTOR.getNumero()) {
+ OperacoesMenu.autorizarCondutor(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao1 == MenuOperacoes.DESAUTORIZAR_CONDUTOR.getNumero()) {
+ OperacoesMenu.desautorizarCondutor(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao1 == MenuOperacoes.CONSULTAR_VALOR.getNumero()) {
+ OperacoesMenu.consultarValorMensal(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ else if (opcao1 == MenuOperacoes.CALCULAR_RECEITA.getNumero()) {
+ OperacoesMenu.calcularReceita(listaSeguradoras, entrada);
+ System.out.println("***");
+ }
+
+ } while(opcao1 != MenuOperacoes.SAIR.getNumero());
+ System.out.println("SAIU DO MENU.");
+ }
+ public static void main(String[] args) throws Exception {
+ // Auxiliares
+ Scanner entrada = new Scanner(System.in);
+ SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Instanciando 1 objeto da classe Seguradora
+ if (!Validacao.validarCNPJ("33552326000180"))
+ System.out.println("CNPJ inválido.");
+ Seguradora seguradora = new Seguradora("33552326000180", "Unicamp Seguros", "11999981571", "seguros@dac.unicamp.br", "DAC");
+
+ // Instanciando 4 objetos da classe Veiculo
+ Veiculo veiculo1 = new Veiculo("DCV1516", "Renault", "Duster", 2018);
+ Veiculo veiculo2 = new Veiculo("AMS2001", "Honda", "Civic", 2013);
+ Veiculo veiculo3 = new Veiculo("DIB4712", "Jeep", "Compass", 2019);
+ Veiculo veiculo4 = new Veiculo("ALX6022", "Jeep", "Renegade", 2020);
+
+ // Instanciando 2 objetos da classe Frota e adionando 1 veículo a cada uma delas
+ Frota frota1 = new Frota("Mercedes");
+ Frota frota2 = new Frota("Iveco");
+ if (frota1.adicionaVeiculo(veiculo2))
+ System.out.println("Veículo adicionado com sucesso!");
+ else
+ System.out.println("Erro: veículo já adicionado anteriormente.");
+ if (frota2.adicionaVeiculo(veiculo3))
+ System.out.println("Veículo adicionado com sucesso!");
+ else
+ System.out.println("Erro: veículo já adicionado anteriormente.");
+
+ // Instanciando 1 objeto da classe ClientePF e cadastrando-o na seguradora
+ Date dataNascimento = datasFormatadas.parse("15/09/2004");
+ if (!Validacao.validarCPF("46423644802"))
+ System.out.println("CPF inválido.");
+ ClientePF clientepf = new ClientePF("Daniel", "Rua Doutor Zuquim 1782", "11964188885",
+ "daniel.cjsp@gmail.com", "46423644802", dataNascimento,
+ "Ensino médio completo", "Masculino");
+ if (clientepf.cadastrarVeiculo(veiculo1))
+ System.out.println("Veículo cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: veículo já cadastrado anteriormente.");
+ if (seguradora.cadastrarCliente(clientepf))
+ System.out.println("Cliente PF cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: cliente já cadastrado anteriormente.");
+ System.out.println("***");
+
+ // Instanciando 1 objeto da classe ClientePJ e cadastrando-o na seguradora
+ Date dataFundacao = datasFormatadas.parse("21/07/2004");
+ if (!Validacao.validarCNPJ("69479158000192"))
+ System.out.println("CNPJ inválido.");
+ ClientePJ clientepj = new ClientePJ("Daniboy Empreendimentos", "Rua Leoncio de Magalhaes 479",
+ "11940768221","daniboy.company@gmailcom", "69479158000192",
+ dataFundacao, 100);
+ if (clientepj.cadastrarFrota(frota1))
+ System.out.println("Frota cadastrada com sucesso!");
+ else
+ System.out.println("Erro de cadastro: frota já cadastrada anteriormente.");
+ if (clientepj.atualizarFrota(frota1.getCode(), veiculo4))
+ System.out.println("Frota atualizada com sucesso!");
+ else
+ System.out.println("Erro ao atualizar frota.");
+ if (seguradora.cadastrarCliente(clientepj))
+ System.out.println("Cliente PJ cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: cliente já cadastrado anteriormente.");
+ System.out.println("***");
+
+ // Instanciando 1 objeto da classe SeguroPF
+ Date dataInicio = datasFormatadas.parse("01/06/2021");
+ Date dataFim = datasFormatadas.parse("01/06/2024");
+ if (seguradora.gerarSeguroPF(dataInicio, dataFim, veiculo1, clientepf))
+ System.out.println("Seguro gerado com sucesso!");
+ else
+ System.out.println("Erro ao gerar seguro: o veículo em questão já possui um seguro.");
+
+ // Instanciando 1 objeto da classe SeguroPJ
+ dataInicio = datasFormatadas.parse("04/07/2021");
+ dataFim = datasFormatadas.parse("04/07/2024");
+ if (seguradora.gerarSeguroPJ(dataInicio, dataFim, frota1, clientepj))
+ System.out.println("Seguro gerado com sucesso!");
+ else
+ System.out.println("Erro ao gerar seguro: o veículo em questão já possui um seguro.");
+
+ // Instanciando 2 objetos da classe Condutor e autorizando cada um deles em um seguro
+ dataNascimento = datasFormatadas.parse("21/09/2004");
+ if (!Validacao.validarCPF("18361641220"))
+ System.out.println("CPF inválido.");
+ Condutor condutor1 = new Condutor("18361641220", "Luccas Guedes Janune", "11983127656",
+ "Rua Pedro Doll 417", "luccas.cjsp@gmail.com", dataNascimento);
+ if (seguradora.getListaSeguros().get(0).autorizarCondutor(condutor1))
+ System.out.println("Condutor 1 autorizado com sucesso");
+ else
+ System.out.println("Erro ao autorizar condutor 1");
+
+ dataNascimento = datasFormatadas.parse("30/01/2004");
+ if (!Validacao.validarCPF("18133208882"))
+ System.out.println("CPF inválido.");
+ Condutor condutor2 = new Condutor("18133208882", "William Hyde Santoro", "11999761370",
+ "Rua Augusto Tolle 539", "william.cjsp@gmail.com", dataNascimento);
+ if (seguradora.getListaSeguros().get(1).autorizarCondutor(condutor2))
+ System.out.println("Condutor 2 autorizado com sucesso");
+ else
+ System.out.println("Erro ao autorizar condutor 2");
+
+ // Instanciando 2 objetos da classe Sinistro (por meio do método gerarSinistro da classe Seguro)
+ Date dataSinistro1 = datasFormatadas.parse("16/04/2023");
+ if (seguradora.getListaSeguros().get(0).gerarSinistro(dataSinistro1, "Rua Alfredo Pujol 321", condutor1))
+ System.out.println("Sinistro gerado com sucesso!");
+ else
+ System.out.println("Erro ao gerar sinistro. Sinistro já gerado anteriormente.");
+
+ Date dataSinistro2 = datasFormatadas.parse("22/04/2023");
+ if (seguradora.getListaSeguros().get(1).gerarSinistro(dataSinistro2, "Rua Cataguases 754", condutor2))
+ System.out.println("Sinistro gerado com sucesso!");
+ else
+ System.out.println("Erro ao gerar sinistro. Sinistro já gerado anteriormente.");
+
+ // Chamando os métodos toString() de cada classe
+ System.out.println("TESTANDO OS MÉTODOS toString() DE CADA CLASSE");
+ System.out.println(seguradora);
+ System.out.println("***");
+ System.out.println(veiculo1);
+ System.out.println("***");
+ System.out.println(frota1);
+ System.out.println("***");
+ System.out.println(frota2);
+ System.out.println("***");
+ System.out.println(clientepf);
+ System.out.println("***");
+ System.out.println(clientepj);
+ System.out.println("***");
+ System.out.println(seguradora.getListaSeguros().get(0)); /* toString() da classe SeguroPF */
+ System.out.println("***");
+ System.out.println(seguradora.getListaSeguros().get(1)); /* toString() da classe SeguroPJ */
+ System.out.println("***");
+ System.out.println(condutor1);
+ System.out.println("***");
+ System.out.println(seguradora.getListaSeguros().get(0).getListaSinistros().get(0)); /* toSring() da classe Sinistro */
+ System.out.println("FIM DOS TESTES COM OS MÉTODOS toString()");
+
+ // Chamando o método calcularReceita() para a Seguradora instanciada
+ System.out.printf("Receita da seguradora %s: %.2f reais.\n", seguradora.getNome(), seguradora.calcularReceita());
+ System.out.println("***");
+
+ // Os demais métodos não chamados aqui, como listar e excluir, podem ser testados por meio do menu interativo.
+
+ // Chamando o menu de operações
+ Menu(seguradora, entrada);
+
+ entrada.close();
+ }
+}
\ No newline at end of file
diff --git a/Lab05/src/MenuOperacoes.java b/Lab05/src/MenuOperacoes.java
new file mode 100644
index 0000000..e0353e2
--- /dev/null
+++ b/Lab05/src/MenuOperacoes.java
@@ -0,0 +1,24 @@
+public enum MenuOperacoes {
+ CADASTRAR(1),
+ LISTAR(2),
+ EXCLUIR(3),
+ ATUALIZAR_FROTA(4),
+ GERAR_SEGUROPF(5),
+ GERAR_SEGUROPJ(6),
+ GERAR_SINISTRO(7),
+ AUTORIZAR_CONDUTOR(8),
+ DESAUTORIZAR_CONDUTOR(9),
+ CONSULTAR_VALOR(10),
+ CALCULAR_RECEITA(11),
+ SAIR(0);
+
+ public final int numero; /* constante associada a cada operação */
+
+ MenuOperacoes(int numero) {
+ this.numero = numero;
+ }
+
+ public int getNumero() {
+ return numero;
+ }
+}
diff --git a/Lab05/src/OperacoesMenu.java b/Lab05/src/OperacoesMenu.java
new file mode 100644
index 0000000..5dd8f1c
--- /dev/null
+++ b/Lab05/src/OperacoesMenu.java
@@ -0,0 +1,943 @@
+import java.util.ArrayList;
+import java.util.Scanner;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+
+public class OperacoesMenu {
+ // Classe auxilir criada para a implementação das operações do Menu Interativo
+ private static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ public static void cadastrarClientePF(ArrayList listaSeguradoras, Scanner entrada) throws Exception{
+ System.out.println("Digite seu CPF: ");
+ String cpf = entrada.nextLine();
+ cpf = cpf.replaceAll("[^0-9]+", "");
+ if(!Validacao.validarCPF(cpf)) {
+ System.out.println("CPF inválido. Verifique-o e digite-o novamente com os dígitos corretos.");
+ cpf = entrada.nextLine();
+ cpf = cpf.replaceAll("[^0-9]+", "");
+ }
+ else
+ System.out.println("CPF válido!");
+
+ System.out.println("Digite seu nome completo: ");
+ String nome = entrada.nextLine();
+ if (Validacao.validarNome(nome))
+ System.out.println("Nome válido!");
+ else {
+ System.out.println("Nome inválido. Digite-o novamente usando apenas letras e espaços, sem caracteres especiais como acento e cedilha");
+ System.out.println("Digite seu nome completo novamente: ");
+ nome = entrada.nextLine();
+ }
+
+ System.out.println("Digite seu telefone: ");
+ String telefone = entrada.nextLine();
+
+ System.out.println("Digite seu email: ");
+ String email = entrada.nextLine();
+
+ System.out.println("Digite a data de seu nascimento no formato dd/MM/yyyy: ");
+ Date dataNascimento = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite seu endereço: ");
+ String endereco = entrada.nextLine();
+
+ System.out.println("Digite seu grau de escolaridade: ");
+ String educacao = entrada.nextLine();
+
+ System.out.println("Digite seu gênero: ");
+ String genero = entrada.nextLine();
+
+ ClientePF clientepf = new ClientePF(nome, endereco, telefone, email, cpf, dataNascimento, educacao, genero);
+ System.out.println("Digite seu número de veículos: ");
+ Integer nVeiculos = Integer.parseInt(entrada.nextLine());
+ for (int i = 0; i < nVeiculos; i++) {
+ System.out.printf("Digite a marca do veículo %d: ", i + 1);
+ String marca = entrada.nextLine();
+ System.out.printf("Digite o modelo do veículo %d: ", i + 1);
+ String modelo = entrada.nextLine();
+ System.out.printf("Digite a placa do veículo %d: ", i + 1);
+ String placa = entrada.nextLine();
+ System.out.printf("Digite o ano de fabricação do veículo %d: ", i + 1);
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ Veiculo veiculo = new Veiculo(placa, marca, modelo, anoFabricacao);
+ clientepf.cadastrarVeiculo(veiculo);
+ }
+
+ System.out.println("Digite o CNPJ da seguradora na qual gostaria de se cadastrar: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ if (seg.cadastrarCliente(clientepf))
+ System.out.println("Cliente PF cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: cliente já cadastrado anteriormente");
+ }
+ }
+ }
+
+ public static void cadastrarClientePJ(ArrayList listaSeguradoras, Scanner entrada) throws Exception {
+ System.out.println("Digite seu CNPJ: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ if (!Validacao.validarCNPJ(cnpj)) {
+ System.out.println("CNPJ inválido. Verifique-o e digite-o novamente com os dígitos corretos: ");
+ cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ }
+ else
+ System.out.println("CNPJ válido!");
+
+ System.out.println("Digite o nome de sua empresa: ");
+ String nome = entrada.nextLine();
+ if (Validacao.validarNome(nome))
+ System.out.println("Nome válido!");
+ else {
+ System.out.println("Nome inválido. Digite-o novamente usando apenas letras e espaços, sem caracteres especiais como acento e cedilha");
+ System.out.println("Digite o nome de sua empresa novamente: ");
+ nome = entrada.nextLine();
+ }
+
+ System.out.println("Digite a data de fundação de sua empresa no formato dd/MM/yyyy: ");
+ Date dataFundacao = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite o endereço de sua empresa: ");
+ String endereco = entrada.nextLine();
+
+ System.out.println("Digite o telefone de sua empresa: ");
+ String telefone = entrada.nextLine();
+
+ System.out.println("Digite o email de sua empresa: ");
+ String email = entrada.nextLine();
+
+ System.out.println("Digite a quantidade de funcionários de sua empresa: ");
+ Integer qtdeFuncionarios = Integer.parseInt(entrada.nextLine());
+
+ System.out.println("Digite um nome para identificar esta frota: ");
+ String nomeFrota = entrada.nextLine();
+ Frota frota = new Frota(nomeFrota);
+ System.out.println("O code identificador desta frota é: " + frota.getCode() + ". Anote-o para futuras consultas!");
+
+ ClientePJ clientepj = new ClientePJ(nome, endereco, telefone, email, cnpj, dataFundacao, qtdeFuncionarios);
+ System.out.println("Digite seu numero de veículos: ");
+ Integer nVeiculos = Integer.parseInt(entrada.nextLine());
+ for (int i = 0; i < nVeiculos; i++) {
+ System.out.printf("Digite a marca do veículo %d: ", i + 1);
+ String marca = entrada.nextLine();
+ System.out.printf("Digite o modelo do veículo %d: ", i + 1);
+ String modelo = entrada.nextLine();
+ System.out.printf("Digite a placa do veículo %d: ", i + 1);
+ String placa = entrada.nextLine();
+ System.out.printf("Digite o ano de fabricação do veículo %d: ", i + 1);
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ Veiculo veiculo = new Veiculo(placa, marca, modelo, anoFabricacao);
+ frota.adicionaVeiculo(veiculo);
+ }
+ if (clientepj.cadastrarFrota(frota)) {
+ System.out.println("Frota cadastrada com sucesso!");
+ }
+ else {
+ System.out.println("Erro ao cadastrar frota: frota já cadastrada anteriormente.");
+ }
+
+ System.out.println("Digite o CNPJ da seguradora na qual gostaria de efetuar o cadastro: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg: listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ if (seg.cadastrarCliente(clientepj))
+ System.out.println("Cliente PJ cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: cliente já cadastrado anteriormente");
+ }
+ }
+ }
+
+ public static void cadastrarVeiculo(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.printf("Digite a marca do veículo: ");
+ String marca = entrada.nextLine();
+ System.out.printf("Digite o modelo do veículo: ");
+ String modelo = entrada.nextLine();
+ System.out.printf("Digite a placa do veículo: ");
+ String placa = entrada.nextLine();
+ System.out.printf("Digite o ano de fabricação do veículo: ");
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ Veiculo veiculo = new Veiculo(placa, marca, modelo, anoFabricacao);
+
+ System.out.println("Digite o CPF do cliente a que deseja adicionar este veículo: ");
+ String cpfCliente = entrada.nextLine();
+ cpfCliente = cpfCliente.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora em que o cliente digitado acima está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ for (Cliente cliente : seg.getListaClientes()) {
+ if (cliente.getClass() == ClientePF.class) {
+ if (((ClientePF)cliente).getCPF().equals(cpfCliente)) {
+ if(((ClientePF)cliente).cadastrarVeiculo(veiculo))
+ System.out.println("Veículo cadastrado com sucesso!");
+ else
+ System.out.println("Erro de cadastro: veículo já cadastrado anteriormete.");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void cadastrarSeguradora(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CNPJ da seguradora: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o nome da seguradora: ");
+ String nome = entrada.nextLine();
+ System.out.println("Digite o telefone da seguradora: ");
+ String telefone = entrada.nextLine();
+ System.out.println("Digite o email da seguradora: ");
+ String email = entrada.nextLine();
+ System.out.println("Digite o endereço da seguradora: ");
+ String endereco = entrada.nextLine();
+ Seguradora seguradora2 = new Seguradora(cnpj, nome, telefone, email, endereco);
+ if (! listaSeguradoras.contains(seguradora2)) {
+ listaSeguradoras.add(seguradora2);
+ System.out.println("Seguradora cadastrada com sucesso!");
+ }
+ else
+ System.out.println("Erro no cadastro: seguradora já cadastrada anteriormente.");
+ }
+
+ public static void cadastrarFrota(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CNPJ do cliente a que deseja adicionar a frota em questão: ");
+ String cnpjCliente = entrada.nextLine();
+ cnpjCliente = cnpjCliente.replaceAll("[^0-9]+", "");
+
+ System.out.println("Digite o CNPJ da seguradora em que o cliente digitado acima está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+
+ System.out.println("Digite um nome para identificar esta frota: ");
+ String nome = entrada.nextLine();
+ Frota frota = new Frota(nome);
+
+ System.out.println("Digite o número de veículos desta frota: ");
+ Integer nVeiculos = Integer.parseInt(entrada.nextLine());
+ for (int i = 0; i < nVeiculos; i++) {
+ System.out.printf("Digite a marca do veículo %d: ", i + 1);
+ String marca = entrada.nextLine();
+ System.out.printf("Digite o modelo do veículo %d: ", i + 1);
+ String modelo = entrada.nextLine();
+ System.out.printf("Digite a placa do veículo %d: ", i + 1);
+ String placa = entrada.nextLine();
+ System.out.printf("Digite o ano de fabricação do veículo %d: ", i + 1);
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ Veiculo veiculo = new Veiculo(placa, marca, modelo, anoFabricacao);
+ if (frota.adicionaVeiculo(veiculo))
+ System.out.println("Veículo adicionado à frota com sucesso!");
+ else
+ System.out.println("Erro: veículo já adicionado anteriomente.");
+ System.out.println("*");
+ }
+
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ for (Cliente cliente : seg.getListaClientes()) {
+ if (cliente.getClass() == ClientePJ.class) {
+ if (((ClientePJ)cliente).getCNPJ().equals(cnpjCliente)) {
+ for (Frota f : ((ClientePJ)cliente).getListaFrota()) {
+ if (f.getCode().equals(frota.getCode())) {
+ System.out.println("Erro ao cadastrar frota. Nome identifcador já existente. Cadastre-a usando outro nome.");
+ }
+ }
+ if (((ClientePJ)cliente).cadastrarFrota(frota)) {
+ System.out.println("Frota cadastrada com sucesso!");
+ System.out.println("O code identificador desta frota é: " + frota.getCode() + ". Anote-o para futuras consultas!");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void listarClientesSeguradora(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CNPJ da seguradora da qual deseja listar os clientes: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ System.out.printf("Lista de clientes cadastrados na seguradora %s\n", seg.getNome());
+ System.out.print(seg.listarClientes());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+
+ public static void listarSegurosSeguradora(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CNPJ da seguradora da qual deseja listar os seguros: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ System.out.printf("Lista de seguros gerados pela seguradora %s\n", seg.getNome());
+ System.out.println(seg.listarSeguros());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+
+ public static void listarSegurosCliente(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF ou o CNPJ do cliente do qual deseja listar os seguros: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros) {
+ System.out.println(seguro);
+ System.out.println("*");
+ }
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+ }
+
+ public static void listarSinistrosCliente(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF ou o CNPJ do cliente do qual deseja listar os sinistros: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaSinistros = seg.getSinistrosPorCliente(cpf_cnpj);
+ if (listaSinistros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum sinistro.");
+ else {
+ System.out.println("LISTA DE SINISTROS DO CLIENTE EM QUESTÃO");
+ for (Sinistro sinistro : listaSinistros) {
+ System.out.println(sinistro);
+ System.out.println("*");
+ }
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+ }
+
+ public static void listarVeiculosClientePF(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF do clientePF do qual deseja listar os veículos: ");
+ String cpf = entrada.nextLine();
+ cpf = cpf.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaVeiculos = seg.getVeiculosPorClientePF(cpf);
+ if (listaVeiculos.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum veículo.");
+ else {
+ System.out.println("LISTA DE VEÍCULOS DO CLIENTE EM QUESTÃO");
+ for (Veiculo veiculo : listaVeiculos) {
+ System.out.println(veiculo);
+ System.out.println("*");
+ }
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+ }
+
+ public static void listarFrotasClientePJ(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CNPJ do clientePJ do qual deseja listar as frotas: ");
+ String cnpjCliente = entrada.nextLine();
+ cnpjCliente = cnpjCliente.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ ArrayList listaFrotas = seg.getFrotasPorClietePJ(cnpjCliente);
+ if (listaFrotas.isEmpty())
+ System.out.println("A empresa em questão não possui nenhuma frota de veículos.");
+ else {
+ System.out.println("LISTA DE FROTAS DA EMPRESA EM QUESTÃO");
+ for (Frota frota : listaFrotas) {
+ System.out.println(frota);
+ System.out.println("*");
+ }
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+ }
+
+ public static void listarVeiculosFrota(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CNPJ do clientePJ cuja frota deseja listar os veículos: ");
+ String cnpjCliente = entrada.nextLine();
+ cnpjCliente = cnpjCliente.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ ArrayList listaFrotas = seg.getFrotasPorClietePJ(cnpjCliente);
+ if (listaFrotas.isEmpty())
+ System.out.println("A empresa em questão não possui nenhuma frota de veículos.");
+ else {
+ System.out.println("LISTA DE FROTAS DA EMPRESA EM QUESTÃO POR CODE");
+ for (Frota frota : listaFrotas)
+ System.out.println(frota.getCode());
+ System.out.println("Digite o Code da frota cujos veículos deseja visualizar: ");
+ String code = entrada.nextLine();
+ for (Frota frota : listaFrotas) {
+ if (frota.getCode().equals(code)) {
+ System.out.println("LISTA DE VEÍCULOS DA FROTA EM QUESTÃO");
+ System.out.print(frota.listarVeiculos());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void listarCondutoresSeguro(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF ou CNPJ do cliente cujos seguros deseja acessar: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros)
+ System.out.println(seguro.getId());
+ System.out.println("Digite o Id (somente números) do seguro cujos condutores deseja visualizar: ");
+ Integer id = Integer.parseInt(entrada.nextLine());
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getId() == id) {
+ System.out.println("LISTA DE CONDUTORES DO SEGURO EM QUESTÃO");
+ System.out.print(seguro.listarCondutores());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void listarSinistrosSeguro(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF ou CNPJ do cliente cujos seguros deseja acessar: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros)
+ System.out.println(seguro.getId());
+ System.out.println("Digite o Id (somente números) do seguro cujos sinistros deseja visualizar: ");
+ Integer id = Integer.parseInt(entrada.nextLine());
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getId() == id) {
+ System.out.println("LISTA DE SINISTROS DO SEGURO EM QUESTÃO");
+ System.out.print(seguro.listarSinistros());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void listarSinistrosCondutor(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF do condutor cujos sinistros deseja visualizar");
+ String cpf = entrada.nextLine();
+ cpf = cpf.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CPF ou CNPJ do cliente titular do seguro associado ao condutor digitado acima: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros)
+ System.out.println(seguro.getId());
+ System.out.println("Digite o Id (somente números) do seguro associado ao condutor em questão: ");
+ Integer id = Integer.parseInt(entrada.nextLine());
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getId() == id) {
+ for (Condutor condutor : seguro.getListaCondutores()) {
+ if (condutor.getCpf().equals(cpf)) {
+ System.out.println("LISTA DE SINISTROS DO CONDUTOR EM QUESTÃO");
+ System.out.print(condutor.listarSinistros());
+ System.out.println("FIM DA LISTA");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void excluirCliente(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF ou o CNPJ do cliente que deseja remover: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ if (seg.removerCliente(cpf_cnpj))
+ System.out.println("Cliente removido com sucesso!");
+ else
+ System.out.println("Erro na remoção. Cliente não encontrado.");
+ }
+ }
+ }
+
+ public static void excluirVeiculo(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite a placa do veículo que deseja remover: ");
+ String placa = entrada.nextLine();
+ System.out.println("Digite o CPF do cliente cujo veículo deseja remover: ");
+ String cpf = entrada.nextLine();
+ cpf = cpf.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ for (Cliente cliente : seg.getListaClientes()) {
+ if (cliente.getClass() == ClientePF.class) {
+ if (((ClientePF)cliente).getCPF().equals(cpf)) {
+ if (((ClientePF)cliente).removerVeiculo(placa))
+ System.out.println("Veículo removido com sucesso!");
+ else
+ System.out.println("Erro na remoção: veículo não encontrado.");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void excluirSeguro(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF ou o CNPJ do cliente cujo seguro deseja cancelar: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros)
+ System.out.println(seguro.getId());
+ System.out.println("Digite o Id (somente números) do seguro que deseja cancelar: ");
+ Integer id = Integer.parseInt(entrada.nextLine());
+ if (seg.cancelarSeguro(id))
+ System.out.println("Seguro cancelado com sucesso!");
+ else
+ System.out.println("Erro no cancelamento: seguro não encontrado.");
+ }
+ }
+ }
+ }
+
+ public static void excluirSinistro(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF ou o CNPJ do cliente a cujos seguros deseja ter acesso: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros)
+ System.out.println(seguro.getId());
+ System.out.println("Digite o Id (somente números) do seguro que contém o sinistro que deseja excluir: ");
+ Integer idSeguro = Integer.parseInt(entrada.nextLine());
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getId() == idSeguro) {
+ System.out.println("LISTA DE SINISTROS, POR ID, DO SEGURO EM QUESTÃO");
+ System.out.print(seguro.listarSinistrosId());
+ System.out.println("Digite o Id (somente números) do sinistro que deseja excluir: ");
+ Integer idSinistro = Integer.parseInt(entrada.nextLine());
+ System.out.println("Digite o CPF do condutor responsável por este sinistro: ");
+ String cpfCondutor = entrada.nextLine();
+ if (seguro.excluirSinistro(idSinistro, cpfCondutor))
+ System.out.println("Sinistro excluído com sucesso!");
+ else
+ System.out.println("Erro: sinistro não encontrado.");
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void atualizarFrota(ArrayList listaSeguradoras, Scanner entrada, int opcao2) {
+ System.out.println("Digite o CNPJ do cliente responsável pela frota em questão: ");
+ String cnpjCliente = entrada.nextLine();
+ cnpjCliente = cnpjCliente.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ ArrayList listaFrotas = seg.getFrotasPorClietePJ(cnpjCliente);
+ if (listaFrotas.isEmpty())
+ System.out.println("A empresa em questão não possui nenhuma frota.");
+ else {
+ System.out.println("LISTA DE FROTAS, POR CODE, DA EMPRESA EM QUESTÃO");
+ for (Frota frota : listaFrotas) {
+ System.out.println(frota.getCode());
+ }
+ System.out.println("Digite o Code da frota que deseja atualizar: ");
+ String code = entrada.nextLine();
+ for (Cliente cliente : seg.getListaClientes()) {
+ if (cliente.getClass() == ClientePJ.class) {
+ if (((ClientePJ)cliente).getCNPJ().equals(cnpjCliente)) {
+ if (opcao2 == AtualizarFrota.ADICIONAR_VEICULO.getNumero()) {
+ System.out.printf("Digite a marca do veículo: ");
+ String marca = entrada.nextLine();
+ System.out.printf("Digite o modelo do veículo: ");
+ String modelo = entrada.nextLine();
+ System.out.printf("Digite a placa do veículo: ");
+ String placa = entrada.nextLine();
+ System.out.printf("Digite o ano de fabricação do veículo: ");
+ Integer anoFabricacao = Integer.parseInt(entrada.nextLine());
+ Veiculo veiculo = new Veiculo(placa, marca, modelo, anoFabricacao);
+ if (((ClientePJ)cliente).atualizarFrota(code, veiculo))
+ System.out.println("Frota atualizada com sucesso!");
+ else
+ System.out.println("Erro ao atualizar frota.");
+ }
+
+ else if (opcao2 == AtualizarFrota.REMOVER_VEICULO.getNumero()) {
+ System.out.printf("Digite a placa do veículo: ");
+ String placa = entrada.nextLine();
+ if (((ClientePJ)cliente).atualizarFrota(code, placa))
+ System.out.println("Frota atualizada com sucesso!");
+ else
+ System.out.println("Erro ao autualizar frota.");
+ }
+
+ else if (opcao2 == AtualizarFrota.REMOVER_FROTA.getNumero()) {
+ if (((ClientePJ)cliente).atualizarFrota(code))
+ System.out.println("Frota removida com sucesso!");
+ else
+ System.out.println("Erro ao remover frota.");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void gerarSeguroPF(ArrayList listaSeguradoras, Scanner entrada) throws Exception {
+ System.out.println("Digite o CPF do cliente titular deste seguro: ");
+ String cpf = entrada.nextLine();
+ cpf = cpf.replaceAll("[^0-9]+", "");
+ System.out.println("Digite a data de início do seguro no formato dd/MM/yyyy: ");
+ Date dataInicio = datasFormatadas.parse(entrada.nextLine());
+ System.out.println("Digite a data de término do seguro no formato dd/MM/yyyy: ");
+ Date dataFim = datasFormatadas.parse(entrada.nextLine());
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente titular deste seguro está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ for (Cliente cliente : seg.getListaClientes()) {
+ if (cliente.getClass() == ClientePF.class) {
+ if (((ClientePF)cliente).getCPF().equals(cpf)) {
+ System.out.println("LISTA DE VEÍCULOS, POR PLACA, DO CLIENTE EM QUESTÃO");
+ for (Veiculo veiculo : ((ClientePF)cliente).getListaVeiculos()) {
+ System.out.println(veiculo.getPlaca());
+ }
+ System.out.println("Digite a placa, de forma idêntica a como ela aparece na lista acima, do veículo que deseja asscociar a este seguro: ");
+ String placa = entrada.nextLine();
+ for (Veiculo veiculo : ((ClientePF)cliente).getListaVeiculos()) {
+ if (veiculo.getPlaca().equals(placa)) {
+ if (seg.gerarSeguroPF(dataInicio, dataFim, veiculo, (ClientePF)cliente)) {
+ System.out.println("SeguroPF gerado com sucesso!");
+ }
+ else {
+ System.out.println("Erro ao gerar SeguroPF: seguro já existente.");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void gerarSeguroPJ(ArrayList listaSeguradoras, Scanner entrada) throws Exception {
+ System.out.println("Digite o CNPJ do cliente titular deste seguro: ");
+ String cnpjCliente = entrada.nextLine();
+ cnpjCliente = cnpjCliente.replaceAll("[^0-9]+", "");
+ System.out.println("Digite a data de início do seguro no formato dd/MM/yyyy: ");
+ Date dataInicio = datasFormatadas.parse(entrada.nextLine());
+ System.out.println("Digite a data de término do seguro no formato dd/MM/yyyy: ");
+ Date dataFim = datasFormatadas.parse(entrada.nextLine());
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente titular deste seguro está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ for (Cliente cliente : seg.getListaClientes()) {
+ if (cliente.getClass() == ClientePJ.class) {
+ if (((ClientePJ)cliente).getCNPJ().equals(cnpjCliente)) {
+ System.out.println("LISTA DE FROTAS, POR CODE, DO CLIENTE EM QUESTÃO");
+ for (Frota frota : ((ClientePJ)cliente).getListaFrota()) {
+ System.out.println(frota.getCode());
+ }
+ System.out.println("Digite o code, de forma idêntica a como ela aparece na lista acima, da frota que deseja asscociar a este seguro: ");
+ String code = entrada.nextLine();
+ for (Frota frota : ((ClientePJ)cliente).getListaFrota()) {
+ if (frota.getCode().equals(code)) {
+ if (seg.gerarSeguroPJ(dataInicio, dataFim, frota, (ClientePJ)cliente)) {
+ System.out.println("SeguroPJ gerado com sucesso!");
+ }
+ else {
+ System.out.println("Erro ao gerar SeguroPJ: seguro já existente.");
+ }
+
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void gerarSinistro(ArrayList listaSeguradoras, Scanner entrada) throws Exception {
+ System.out.println("Digite a data referente ao sinistro no formato dd/MM/yyyy: ");
+ Date data = datasFormatadas.parse(entrada.nextLine());
+ System.out.println("Digite o endereço referente ao sinistro: ");
+ String endereco = entrada.nextLine();
+ System.out.println("Digite o CPF do condutor responsável pelo sinistro: ");
+ String cpfCondutor = entrada.nextLine();
+ cpfCondutor = cpfCondutor.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CPF ou o CNPJ do cliente responsável pelo seguro a que deseja associar este sinistro: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro s : listaSeguros)
+ System.out.println(s.getId());
+ System.out.println("Digite o Id (somente números) do seguro ao qual deseja asscoiar o sinistro gerado: ");
+ Integer idSeguro = Integer.parseInt(entrada.nextLine());
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getId() == idSeguro) {
+ for (Condutor condutor : seguro.getListaCondutores()) {
+ if (condutor.getCpf().equals(cpfCondutor)) {
+ if (seguro.gerarSinistro(data, endereco, condutor)) {
+ System.out.println("Sinistro gerado com sucesso!");
+ }
+ else {
+ System.out.println("Erro ao gerar sinistro.");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void autorizarCondutor(ArrayList listaSeguradoras, Scanner entrada) throws Exception {
+ System.out.println("Digite o CPF do condutor em questão: ");
+ String cpfCondutor = entrada.nextLine();
+ cpfCondutor = cpfCondutor.replaceAll("[^0-9]+", "");
+
+ System.out.println("Digite o nome completo do condutor em questão: ");
+ String nome = entrada.nextLine();
+ if (Validacao.validarNome(nome))
+ System.out.println("Nome válido!");
+ else {
+ System.out.println("Nome inválido. Digite-o novamente usando apenas letras e espaços, sem caracteres especiais como acento e cedilha");
+ System.out.println("Digite o nome completo do condutor novamente: ");
+ nome = entrada.nextLine();
+ }
+
+ System.out.println("Digite o telefone deste condutor: ");
+ String telefone = entrada.nextLine();
+
+ System.out.println("Digite o email deste condutor: ");
+ String email = entrada.nextLine();
+
+ System.out.println("Digite a data de nascimento deste condutor no formato dd/MM/yyyy: ");
+ Date dataNascimento = datasFormatadas.parse(entrada.nextLine());
+
+ System.out.println("Digite o endereço deste condutor: ");
+ String endereco = entrada.nextLine();
+ Condutor condutor = new Condutor(cpfCondutor, nome, telefone, endereco, email, dataNascimento);
+
+ System.out.println("Digite o CPF ou o CNPJ do cliente titular do seguro a que se deseja adicionar este condutor: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros) {
+ System.out.println(seguro.getId());
+ }
+ System.out.println("Digite o Id (somente números) do seguro ao qual deseja adicionar este condutor: ");
+ Integer idSeguro = Integer.parseInt(entrada.nextLine());
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getId() == idSeguro) {
+ if (seguro.autorizarCondutor(condutor)) {
+ System.out.println("Condutor autorizado com sucesso!");
+ }
+ else {
+ System.out.println("Erro ao autorizar condutor: este condutor já estava previamente autorizado.");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void desautorizarCondutor(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF do condutor em questão: ");
+ String cpfCondutor = entrada.nextLine();
+ cpfCondutor = cpfCondutor.replaceAll("[^0-9]+", "");
+
+ System.out.println("Digite o CPF ou o CNPJ do cliente titular do seguro do qual se deseja remover este condutor: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros) {
+ System.out.println(seguro.getId());
+ }
+ System.out.println("Digite o Id (somente números) do seguro ao qual deseja adicionar este condutor: ");
+ Integer idSeguro = Integer.parseInt(entrada.nextLine());
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getId() == idSeguro) {
+ if (seguro.desautorizarCondutor(cpfCondutor)) {
+ System.out.println("Condutor desautorizado com sucesso!");
+ }
+ else {
+ System.out.println("Erro ao desautorizar condutor: este condutor já não estava autorizado.");
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void consultarValorMensal(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CPF ou o CNPJ do cliente titular do seguro do qual deseja consultar o valor mensal: ");
+ String cpf_cnpj = entrada.nextLine();
+ cpf_cnpj = cpf_cnpj.replaceAll("[^0-9]+", "");
+
+ System.out.println("Digite o CNPJ da seguradora na qual o cliente digitado acima está cadastrado: ");
+ String cnpjSeguradora = entrada.nextLine();
+ cnpjSeguradora = cnpjSeguradora.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpjSeguradora)) {
+ ArrayList listaSeguros = seg.getSegurosPorCliente(cpf_cnpj);
+ if (listaSeguros.isEmpty())
+ System.out.println("O cliente em questão não possui nenhum seguro.");
+ else {
+ System.out.println("LISTA DE SEGUROS, POR ID, DO CLIENTE EM QUESTÃO");
+ for (Seguro seguro : listaSeguros) {
+ System.out.println(seguro.getId());
+ }
+ System.out.println("Digite o Id (somente números) do seguro do qual deseja consultar o valor mensal: ");
+ Integer idSeguro = Integer.parseInt(entrada.nextLine());
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getId() == idSeguro) {
+ seguro.setValorMensal(seguro.calcularValor());
+ System.out.printf("Valor mensal do seguro em questão: %.2f reais.\n", seguro.getValorMensal());
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static void calcularReceita(ArrayList listaSeguradoras, Scanner entrada) {
+ System.out.println("Digite o CNPJ da seguradora da qual deseja calcular a receita: ");
+ String cnpj = entrada.nextLine();
+ cnpj = cnpj.replaceAll("[^0-9]+", "");
+ for (Seguradora seg : listaSeguradoras) {
+ if (seg.getCNPJ().equals(cnpj))
+ System.out.printf("Receita da seguradora %s: %.2f reais.\n", seg.getNome(), seg.calcularReceita());
+ }
+ }
+}
diff --git a/Lab05/src/Seguradora.java b/Lab05/src/Seguradora.java
new file mode 100644
index 0000000..da43a24
--- /dev/null
+++ b/Lab05/src/Seguradora.java
@@ -0,0 +1,261 @@
+import java.util.ArrayList;
+import java.util.Date;
+
+public class Seguradora {
+ // Atributos
+ private final String cnpj;
+ private String nome;
+ private String telefone;
+ private String email;
+ private String endereco;
+ private ArrayList listaSeguros;
+ private ArrayList listaClientes;
+
+ // Método construtor
+ public Seguradora(String cnpj, String nome, String telefone, String email, String endereco) {
+ this.cnpj = cnpj;
+ this.nome = nome;
+ this.telefone = telefone;
+ this.email = email;
+ this.endereco = endereco;
+ listaSeguros = new ArrayList();
+ listaClientes = new ArrayList();
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public String getCNPJ() {
+ return cnpj;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public ArrayList getListaSeguros() {
+ return listaSeguros;
+ }
+
+ public ArrayList getListaClientes() {
+ return listaClientes;
+ }
+
+ public boolean gerarSeguroPF(Date dataInicio, Date dataFim, Veiculo veiculo, ClientePF cliente) {
+ for (Seguro s : listaSeguros) {
+ if (s.getClass() == SeguroPF.class) {
+ if(((SeguroPF)s).getVeiculo().getPlaca().equals(veiculo.getPlaca())) {
+ return false;
+ }
+ }
+ }
+ Seguro seguro = new SeguroPF(dataInicio, dataFim, this, veiculo, cliente);
+ listaSeguros.add(seguro);
+ System.out.println("O Id deste seguro é: " + seguro.getId() + ". Anote-o para futuras consultas.");
+ seguro.setValorMensal(seguro.calcularValor());
+ System.out.println("O valor mensal deste seguro é de: " + seguro.getValorMensal() + " reais.");
+ return true;
+ }
+
+ public boolean gerarSeguroPJ(Date dataInicio, Date dataFim, Frota frota, ClientePJ cliente) {
+ for (Seguro s : listaSeguros) {
+ if (s.getClass() == SeguroPJ.class) {
+ if(((SeguroPJ)s).getFrota().getCode().equals(frota.getCode())) {
+ return false;
+ }
+ }
+ }
+ Seguro seguro = new SeguroPJ(dataInicio, dataFim, this, frota, cliente);
+ listaSeguros.add(seguro);
+ System.out.println("O Id deste seguro é: " + seguro.getId() + ". Anote-o para futuras consultas.");
+ seguro.setValorMensal(seguro.calcularValor());
+ System.out.println("O valor mensal deste seguro é de: " + seguro.getValorMensal() + " reais.");
+ return true;
+ }
+
+ public boolean cancelarSeguro(int id) {
+ for (Seguro seguro : new ArrayList(listaSeguros)) {
+ if (seguro.getId() == id) {
+ listaSeguros.remove(seguro);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean cadastrarCliente(Cliente cliente) {
+ for (Cliente c : listaClientes) {
+ if (c.equals(cliente))
+ return false;
+ }
+ listaClientes.add(cliente);
+ return true;
+ }
+
+ public boolean removerCliente(String id) {
+ for (Cliente cliente : new ArrayList(listaClientes)) {
+ if(cliente.getClass() == ClientePF.class) {
+ if (((ClientePF)cliente).getCPF().equals(id)) {
+ listaClientes.remove(cliente);
+ for (Seguro seguro : new ArrayList(listaSeguros)) {
+ if (seguro.getClass() == SeguroPF.class) {
+ if(((SeguroPF)seguro).getCliente().getCPF().equals(id)) {
+ listaSeguros.remove(seguro);
+ }
+ }
+ }
+ return true;
+ }
+ }
+ else if (cliente.getClass() == ClientePJ.class) {
+ if (((ClientePJ)cliente).getCNPJ().equals(id)) {
+ listaClientes.remove(cliente);
+ for (Seguro seguro : new ArrayList(listaSeguros)) {
+ if (seguro.getClass() == SeguroPJ.class) {
+ if(((SeguroPJ)seguro).getCliente().getCNPJ().equals(id)) {
+ listaSeguros.remove(seguro);
+ }
+ }
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public String listarClientes() {
+ String str = "";
+ for (Cliente cliente : listaClientes) {
+ str += cliente.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public double calcularReceita() {
+ double receita = 0;
+ for (Seguro seguro : listaSeguros) {
+ receita += seguro.calcularValor();
+ }
+ return receita;
+ }
+
+ public ArrayList getSegurosPorCliente(String cpf_cnpj) {
+ Cliente cliente = null;
+ ArrayList segurosCliente = new ArrayList();
+ for (Cliente c : listaClientes) {
+ if (c.getClass() == ClientePF.class) {
+ if (((ClientePF)c).getCPF().equals(cpf_cnpj)) {
+ cliente = c;
+ }
+ }
+ else if (c.getClass() == ClientePJ.class) {
+ if (((ClientePJ)c).getCNPJ().equals(cpf_cnpj)) {
+ cliente = c;
+ }
+ }
+ }
+ for (Seguro seguro : listaSeguros) {
+ if (seguro.getClass() == SeguroPF.class) {
+ if(((SeguroPF)seguro).getCliente().equals(cliente)) {
+ segurosCliente.add(seguro);
+ }
+ }
+ else if (seguro.getClass() == SeguroPJ.class) {
+ if(((SeguroPJ)seguro).getCliente().equals(cliente)) {
+ segurosCliente.add(seguro);
+ }
+ }
+ }
+ return segurosCliente;
+ }
+
+ public ArrayList getSinistrosPorCliente(String cpf_cnpj) {
+ ArrayList sinistrosCliente = new ArrayList();
+ ArrayList segurosCliente = getSegurosPorCliente(cpf_cnpj);
+ for (Seguro seguro : segurosCliente) {
+ for (Sinistro sinistro : seguro.getListaSinistros()) {
+ sinistrosCliente.add(sinistro);
+ }
+ }
+ return sinistrosCliente;
+ }
+
+ public ArrayList getVeiculosPorClientePF(String cpf) {
+ ArrayList veiculosClientePF = new ArrayList();
+ for (Cliente cliente : listaClientes) {
+ if (cliente.getClass() == ClientePF.class) {
+ if (((ClientePF)cliente).getCPF().equals(cpf)) {
+ for (Veiculo veiculo : ((ClientePF)cliente).getListaVeiculos()) {
+ veiculosClientePF.add(veiculo);
+ }
+ }
+ }
+ }
+ return veiculosClientePF;
+ }
+
+ public ArrayList getFrotasPorClietePJ(String cnpj) {
+ ArrayList frotasClientePJ = new ArrayList();
+ for (Cliente cliente : listaClientes) {
+ if (cliente.getClass() == ClientePJ.class) {
+ if (((ClientePJ)cliente).getCNPJ().equals(cnpj)) {
+ for (Frota frota : ((ClientePJ)cliente).getListaFrota()) {
+ frotasClientePJ.add(frota);
+ }
+ }
+ }
+ }
+ return frotasClientePJ;
+ }
+
+ public String listarSeguros() {
+ String str = "";
+ for (Seguro seguro : listaSeguros) {
+ str += seguro.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public String listarSegurosId() {
+ String str = "";
+ for (Seguro seguro : listaSeguros) {
+ str += seguro.getId() + "\n*\n";
+ }
+ return str;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DA SEGURADORA\nCNPJ: " + getCNPJ() + "\nNome: " + getNome() + "\nTelefone: " + getTelefone() +
+ "\nEmail: " + getEmail() + "\nEndereço: " + getEndereco() + "\nLISTA DE SEGUROS POR ID\n" + listarSegurosId()
+ + "\nLISTA DE CLIENTES\n" + listarClientes();
+ return str;
+ }
+}
diff --git a/Lab05/src/Seguro.java b/Lab05/src/Seguro.java
new file mode 100644
index 0000000..e89df08
--- /dev/null
+++ b/Lab05/src/Seguro.java
@@ -0,0 +1,157 @@
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Random;
+import java.text.SimpleDateFormat;
+
+public abstract class Seguro {
+ private final int id;
+ private Date dataInicio;
+ private Date dataFim;
+ private Seguradora seguradora;
+ private ArrayList listaSinistros;
+ private ArrayList listaCondutores;
+ private double valorMensal;
+ protected static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Método construtor
+ public Seguro(Date dataInicio, Date dataFim, Seguradora seguradora) {
+ id = geraId();
+ this.dataInicio = dataInicio;
+ this.dataFim = dataFim;
+ this.seguradora = seguradora;
+ listaSinistros = new ArrayList();
+ listaCondutores = new ArrayList();
+ }
+
+ // Setters e getters
+ protected int geraId(){
+ Random aleatorio = new Random();
+ return aleatorio.nextInt(100000000);
+ }
+
+ public void setDataInicio(Date dataInicio) {
+ this.dataInicio = dataInicio;
+ }
+
+ public void setDataFim(Date dataFim) {
+ this.dataFim = dataFim;
+ }
+
+ public void setSeguradora(Seguradora seguradora) {
+ this.seguradora = seguradora;
+ }
+
+ public void setValorMensal(double valorMensal) {
+ this.valorMensal = valorMensal;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public Date getDataInicio() {
+ return dataInicio;
+ }
+
+ public Date getDataFim() {
+ return dataFim;
+ }
+
+ public Seguradora getSeguradora() {
+ return seguradora;
+ }
+
+ public ArrayList getListaSinistros() {
+ return listaSinistros;
+ }
+
+ public ArrayList getListaCondutores() {
+ return listaCondutores;
+ }
+
+ public String listarSinistros() {
+ String str = "";
+ for (Sinistro sinistro : listaSinistros) {
+ str += sinistro.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public String listarSinistrosId() {
+ String str = "";
+ for (Sinistro sinistro : listaSinistros) {
+ str += sinistro.getId() + "\n*\n";
+ }
+ return str;
+ }
+
+ public String listarCondutores() {
+ String str = "";
+ for (Condutor condutor : listaCondutores) {
+ str += condutor.toString() + "\n*\n";
+ }
+ return str;
+ }
+
+ public double getValorMensal() {
+ return valorMensal;
+ }
+
+ public boolean autorizarCondutor(Condutor condutor) {
+ for (Condutor c : listaCondutores) {
+ if (c.equals(condutor)) {
+ return false;
+ }
+ }
+ listaCondutores.add(condutor);
+ return true;
+ }
+
+ public boolean desautorizarCondutor(String cpf) {
+ for (Condutor condutor : new ArrayList(listaCondutores)) {
+ if (condutor.getCpf().equals(cpf)) {
+ listaCondutores.remove(condutor);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public abstract double calcularValor();
+
+ public boolean gerarSinistro(Date data, String endereco, Condutor condutor) {
+ Sinistro sinistro = new Sinistro(data, endereco, condutor, this);
+ for (Sinistro s : listaSinistros)
+ if (s.getCondutor().equals(sinistro.getCondutor()) && s.getData().equals(sinistro.getData()) &&
+ s.getEndereco().equals(sinistro.getEndereco()))
+ return false;
+ listaSinistros.add(sinistro);
+ condutor.adicionaSinistro(sinistro);
+ System.out.println("O Id deste sinistro é: " + sinistro.getId() + ". Anote-o para futuras consultas.");
+ return true;
+ }
+
+ public boolean excluirSinistro(int id, String cpf) {
+ for (Sinistro sinistro : new ArrayList(listaSinistros)) {
+ if (sinistro.getId() == id) {
+ for (Condutor condutor : listaCondutores) {
+ if (condutor.getCpf().equals(cpf)) {
+ condutor.removeSinistro(sinistro);
+ }
+ }
+ listaSinistros.remove(sinistro);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ String str = "ID: " + getId() + "\nData de início: " + datasFormatadas.format(getDataInicio())
+ + "\nData de fim: " + datasFormatadas.format(getDataFim()) + "\nLista de sinistros: "
+ + listarSinistros() + "Lista de condutores: " + listarCondutores() + "Valor mensal: "
+ + getValorMensal() + "\n";
+ return str;
+ }
+}
diff --git a/Lab05/src/SeguroPF.java b/Lab05/src/SeguroPF.java
new file mode 100644
index 0000000..47e596c
--- /dev/null
+++ b/Lab05/src/SeguroPF.java
@@ -0,0 +1,72 @@
+import java.util.Date;
+
+public class SeguroPF extends Seguro{
+ private Veiculo veiculo;
+ private ClientePF cliente;
+
+ // Método construtor
+ public SeguroPF(Date dataInicio, Date dataFim, Seguradora seguradora, Veiculo veiculo, ClientePF cliente) {
+ super(dataInicio, dataFim, seguradora);
+ this.veiculo = veiculo;
+ this.cliente = cliente;
+ }
+
+ // Setters e getters
+ public void setVeiculo(Veiculo veiculo) {
+ this.veiculo = veiculo;
+ }
+
+ public void setCliente(ClientePF cliente) {
+ this.cliente = cliente;
+ }
+
+ public Veiculo getVeiculo() {
+ return veiculo;
+ }
+
+ public ClientePF getCliente() {
+ return cliente;
+ }
+
+ public double calcularValor() {
+ // Calculando a idade do clientePF
+ Date now = new Date();
+ int idade;
+ int anoAux = (now.getYear() - cliente.getDataNascimento().getYear()) * 365;
+ int mesAux = (now.getMonth() - cliente.getDataNascimento().getMonth())* 30;
+ int diaAux = now.getDate() - cliente.getDataNascimento().getDate();
+ idade = (anoAux + mesAux + diaAux) / 365;
+
+ // Calculando a quantido de sinistros dos condutores
+ int qtdSinistrosCondutor = 0;
+ for (Condutor condutor : this.getListaCondutores()) {
+ qtdSinistrosCondutor += condutor.getListaSinistros().size();
+ }
+
+ if (idade >= 18 && idade < 30) {
+ double valor = CalcSeguro.VALOR_BASE.getFator() * CalcSeguro.FATOR_18_30.getFator() *
+ (1 + 1.0/ (cliente.getListaVeiculos().size() + 2)) * (2 + this.getListaSinistros().size() / 10.0)
+ * (5 + qtdSinistrosCondutor / 10.0);
+ return valor;
+ }
+ else if (idade >= 30 && idade < 60) {
+ double valor = CalcSeguro.VALOR_BASE.getFator() * CalcSeguro.FATOR_30_60.getFator() *
+ (1 + 1.0/ (cliente.getListaVeiculos().size() + 2)) * (2 + this.getListaSinistros().size() / 10.0)
+ * (5 + qtdSinistrosCondutor / 10.0);
+ return valor;
+ }
+ else {
+ double valor = CalcSeguro.VALOR_BASE.getFator() * CalcSeguro.FATOR_60_90.getFator() *
+ (1 + 1.0 / (cliente.getListaVeiculos().size() + 2)) * (2 + this.getListaSinistros().size() / 10.0)
+ * (5 + qtdSinistrosCondutor / 10.0);
+ return valor;
+ }
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO SEGUROPF\n" + super.toString() + "Veículo (placa): " + getVeiculo().getPlaca() + "\nCliente (CPF): "
+ + getCliente().getCPF();
+ return str;
+ }
+}
diff --git a/Lab05/src/SeguroPJ.java b/Lab05/src/SeguroPJ.java
new file mode 100644
index 0000000..64764b3
--- /dev/null
+++ b/Lab05/src/SeguroPJ.java
@@ -0,0 +1,56 @@
+import java.util.Date;
+
+public class SeguroPJ extends Seguro{
+ Frota frota;
+ ClientePJ cliente;
+
+ // Método construtor
+ public SeguroPJ(Date dataInicio, Date dataFim, Seguradora seguradora, Frota frota, ClientePJ cliente) {
+ super(dataInicio, dataFim, seguradora);
+ this.frota = frota;
+ this.cliente = cliente;
+ }
+
+ // Setters e getters
+ public void setFrota(Frota frota) {
+ this.frota = frota;
+ }
+
+ public void setCliente(ClientePJ cliente) {
+ this.cliente = cliente;
+ }
+
+ public Frota getFrota() {
+ return frota;
+ }
+
+ public ClientePJ getCliente() {
+ return cliente;
+ }
+
+ public double calcularValor() {
+ // Calculando a idade da empresa
+ Date now = new Date();
+ int anosPosFundacao;
+ int anoAux = (now.getYear() - cliente.getDataFundacao().getYear()) * 365;
+ int mesAux = (now.getMonth() - cliente.getDataFundacao().getMonth())* 30;
+ int diaAux = now.getDate() - cliente.getDataFundacao().getDate();
+ anosPosFundacao = (anoAux + mesAux + diaAux) / 365;
+
+ // Calculando a quantido de sinistros dos condutores
+ int qtdSinistrosCondutor = 0;
+ for (Condutor condutor : this.getListaCondutores()) {
+ qtdSinistrosCondutor += condutor.getListaSinistros().size();
+ }
+
+ return CalcSeguro.VALOR_BASE.getFator() * (10 + (cliente.getQtdeFuncionarios() / 10.0)) *
+ (1 + 1.0 / (frota.getListaVeiculos().size() + 2)) * (1 + 1.0 / (anosPosFundacao + 2))
+ * (2 + this.getListaSinistros().size() / 10.0) * (5 + qtdSinistrosCondutor / 10.0);
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO CLIENTEPJ\n" + super.toString() + "Frota (Code): " + getFrota().getCode() + "\nCliente (CNPJ): " + getCliente().getCNPJ();
+ return str;
+ }
+}
diff --git a/Lab05/src/Sinistro.java b/Lab05/src/Sinistro.java
new file mode 100644
index 0000000..17955b1
--- /dev/null
+++ b/Lab05/src/Sinistro.java
@@ -0,0 +1,72 @@
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+public class Sinistro {
+ // Atributos
+ private final int id;
+ private Date data;
+ private String endereco;
+ private Condutor condutor;
+ private Seguro seguro;
+ private static SimpleDateFormat datasFormatadas = new SimpleDateFormat("dd/MM/yyyy");
+
+ // Método construtor
+ public Sinistro(Date data, String endereco, Condutor condutor, Seguro seguro) {
+ this.id = geraId();
+ this.data = data;
+ this.endereco = endereco;
+ this.condutor = condutor;
+ this.seguro = seguro;
+ }
+
+ // Setters e getters
+ public int geraId(){
+ Random aleatorio = new Random();
+ return aleatorio.nextInt(100000000);
+ }
+
+ public void setData(Date data) {
+ this.data = data;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public void setCondutor(Condutor condutor) {
+ this.condutor = condutor;
+ }
+
+ public void setSeguro(Seguro seguro) {
+ this.seguro = seguro;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public Date getData() {
+ return data;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public Condutor getCondutor() {
+ return condutor;
+ }
+
+ public Seguro getSeguro() {
+ return seguro;
+ }
+
+ @Override
+ public String toString() {
+ String str = "INFORMACOES DO SINISTRO\nId: " + getId() + "\nData: " + datasFormatadas.format(getData())
+ + "\nEndereco: " + getEndereco() + "\nCondutor: " + getCondutor() +
+ "Seguro(Id): " + getSeguro().getId();
+ return str;
+ }
+}
diff --git a/Lab05/src/Validacao.java b/Lab05/src/Validacao.java
new file mode 100644
index 0000000..40086b8
--- /dev/null
+++ b/Lab05/src/Validacao.java
@@ -0,0 +1,156 @@
+public class Validacao {
+ private static int calculaVerificadorPF(String cpf, int n) {
+ // Função auxiliar à função validarCPF responsável por calcular os digitos verificadores do CPF
+ // O parâmetro n indica quantos dígitos do CPF serão usados no cálculo (8 para o 1º dígito e 9 para o 2°)
+
+ int digito; /* variável que armazena cada índice do CPF */
+ int multiplicador = 2; /* variável auxiliar responável por armazenar o valor ao qual cada dígito será multiplicado */
+ int soma = 0; /* variável responsável por quantabilizar a soma dos produtos de cada dígito pelo multiplicador */
+ int resto; /* resto da divisão de soma por 11 */
+
+ for (int i = n; i >= 0; i--) {
+ digito = (int) cpf.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ resto = soma % 11;
+ if (resto < 2) {
+ return -1;
+ }
+ else {
+ return 11 - resto;
+ }
+ }
+
+ private static int calculaVerificadorPJ(String cnpj, int n) {
+ // Função auxiliar à função validarCPF responsável por calcular os digitos verificadores do CPF
+ // O parâmetro n indica quantos dígitos do CPF serão usados no cálculo (11 para o 1º dígito e 12 para o 2°)
+
+ int digito; /* variável que armazena cada índice do CPF */
+ int multiplicador = 2; /* variável auxiliar responável por armazenar o valor ao qual cada dígito será multiplicado */
+ int soma = 0; /* variável responsável por quantabilizar a soma dos produtos de cada dígito pelo multiplicador */
+ int resto; /* resto da divisão de soma por 11 */
+
+ for (int i = n; i >= n - 7; i--) {
+ digito = (int) cnpj.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ multiplicador = 2;
+ for (int i = n - 8; i >= 0; i--) {
+ digito = (int) cnpj.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ resto = soma % 11;
+ if (resto < 2) {
+ return -1;
+ }
+ else {
+ return 11 - resto;
+ }
+ }
+
+ public static boolean validarCPF(String cpf) {
+ cpf = cpf.replaceAll("[^0-9]+", ""); /* elimina todos os dígitos não numéricos */
+
+ if (cpf.length() != 11) {
+ // verifica se o CPF digitado não possui 11 dígitos
+ return false;
+ }
+
+ int contador = 0; /* conta se todos os dígitos do CPF são iguais */
+ for (int i = 0; i < cpf.length(); i++) {
+ if (cpf.charAt(i) == cpf.charAt(0)) {
+ contador++;
+ }
+ }
+ if (contador == 11) {
+ return false;
+ }
+
+ // Calculando o 1° dígito verificador
+ int verificador1 = calculaVerificadorPF(cpf, 8);
+ if (verificador1 == -1) {
+ if (cpf.charAt(9) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador1 != ((int) cpf.charAt(9) - 48)) {
+ return false;
+ }
+ }
+
+ // Calculando o 2° dígito verificador
+ int verificador2 = calculaVerificadorPF(cpf, 9);
+ if (verificador2 == -1 && cpf.charAt(10) != '0') {
+ return false;
+ }
+ else {
+ if (verificador2 != ((int) cpf.charAt(10) - 48)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static boolean validarCNPJ(String cnpj) {
+ cnpj = cnpj.replaceAll("[^0-9]+", ""); /* elimina todos os dígitos não numéricos */
+
+ if (cnpj.length() != 14) {
+ // verifica se o CNPj digitado não possui 14 dígitos
+ return false;
+ }
+
+ int contador = 0; /* conta se todos os dígitos do CPF são iguais */
+ for (int i = 0; i < cnpj.length(); i++) {
+ if (cnpj.charAt(i) == cnpj.charAt(0)) {
+ contador++;
+ }
+ }
+ if (contador == 14) {
+ return false;
+ }
+
+ // Calculando o 1° dígito verificador
+ int verificador1 = calculaVerificadorPJ(cnpj, 11);
+ if (verificador1 == -1) {
+ if (cnpj.charAt(12) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador1 != ((int) cnpj.charAt(12) - 48)) {
+ return false;
+ }
+ }
+
+ // Calculando o 2° dígito verificador
+ int verificador2 = calculaVerificadorPJ(cnpj, 12);
+ if (verificador2 == -1) {
+ if (cnpj.charAt(13) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador2 != ((int) cnpj.charAt(13) - 48)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static boolean validarNome(String nome) {
+ String nomeAux = nome.replaceAll("[^A-Z, ^a-z, ^\b]", ""); /* ???? */
+ if (nomeAux.equals(nome))
+ return true;
+ else
+ return false;
+ }
+}
diff --git a/Lab05/src/Veiculo.java b/Lab05/src/Veiculo.java
new file mode 100644
index 0000000..5603a9d
--- /dev/null
+++ b/Lab05/src/Veiculo.java
@@ -0,0 +1,55 @@
+public class Veiculo {
+ // Atributos
+ private String placa;
+ private String marca;
+ private String modelo;
+ private int anoFabricacao;
+
+ // Método construtor
+ public Veiculo(String placa, String marca, String modelo, int anoFabricacao) {
+ this.placa = placa;
+ this.marca = marca;
+ this.modelo = modelo;
+ this.anoFabricacao = anoFabricacao;
+ }
+
+ // Setters e getters
+ public void setPlaca(String placa) {
+ this.placa = placa;
+ }
+
+ public void setMarca(String marca) {
+ this.marca = marca;
+ }
+
+ public void setModelo(String modelo) {
+ this.modelo = modelo;
+ }
+
+ public void setAnoFabricacao(int anoFabricacao) {
+ this.anoFabricacao = anoFabricacao;
+ }
+
+ public String getPlaca() {
+ return placa;
+ }
+
+ public String getMarca() {
+ return marca;
+ }
+
+ public String getModelo() {
+ return modelo;
+ }
+
+ public int getAnoFabricacao() {
+ return anoFabricacao;
+ }
+
+ @Override
+ public String toString() {
+ String str = "DADOS DO VEICULO\nPlaca: " + getPlaca() + "\nMarca: " + getMarca() + "\nModelo: " +
+ getModelo() + "\nAno de fabricacao: " + getAnoFabricacao();
+ return str;
+ }
+}
diff --git a/Projeto/Bispo.java b/Projeto/Bispo.java
new file mode 100644
index 0000000..9eda07c
--- /dev/null
+++ b/Projeto/Bispo.java
@@ -0,0 +1,63 @@
+public class Bispo extends Peca{
+ public boolean moverPeca(String destino) {
+ // Implementação do movimento do Bispo
+ int deltaX = Math.abs(getPosX(this.getPosicao()) - getPosX(destino));
+ int deltaY = Math.abs(getPosY(this.getPosicao()) - getPosY(destino));
+
+ if(deltaX != deltaY) // Fora do alcance do Bispo
+ return false;
+
+ int nx = getPosX(destino);
+ int ny = getPosY(destino);
+ if(nx < 0 || nx >= 8 || ny < 0 || ny >= 8) // Posição do grid inválida
+ return false;
+
+ if(nx > getPosX(this.getPosicao()) && ny > getPosY(this.getPosicao())) { // Movimento na diagonal superior direita
+ for(int i = 1; i < deltaX; i++) {
+ if(this.getTabuleiro().getPeca(getPosX(this.getPosicao()) + i, getPosY(this.getPosicao()) + i) != null) { // Caso haja alguma peça entre o Bispo e o destino
+ return false;
+ }
+ }
+ }
+ else if(nx > getPosX(this.getPosicao()) && ny < getPosY(this.getPosicao())) { // Movimento na diagonal inferior direita
+ for(int i = 1; i < deltaX; i++) {
+ if(this.getTabuleiro().getPeca(getPosX(this.getPosicao()) + i, getPosY(this.getPosicao()) - i) != null) { // Caso haja alguma peça entre o Bispo e o destino
+ return false;
+ }
+ }
+ }
+ else if(nx < getPosX(this.getPosicao()) && ny > getPosY(this.getPosicao())) { // Movimento na diagonal superior esquerda
+ for(int i = 1; i < deltaX; i++) {
+ if(this.getTabuleiro().getPeca(getPosX(this.getPosicao()) - i, getPosY(this.getPosicao()) + i) != null) { // Caso haja alguma peça entre o Bispo e o destino
+ return false;
+ }
+ }
+ }
+ else if(nx < getPosX(this.getPosicao()) && ny < getPosY(this.getPosicao())) { // Movimento na diagonal inferior esquerda
+ for(int i = 1; i < deltaX; i++) {
+ if(this.getTabuleiro().getPeca(getPosX(this.getPosicao()) - i, getPosY(this.getPosicao()) - i) != null) { // Caso haja alguma peça entre o Bispo e o destino
+ return false;
+ }
+ }
+ }
+
+ if(this.getTabuleiro().getPeca(nx, ny) != null) { // Caso a posição de destino não esteja vazia
+ if(!this.getTabuleiro().getPeca(nx, ny).getCorDono().equals(this.getCorDono())) { // Peça inimiga
+ return this._make_move(destino);
+ }
+ else
+ return false;
+ }
+ else { // Caso a posição de destino esteja vazia
+ return this._make_move(destino);
+ }
+ }
+
+ public Bispo(String corDono, Tabuleiro tabuleiro, String posicao){
+ super(corDono, tabuleiro, posicao);
+ if(corDono.equals("branca"))
+ setLabel("B");
+ else
+ setLabel("b");
+ }
+}
diff --git a/Projeto/Data.java b/Projeto/Data.java
new file mode 100644
index 0000000..f778186
--- /dev/null
+++ b/Projeto/Data.java
@@ -0,0 +1,7 @@
+public interface Data {
+ public static final int NUM_COLUNAS = 8;
+ public static final int NUM_LINHAS = 8;
+
+ public String load(String filename);
+ public boolean save(String filename, String data);
+}
diff --git a/Projeto/FEN.java b/Projeto/FEN.java
new file mode 100644
index 0000000..5ca2c02
--- /dev/null
+++ b/Projeto/FEN.java
@@ -0,0 +1,78 @@
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Scanner;
+
+public class FEN implements Data{
+ // Forsyth–Edwards Notation
+ // https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation
+
+ public String load(String filename){
+ try {
+ File file = new File(filename);
+ Scanner scanner = new Scanner(file);
+ String data = "";
+ while (scanner.hasNextLine()) {
+ data += scanner.nextLine();
+ }
+ scanner.close();
+ return data;
+ } catch (FileNotFoundException e) {
+ System.out.println("File not found: " + filename);
+ return null;
+ }
+ }
+
+ public boolean _setBoard(String data, Tabuleiro tabuleiro){
+ // Internamente chamado por setBoardFromFEN para colocar as peças no tabuleiro
+ for(int i=0; i<8; i++)
+ for(int j=0; j<8; j++)
+ tabuleiro.getGrid()[i][j] = null;
+
+ String[] fields = data.split(" ");
+ String[] linhas = fields[0].split("/");
+ boolean[] brancaJaUsada = new boolean[16];
+ boolean[] pretaJaUsada = new boolean[16];
+
+ for(int i=0; i= 0; j--){
+ System.out.print(j+1 + " ");
+ for(int i = 0; i < 8; i++){
+ Peca peca = tabuleiro.getPeca(i, j);
+ if(peca == null) System.out.print(" . ");
+ else System.out.print(" " + peca.getLabel() + " ");
+ }
+ System.out.println();
+ }
+ System.out.println(" A B C D E F G H");
+ System.out.println("**************************");
+ }
+
+ public static void main(String[] args){
+ Tabuleiro tabuleiro = new Tabuleiro();
+
+ printarTabuleiro(tabuleiro); // Debugging do tabuleiro
+
+ // Debugging movimentos
+ tabuleiro.mover("A2", "A4");
+ tabuleiro.mover("D7", "D6");
+ tabuleiro.mover("A1", "A3");
+ tabuleiro.mover("E1", "G1");
+ tabuleiro.mover("E8", "C8"); // Tentativa falha de roque
+ tabuleiro.mover("C8", "F5");
+ tabuleiro.mover("E8", "C8"); // Tentativa bem sucedida de roque
+ tabuleiro.mover("D2", "D3");
+ tabuleiro.mover("C1", "F4");
+ tabuleiro.mover("A3", "A1"); // Tentativa falha de roque (a torre envolvida já se moveu)
+ tabuleiro.mover("H7", "H6");
+ tabuleiro.mover("F4", "H6"); // Captura bem sucedida
+ tabuleiro.mover("H6", "C1");
+ printarTabuleiro(tabuleiro);
+ }
+}
diff --git a/Projeto/Peao.java b/Projeto/Peao.java
new file mode 100644
index 0000000..61f9067
--- /dev/null
+++ b/Projeto/Peao.java
@@ -0,0 +1,60 @@
+public class Peao extends Peca{
+ public boolean moverPeca(String destino){
+ // Implementação do movimento do Peão
+ int deltaX = Math.abs(getPosX(this.getPosicao()) - getPosX(destino));
+ int deltaY = Math.abs(getPosY(destino) - getPosY(this.getPosicao())); // deltaY > 0 se o peão está indo para frente
+
+ if(this.getCorDono().equals("branca") && getPosY(destino) <= getPosY(this.getPosicao())) // Peão branco não pode ir para trás
+ return false;
+ if(this.getCorDono().equals("preta") && getPosY(destino) >= getPosY(this.getPosicao())) // Peão preto não pode ir para trás
+ return false;
+
+ if(deltaX > 1 || (deltaY != 1 && deltaY != 2)) // Fora do alcance do Peão
+ return false;
+
+ // Aqui, com certeza deltaY = (1 ou 2) e deltaX = (0 ou 1)
+ int nx = getPosX(destino);
+ int ny = getPosY(destino);
+ if(nx < 0 || nx >= 8 || ny < 0 || ny >= 8) // Posição do grid inválida
+ return false;
+
+ if (deltaY == 2){
+ if(getMovimentou() || deltaX != 0) // Já se movimentou ou está tentando se mover para o lado
+ return false;
+ if(this.getTabuleiro().getPeca(nx, ny) != null) // Caso a posição não esteja vazia
+ return false;
+
+ return this._make_move(destino);
+ }
+ else if (deltaY == 1){
+ if(this.getTabuleiro().getPeca(nx, ny) != null){ // Caso a posição não esteja vazia
+ if(!this.getTabuleiro().getPeca(nx, ny).getCorDono().equals(this.getCorDono())){ // Peça inimiga
+ if(deltaX == 0)
+ return false;
+ return this._make_move(destino);
+ }
+ }
+ else if(deltaX == 0){ // Caso a posição esteja vazia
+ if(this.getCorDono().equals("branca") && ny == 8) {
+ // Promoção de um peão das brancas
+ }
+ else if(this.getCorDono().equals("preta") && ny == 1) {
+ // Promoção de um peão das pretas
+ }
+ else {
+ return this._make_move(destino);
+ }
+ }
+
+ }
+ return false;
+ }
+
+ public Peao(String corDono, Tabuleiro tabuleiro, String posicao){
+ super(corDono, tabuleiro, posicao);
+ if(corDono.equals("branca"))
+ setLabel("P");
+ else
+ setLabel("p");
+ }
+}
diff --git a/Projeto/Peca.java b/Projeto/Peca.java
new file mode 100644
index 0000000..e1bcad5
--- /dev/null
+++ b/Projeto/Peca.java
@@ -0,0 +1,67 @@
+public abstract class Peca{
+ private final String corDono; // "branca" ou "preta"
+ private final Tabuleiro tabuleiro;
+ private String posicao; // Ex: "A1", "A8", "H1", "H8"
+ private boolean movimentou;
+ private String label; // Ex: "P", "B", "R", "Q", "K" (notação FEN)
+
+ public Peca(String corDono, Tabuleiro tabuleiro, String posicao){
+ this.corDono = corDono;
+ this.tabuleiro = tabuleiro;
+ this.posicao = posicao;
+ this.movimentou = false;
+ if(corDono != "branca" && corDono != "preta")
+ throw new IllegalArgumentException("Cor inválida");
+ }
+
+ public abstract boolean moverPeca(String destino);
+
+ public boolean _make_move(String destino){
+ // Internamente chamado por moverPeca quando o movimento é válido
+ this.setMovimentou(true);
+ this.getTabuleiro().setEmpty(getPosicao());
+ this.getTabuleiro().setPeca(destino, this);
+ return true;
+ }
+
+
+ public static int getPosX(String pos){
+ return Posicao.valueOf(pos.substring(0,1)).valor;
+ }
+
+ public static int getPosY(String pos){
+ return Integer.parseInt(pos.substring(1,2)) - 1;
+ }
+
+ public String getPosicao() {
+ return posicao;
+ }
+
+ public void setPosicao(String posicao) {
+ this.posicao = posicao;
+ }
+
+ public String getCorDono() {
+ return corDono;
+ }
+
+ public Tabuleiro getTabuleiro() {
+ return tabuleiro;
+ }
+
+ public void setMovimentou(boolean movimentou) {
+ this.movimentou = movimentou;
+ }
+
+ public boolean getMovimentou() {
+ return movimentou;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label){
+ this.label = label;
+ }
+};
\ No newline at end of file
diff --git a/Projeto/Posicao.java b/Projeto/Posicao.java
new file mode 100644
index 0000000..9ddc27f
--- /dev/null
+++ b/Projeto/Posicao.java
@@ -0,0 +1,16 @@
+public enum Posicao {
+ A(0),
+ B(1),
+ C(2),
+ D(3),
+ E(4),
+ F(5),
+ G(6),
+ H(7);
+
+ public final int valor;
+
+ Posicao(int valor) {
+ this.valor = valor;
+ }
+}
diff --git a/Projeto/Rei.java b/Projeto/Rei.java
new file mode 100644
index 0000000..7d57edc
--- /dev/null
+++ b/Projeto/Rei.java
@@ -0,0 +1,72 @@
+public class Rei extends Peca{
+ public boolean moverPeca(String destino){
+ // Implementação do movimento do Rei
+ int deltaX = Math.abs(getPosX(this.getPosicao()) - getPosX(destino));
+ int deltaY = Math.abs(getPosY(this.getPosicao()) - getPosY(destino));
+
+ int nx = getPosX(destino);
+ int ny = getPosY(destino);
+ if(nx < 0 || nx >= 8 || ny < 0 || ny >= 8) // Posição do grid inválida
+ return false;
+
+ if(this.getTabuleiro().getPeca(nx, ny) != null){ // Caso a posição não esteja vazia
+ if(!this.getTabuleiro().getPeca(nx, ny).getCorDono().equals(this.getCorDono())){ // Peça inimiga
+ return this._make_move(destino);
+ }
+ else
+ return false;
+ }
+ else { // Caso a posição esteja vazia
+ if(!this.getMovimentou() && deltaX == 2 && deltaY == 0) { // Implementação do roque
+ if(this.getCorDono().equals("branca")) {
+ if(destino.equals("G1")) { // Roque menor do Rei das brancas
+ if(this.getTabuleiro().getPeca("F1") == null && this.getTabuleiro().getPeca("G1") == null) { //Checa se não há nenhuma peça entre o Rei e a Torre
+ if(this.getTabuleiro().getPeca("H1").getClass() == Torre.class && !this.getTabuleiro().getPeca("H1").getMovimentou()) {
+ this.getTabuleiro().getPeca("H1").moverPeca("F1");
+ return this._make_move(destino);
+ }
+ }
+ }
+ else if(destino.equals("C1")) { // Roque maior do Rei das brancas
+ if(this.getTabuleiro().getPeca("B1") == null && this.getTabuleiro().getPeca("C1") == null && this.getTabuleiro().getPeca("D1") == null) { //Checa se não há nenhuma peça entre o Rei e a Torre
+ if(this.getTabuleiro().getPeca("A1").getClass() == Torre.class && !this.getTabuleiro().getPeca("A1").getMovimentou()) {
+ this.getTabuleiro().getPeca("A1").moverPeca("D1");
+ return this._make_move(destino);
+ }
+ }
+ }
+ }
+ else if(this.getCorDono().equals("preta")) {
+ if(destino.equals("G8")) { // Roque menor do Rei das pretas
+ if(this.getTabuleiro().getPeca("F8") == null && this.getTabuleiro().getPeca("G8") == null) { //Checa se não há nenhuma peça entre o Rei e a Torre
+ if(this.getTabuleiro().getPeca("H8").getClass() == Torre.class && !this.getTabuleiro().getPeca("H8").getMovimentou()) {
+ this.getTabuleiro().getPeca("H8").moverPeca("F8");
+ return this._make_move(destino);
+ }
+ }
+ }
+ else if(destino.equals("C8")){ // Roque maior do Rei das pretas
+ if(this.getTabuleiro().getPeca("B8") == null && this.getTabuleiro().getPeca("C8") == null && this.getTabuleiro().getPeca("D8") == null) { //Checa se não há nenhuma peça entre o Rei e a Torre
+ if(this.getTabuleiro().getPeca("A8").getClass() == Torre.class && !this.getTabuleiro().getPeca("A8").getMovimentou()) {
+ this.getTabuleiro().getPeca("A8").moverPeca("D8");
+ return this._make_move(destino);
+ }
+ }
+ }
+ }
+ return false;
+ }
+ else if(deltaX > 1 || deltaY > 1) // Fora do alcance do Rei
+ return false;
+ return this._make_move(destino);
+ }
+ }
+
+ public Rei(String corDono, Tabuleiro tabuleiro, String posicao){
+ super(corDono, tabuleiro, posicao);
+ if(corDono.equals("branca"))
+ this.setLabel("K");
+ else
+ this.setLabel("k");
+ }
+}
diff --git a/Projeto/Tabuleiro.java b/Projeto/Tabuleiro.java
new file mode 100644
index 0000000..b3fa1bb
--- /dev/null
+++ b/Projeto/Tabuleiro.java
@@ -0,0 +1,113 @@
+import java.util.ArrayList;
+
+public class Tabuleiro {
+ private Peca[][] grid = new Peca[8][8];
+ private ArrayList brancas = new ArrayList<>();
+ private ArrayList pretas = new ArrayList<>();
+
+ public Tabuleiro(){
+ // Inicializar o grid vazio
+ for(int i = 0; i < 8; i++)
+ for(int j = 0; j < 8; j++)
+ grid[i][j] = null;
+
+
+ // Inicializar as peças brancas
+ brancas.add(new Rei("branca", this, "E1")); // Rei
+ for(int i=0; i<8; i++) // Peões
+ brancas.add(new Peao("branca", this, Posicao.values()[i].toString() + "2"));
+ brancas.add(new Torre("branca", this, "A1"));
+ brancas.add(new Torre("branca", this, "H1")); // Torres
+ brancas.add(new Bispo("branca", this, "C1"));
+ brancas.add(new Bispo("branca", this, "F1")); // Bispos
+
+ // Inicializar as peças pretas
+ pretas.add(new Rei("preta", this, "E8")); // Rei
+ for(int i=0; i<8; i++) // Peões
+ pretas.add(new Peao("preta", this, Posicao.values()[i].toString() + "7"));
+ pretas.add(new Torre("preta", this, "A8"));
+ pretas.add(new Torre("preta", this, "H8")); // Torres
+ pretas.add(new Bispo("preta", this, "C8"));
+ pretas.add(new Bispo("preta", this, "F8")); // Bispos
+
+ // Colocar as peças brancas e pretas no tabuleiro
+ try{
+ for(int i=0; i getBrancas() {
+ return brancas;
+ }
+
+ public void setBrancas(ArrayList brancas) {
+ this.brancas = brancas;
+ }
+
+ public ArrayList getPretas() {
+ return pretas;
+ }
+
+ public void setPretas(ArrayList pretas) {
+ this.pretas = pretas;
+ }
+}
diff --git a/Projeto/Torre.java b/Projeto/Torre.java
new file mode 100644
index 0000000..58bcea9
--- /dev/null
+++ b/Projeto/Torre.java
@@ -0,0 +1,65 @@
+public class Torre extends Peca{
+ public boolean moverPeca(String destino) {
+ // Implementação do movimento da Torre
+ int deltaX = Math.abs(getPosX(this.getPosicao()) - getPosX(destino));
+ int deltaY = Math.abs(getPosY(this.getPosicao()) - getPosY(destino));
+
+ if(deltaX > 0 && deltaY > 0) // Fora do alcance da Torre
+ return false;
+
+ int nx = getPosX(destino);
+ int ny = getPosY(destino);
+ if(nx < 0 || nx >= 8 || ny < 0 || ny >= 8) // Posição do grid inválida
+ return false;
+
+ if(deltaX == 0){
+ if(ny > getPosY(this.getPosicao())) { // Caso a Torre esteja se movendo para cima
+ for(int i = getPosY(this.getPosicao()) + 1; i < ny; i++) {
+ if(this.getTabuleiro().getPeca(getPosX(this.getPosicao()), i) != null) { // Caso haja alguma peça entre a Torre e o destino
+ return false;
+ }
+ }
+ }
+ else { // Caso a Torre esteja se movendo para baixo
+ for(int i = getPosY(this.getPosicao()) - 1; i > ny; i--) {
+ if(this.getTabuleiro().getPeca(getPosX(this.getPosicao()), i) != null) { // Caso haja alguma peça entre a Torre e o destino
+ return false;
+ }
+ }
+ }
+ }
+ if(deltaY == 0) {
+ if (nx > getPosX(this.getPosicao())) { // Caso a Torre esteja se movendo para a direita
+ for(int i = getPosX(this.getPosicao()) + 1; i < nx; i++) {
+ if(this.getTabuleiro().getPeca(i, getPosY(this.getPosicao())) != null) // Caso haja alguma peça entre a Torre e o destino
+ return false;
+ }
+ }
+ else { // Caso a Torre esteja se movendo para a esquerda
+ for(int i = getPosX(this.getPosicao()) - 1; i > nx; i--) {
+ if(this.getTabuleiro().getPeca(i, getPosY(this.getPosicao())) != null) // Caso haja alguma peça entre a Torre e o destino
+ return false;
+ }
+ }
+ }
+
+ if(this.getTabuleiro().getPeca(nx, ny) != null) { // Caso a posição de destino não esteja vazia
+ if(!this.getTabuleiro().getPeca(nx, ny).getCorDono().equals(this.getCorDono())) { // Peça inimiga
+ return this._make_move(destino);
+ }
+ else
+ return false;
+ }
+ else { // Caso a posição de destino esteja vazia
+ return this._make_move(destino);
+ }
+ }
+
+ public Torre(String corDono, Tabuleiro tabuleiro, String posicao){
+ super(corDono, tabuleiro, posicao);
+ if(corDono.equals("branca"))
+ setLabel("R");
+ else
+ setLabel("r");
+ }
+}
diff --git a/Projeto/fen/basic.fen b/Projeto/fen/basic.fen
new file mode 100644
index 0000000..f9c9ce2
--- /dev/null
+++ b/Projeto/fen/basic.fen
@@ -0,0 +1 @@
+rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
diff --git a/README.md b/README.md
index 42f50f0..f40fcd7 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,5 @@
-Daniel
\ No newline at end of file
+# Student
+Daniel da Cruz Vieira
+
+# RA
+260398
diff --git a/lab02/Cliente.java b/lab02/Cliente.java
new file mode 100644
index 0000000..ea1d892
--- /dev/null
+++ b/lab02/Cliente.java
@@ -0,0 +1,132 @@
+public class Cliente {
+ // Atributos
+ private String nome;
+ private String cpf;
+ private String dataNascimento;
+ private int idade;
+ private String endereco;
+
+ // Método construtor
+ public Cliente(String nome, String cpf, String dataNascimento, int idade, String endereco) {
+ this.nome = nome;
+ this.cpf = cpf;
+ this.dataNascimento = dataNascimento;
+ this.idade = idade;
+ this.endereco = endereco;
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setCPF(String cpf) {
+ this.cpf = cpf;
+ }
+
+ public void setDataNascimento(String dataNascimento) {
+ this.dataNascimento = dataNascimento;
+ }
+
+ public void setIdade(int idade) {
+ this.idade = idade;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getCPF() {
+ return cpf;
+ }
+
+ public String getDataNascimento() {
+ return dataNascimento;
+ }
+
+ public int getIdade() {
+ return idade;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public String toString() {
+ String str = "DADOS DO CLINTE\nNome: " + getNome() + "\nCPF: " + getCPF() + "\nData de Nascimento: " + getDataNascimento() + "\nIdade: " + getIdade() + "\nEndereco: " + getEndereco();
+ return str;
+ }
+
+ public int calculaVerificador(String cpf, int n) {
+ // Função auxiliar à função validarCPF responsável por calcular os digitos verificadores do CPF
+ // O parâmetro n indica quantos dígitos do CPF serão usados no cálculo (8 para o 1º dígito e 9 para o 2°)
+
+ int digito; /* variável que armazena cada índice do CPF */
+ int multiplicador = 2; /* variável auxiliar responável por armazenar o valor ao qual cada dígito será multiplicado */
+ int soma = 0; /* variável responsável por quantabilizar a soma dos produtos de cada dígito pelo multiplicador */
+ int resto; /* resto da divisão de soma por 11 */
+
+ for (int i = n; i >= 0; i--) {
+ digito = (int) cpf.charAt(i) - 48;
+ digito *= multiplicador;
+ multiplicador++;
+ soma += digito;
+ }
+ resto = soma % 11;
+ if (resto < 2) {
+ return -1;
+ }
+ else {
+ return 11 - resto;
+ }
+ }
+
+ public boolean validarCPF(String cpf) {
+ cpf = cpf.replaceAll("[^0-9]+", ""); /* elimina todos os dígitos não numéricos */
+
+ if (cpf.length() != 11) {
+ // verifica se o CPF digitado não possui 11 dígitos
+ return false;
+ }
+
+ int contador = 0; /* conta se todos os dígitos do CPF são iguais */
+ for (int i = 0; i < cpf.length(); i++) {
+ if (cpf.charAt(i) == cpf.charAt(0)) {
+ contador++;
+ }
+ }
+ if (contador == 11) {
+ return false;
+ }
+
+ // Calculando o 1° dígito verificador
+ int verificador1 = calculaVerificador(cpf, 8);
+ if (verificador1 == -1) {
+ if (cpf.charAt(9) != '0') {
+ return false;
+ }
+ }
+ else {
+ if (verificador1 != ((int) cpf.charAt(9) - 48)) {
+ return false;
+ }
+ }
+
+ // Calculando o 2° dígito verificador
+ int verificador2 = calculaVerificador(cpf, 9);
+ if (verificador2 == -1 && cpf.charAt(10) != '0') {
+ return false;
+ }
+ else {
+ if (verificador2 != ((int) cpf.charAt(10) - 48)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/lab02/Main.java b/lab02/Main.java
new file mode 100644
index 0000000..75ba6af
--- /dev/null
+++ b/lab02/Main.java
@@ -0,0 +1,56 @@
+import java.util.Scanner;
+
+public class Main {
+ public static void main(String args[]) {
+ // Testando os métodos da classe Cliente
+ Cliente cliente = new Cliente("Daniel", "464.236.448-02", "15/09/2004", 18, "Rua Pitágoras 123");
+ System.out.println(cliente);
+ System.out.println(cliente.validarCPF(cliente.getCPF()));
+ if (cliente.validarCPF(cliente.getCPF()) == false)
+ System.out.println("CPF inválido.");
+ System.out.println();
+
+ // Testando os métodos da classe Seguradora
+ Seguradora seguradora = new Seguradora("Unicamp Seguros", "11999981571", "seguros@dac.unicamp.br", "DAC");
+ System.out.println(seguradora);
+ System.out.println();
+
+ // Testando os métodos da classe Sinistro
+ Sinistro sinistro = new Sinistro();
+ System.out.println("DADOS DO SINISTRO");
+ sinistro.setData("23/03/2023");
+ sinistro.setId(1);
+ sinistro.setEndereco("Rua Alfredo Pujol 321");
+ System.out.println("Data: " +sinistro.getData());
+ System.out.println("ID: " +sinistro.getId());
+ System.out.println("Endereco: " +sinistro.getEndereco());
+ System.out.println();
+
+ // Criando um segundo objeto da classe sinistro para um melhor teste do método setId
+ Sinistro sinistro2 = new Sinistro();
+ System.out.println("DADOS DO SEGUNDO SINISTRO");
+ sinistro2.setData("17/06/2004");
+ sinistro2.setId(1);
+ sinistro2.setEndereco("Rua Leôncio de Magalhães");
+ System.out.println("Data: " +sinistro.getData());
+ System.out.println("ID: " +sinistro.getId());
+ System.out.println("Endereco: " +sinistro.getEndereco());
+ System.out.println();
+
+ // Testando os métodos da classe Veiculo
+ Scanner in = new Scanner(System.in);
+ Veiculo veiculo = new Veiculo();
+ System.out.println("DADOS DO VEICULO");
+ System.out.print("Digite a marca do veiculo: ");
+ veiculo.setMarca(in.nextLine());
+ System.out.print("Digite o modelo do veiculo: ");
+ veiculo.setModelo(in.nextLine());
+ System.out.print("Digite a placa do veiculo: ");
+ veiculo.setPlaca(in.nextLine());
+ System.out.println("Marca: " +veiculo.getMarca());
+ System.out.println("Modelo: " +veiculo.getModelo());
+ System.out.println("Placa: " +veiculo.getPlaca());
+
+ in.close();
+ }
+}
diff --git a/lab02/Seguradora.java b/lab02/Seguradora.java
new file mode 100644
index 0000000..67fbbee
--- /dev/null
+++ b/lab02/Seguradora.java
@@ -0,0 +1,53 @@
+public class Seguradora {
+ // Atributos
+ private String nome;
+ private String telefone;
+ private String email;
+ private String endereco;
+
+ // Método construtor
+ public Seguradora(String nome, String telefone, String email, String endereco) {
+ this.nome = nome;
+ this.telefone = telefone;
+ this.email = email;
+ this.endereco = endereco;
+ }
+
+ // Setters e getters
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+
+ public String toString() {
+ String str = "DADOS DA SEGURADORA\nNome: " + getNome() + "\nTelefone: " + getTelefone() + "\nEmail: " + getEmail() + "\nEndereco: " +getEndereco();
+ return str;
+ }
+}
\ No newline at end of file
diff --git a/lab02/Sinistro.java b/lab02/Sinistro.java
new file mode 100644
index 0000000..b9f0481
--- /dev/null
+++ b/lab02/Sinistro.java
@@ -0,0 +1,44 @@
+import java.util.Random;
+
+public class Sinistro {
+ // Atributos
+ private int id;
+ private String data;
+ private String endereco;
+
+ // Método construtor
+ public Sinistro(int id, String data, String endereco) {
+ this.id = id;
+ this.data = data;
+ this.endereco = endereco;
+ }
+
+ public Sinistro() {
+ }
+
+ // Setters e getters
+ public void setId(int id) {
+ Random aleatorio = new Random();
+ this.id = aleatorio.nextInt(100000000);
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public void setEndereco(String endereco) {
+ this.endereco = endereco;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public String getEndereco() {
+ return endereco;
+ }
+}
\ No newline at end of file
diff --git a/lab02/Veiculo.java b/lab02/Veiculo.java
new file mode 100644
index 0000000..bf441af
--- /dev/null
+++ b/lab02/Veiculo.java
@@ -0,0 +1,41 @@
+public class Veiculo {
+ // Atributos
+ private String placa;
+ private String marca;
+ private String modelo;
+
+ // Método construtor
+ public Veiculo(String placa, String marca, String modelo) {
+ this.placa = placa;
+ this.marca = marca;
+ this.modelo = modelo;
+ }
+
+ public Veiculo() {
+ }
+
+ // Setters e getters
+ public void setPlaca(String placa) {
+ this.placa = placa;
+ }
+
+ public void setMarca(String marca) {
+ this.marca = marca;
+ }
+
+ public void setModelo(String modelo) {
+ this.modelo = modelo;
+ }
+
+ public String getPlaca() {
+ return placa;
+ }
+
+ public String getMarca() {
+ return marca;
+ }
+
+ public String getModelo() {
+ return modelo;
+ }
+}
\ No newline at end of file