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

Desafio: Hora da prática - Atividade 3, 4 e 5

Resolução:
FichaPessoa.cs

using System.Text.Json;

namespace DesafiosCSharp03._04Desafio
{
    public class FichaPessoas
    {
        public FichaPessoas(string nomeFicha)
        {
            NomeFicha = nomeFicha;
            ListaPessoas = new List<Pessoa>();
        }

        public string NomeFicha { get; }
        public List<Pessoa> ListaPessoas { get; }
        public int LimitePessoas = 5;

        public void AdicionarPessoa(Pessoa pessoa)
        {
            if (ListaPessoas.Count >= LimitePessoas)
            {
                Console.WriteLine($"A ficha {NomeFicha} já atingiu o limite de {LimitePessoas} pessoas.");
                return;
            }

            if (ListaPessoas.Contains(pessoa))
            {
                Console.WriteLine($"Pessoa {pessoa.Nome} já está na ficha!");
                return;
            }

            ListaPessoas.Add(pessoa);
            Console.WriteLine($"{pessoa.Nome} adicionada à ficha {NomeFicha}.");
        }

        public void CriarArquivoJSON()
        {
            string json = JsonSerializer.Serialize(new
            {
                NomeFicha,
                ListaPessoas,
                LimitePessoas
            });
            string nomeDoArquivo = $"ficha-{NomeFicha}.json";

            File.WriteAllText(nomeDoArquivo, json);

            Console.WriteLine();
            Console.WriteLine($"Arquivo criado com sucesso!\n" +
                $"{Path.GetFullPath(nomeDoArquivo)}");
            Console.WriteLine();
        }

        public void ConvertendoArquivoJSON(string nomeDoArquivo)
        {
            try
            {
                if (File.Exists(nomeDoArquivo))
                {
                    // Ler conteúdo do arquivo JSON
                    string resposta = File.ReadAllText(nomeDoArquivo);
                    // Desserializar JSON para lista de Pessoa
                    var chamada = JsonSerializer.Deserialize<FichaJSON>(resposta)!;

                    Console.WriteLine($"Exibindo informações da chamada:");
                    foreach(var pessoa in chamada.ListaPessoas)
                    {
                        Console.WriteLine($"\nNome: {pessoa.Nome}");
                        Console.WriteLine($"Idade: {pessoa.Idade}");
                        Console.WriteLine($"Email: {pessoa.Email}");
                    }
                }
                else
                {
                    Console.WriteLine($"O arquivo {nomeDoArquivo} não existe.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Temos um erro: {ex.Message}");
            }
        }

        public void BuscarPorIdade(string nomeDoArquivo)
        {
            try
            {
                if (File.Exists(nomeDoArquivo))
                {
                    // Ler conteúdo do arquivo JSON
                    string resposta = File.ReadAllText(nomeDoArquivo);
                    // Desserializar JSON para lista de Pessoa
                    var chamada = JsonSerializer.Deserialize<FichaJSON>(resposta)!;

                    Console.Write($"\nInsira uma idade: ");
                    int buscaIdade; int.TryParse(Console.ReadLine()!, out buscaIdade);
                    Console.Clear();

                    var pessoasComIdade = chamada.ListaPessoas
                        .Where(p => p.Idade == buscaIdade)
                        .OrderBy(p => p.Nome)
                        .ToList();

                    if (pessoasComIdade.Any())
                    {
                        // Exibir informações das pessoas com a idade especificada
                        Console.WriteLine($"\nPessoas com {buscaIdade} anos:");

                        foreach (Pessoa pessoa in pessoasComIdade)
                        {
                            Console.WriteLine($"\nNome: {pessoa.Nome}");
                            Console.WriteLine($"Idade: {pessoa.Idade}");
                            Console.WriteLine($"Email: {pessoa.Email}");
                        }
                    }
                    else
                    {
                        Console.WriteLine($"Nenhuma pessoa encontrada com {buscaIdade} anos.");
                    }

                }
                else
                {
                    Console.WriteLine($"O arquivo {nomeDoArquivo} não existe.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Temos um erro: {ex.Message}");
            }
        }

    }
}

FichaJSON.cs

namespace DesafiosCSharp03._04Desafio
{
    public class FichaJSON
    {
        public string NomeFicha { get; set; }
        public List<Pessoa> ListaPessoas { get; set; }
        public int LimitePessoas { get; set; }
    }
}
2 respostas

Program.cs

//03. Criar um programa que permite ao usuário inserir informações de várias pessoas, armazena
//essas informações em uma lista, serializa a lista em formato JSON e salva em um arquivo.
Console.Clear();

var pessoa1 = new Pessoa("Ana", 25, "Aemail.com");
var pessoa2 = new Pessoa("Roxy", 24, "Remail.com");
var pessoa3 = new Pessoa("Daniel", 28, "Demail.com");
var pessoa4 = new Pessoa("Michael", 21, "Memail.com");
var pessoa5 = new Pessoa("Cassia", 26, "Cemail.com");

var list = new FichaPessoas("Chamada");

list.AdicionarPessoa(pessoa1);
list.AdicionarPessoa(pessoa2);
list.AdicionarPessoa(pessoa3);
list.AdicionarPessoa(pessoa4);
list.AdicionarPessoa(pessoa5);

list.CriarArquivoJSON();







//04. Criar um programa que lê um arquivo JSON contendo informações de várias pessoas,
//desserializa essas informações em uma lista e exibe na tela.

list.ConvertendoArquivoJSON("ficha-Chamada.json");







//05. Criar um programa que lê um arquivo JSON contendo informações de várias pessoas,
//permite ao usuário inserir uma idade e exibe as pessoas com aquela idade.
//Console.Clear();

list.BuscarPorIdade("ficha-Chamada.json");

Oi, Christopher! Como vai?

Sua resolução ficou bem estruturada ao separar as responsabilidades em classes como FichaPessoas e FichaJSON. Também foi muito bom ver o uso de JsonSerializer, File.WriteAllText(), File.ReadAllText() e LINQ com Where() e OrderBy() para buscar pessoas por idade, pois isso conecta bem a criação de arquivos JSON com consulta de dados em C#.

Dica: para deixar o código ainda mais seguro, você pode validar o retorno de JsonSerializer.Deserialize<FichaJSON>(resposta) antes de usar chamada.ListaPessoas, evitando erro caso o arquivo esteja vazio ou com formato inválido.

Você chegou a testar a busca por uma idade que não existe na lista?

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