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
- Criamos
List<string> alunosvazia e uma variávelopcaopara controlar o laço. - O
while (opcao != 5)mantém o menu ativo até o usuário digitar 5. - Dentro do laço, exibimos o menu e lemos a opção com
int.Parse(Console.ReadLine()). - O
switchdireciona 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 retornatruese 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.
- case 1: lê um nome e usa
- O
defaulttrata 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.Parselança exceção se o usuário digitar letras. Poderia usarint.TryParsepara maior robustez. - Esquecer o
breakem 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...