using System.Globalization;
using System.Text.RegularExpressions;
using System.Collections.Generic;
public static Users users = new Users();
private static void Main(string[] args)
Console.WriteLine("Página de Cadastro");
public static void Menu()
Console.WriteLine("\n----------");
Console.Write("\n1 - Cadastrar usuário");
Console.Write("\n2 - Listar usuários");
Console.Write("\n3 - Sair\n");
Console.Write("\nEscolha uma opção: ");
int x = int.Parse(Console.ReadLine());
public static void NovoCadastro()
Console.WriteLine("\nPara realizar seu cadastro, informe:");
Console.Write("\nNome completo: ");
string name = Console.ReadLine()!;
Console.Write("\nData de nascimento (dd/MM/yyyy): ");
DateTime birthDate = DateTime.ParseExact(Console.ReadLine()!, "dd/MM/yyyy", CultureInfo.InvariantCulture);
ValidateBirthDate(birthDate);
Console.Write("\nEmail (@mastercoin.com.br): ");
string email = Console.ReadLine()!;
Console.Write("\nSenha: ");
string password = Console.ReadLine();
ValidatePassword(password);
AddUser(name, birthDate, email, password);
public static void ListarUsuarios()
Console.WriteLine("Lista de usuários");
foreach (var user in users.ListUsers)
Console.Write("\n" + user.Name + " - " + user.BirthDate.ToString("dd/MM/yyyy") + "\n");
public static DateTime ValidateBirthDate(DateTime birthDate)
if (birthDate > DateTime.Today)
Console.WriteLine("A data informada não pode ser maior que a data atual.");
Console.Write("Informe uma data de nascimento válida: ");
users.BirthDate = DateTime.ParseExact(Console.ReadLine()!,"dd/MM/yyyy", CultureInfo.InvariantCulture);
return ValidateBirthDate(birthDate);
if ((DateTime.Today.Year - birthDate.Year) - (DateTime.Today < birthDate.AddYears(DateTime.Today.Year - birthDate.Year) ? 1 : 0) < 18) {
Console.WriteLine("A data informada não pode ser menor que 18 anos.");
Console.Write("Informe uma data de nascimento válida: ");
birthDate = DateTime.ParseExact(Console.ReadLine()!, "dd/MM/yyyy", CultureInfo.InvariantCulture);
return ValidateBirthDate(birthDate);
return users.BirthDate = birthDate;
public static string ValidateEmail(string email)
string[] emailSplit = email.Split("@");
if (emailSplit[1] != "mastercoin.com.br")
Console.WriteLine("O email deve ser @mastercoin.com.br");
Console.Write("Digite novamente o email (@mastercoin.com.br): ");
email = Console.ReadLine()!;
return ValidateEmail(email);
foreach (var x in users.ListUsers)
Console.WriteLine("O email informado já existe no sistema.");
Console.Write("Informe um email diferente: ");
email = Console.ReadLine()!;
return ValidateEmail(email);
return users.Email = email;
public static string ValidatePassword(string password)
if (password.Length < 8 ||
!Regex.IsMatch(password, "[A-Z]") ||
!Regex.IsMatch(password, "[a-z]") ||
!Regex.IsMatch(password, @"\d") ||
!Regex.IsMatch(password, @"[!-/:-@\[-_{-~]") ||
Regex.IsMatch(password, @"[^\dA-Za-z!-/:-@\[-_{-~]"))
Console.WriteLine("A senha deve conter 8 a 16 dígitos e pelo menos 1 Letra maiúscula, 1 minúscula, 1 número e 1 caracter especial");
Console.Write("Digite novamente a senha: ");
password = Console.ReadLine()!;
return ValidatePassword(password);
return users.Password = password;
public static void AddUser (string name, DateTime birthDate, string email, string password)
users.ListUsers.Add(new Users(name, birthDate, email, password));
public string Name { get; set; }
public DateTime BirthDate { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public List<Users> ListUsers { get; set; } = new List<Users>();
public Users(string name, DateTime birthDate, string email, string password)