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