1
resposta

[Projeto] Desafio: hora da prática

var dadosDosUsuarios = new Dictionary<string, string>();

void MenuDoSistemaDeLogin()
{
    Console.Clear();
    Console.WriteLine(@"
    
█▀ █ █▀ ▀█▀ █▀▀ █▀▄▀█ ▄▀█   █▀▄ █▀▀   █░░ █▀█ █▀▀ █ █▄░█
▄█ █ ▄█ ░█░ ██▄ █░▀░█ █▀█   █▄▀ ██▄   █▄▄ █▄█ █▄█ █ █░▀█
");
    Console.WriteLine("Menu de opções\n");
    Console.WriteLine("1 - Fazer login");
    Console.WriteLine("2 - Registrar login");
    Console.WriteLine("3 - Sair");
    Console.Write("\nInforme a opção deseja para continuar: ");
    int opcao = int.Parse(Console.ReadLine()!);
    OpcaoEscolhida(opcao);

}

void OpcaoEscolhida(int opcao)
{
    switch(opcao)
    {
        case 1: FazerLogin();
            break;
        case 2: RegistrarLogin();
            break;
        default: Console.WriteLine("Programa finalizado!");
            break;
    }
}

void FazerLogin()
{
    Console.Clear();
    Console.WriteLine(@"
    
█▀▀ ▄▀█ ▀█ █▀▀ █▀█   █░░ █▀█ █▀▀ █ █▄░█
█▀░ █▀█ █▄ ██▄ █▀▄   █▄▄ █▄█ █▄█ █ █░▀█
");
    Console.Write("Login: ");
    string login = Console.ReadLine()!;
    Console.Write("Senha: ");
    string senha = Console.ReadLine()!;
    ValidarLogin(login, senha);
}

void RegistrarLogin()
{
    Console.Clear();
    Console.WriteLine(@"
    
█▀█ █▀▀ █▀▀ █ █▀ ▀█▀ █▀█ ▄▀█ █▀█   █░░ █▀█ █▀▀ █ █▄░█
█▀▄ ██▄ █▄█ █ ▄█ ░█░ █▀▄ █▀█ █▀▄   █▄▄ █▄█ █▄█ █ █░▀█
");

    Console.WriteLine("\nInforme o nome de usuário desejado:");
    string usuario = Console.ReadLine()!;
    Console.WriteLine("\nSenha:");
    string senha = Console.ReadLine()!;
    Console.WriteLine("\nRepetir senha:");
    string confirmarSenha = Console.ReadLine()!;
    ValidarDados(usuario, senha, confirmarSenha);
    Console.WriteLine("\nRegistro concluido com sucesso!");
    Thread.Sleep(2000);
    MenuDoSistemaDeLogin();
}

void ValidarLogin(string login, string senha)
{
    if (dadosDosUsuarios.TryGetValue(login, out string senhaArmazenada))
    {
        if (senhaArmazenada == senha)
        {
            Console.WriteLine("Login autorizado!");
        } else
        {
            Console.WriteLine("Senha incorreta.");
            Thread.Sleep(2500);
            FazerLogin();
        }
    } else
    {
        Console.WriteLine("Usuário não encotrado.");
        Thread.Sleep(2500);
        FazerLogin();
    }
}

void ValidarDados(string usuario, string senha, string confirmarSenha)
{
    if (dadosDosUsuarios.ContainsKey(usuario))
    {
        Console.WriteLine("O nome de usuário ja esta em uso. Tente outro nome.");
        Thread.Sleep(2500);
        RegistrarLogin();
    } else if (senha == confirmarSenha)
    {
        dadosDosUsuarios.Add(usuario, senha);
    } else
    {
        Console.WriteLine("A senha de confirmação precisa ser igual à senha principal. Corrija e tente novamente.");
        Thread.Sleep(2500);
        RegistrarLogin();
    }
}

MenuDoSistemaDeLogin();
1 resposta

Oii, José Willamys!

Meus parabéns pela resolução do desafio. É empolgante ver como você elevou o nível da atividade, transformando um exercício simples de dicionários em um sistema de login completo e interativo.

A sua implementação demonstra um domínio excelente da linguagem C#. O uso de métodos para organizar as responsabilidades do programa deixa o código muito mais limpo e profissional. E, a escolha do método TryGetValue para validar o login é uma prática de alta performance, pois permite verificar a existência da chave e recuperar o valor em uma única operação.

Para enriquecer sua jornada no C#, vale observar que você utilizou o int.Parse() no menu. Caso o usuário digite uma letra por engano, o programa pode fechar inesperadamente. Uma alternativa interessante seria o int.TryParse(), que permite tratar o erro de digitação sem interromper a execução. Você pode explorar mais sobre isso na documentação oficial sobre conversões de tipos no .NET.

Você conseguiu perceber como o uso de dicionários facilita a busca instantânea por um usuário, sem que você precise percorrer uma lista inteira para encontrar a senha correspondente?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!