/// <summary> /// Read and record the CPF of the position i client and returns true, or returns false if CPF already exists. /// </summary> /// <param name="clientsArray"></param> /// <param name="clientIndex"></param> /// <returns></returns> private static bool ReadAndRecordCPF(string[,] clientsArray, int clientIndex) { string message = "Digite o CPF do Cliente:"; while (true) { string cpf = MenuLib.ReadStringValue(message); if (cpf == "") { return(false); } if (!Verifications.CPFValidation(cpf)) { MenuLib.PrintMessage("\nCPF inválido.\n\n" + "Digite um CPF válido ou pressione qualquer tecla para retornar ao Menu."); } else if (!Verifications.CPFAlreadyExists(clientsArray, cpf)) { MenuLib.PrintMessage("\nCPF já cadastrado no nosso banco de dados.\n\n" + "Pressione qualquer tecla para retornar ao Menu."); Console.ReadKey(); return(false); } else { clientsArray[clientIndex, 0] = cpf; return(true); } } }
/// <summary> /// Prints account number and balance. /// </summary> /// <param name="accountsArray"></param> /// <param name="accountIndex"></param> /// <param name="message"></param> public static void ConsultAccounts(decimal[,] accountsArray, decimal cpf) { MenuLib.PrintSubmenu("CONSULTANDO AS CONTAS"); Console.WriteLine("Para o CPF informado ({0}), temos as seguintes contas:", ClientsLib.CPFFormat(CPFDecimalToString(cpf))); decimal totalBalance = 0; for (int i = 0; i < accountsArray.GetLength(0); i++) { if (accountsArray[i, 0] == cpf) { PrintAccount(accountsArray, i); totalBalance += accountsArray[i, 2]; } } if (totalBalance != 0) { Console.WriteLine("\nO balanço total do cliente é: {0:C}\n\n" + "Digite qualquer tecla para retornar ao menu de contas.", totalBalance); } else { Console.WriteLine("O cliente não possui nenhuma conta cadastrada."); } Console.ReadKey(); }
/// <summary> /// Based on CPF input deletes a client. /// </summary> /// <param name="clientsArray"></param> /// <returns></returns> public static string[,] RemoveClient(string[,] clientsArray) { MenuLib.PrintSubmenu("REMOVER CLIENTE"); int clientPosition = Verifications.ReadCPF(clientsArray, "Qual o CPF do cliente que deseja remover?"); if (clientPosition != -1) { Console.Clear(); PrintClient(clientsArray, clientPosition, "Cliente que será removido:"); if (MenuLib.ConfirmationMenu("\nTem certeza que deseja deletar o cliente?")) { if (clientsArray.GetLength(0) - 1 != clientPosition) { clientsArray = ArrayLib.SwapLines(clientsArray, clientPosition, clientsArray.GetLength(0) - 1); } clientsArray = ArrayLib.RemoveLast(clientsArray); MenuLib.PrintMessage("\nO cliente foi deletado. Pressione ENTER para retornar ao menu principal:"); Console.ReadKey(); return(clientsArray); } MenuLib.PrintMessage("\nOperação cancelada.\n\n" + "Pressione ENTER para retornar ao menu principal:"); Console.ReadKey(); } return(clientsArray); }
/// <summary> /// Edits the name or the birth date of a client by searching for it with the CPF. /// </summary> /// <param name="clientsArray"></param> /// <returns></returns> public static string[,] EditClient(string[,] clientsArray) { MenuLib.PrintSubmenu("EDITAR CLIENTE"); int clientPosition = Verifications.ReadCPF(clientsArray, "Qual o CPF do cliente que deseja acessar?"); if (clientPosition != -1) { string[] editMenu = new string[] { "Alterar o nome", "Alterar a data de nascimento", "Retornar ao menu principal" }; MenuLib.PrintSubmenu("EDITAR CLIENTE"); PrintClient(clientsArray, clientPosition, "Cliente a ser alterado:"); MenuLib.PrintOptions(editMenu); string editMenuChoice = MenuLib.ReadOption(editMenu); switch (editMenuChoice) { case "Alterar o nome": ReadAndRecordName(clientsArray, clientPosition, "Digite o novo nome para o cliente:"); break; case "Alterar a data de nascimento": ReadAndRecordBirthDate(clientsArray, clientPosition, "Digite a nova data de nascimento:"); break; case "Retornar ao menu principal": return(clientsArray); } Console.Clear(); PrintClient(clientsArray, clientPosition, "Alteração bem sucedida!"); MenuLib.PrintMessage("\nPressione ENTER para voltar ao menu principal:"); Console.ReadKey(); } return(clientsArray); }
/// <summary> /// Reads birth date, only accepts valid format. Keeps asking until valid format. /// </summary> /// <param name="clientsArray"></param> /// <param name="message"></param> /// <returns></returns> public static string ReadBirthDate(string[,] clientsArray, string message) { while (true) { string birthDateString = MenuLib.ReadStringValue(message); if (DateTime.TryParseExact(birthDateString, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime birthDate)) { return(birthDateString); } message = "A data digitada é inválida. Digite uma data no formato \"DD/MM/AAAA\":"; } }
/// <summary> /// Consults a client and displays information /// </summary> /// <param name="clientsArray"></param> /// <returns></returns> public static void ConsultClient(string[,] clientsArray) { MenuLib.PrintSubmenu("CONSULTAR CLIENTE"); int clientPosition = Verifications.ReadCPF(clientsArray, "Qual o CPF do cliente que deseja consultar?"); if (clientPosition != -1) { Console.Clear(); PrintClient(clientsArray, clientPosition, "Dados do cliente:"); MenuLib.PrintMessage("Pressione qualquer tecla para retornar ao menu principal."); Console.ReadKey(); } }
/// <summary> /// Adds a new client. /// </summary> /// <param name="clientsArray">The string[,] that contains the clients.</param> /// <returns>The string[,] with all clients it had plus the added one, or not, if the CPF already existed.</returns> public static string[,] AddNewClient(string[,] clientsArray) { MenuLib.PrintSubmenu("ADICIONANDO NOVO CLIENTE"); int i = clientsArray.GetLength(0); clientsArray = ArrayLib.AddOneLength(clientsArray); if (ReadAndRecordCPF(clientsArray, i)) { ReadAndRecordName(clientsArray, i); clientsArray = ReadAndRecordBirthDate(clientsArray, i); return(clientsArray); } return(clientsArray); }
/// <summary> /// Adds a new account for the CPF input. Sets it's number to previous + 1 and balance to 50. /// </summary> /// <param name="accountsArray"></param> /// <param name="cpf"></param> /// <returns></returns> public static decimal[,] AddNewAccount(decimal[,] accountsArray, decimal cpf) { MenuLib.PrintSubmenu("CRIANDO NOVA CONTA"); if (MenuLib.ConfirmationMenu("Tem certeza que deseja criar uma nova conta?", "Criar nova conta", "Cancelar")) { int newAccountPosition = accountsArray.GetLength(0); accountsArray = ArrayLib.AddOneLength(accountsArray); accountsArray[newAccountPosition, 0] = cpf; accountsArray[newAccountPosition, 1] = accountsArray[newAccountPosition - 1, 1] + 1; accountsArray[newAccountPosition, 2] = 50; PrintAccount(accountsArray, newAccountPosition, "\nA conta foi criada com sucesso! Confira:"); MenuLib.PrintMessage("\nPressione qualquer tecla para retornar ao menu de contas."); Console.ReadKey(); } return(accountsArray); }
/// <summary> /// Removes account from input cpf. /// </summary> /// <param name="accountsArray"></param> /// <param name="cpf"></param> /// <returns></returns> public static decimal[,] RemoveAccount(decimal[,] accountsArray, decimal cpf) { MenuLib.PrintSubmenu("REMOVER CONTA"); int accountPosition = Verifications.ReadAccount(accountsArray, "Qual o número da conta a ser removida?"); if (accountPosition != -1) { if (Verifications.IsAccountFromCPF(accountsArray, accountPosition, cpf)) { Console.Clear(); PrintAccount(accountsArray, accountPosition, "Conta que será removida:"); if (Verifications.IsAccountZeroed(accountsArray, accountPosition)) { if (MenuLib.ConfirmationMenu("Tem certeza que deseja deletar a conta?")) { if (accountsArray.GetLength(0) - 1 != accountPosition) { accountsArray = ArrayLib.SwapLines(accountsArray, accountPosition, accountsArray.GetLength(0) - 1); } accountsArray = ArrayLib.RemoveLast(accountsArray); MenuLib.PrintMessage("\nA conta foi deletada. Pressione ENTER para retornar ao menu de contas:"); Console.ReadKey(); return(accountsArray); } MenuLib.PrintMessage("\nOperação cancelada pelo usuário.\n\n" + "Pressione ENTER para retornar ao menu de contas:"); Console.ReadKey(); } else { MenuLib.PrintMessage("\nA operação não pôde ser concluída pois há saldo na conta.\n" + "Primeiramente deve ser feito o saque de todo o saldo da conta.\n\n" + "Pressione ENTER para retornar ao menu de contas:"); Console.ReadKey(); } } else { MenuLib.PrintMessage("A operação não pôde ser concluída pois a conta não pertence a este CPF.\n" + "Verifique o número da conta e do CPF digitados e tente novamente.\n\n" + "Pressione ENTER para retornar ao de contas:"); Console.ReadKey(); } } return(accountsArray); }
/// <summary> /// read and record the birth date of the position i client /// </summary> /// <param name="clientsArray"></param> /// <param name="clientIndex"></param> /// <param name="message"></param> private static string[,] ReadAndRecordBirthDate(string[,] clientsArray, int clientIndex, string message) { string birthDate = Verifications.ReadBirthDate(clientsArray, message); if (!Verifications.IsClientUnderage(birthDate)) { clientsArray[clientIndex, 2] = birthDate; MenuLib.PrintMessage("Cliente adicionado com sucesso!\n" + "Pressione qualquer tecla para retornar ao Menu."); Console.ReadKey(); return(clientsArray); } else { clientsArray = ArrayLib.RemoveLast(clientsArray); MenuLib.PrintMessage("O cliente não pôde ser cadastrado por ser menor de idade.\n" + "Operação cancelada. Digite qualquer tecla para retornar ao menu principal:"); Console.ReadKey(); return(clientsArray); } }
/// <summary> /// Reads account input, if found returns position on accountsArray, if not, keeps asking until /// valid input or 0 for exit. /// </summary> /// <param name="accountsArray"></param> /// <param name="message"></param> /// <returns></returns> public static int ReadAccount(decimal[,] accountsArray, string message) { while (true) { decimal target = MenuLib.ReaddecimalValue(message); int accountPosition = ArrayLib.Find_Ordinary(accountsArray, target, 1); if (accountPosition != -1) { return(accountPosition); } else { message = ("A conta digitada não foi encontrada.\n" + "Digite uma conta válida ou entre com o valor 0 para voltar ao menu principal:"); target = MenuLib.ReaddecimalValue(message); if (target == 0) { return(-1); } } } }
/// <summary> /// Displays a message than reads CPF input. /// If it is found in the clienrsArray, returns the position, /// if not, keeps asking for another valid input, unless user types "" to leave. /// </summary> /// <param name="clientsArray"></param> /// <param name="message"></param> /// <returns></returns> public static int ReadCPF(string[,] clientsArray, string message) { string target = MenuLib.ReadStringValue(message); while (true) { int i = ArrayLib.Find_Ordinary(clientsArray, target, 0); if (i != -1) { return(i); } else { target = MenuLib.ReadStringValue("O CPF digitado não foi encontrado.\n" + "Digite um CPF válido ou tecle ENTER para voltar ao menu principal:"); if (target == "") { return(-1); } } } }
/// <summary> /// Prints a message and account number + account balance. /// </summary> /// <param name="accountsArray"></param> /// <param name="accountIndex"></param> /// <param name="message"></param> public static void PrintAccount(decimal[,] accountsArray, int accountIndex, string message) { MenuLib.PrintMessage(message); Console.WriteLine("\nNúmero da conta: {0}\nSaldo da conta: {1:C}", accountsArray[accountIndex, 1], accountsArray[accountIndex, 2]); }
/// <summary> /// Read and record the name of the position i client. /// </summary> /// <param name="clientsArray"></param> /// <param name="clientIndex"></param> /// <param name="message"></param> private static void ReadAndRecordName(string[,] clientsArray, int clientIndex, string message) { clientsArray[clientIndex, 1] = MenuLib.ReadStringValue(message); }
/// <summary> /// Prints a message and then the client data. /// </summary> /// <param name="clientArray"></param> /// <param name="clientIndex"></param> /// <param name="message"></param> public static void PrintClient(string[,] clientArray, int clientIndex, string message) { MenuLib.PrintMessage(message); Console.WriteLine("\nNome: {0}\nCPF: {1}\nData de Nascimento: {2}", clientArray[clientIndex, 1], CPFFormat(clientArray[clientIndex, 0]), clientArray[clientIndex, 2]); }