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 solucao para os desafios

desafio 1)

Dictionary<string, List<int>> tata = new Dictionary<string, List<int>>();
tata.Add("matematica", new List<int>{3 , 5 , 1});
tata.Add("Portugues", new List<int>{6, 4 ,2});
tata.Add("Fisica", new List<int>{1 , 5 , 6 });

void Menu()
{
    Console.WriteLine("Selecione uma opcao para ver notas de tata");
    Console.WriteLine("1 para ver nota de materia especifica");
    Console.WriteLine("2 para ver todas as notas de uma vez");
    int opcao = int.Parse(Console.ReadLine());
    switch(opcao){
        case 1:
        Singular();
        break;
        
        case 2:
        TotalDeTodas();
        break;
    }

}




void TotalDeTodas()
{
    Console.Clear();
    Console.WriteLine("carregando total");
    Thread.Sleep(2000);
    Console.Clear();
    List<int> valor = tata["matematica"];
    double mediaTotal = valor.Average();
    Console.WriteLine(mediaTotal);
}



void Singular()
{
    Console.Clear();
    Console.WriteLine("Escolha qual materia vc deseja ver:");
    foreach(string materias in tata.Keys)
    {
        Console.WriteLine($"{materias}\n");
    }
    Console.WriteLine("digite qual voce deseja olhar");
    string materia = Console.ReadLine();
    if(tata.ContainsKey(materia))
    {
        List<int> notas = tata[materia];
        double media = notas.Average();
        Console.WriteLine($"{media}");
    }
    else
    {
    Console.WriteLine("materia inexistente");
    Thread.Sleep(1000);
    Menu();        
    }
}


Menu();

Desafio 2)

using System.Runtime.InteropServices;

Dictionary<string, List<int>> estoque = new Dictionary<string, List<int>>();
estoque.Add("calcados", new List<int> {40});
estoque.Add("Calcas", new List<int>   {30});
estoque.Add("roupas", new List<int>   {10});

void menu()
{
    Console.WriteLine("Bem vindo a loja de roupas");
    Console.WriteLine("Selecione o produto que voce deseje\n");
    foreach(string i in estoque.Keys)
    {
        Console.WriteLine($"\n {i}");
    }
    string mostrarEstoque = Console.ReadLine();
    if (estoque.ContainsKey(mostrarEstoque))
    {
        
        Console.WriteLine($"Ainda tem {mostrarEstoque}, o total e {estoque[mostrarEstoque]}");
    }
}
menu();	

Desafio 4)

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.Design;

Dictionary<string, List<string>> Usuario = new Dictionary<string, List<string>>();



void Cadastro()
{
    Console.WriteLine("Coloque um email");
    string email = Console.ReadLine();
    Console.WriteLine("Informe uma senha para o Email");
    string senha = Console.ReadLine();
    Usuario.Add(email, new List<string> { senha});
    Thread.Sleep(2000);
    Console.WriteLine("Cadastro realizado com sucesso!");
    Menu();

}
void Logar()
{
    Console.WriteLine("Digite seu email:");
    string emailPassado = Console.ReadLine();
    Console.WriteLine("Digite sua senha:");
    string senhaPassada = Console.ReadLine();
    if (Usuario.ContainsKey(emailPassado) && Usuario[emailPassado].Contains(senhaPassada))
    
    {
        Console.WriteLine("Login realizado com sucesso!");
    }
    else
    {
        Console.WriteLine("Email ou senha incorretos.");
    }Menu();
}

void Menu()
{
    Console.WriteLine("Escolha uma opção:");
    Console.WriteLine("1 - Cadastrar");
    Console.WriteLine("2 - Logar");
    Console.WriteLine("3 - Sair");
    string opcao = Console.ReadLine();
    switch (opcao)
    {
        case "1":
            Cadastro();
            break;
        case "2":
            Logar();
            break;
        case "3":
            break;
    }
}
Menu();
Eu preciso de uma ajuda pra aprender a organizar melhor meu codigo, e queria umas dicas para isso
2 respostas

Oi, Guilherme. Tudo bem com você?

Gostei de você ter compartilhado as soluções dos desafios e, principalmente, de ter criado menus e funções próprias para interagir com os programas. Isso mostra que você não ficou apenas na implementação mais básica da atividade e começou a pensar em como organizar uma aplicação de forma mais próxima de um programa real.

Sobre a organização do código, uma dica importante é separar cada responsabilidade em métodos menores e com nomes que deixem claro o que eles fazem. Você já está aplicando isso em partes como Menu(), Cadastro(), Logar() e Singular(). No desafio 1, por exemplo, o método TotalDeTodas() calcula apenas a média das notas de matemática, então vale revisar esse nome ou a lógica para que os dois representem a mesma responsabilidade. Se a intenção for calcular a média de todas as matérias, seria necessário percorrer o dicionário e considerar as listas correspondentes. No desafio 2, como cada produto possui apenas uma quantidade, um Dictionary<string, int> seria mais adequado do que Dictionary<string, List<int>>. Já no desafio 4, como cada e-mail possui uma única senha, também poderia ser usado Dictionary<string, string>.

Uma forma de praticar essa organização seria imaginar que cada método precisa responder a uma pergunta específica: "qual é a responsabilidade deste método?". Por exemplo, Logar() pode cuidar somente da autenticação, enquanto outro método poderia ficar responsável por exibir o menu. Conforme você avançar em C#, esse tipo de separação vai ficar cada vez mais natural.

Quando você olha para esses três desafios agora, qual método você acha que poderia ser dividido ou reorganizado primeiro para deixar o código mais fácil de entender?

Parabéns pelo trabalho, Guilherme, e obrigado por compartilhar suas soluções com a comunidade. Continue praticando e experimentando diferentes formas de organizar o código. O fórum está à disposição sempre que precisar.

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

Obrigado mesmo, Irei ler os artigos e pretendo treinar mais a minha logica e vou tentar resolver esses problemas e tambem deixar o codigo mais legivel