Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

Minha solução

Atv 1

// Criar um dicionário que represente um aluno, com uma lista de notas, e mostre a média de suas notas na tela.
Dictionary<string, List<int>> notaAluno = new Dictionary<string, List<int>>();
notaAluno.Add("Leo", new List<int> { 8, 9, 2, 3 });


void ExibirNota()
{
    string aluno = string.Empty;
    int sumNotas = 0;
    int numNotas = 0;

    foreach (var item in notaAluno)
    {
        aluno = item.Key;
        sumNotas = item.Value.Sum();
        numNotas = item.Value.Count();

        Console.WriteLine($"{aluno} obteve {numNotas} nota(s), com a média de {sumNotas / numNotas}.");
        //Exibir media de notas do aluno
    }
}

ExibirNota();

Atv 2

// Criar um programa que gerencie o estoque de uma loja.
// Utilize um dicionário para armazenar produtos e suas quantidades em estoque e mostre,
// a partir do nome de um produto, sua quantidade em estoque.
using System.Globalization;

Dictionary<string, int> dicEstoque = new Dictionary<string, int>();
dicEstoque.Add("Farinha", 50);
dicEstoque.Add("Maçã", 35);
dicEstoque.Add("Ovo", 8);

void ExibirEstoqueProcurado()
{
    Console.Write("Digite o produto procurado: ");
    string nomeProduto = Console.ReadLine();
    int estoqueProduto = 0;

    while (!dicEstoque.TryGetValue(nomeProduto, out estoqueProduto))
    {
        Console.Write($"\nProduto não encontrado.\nDigite novamente: ");
        nomeProduto = Console.ReadLine();
    }
    Console.WriteLine($"\nProduto Encontrado! \nProduto: {nomeProduto}\nEstoque: {estoqueProduto} ");
}

ExibirEstoqueProcurado();

Atv 3

//Crie um programa que implemente um quiz simples de perguntas e respostas.
//Utilize um dicionário para armazenar as perguntas e as respostas corretas.

Dictionary<string, string> dicQuiz = new Dictionary<string, string>
{
    {"Qual é a capital do Brasil?","Brasília"},
    {"Qual a a maior cidade econômica do Brasil?","São Paulo"},
    {"Qual o piloto brasileiro mais lembrando da Fórmula 1?","Ayrton Senna"},
    {"Quanto é 7x5?","35"},
    {"Quantos títulos de copa do mundo o Brasil possui?","5"}
};
int ponto = 0;
string resposta = string.Empty;

Console.WriteLine("Iniciando quiz! Para cada resposta correta, acumula-se 1 ponto.\n");
foreach (var pergunta in dicQuiz)
{

    Console.WriteLine(pergunta.Key);
    resposta = Console.ReadLine();
    if (resposta.ToLower() == pergunta.Value.ToLower())
    {
        Console.WriteLine("Correta resposta!\n");
        ponto++;
    }
    else
    {
        Console.WriteLine($"Resposta incorreta! O correto é: {pergunta.Value}.\n");
    }
}
Console.WriteLine($"Quiz finalizado! Sua pontuação foi de: {ponto} ponto(s)!");
2 respostas

Atv 4

//criar um programa que simule um sistema de login utilizando um dicionário para armazenar nomes de usuário e senhas.
using System;

Dictionary<string, string> dicUser = new Dictionary<string, string>
{
    {"leo.m","matsubara"}
};

void ExibirMenu()
{
    int opcaoEscolhida = 0;
    Console.Write($"Digite a opção desejada:\n(1) Efetuar Login\n(2) Criar um novo usuário\n(3) Sair\nOpção escolhida: ");
    while (!int.TryParse(Console.ReadLine(), out opcaoEscolhida))
    {
        Console.Write("\nDigite uma opção válida: ");
    }
    
    switch (opcaoEscolhida)
    {
        case 1:
            //funcao a criar
            TryLogin();
            break;
        case 2:
            //funcao a criar
            CriarUser();
            break;
        case 3:
            Console.WriteLine("Programa Encerrado");
            break;
        default:
            Console.WriteLine("Opção inexistente, encerrando programa...");
            break;
    }
}

void TryLogin()
{
    string senhaAValidar = string.Empty;
    string userAValidar = string.Empty;

    Console.Clear();
    Console.WriteLine("Bem-Vindo ao menu de login. Por gentileza informe as credenciais abaixo.");
    Console.Write("Nome de usuário: ");
    userAValidar = Console.ReadLine();
    while (!dicUser.ContainsKey(userAValidar))
    {
        Console.Write("Nome de usuário não encontrado, tente novamente: ");
        userAValidar = Console.ReadLine();
    }
    Console.Write("Senha: ");
    senhaAValidar = Console.ReadLine();
    if (dicUser.TryGetValue(userAValidar, out string senhaCheck))
    {
        if (senhaAValidar == senhaCheck)
        {
            Console.WriteLine("Login efetuado com sucesso!");
        }
        else
        {
            Console.WriteLine("Senha incorreta, tente novamente.");
            ExibirMenu();
            Console.Clear();
        }
    }

}

void CriarUser()
{
    Console.Clear();
    Console.Write("Digite o nome de usuário: ");
    string newUser = Console.ReadLine();
    while (dicUser.ContainsKey(newUser))
    {
        Console.Clear();
        Console.WriteLine("Usuário ja existente, utilize outro nome de usuário.");
        Console.Write("\nDigite o nome de usuário: ");
        newUser = Console.ReadLine();
    }
    Console.Write("Digite uma senha: ");
    string newPassword = Console.ReadLine();
    dicUser.Add(newUser, newPassword);
    Console.WriteLine("\nUsuário cadastrado com sucesso!");
    Thread.Sleep(2000);
    Console.Clear();
    ExibirMenu();
}

ExibirMenu();

Olá Leonardo, tudo bem?

Obrigada por compartilhar suas soluções aqui no fórum, com certeza vai ajudar outros alunos que estiverem fazendo as mesmas atividades.

As quatro atividades ficaram muito bem resolvidas. Alguns pontos merecem destaque:

Na Atv 1, o uso de .Sum() e .Count() direto no item.Value deixou o código bem limpo e legível. Uma observação vale para divisão de inteiros: sumNotas / numNotas pode truncar o resultado (por exemplo, 22 / 4 = 5 em vez de 5,5). Considere fazer o cast para double na divisão se quiser a média com casas decimais:

(double)sumNotas / numNotas

Na Atv 2, o uso do TryGetValue dentro do while foi uma escolha elegante para tratar produto não encontrado sem precisar de uma flag auxiliar.

Na Atv 3, o .ToLower() em ambos os lados da comparação foi um cuidado bacana para não penalizar o usuário por letras maiúsculas.

E na Atv 4, a estrutura com menu, login e criação de usuário ficou bem organizada. Vale apenas um ponto de atenção: ao chamar ExibirMenu() recursivamente dentro de TryLogin() e CriarUser(), cada chamada empilha um novo frame de execução. Em uso prolongado, isso pode gerar StackOverflowException. Para produção, o ideal seria substituir por um loop controlado, mas para fins de exercício está totalmente válido.

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade