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!

1
resposta

[Projeto] Desafio: Hora da prática

class Restaurante
{
    public Mesas Mesas {  get; set; }

    public Pedidos Pedidos { get; set; }
    
}
class Mesas
{
    private Dictionary<byte, string> _statusMesas = new Dictionary<byte, string>
    {
        { 1, "livre" },
        { 2, "ocupada" },
        { 3, "livre" },
        { 4, "reservada" },
        { 5, "ocupada" },
        { 6, "livre" },
        { 7, "livre" }
    };

    public IReadOnlyDictionary<byte, string> StatusMesas => _statusMesas;
    
    public void ExibirStatusDasMesas ()
    {
        foreach (byte mesa in _statusMesas.Keys)
        {
            Console.WriteLine($"Mesa {mesa}: {_statusMesas[mesa]}");
        }
    }

    public void ReservarMesaDisponivel ()
    {
        var mesasDisponiveis = new List<byte>();
        byte mesaEscolhida;

        Console.WriteLine("Mesas disponíveis:\n");

        foreach (byte mesa in _statusMesas.Keys)
        {   
            if (_statusMesas[mesa] == "livre") 
            {
                mesasDisponiveis.Add(mesa);
                Console.WriteLine($"Mesa - {mesa}");
            }
        }
       
        if (mesasDisponiveis.Count == 0)
        {
            Console.WriteLine("\nNão há mesas disponíveis no momento!");
        } 
        else if (mesasDisponiveis.Count == 1) 
        {
            Console.WriteLine($"\nDeseja confirmar a reservar da mesa {mesasDisponiveis[0]} (s/n) ?");
            mesaEscolhida = mesasDisponiveis[0];
            string resposta = ValidarString();
            ConfirmarReserva(resposta, mesaEscolhida);
            Console.WriteLine($"Mesa {mesaEscolhida} reservada com sucesso!");
        } 
        else
        {
            Console.WriteLine("\nInfome o número da mesa que deseja reservar: ");
            mesaEscolhida = ValidarEntrada(mesasDisponiveis);
            _statusMesas[mesaEscolhida] = "reservada";
            Console.WriteLine($"Mesa {mesaEscolhida} reservada com sucesso!");
        }

        Thread.Sleep(2000);
    }

    byte ValidarEntrada (List<byte> list)
    {
        while (true)
        {
            string entrada = Console.ReadLine()!;

            if (!string.IsNullOrWhiteSpace(entrada))
            {
                if (byte.TryParse(entrada, out byte entradaValida) && (list.Contains(entradaValida)))
                {
                    return entradaValida;
                }
            }

            Console.WriteLine("Informe um número de mesa válido:");
        }
    }

    string ValidarString ()
    {
        while (true)
        {
            string entrada = Console.ReadLine()!;

            if (!string.IsNullOrWhiteSpace(entrada) && (entrada == "s" || entrada == "n"))
            {
                return entrada;
            }

            Console.WriteLine("Informação inválida, digite 's' ou 'n':");
        }
    }

    void ConfirmarReserva(string resposta, byte mesa)
    {
        switch (resposta)
        {
            case "s": _statusMesas[mesa] = "reservada"; break;
            default: break;
        } 
    }
}
1 resposta

continuação...

using System.Threading.Channels;

class Pedidos
{
    private Dictionary<int ,Dictionary<string, int>> _informacoesDoPedido = [];
    private int _numeroDaMesa;
    private int _numeroDoItem;
    private string _produtoSelecionado;
    private int _quantidade;

    Cardapio Cardapio { get; set; }

    public void RegistrarPedido ()
    {   
        Cardapio = new Cardapio ();
        Cardapio.ExibirCardapio();
        ColetarDados();
        
    }

    void ColetarDados ()
    {
        Console.Write("Informe o número da Mesa: ");
        _numeroDaMesa = ValidarDados();

        while (true)
        {
            Console.Write("Número do item desejado: ");
            _numeroDoItem = ValidarDados_Cardapio();
            _produtoSelecionado = SelecaoDeProduto(_numeroDoItem);
            Console.Write("Informe a Quantidade: ");
            _quantidade = ValidarDados();

            if (!_informacoesDoPedido.ContainsKey(_numeroDaMesa))
            {
                _informacoesDoPedido[_numeroDaMesa] = new Dictionary<string, int>();
                _informacoesDoPedido[_numeroDaMesa][_produtoSelecionado] = _quantidade;
            }
            else
            {
                _informacoesDoPedido[_numeroDaMesa][_produtoSelecionado] = _quantidade;
            }

            Console.Write("Deseja adicionar outro item? (s/n): ");
            string continuar = ValidarResposta();

            if (continuar == "n")
            {
                Console.WriteLine("\nResumo do pedido:");
                foreach (var item in _informacoesDoPedido[_numeroDaMesa])
                {
                    Console.WriteLine($"{item.Key} - {item.Value} unidade(s)");
                }
               
                break;
            }
        }
    }

    string SelecaoDeProduto (int opcao)
    {
        string produto = opcao switch
        {
            1 => "Lazanha",
            2 => "Pizza",
            3 => "Macarronada",
            4 => "Refrigerante 2L",
            5 => "Suco de Laranja",
            _ => string.Empty
        };

        return produto;
    }

    string ValidarResposta ()
    {
        while(true)
        {
            string entrada = Console.ReadLine()!;

            if (!string.IsNullOrWhiteSpace(entrada) && "sn".Contains(entrada))
            {
                return entrada;
            }

            Console.WriteLine("resposta inválida, tente: s ou n");
        }
    }

    int ValidarDados_Cardapio()
    {
        while (true)
        {
            string entrada = Console.ReadLine()!;

            if (!string.IsNullOrWhiteSpace(entrada))
            {
                if (int.TryParse(entrada, out int entradaValida) && (entradaValida >= 1 && entradaValida <= Cardapio.ItensDoCardapio.Count))
                {
                    return entradaValida;
                }
            }

            Console.Write("\nOpção inválida, tente novamente: ");
        }
    }

    int ValidarDados()
    {
        while (true)
        {
            string entrada = Console.ReadLine()!;

            if (!string.IsNullOrWhiteSpace(entrada))
            {
                if (int.TryParse(entrada, out int entradaValida))
                {
                    return entradaValida;
                }
            }
        }
    }

}
class Cardapio
{
    private Dictionary<string, decimal> _itensDoCardapio = new Dictionary<string, decimal>
    {
        { "1 Lazanha", 25.55m },
        { "2 Pizza", 75.0m },
        { "3 Macarronada", 45.99m },
        { "4 Refrigerante 2L", 15.55m },
        { "5 Suco de Laranja", 8.85m }
    };

    public IReadOnlyDictionary<string, decimal> ItensDoCardapio => _itensDoCardapio;

    public void ExibirCardapio ()
    {
        foreach (string item in _itensDoCardapio.Keys)
        {
            Console.WriteLine($"{item} - R$:{_itensDoCardapio[item]}");
        }
        Console.WriteLine("\n");
    }
}