Desafio C#

Cadastro de alunos

Enunciado

Crie um programa que gerencie uma List<string> de alunos. Permita adicionar, remover, verificar existência e listar ordenadamente. O programa deve exibir um menu e processar as opções até o usuário digitar 5 para sair.

Requisitos

  • Usar List<string> para armazenar os alunos.
  • Implementar as opções: 1-Adicionar, 2-Remover, 3-Verificar, 4-Listar ordenado, 5-Sair.
  • Exibir mensagens claras para cada operação.
  • Encerrar o programa quando o usuário digitar 5.

Código inicial

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> alunos = new List<string>();
        int opcao = 0;
        while (opcao != 5)
        {
            Console.WriteLine("1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair");
            Console.Write("Opção: ");
            opcao = int.Parse(Console.ReadLine());
            // TODO: implemente as ações
        }
    }
}

Saída esperada

1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 1
Nome: Ana
Aluno adicionado.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 1
Nome: Carlos
Aluno adicionado.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 1
Nome: Beatriz
Aluno adicionado.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 2
Nome: Carlos
Aluno removido.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 3
Nome: Ana
Ana está cadastrado.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 4
Alunos ordenados: Ana, Beatriz
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 5
Saindo...
Ver dica

Use int.Parse(Console.ReadLine()) para ler a opção. Para cada caso, leia o nome com Console.ReadLine(). Lembre-se de tratar a opção 4 com uma cópia da lista antes de ordenar, para não alterar a original.

Mostrar solução
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<string> alunos = new List<string>();
        int opcao = 0;

        while (opcao != 5)
        {
            // Exibe o menu
            Console.WriteLine("1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair");
            Console.Write("Opção: ");
            opcao = int.Parse(Console.ReadLine());

            switch (opcao)
            {
                case 1:
                    Console.Write("Nome: ");
                    string nomeAdd = Console.ReadLine();
                    alunos.Add(nomeAdd);
                    Console.WriteLine("Aluno adicionado.");
                    break;

                case 2:
                    Console.Write("Nome: ");
                    string nomeRem = Console.ReadLine();
                    if (alunos.Remove(nomeRem))
                        Console.WriteLine("Aluno removido.");
                    else
                        Console.WriteLine("Aluno não encontrado.");
                    break;

                case 3:
                    Console.Write("Nome: ");
                    string nomeVer = Console.ReadLine();
                    if (alunos.Contains(nomeVer))
                        Console.WriteLine($"{nomeVer} está cadastrado.");
                    else
                        Console.WriteLine($"{nomeVer} não está cadastrado.");
                    break;

                case 4:
                    // Cria uma cópia para ordenar sem alterar a lista original
                    List<string> ordenada = new List<string>(alunos);
                    ordenada.Sort();
                    Console.WriteLine("Alunos ordenados: " + string.Join(", ", ordenada));
                    break;

                case 5:
                    Console.WriteLine("Saindo...");
                    break;

                default:
                    Console.WriteLine("Opção inválida.");
                    break;
            }
        }
    }
}

Passo a passo

  1. Criamos List<string> alunos vazia e uma variável opcao para controlar o laço.
  2. O while (opcao != 5) mantém o menu ativo até o usuário digitar 5.
  3. Dentro do laço, exibimos o menu e lemos a opção com int.Parse(Console.ReadLine()).
  4. O switch direciona para cada ação:
    • case 1: lê um nome e usa alunos.Add(nome).
    • case 2: lê um nome e usa alunos.Remove(nome), que retorna true se removeu.
    • case 3: lê um nome e usa alunos.Contains(nome) para verificar.
    • case 4: cria uma cópia da lista (new List<string>(alunos)), ordena a cópia e exibe, preservando a ordem original.
    • case 5: exibe mensagem de saída e o laço termina.
  5. O default trata opções inválidas.

Por que funciona

List<T> oferece métodos prontos para as operações pedidas. O Remove retorna um bool indicando se o item foi encontrado e removido, o que permite dar feedback ao usuário. A cópia da lista antes de ordenar evita efeitos colaterais indesejados: a lista original permanece na ordem de inserção, o que é útil se outras operações dependerem dela.

Erros comuns

  • Ordenar a lista original no case 4: isso alteraria a ordem permanentemente. Use uma cópia, como no exemplo.
  • Não tratar entrada inválida: int.Parse lança exceção se o usuário digitar letras. Poderia usar int.TryParse para maior robustez.
  • Esquecer o break em cada case: sem ele, o código executa os casos seguintes (fall-through) e o comportamento fica errado.

Outra forma de resolver

Usar alunos.OrderBy(a => a).ToList() com LINQ para obter uma lista ordenada sem modificar a original. É preferível quando se quer expressividade e não se importa em importar System.Linq.

Saída esperada

1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 1
Nome: Ana
Aluno adicionado.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 1
Nome: Carlos
Aluno adicionado.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 1
Nome: Beatriz
Aluno adicionado.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 2
Nome: Carlos
Aluno removido.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 3
Nome: Ana
Ana está cadastrado.
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 4
Alunos ordenados: Ana, Beatriz
1-Adicionar 2-Remover 3-Verificar 4-Listar 5-Sair
Opção: 5
Saindo...