From 8bb2ded3f8f4d11af891e691d9579208883fe7cc Mon Sep 17 00:00:00 2001 From: 250413 <250413@192.168.149.226> Date: Mon, 11 May 2026 11:36:40 +0100 Subject: [PATCH] fazendo os sistemas de clientes e do admin --- .../mavenproject25/Mavenproject25.java | 947 ++++++++++++++++-- 1 file changed, 844 insertions(+), 103 deletions(-) diff --git a/src/main/java/com/mycompany/mavenproject25/Mavenproject25.java b/src/main/java/com/mycompany/mavenproject25/Mavenproject25.java index 90477de..128890b 100644 --- a/src/main/java/com/mycompany/mavenproject25/Mavenproject25.java +++ b/src/main/java/com/mycompany/mavenproject25/Mavenproject25.java @@ -10,6 +10,7 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.security.SecureRandom; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; @@ -19,7 +20,7 @@ import java.util.logging.Logger; * @author 250413 */ public class Mavenproject25 { - + public static void main(String[] args) { Scanner scanner = new Scanner(System.in); boolean desligar = false; @@ -30,21 +31,18 @@ public class Mavenproject25 { " Seleciona uma das opções\n" + "══════════════════════════════════════\n" + " [1] Contas clientes\n" + - " [2] Emissão de cheques/letras\n" + - " [3] Moeda\n" + - " [4] Sair\n" + + " [2] Login\n" + + " [3] Sair\n" + "══════════════════════════════════════" + "\n"); int opcao = scanner.nextInt(); switch (opcao) { - case 1 -> - contasClientes(); + case 1 -> acessoContaCliente(); + // case 2 -> -// case 3 -> - - case 4 -> desligar = true; + case 3 -> desligar = true; default -> System.out.println("Opção inválida"); } @@ -208,44 +206,527 @@ public class Mavenproject25 { * *****************************************opções da conta dos clientes**************************************************** */ - - - public static void contasClientes() { - Scanner scanner = new Scanner(System.in); - boolean sair = false; - while (true) { - - - System.out.println("\n" - - + "╔════════════════════════════════════╗\n" + - "║ Introduza opção: ║\n" + - "╠════════════════════════════════════╣\n" + - "║ ▸ 1 Adicionar cliente ║\n" + - "║ ▸ 2 Mostrar todos os clientes ║\n" + - "║ ▸ 3 Procurar cliente ║\n" + - "║ ▸ 4 Sair ║\n" + - "╚════════════════════════════════════╝" - + "\n"); - - int opcaoCliente = scanner.nextInt(); - switch (opcaoCliente) { - case 1 -> - adicionarNovoCliente(); - case 2 -> - mostrarTodosClientes(); - case 3 -> procurarCliente(); - case 4 -> sair = true; - - default -> - System.out.println("Opção invalida"); - } - if (sair) { - break; - } +private static String[] procurarClientePorId(String id) { + String nomeFicheiro = "clientes.txt"; + + if (getNumeroLinhasFicheiro(nomeFicheiro) == 0) { + return null; + } + + String[] nome = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] idTitular = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] numeroTel = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] email = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] nif = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] saldoTxt = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + + leExtraiCsvFicheiro(nomeFicheiro, nome, idTitular, numeroTel, email, nif, saldoTxt); + + for (int i = 0; i < idTitular.length; i++) { + if (idTitular[i].equals(id)) { + return new String[]{nome[i], idTitular[i], numeroTel[i], email[i], nif[i], saldoTxt[i]}; } } + return null; +} + +private static void acessoContaCliente() { + Scanner scanner = new Scanner(System.in); + + System.out.print("Digite o seu ID de cliente: "); + String id = scanner.nextLine(); + + String[] dadosCliente = procurarClientePorId(id); + + if (dadosCliente != null) { + System.out.println("\n Login realizado com sucesso!"); + menuClienteLogado(dadosCliente); + } else { + System.out.println(" Cliente não encontrado! Verifique o ID."); + } +} + +private static void menuClienteLogado(String[] dadosCliente) { + Scanner scanner = new Scanner(System.in); + boolean sair = false; + + double saldo = Double.parseDouble(dadosCliente[5]); + + while (!sair) { + System.out.printf("\n" + + "╔════════════════════════════════════════╗\n" + + "║ BEM-VINDO, %-15s ║\n" + + "╠════════════════════════════════════════╣\n" + + "║ SEU SALDO: €%.2f ║\n" + + "╠════════════════════════════════════════╣\n" + + "║ ▸ 1 Consultar meus dados ║\n" + + "║ ▸ 2 Transferir dinheiro ║\n" + + "║ ▸ 3 Depositar dinheiro ║\n" + + "║ ▸ 4 Levantar dinheiro ║\n" + + "║ ▸ 5 Sair ║\n" + + "╚════════════════════════════════════════╝\n", + dadosCliente[0], saldo); + + int opcao = scanner.nextInt(); + + switch (opcao) { + case 1: + mostrarDadosCliente(dadosCliente); + break; + case 2: + saldo = transferirDinheiro(dadosCliente[1], saldo); + atualizarSaldoCliente(dadosCliente[1], saldo); + break; + case 3: + saldo = depositarDinheiro(saldo); + atualizarSaldoCliente(dadosCliente[1], saldo); + break; + case 4: + saldo = levantarDinheiro(saldo); + atualizarSaldoCliente(dadosCliente[1], saldo); + break; + case 5: + sair = true; + System.out.println("A sair da conta..."); + break; + default: + System.out.println("Opção inválida!"); + } + } +} + private static void mostrarDadosCliente(String[] dados) { + System.out.println("\n╔════════════════════════════════════════╗"); + System.out.println("║ SEUS DADOS PESSOAIS ║"); + System.out.println("╠════════════════════════════════════════╣"); + System.out.printf("║ Nome: %-25s ║\n", dados[0]); + System.out.printf("║ ID: %-25s ║\n", dados[1]); + System.out.printf("║ Telefone: %-25s ║\n", dados[2]); + System.out.printf("║ Email: %-25s ║\n", dados[3]); + System.out.printf("║ NIF: %-25s ║\n", dados[4]); + System.out.printf("║ Saldo: €%-24s ║\n", dados[5]); + System.out.println("╚════════════════════════════════════════╝\n"); +} + + private static double transferirDinheiro(String idOrigem, double saldoOrigem) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Digite o ID do cliente destinatário: "); + String idDestino = scanner.nextLine(); + + if (idDestino.equals(idOrigem)) { + System.out.println("Não pode transferir para si mesmo!"); + return saldoOrigem; + } + + System.out.print("Digite o valor a transferir: €"); + double valor = scanner.nextDouble(); + + if (valor <= 0) { + System.out.println("Valor inválido!"); + return saldoOrigem; + } + + if (valor > saldoOrigem) { + System.out.println("Saldo insuficiente!"); + return saldoOrigem; + } + + String[] dadosDestino = procurarClientePorId(idDestino); + + if (dadosDestino == null) { + System.out.println("Cliente destinatário não encontrado!"); + return saldoOrigem; + } + + double saldoDestino = Double.parseDouble(dadosDestino[5]) + valor; + saldoOrigem -= valor; + + atualizarSaldoCliente(idDestino, saldoDestino); + atualizarSaldoCliente(idOrigem, saldoOrigem); + + System.out.printf("Transferência de €%.2f realizada com sucesso!\n", valor); + System.out.printf("Novo saldo: €%.2f\n", saldoOrigem); + + return saldoOrigem; +} + + private static double depositarDinheiro(double saldo) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Digite o valor a depositar: €"); + double valor = scanner.nextDouble(); + + if (valor <= 0) { + System.out.println("Valor inválido!"); + return saldo; + } + + saldo += valor; + System.out.printf("Depósito de €%.2f realizado com sucesso!\n", valor); + System.out.printf("Novo saldo: €%.2f\n", saldo); + + return saldo; +} + + private static double levantarDinheiro(double saldo) { + Scanner scanner = new Scanner(System.in); + + System.out.print("Digite o valor a levantar: €"); + double valor = scanner.nextDouble(); + + if (valor <= 0) { + System.out.println("Valor inválido!"); + return saldo; + } + + if (valor > saldo) { + System.out.println("Saldo insuficiente!"); + return saldo; + } + + if (saldo - valor < 60) { + System.out.println("Operação não permitida! Saldo mínimo de 60€ deve ser mantido."); + return saldo; + } + + saldo -= valor; + System.out.printf("Levantamento de €%.2f realizado com sucesso!\n", valor); + System.out.printf("Novo saldo: €%.2f\n", saldo); + + return saldo; +} + + private static void atualizarSaldoCliente(String id, double novoSaldo) { + String nomeFicheiro = "clientes.txt"; + + String[] nome = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] idTitular = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] numeroTel = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] email = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] nif = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] saldoTxt = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + + leExtraiCsvFicheiro(nomeFicheiro, nome, idTitular, numeroTel, email, nif, saldoTxt); + + StringBuilder novoConteudo = new StringBuilder(); + for (int i = 0; i < idTitular.length; i++) { + if (idTitular[i].equals(id)) { + saldoTxt[i] = Double.toString(novoSaldo); + } + novoConteudo.append(nome[i]).append(",") + .append(idTitular[i]).append(",") + .append(numeroTel[i]).append(",") + .append(email[i]).append(",") + .append(nif[i]).append(",") + .append(saldoTxt[i]).append("\n"); + } + + escreveNoFicheiro(novoConteudo.toString(), nomeFicheiro); +} +// ==================== ÁREA DO ADMIN ==================== + +private static final String ADMIN_USERNAME = "admin123"; +private static final String ADMIN_PASSWORD = "admin123"; + +private static void areaAdmin() { + Scanner scanner = new Scanner(System.in); + + System.out.println("\n╔════════════════════════════════════════╗"); + System.out.println("║ LOGIN DE ADMIN ║"); + System.out.println("╚════════════════════════════════════════╝"); + + System.out.print("Usuário: "); + String username = scanner.next(); + + System.out.print("Senha: "); + String password = scanner.next(); + + if (username.equals(ADMIN_USERNAME) && password.equals(ADMIN_PASSWORD)) { + System.out.println("Login de admin realizado com sucesso!\n"); + menuAdmin(); + } else { + System.out.println("Credenciais inválidas! Acesso negado."); + } +} + +private static void menuAdmin() { + Scanner scanner = new Scanner(System.in); + boolean sair = false; + + while (!sair) { + System.out.println("\n" + + "╔════════════════════════════════════════╗\n" + + "║ PAINEL DE ADMIN ║\n" + + "╠════════════════════════════════════════╣\n" + + "║ ▸ 1 Listar todos os clientes ║\n" + + "║ ▸ 2 Procurar cliente ║\n" + + "║ ▸ 3 Editar dados de cliente ║\n" + + "║ ▸ 4 Remover cliente ║\n" + + "║ ▸ 5 Estatísticas do sistema ║\n" + + "║ ▸ 6 Sair ║\n" + + "╚════════════════════════════════════════╝\n"); + + int opcao = scanner.nextInt(); + + switch (opcao) { + case 1: + mostrarTodosClientes(); + break; + case 2: + procurarClienteAdmin(); + break; + case 3: + editarClienteAdmin(); + break; + case 4: + removerCliente(); + break; + case 5: + mostrarEstatisticas(); + break; + case 6: + sair = true; + break; + default: + System.out.println("Opção inválida!"); + } + } +} +private static void procurarClienteAdmin() { + Scanner scanner = new Scanner(System.in); + + System.out.print("Digite o nome, ID ou telefone do cliente: "); + String termo = scanner.nextLine(); + + String nomeFicheiro = "clientes.txt"; + + if (getNumeroLinhasFicheiro(nomeFicheiro) == 0) { + System.out.println("Nenhum cliente cadastrado."); + return; + } + + String[] nome = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] idTitular = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] numeroTel = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] email = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] nif = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] saldoTxt = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + + leExtraiCsvFicheiro(nomeFicheiro, nome, idTitular, numeroTel, email, nif, saldoTxt); + + boolean encontrado = false; + + for (int i = 0; i < nome.length; i++) { + if (nome[i].toLowerCase().contains(termo.toLowerCase()) || + idTitular[i].equals(termo) || + numeroTel[i].equals(termo)) { + + System.out.println("\n╔════════════════════════════════════════╗"); + System.out.println("║ CLIENTE ENCONTRADO ║"); + System.out.println("╠════════════════════════════════════════╣"); + System.out.printf("║ Nome: %-25s ║\n", nome[i]); + System.out.printf("║ ID: %-25s ║\n", idTitular[i]); + System.out.printf("║ Telefone: %-25s ║\n", numeroTel[i]); + System.out.printf("║ Email: %-25s ║\n", email[i]); + System.out.printf("║ NIF: %-25s ║\n", nif[i]); + System.out.printf("║ Saldo: €%-24s ║\n", saldoTxt[i]); + System.out.println("╚════════════════════════════════════════╝\n"); + encontrado = true; + } + } + + if (!encontrado) { + System.out.println("❌ Cliente não encontrado."); + } +} + +private static void editarClienteAdmin() { + Scanner scanner = new Scanner(System.in); + + System.out.print("Digite o ID do cliente que deseja editar: "); + String id = scanner.nextLine(); + + String[] dadosCliente = procurarClientePorId(id); + + if (dadosCliente == null) { + System.out.println("❌ Cliente não encontrado!"); + return; + } + + System.out.println("\n--- Editando cliente: " + dadosCliente[0] + " ---"); + + System.out.print("Novo nome (atual: " + dadosCliente[0] + "): "); + String novoNome = scanner.nextLine(); + if (!novoNome.isEmpty()) dadosCliente[0] = novoNome; + + System.out.print("Novo telefone (atual: " + dadosCliente[2] + "): "); + String novoTelefone = scanner.nextLine(); + if (!novoTelefone.isEmpty()) { + if (novoTelefone.length() == 9 && novoTelefone.matches("\\d+")) { + if (!telefoneJaExiste(novoTelefone) || dadosCliente[2].equals(novoTelefone)) { + dadosCliente[2] = novoTelefone; + } else { + System.out.println("❌ Telefone já existe! Mantido o original."); + } + } else { + System.out.println("❌ Telefone inválido! Mantido o original."); + } + } + + System.out.print("Novo email (atual: " + dadosCliente[3] + "): "); + String novoEmail = scanner.nextLine(); + if (!novoEmail.isEmpty() && verificarEmail(novoEmail)) { + dadosCliente[3] = novoEmail; + } else if (!novoEmail.isEmpty()) { + System.out.println("❌ Email inválido! Mantido o original."); + } + + atualizarClienteCompleto(dadosCliente); + System.out.println("✅ Cliente atualizado com sucesso!"); +} + +private static void removerCliente() { + Scanner scanner = new Scanner(System.in); + + System.out.print("Digite o ID do cliente que deseja remover: "); + String id = scanner.nextLine(); + + String nomeFicheiro = "clientes.txt"; + + if (getNumeroLinhasFicheiro(nomeFicheiro) == 0) { + System.out.println("Nenhum cliente cadastrado."); + return; + } + + String[] nome = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] idTitular = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] numeroTel = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] email = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] nif = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] saldoTxt = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + + leExtraiCsvFicheiro(nomeFicheiro, nome, idTitular, numeroTel, email, nif, saldoTxt); + + int indiceRemover = -1; + for (int i = 0; i < idTitular.length; i++) { + if (idTitular[i].equals(id)) { + indiceRemover = i; + break; + } + } + + if (indiceRemover == -1) { + System.out.println("Cliente não encontrado!"); + return; + } + + System.out.print("Tem certeza que deseja remover o cliente " + nome[indiceRemover] + "? (s/n): "); + String confirmacao = scanner.nextLine(); + + if (confirmacao.equalsIgnoreCase("s")) { + StringBuilder novoConteudo = new StringBuilder(); + for (int i = 0; i < nome.length; i++) { + if (i != indiceRemover) { + novoConteudo.append(nome[i]).append(",") + .append(idTitular[i]).append(",") + .append(numeroTel[i]).append(",") + .append(email[i]).append(",") + .append(nif[i]).append(",") + .append(saldoTxt[i]).append("\n"); + } + } + escreveNoFicheiro(novoConteudo.toString(), nomeFicheiro); + System.out.println("Cliente removido com sucesso!"); + } else { + System.out.println("Operação cancelada."); + } +} + +private static void mostrarEstatisticas() { + String nomeFicheiro = "clientes.txt"; + int numClientes = getNumeroLinhasFicheiro(nomeFicheiro); + + if (numClientes == 0) { + System.out.println("Nenhum cliente cadastrado."); + return; + } + + String[] nome = new String[numClientes]; + String[] idTitular = new String[numClientes]; + String[] numeroTel = new String[numClientes]; + String[] email = new String[numClientes]; + String[] nif = new String[numClientes]; + String[] saldoTxt = new String[numClientes]; + + leExtraiCsvFicheiro(nomeFicheiro, nome, idTitular, numeroTel, email, nif, saldoTxt); + + double saldoTotal = 0; + double saldoMinimo = Double.MAX_VALUE; + double saldoMaximo = Double.MIN_VALUE; + String clienteSaldoMinimo = ""; + String clienteSaldoMaximo = ""; + + for (int i = 0; i < numClientes; i++) { + double saldo = Double.parseDouble(saldoTxt[i]); + saldoTotal += saldo; + + if (saldo < saldoMinimo) { + saldoMinimo = saldo; + clienteSaldoMinimo = nome[i]; + } + if (saldo > saldoMaximo) { + saldoMaximo = saldo; + clienteSaldoMaximo = nome[i]; + } + } + + double saldoMedio = saldoTotal / numClientes; + + System.out.println("\n╔════════════════════════════════════════════════════════════════╗"); + System.out.println("║ ESTATÍSTICAS DO SISTEMA ║"); + System.out.println("╠════════════════════════════════════════════════════════════════╣"); + System.out.printf("║ %-58s ║\n", "Total de clientes: " + numClientes); + System.out.printf("║ %-58s ║\n", String.format("Saldo total do banco: €%.2f", saldoTotal)); + System.out.printf("║ %-58s ║\n", String.format("Saldo médio por cliente: €%.2f", saldoMedio)); + System.out.printf("║ %-58s ║\n", String.format("Cliente com maior saldo: %s (€%.2f)", clienteSaldoMaximo, saldoMaximo)); + System.out.printf("║ %-58s ║\n", String.format("Cliente com menor saldo: %s (€%.2f)", clienteSaldoMinimo, saldoMinimo)); + System.out.println("╚════════════════════════════════════════════════════════════════╝\n"); +} + +private static void atualizarClienteCompleto(String[] dados) { + String nomeFicheiro = "clientes.txt"; + + String[] nome = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] idTitular = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] numeroTel = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] email = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] nif = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] saldoTxt = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + + leExtraiCsvFicheiro(nomeFicheiro, nome, idTitular, numeroTel, email, nif, saldoTxt); + + StringBuilder novoConteudo = new StringBuilder(); + for (int i = 0; i < idTitular.length; i++) { + if (idTitular[i].equals(dados[1])) { + novoConteudo.append(dados[0]).append(",") + .append(dados[1]).append(",") + .append(dados[2]).append(",") + .append(dados[3]).append(",") + .append(dados[4]).append(",") + .append(dados[5]).append("\n"); + } else { + novoConteudo.append(nome[i]).append(",") + .append(idTitular[i]).append(",") + .append(numeroTel[i]).append(",") + .append(email[i]).append(",") + .append(nif[i]).append(",") + .append(saldoTxt[i]).append("\n"); + } + } + + escreveNoFicheiro(novoConteudo.toString(), nomeFicheiro); +} public static boolean verificarNIF(String nif) { // Verificar se tem 9 dígitos if (!nif.matches("\\d{9}")) { @@ -413,70 +894,330 @@ public static void editarDinheiroCliente() { } return vrSaldo; } + private static String gerarID() { + boolean idFeito = true; + while(true){ + String CARACTERES = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + "abcdefghijklmnopqrstuvwxyz" + + "0123456789"; + SecureRandom random = new SecureRandom(); + + StringBuilder idNum = new StringBuilder(6); + + for (int i = 0; i < 6; i++) { + int indice = random.nextInt(CARACTERES.length()); + idNum.append(CARACTERES.charAt(indice)); + } + // ver se id já existe + String idTxt = idNum.toString(); + if(!idJaExiste(idTxt)){ + return idTxt; +// } + } +} +private static boolean nifJaExiste(String nif) { + String nomeFicheiro = "clientes.txt"; + + // 1. Começamos assumindo que NÃO existe + try (BufferedReader reader = new BufferedReader(new FileReader(nomeFicheiro))) { + String linha; + while ((linha = reader.readLine()) != null) { + String[] campos = linha.split(","); + + // 2. Verificamos se a linha tem dados e se o NIF coincide + if (campos.length > 0 && campos[0].trim().equals(nif.trim())) { + return true; // Encontrou? Retorna imediatamente e fecha o reader + } + } + } catch (IOException e) { + // Opcional: imprimir erro para saber por que a leitura falhou + System.err.println("Erro ao ler o ficheiro: " + e.getMessage()); + } + + return false; // Se percorreu tudo e não achou, retorna false +} + + + private static boolean idJaExiste(String idTxt) { + String nomeFicheiro = "clientes.txt"; + + if (getNumeroLinhasFicheiro(nomeFicheiro) == 0) { + return false; + } + + String[] ids = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp1 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp2 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp3 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp4 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp5 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + + leExtraiCsvFicheiro(nomeFicheiro, temp1, ids, temp2, temp3, temp4, temp5); + + for (String idExistente : ids) { + if (idExistente.equals(idTxt)) { + return true; + } + } + return false; + } + + + private static boolean telefoneJaExiste(String telefone) { + String nomeFicheiro = "clientes.txt"; + + if (getNumeroLinhasFicheiro(nomeFicheiro) == 0) { + return false; + } + + String[] telefones = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp1 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp2 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp3 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp4 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + String[] temp5 = new String[getNumeroLinhasFicheiro(nomeFicheiro)]; + + leExtraiCsvFicheiro(nomeFicheiro, temp1, temp2, telefones, temp3, temp4, temp5); + + for (String telefoneExistente : telefones) { + if (telefoneExistente.equals(telefone)) { + return true; + } + } + return false; + } + + + private static void adicionarNovoCliente() { Scanner scanner = new Scanner(System.in); - System.out.print("\n" - + "╔════════════════════════════════════════\n" - + "║Introduza o nome: "); - String nome = scanner.next(); - System.out.print("╠════════════════════════════════════════\n"); - System.out.print("║Introduza o ID: "); - String idTitular = scanner.next(); - System.out.print("╠════════════════════════════════════════\n"); - - String nif; - System.out.print("║Introduza NIF: "); - nif = scanner.next(); - - while(!verificarNIF(nif)) { - System.out.println("║NIF inválido!\n" - + "║Introduza NIF novamente:"); - nif = scanner.next(); - System.out.print("╠════════════════════════════════════════\n"); - } - System.out.print("╠════════════════════════════════════════\n"); - System.out.print("║Introduza número: "); - String NumeroTel = scanner.next(); - System.out.print("╠════════════════════════════════════════\n"); - - String email; - System.out.print("║Introduza email: "); - email = scanner.next(); - - while(!verificarEmail(email)) { - System.out.println("║Email inválido!"); - System.out.println("║Introduza email novamente:"); - email = scanner.next(); - System.out.print("╠════════════════════════════════════════\n"); + System.out.print("\n╔════════════════════════════════════════\n"); + System.out.print("║ Introduza o nome: "); + String nome = scanner.nextLine(); + + String idTitular = gerarID(); + + while (idJaExiste(idTitular)) { + idTitular = gerarID(); + } + + System.out.println("║ ID gerado: " + idTitular); + + String nif; + do { + System.out.print("║ Introduza NIF (9 dígitos): "); + nif = scanner.nextLine(); + + if (!verificarNIF(nif)) { + System.out.println("║ NIF inválido! Deve ter 9 dígitos válidos."); + } else if (nifJaExiste(nif)) { + System.out.println("║ Este NIF já está cadastrado!"); + System.out.println("║ Por favor, insira um NIF diferente."); + nif = ""; + } + } while (!verificarNIF(nif) || nif.isEmpty()); + + String telefone; + do { + System.out.print("║ Introduza telefone (9 dígitos): "); + telefone = scanner.nextLine(); + + if (telefone.length() != 9 || !telefone.matches("\\d+")) { + System.out.println("║ Telefone inválido! Deve ter 9 dígitos."); + } else if (telefoneJaExiste(telefone)) { + System.out.println("║ Este telefone já está cadastrado!"); + System.out.println("║ Por favor, insira um telefone diferente."); + telefone = ""; + } + } while (telefone.isEmpty() || telefone.length() != 9 || !telefone.matches("\\d+")); + + String email; + do { + System.out.print("║ Introduza email: "); + email = scanner.nextLine(); + + if (!verificarEmail(email)) { + System.out.println("║ Email inválido! Deve conter @ e .pt ou .com"); + } + } while (!verificarEmail(email)); + + double saldo; + do { + System.out.print("║ Introduza saldo (mínimo 60€): "); + saldo = scanner.nextDouble(); + scanner.nextLine(); // limpar buffer + + if (saldo < 60) { + System.out.println("║ Saldo mínimo insuficiente! Mínimo 60€."); + } + } while (saldo < 60); - } - System.out.print("╠════════════════════════════════════════\n"); - double saldo; - System.out.print("║Introduza saldo(Min: 60€): "); - saldo = scanner.nextDouble(); - while(verificarSaldo(saldo)) { - System.out.println("║saldo minimo insuficiente"); - System.out.println("║Introduza saldo novamente:"); - saldo = scanner.nextDouble(); - System.out.print("╠════════════════════════════════════════\n"); - } String saldoTxt = Double.toString(saldo); - - System.out.println("║Conta criada co sucesso!"); - System.out.print("╚════════════════════════════════════════\n" - + "\n"); - String cliente = nome + (",") + idTitular + (",") + nif + (",") + NumeroTel + (",") + email + (",") + saldoTxt + ("."); + + System.out.println("║ Conta criada com sucesso!"); + System.out.print("╚════════════════════════════════════════\n\n"); + + // Formato: nome,id,telefone,email,nif,saldo + String cliente = nome + "," + idTitular + "," + telefone + "," + email + "," + nif + "," + saldoTxt + "\n"; adicionaTextoAoFicheiro(cliente, "clientes.txt"); } - - /** - * ****************************************************Moeda**************************************************** - */ - -// private static void moeda(){ -// procurarCliente(); -// -// } - } + // Taxas baseadas no EURO + + static double[] taxas = { + + 1.00, // EUR + + 1.09, // USD + + 169.00, // JPY + + 0.86, // GBP + + 7.90, // CNY + + 1.65, // AUD + + 1.50, // CAD + + 0.98 // CHF + + }; + + // Conversão baseada no EURO + + public static double converter(double valor, int origem, int destino) { + + double valorEUR = valor / taxas[origem]; + + double resultado = valorEUR * taxas[destino]; + + resultado = ((int)(resultado * 100 + 0.50)) / 100.00; + + return resultado; + + } + + public static String simboloMoeda(int moeda) { + + switch (moeda) { + + case 1: + + return "€"; + + case 2: + + return "$"; + + case 3: + + return "¥"; + + case 4: + + return "£"; + + case 5: + + return "¥"; + + case 6: + + return "A$"; + + case 7: + + return "C$"; + + case 8: + + return "Fr"; + + default: + + return ""; + + } + + } + + public static void moeda() { + + Scanner sc = new Scanner(System.in); + + int opcao = 1; + + while (opcao != 0) { + + System.out.println("\n=== MOEDAS DISPONIVEIS === "+ " ⣀⣠⣤⣤⣤⣀⡀"); + System.out.println("1 - EUR — € — European Union "+ " ⣀⣴⣿⣿⠿⠿⠿⠿⢿⣿⣷⠄"); + System.out.println("2 - USD — $ — United States "+ " ⢀⣴⣿⠟⠉⠀⠀⠀⠀⠀⠀⠈⠉⠀"); + System.out.println("3 - JPY — ¥ — Japan "+ " ⣀⣀⣀⣾⣿⣇⣀⣀⣀⣀⣀⣀⣀⣀⠀"); + System.out.println("4 - GBP — £ — United Kingdom "+ " ⠛⠛⢻⣿⣿⠛⠛⠛⠛⠛⠛⠛⠛⠛⠀"); + System.out.println("5 - CNY — ¥ — China "+ " ⣤⣤⣼⣿⣿⣤⣤⣤⣤⣤⣤⣤⣤⣤⠀"); + System.out.println("6 - AUD — A$ — Australia "+ " ⠉⠉⠉⢿⣿⣏⠉⠉⠉⠉⠉⠉⠉⠉⠀"); + System.out.println("7 - CAD — C$ — Canada "+ " ⠈⢻⣿⣦⣀⠀⠀⠀⠀⠀⠀⢀⣀⠀"); + System.out.println("8 - CHF — Fr — Switzerland "+ " ⠉⠻⣿⣿⣶⣶⣶⣶⣿⣿⡿⠃⠀\n" + + " ⠉⠙⠛⠛⠛⠉⠁⠀⠀⠀" ); + + int origem; + while (true) { + System.out.print("\nEscolha a moeda a converter: "); + origem = sc.nextInt(); + if (origem >= 1 && origem <= 8) break; + + System.out.println("Opção invalida. Insira novamente."); + + } + + int destino; + + while (true) { + + System.out.print("Escolhe a moeda pretendida: "); + + destino = sc.nextInt(); + + if (destino >= 1 && destino <= 8) break; + + System.out.println("Opção invalida. Insira novamente."); + + } + + System.out.print("Valor a converter: "); + + double valor = sc.nextDouble(); + + double resultado = converter(valor, origem - 1, destino - 1); + + System.out.println("\n=== RESULTADO ==="); + + System.out.println(valor + " " + + + simboloMoeda(origem) + + + " = " + + + resultado + + + " " + + + simboloMoeda(destino)); + + System.out.println("\n1 - Nova conversão"); + + System.out.println("0 - Sair"); + + System.out.print("Opção: "); + + opcao = sc.nextInt(); + + } + + System.out.println("Programa terminado."); + + } + + } \ No newline at end of file