-
Notifications
You must be signed in to change notification settings - Fork 2
Trabalho A Listas Simples
Neste trabalho, você deverá implementar uma lista simples em linguagem C usando vetor de struct.
A lista representa um conjunto de registros armazenados em sequência. Para controlar quantos registros existem, use uma variável como quantidade.
Modelo geral:
#define MAX 100
Registro lista[MAX];
int quantidade = 0;O objetivo principal é praticar:
- criação de registros com
struct; - inserção em vetor;
- busca por uma chave;
- edição de dados;
- exclusão com reorganização dos elementos;
- listagem;
- salvamento e carregamento em arquivo CSV.
Escolha um tema que você consiga entender bem e explicar depois. Todos os temas usam lista simples, mas cada um enfatiza uma habilidade diferente.
- Se você quer começar por uma ideia mais intuitiva, escolha A1 - Playlist de Músicas.
- Se você quer praticar lista ordenada por chave numérica, escolha A2 - Controle de Estoque.
- Se você quer um desafio com ordenação por prioridade e critério de desempate, escolha A3 - Triagem Hospitalar.
Não existe tema "melhor". O melhor tema é aquele que você consegue implementar com clareza, testar bem e explicar com segurança.
Você irá simular uma playlist. Cada música cadastrada será um registro do vetor. O programa deverá permitir cadastrar músicas, buscar por ID, editar informações, excluir uma música e listar a playlist.
Este é um tema bom para quem quer trabalhar com uma lista mais livre, sem obrigação de manter os registros ordenados por um campo específico.
| Campo | Tipo | Descrição |
|---|---|---|
id |
int |
Identificador único da música |
titulo |
char[50] |
Título da música |
artista |
char[50] |
Nome do artista |
duracao |
int |
Duração em segundos |
genero |
char[30] |
Gênero musical |
- O
iddeve ser único. - O programa deve impedir o cadastro de duas músicas com o mesmo
id. - A lista pode ser mantida na ordem de cadastro.
- Ao excluir uma música, os elementos posteriores devem ser deslocados para ocupar o espaço vazio.
- O usuário escolhe a opção de inserir música.
- O programa pede ID, título, artista, duração e gênero.
- O programa verifica se o ID já existe.
- Se não existir e houver espaço no vetor, insere o registro.
- Ao listar, as músicas aparecem na ordem armazenada.
Você irá criar um pequeno controle de estoque. Cada produto será um registro do vetor, e a lista deverá permanecer ordenada automaticamente pelo código do produto.
Este tema é indicado para quem quer praticar inserção ordenada. Aqui, não basta inserir sempre no final: o programa precisa encontrar a posição correta e deslocar os elementos para abrir espaço.
| Campo | Tipo | Descrição |
|---|---|---|
codigo |
int |
Código único do produto |
nome |
char[50] |
Nome do produto |
quantidade |
int |
Quantidade em estoque |
preco |
float |
Preço unitário |
- O
codigodeve ser único. - A lista deve ser mantida ordenada por código automaticamente durante a inserção.
- Ao editar um produto, o código não pode ser alterado.
- A busca, edição e exclusão devem ser feitas pelo código.
Se o usuário cadastrar os produtos com códigos 30, 10 e 20, a listagem deverá aparecer como:
10
20
30
Isso demonstra que a lista está sendo organizada pela lógica de inserção, e não apenas pela ordem em que os dados foram digitados.
Você irá simular uma lista de triagem hospitalar. Cada paciente será um registro do vetor. A ordem da lista deve considerar a gravidade do atendimento e, em caso de empate, a ordem de chegada.
Este é o tema mais desafiador da lista, porque exige uma regra de ordenação com dois critérios:
- gravidade menor vem primeiro;
- se a gravidade for igual, a menor senha vem primeiro.
| Campo | Tipo | Descrição |
|---|---|---|
senha |
int |
Senha única do paciente |
nome |
char[50] |
Nome do paciente |
idade |
int |
Idade do paciente |
gravidade |
int |
Gravidade de 1 a 4, sendo 1 a mais grave |
- A
senhadeve ser única. - A
gravidadedeve ser validada entre 1 e 4. - A lista deve ficar ordenada por gravidade em ordem crescente.
- Em caso de mesma gravidade, o desempate deve ser feito pela senha crescente.
Se forem cadastrados os pacientes abaixo:
Senha 10 - Gravidade 3
Senha 11 - Gravidade 1
Senha 12 - Gravidade 3
Senha 13 - Gravidade 2
A listagem esperada será:
Senha 11 - Gravidade 1
Senha 13 - Gravidade 2
Senha 10 - Gravidade 3
Senha 12 - Gravidade 3
Independentemente do tema escolhido, o programa deve ter um menu interativo com opções numéricas e implementar:
-
Inserir: adicionar um registro na lista, respeitando a regra do tema. -
Buscar: localizar um registro pelo campo chave (id,codigoousenha) e mostrar todos os dados. -
Editar: alterar campos não chave de um registro já existente. -
Excluir: remover um registro pela chave e reorganizar o vetor. -
Listar todos: exibir todos os registros na ordem atual da lista. -
Salvar CSV: gravar os dados em arquivo CSV conforme a especificação. -
Carregar CSV: ler o arquivo CSV ao iniciar e reconstruir a lista. -
Sair: salvar quando necessário e encerrar o programa.
Uma boa forma de desenvolver é seguir esta ordem:
- Defina a
structdo registro. - Crie o vetor com
#define MAX 100. - Crie a variável
quantidade. - Implemente a inserção simples.
- Implemente a listagem.
- Implemente a busca pela chave.
- Implemente edição e exclusão.
- Ajuste a inserção ordenada, se o tema exigir.
- Implemente salvar em CSV.
- Implemente carregar do CSV.
- Teste todos os casos, incluindo lista vazia, lista cheia e chave duplicada.
id;titulo;artista;duracao;genero
1;Bohemian Rhapsody;Queen;355;Rock
2;Blinding Lights;The Weeknd;200;PopExtras só devem ser feitos depois que o básico estiver funcionando.
- Estatísticas, como total de registros, duração média ou valor total em estoque.
- Busca parcial por nome, título, artista ou produto.
- Validação rigorosa de entradas.
- Confirmação antes da exclusão de registros.
- Ordenações e filtros adicionais.
- Personalização do terminal.
- Implementação com alocação dinâmica e encadeamento, conforme a página de orientações de extra.
- Trate o caso de lista cheia.
- Trate o caso de lista vazia.
- Não permita chave duplicada.
- Teste inserção no início, no meio e no fim da lista.
- Teste busca, edição, exclusão, salvamento e carregamento antes da entrega.