aulify · Mini-Projecto
UC UC00669 · T. Desenv. Software
Versão · Aluno
Mini-Projecto · App C/C++ com structs e ficheiros
CLI completa com persistência e gestão de memória
Contexto
Cada par/trio constrói uma aplicação CLI em C (ou C++) com structs/classes, ficheiros para persistência, gestão de memória correcta e múltiplos ficheiros (modular). Cenários:
- A: Gestor de contactos (nome, telefone, email).
- B: Caderneta de despesas (descrição, valor, categoria, data).
- C: Mini-biblioteca (livros, autor, estado).
- D: Adega de vinhos (nome, ano, região, rating).
- E: Jogo da memória (tabuleiro 2D, jogadas, score).
Requisitos
Funcionais
- Linguagem: C ou C++ (escolher).
- Mínimo 1 struct (C) ou classe (C++) bem definida.
- CRUD: criar, listar, actualizar, apagar.
- Persistência: ficheiro de texto ou binário.
- CLI com menu interactivo.
- Validação de inputs.
- Procura por chave (nome, id, etc.).
- Mínimo 100 entradas suportadas (alocação dinâmica).
Não-funcionais
- Sem memory leaks —
valgrindclean (ou AddressSanitizer). - Modularização: pelo menos 3 ficheiros (
.c/.cpp+.h). - Makefile (ou CMakeLists.txt para C++).
- README com setup, comandos, screenshots.
- GitHub com commits regulares.
- Apresentação com demo.
Fases
Fase 1 · Design (2h)
- Escolher cenário + linguagem.
- Definir struct/classe.
- Esboço de menu + funcionalidades.
- Setup do projecto + Makefile básico.
- Entregável: compila e corre "hello".
Fase 2 · Struct + funções CRUD (4h)
- Definir struct/classe completa.
- Funções/métodos para criar, listar, actualizar, apagar.
- Em memória (sem persistência ainda).
- Entregável: CRUD funcional em memória.
Fase 3 · CLI menu (3h)
- Menu principal com loop.
- Inputs validados.
- Confirmação em deletes.
- Entregável: app usável.
Fase 4 · Persistência (3h)
- Save em ficheiro (texto ou binário).
- Load no arranque.
- Auto-save após cada operação.
- Entregável: dados sobrevivem ao restart.
Fase 5 · Memória dinâmica (2h)
- Substituir array fixo por alocação dinâmica.
- Realloc quando precisar crescer.
freeem todos os exits.- Entregável: valgrind sem leaks.
Fase 6 · Modularização (1h)
- Separar em
main.c,gestor.c/.h,ui.c/.h. - Makefile com regras.
- Entregável:
makecompila tudo.
Fase 7 · README + GitHub (1h)
- README com setup, exemplos.
- Push final.
- Entregável: repo público.
Critérios de avaliação
| Item | Peso |
|---|---|
| Design + modelagem | 10% |
| CRUD completo | 20% |
| CLI usável | 10% |
| Persistência | 15% |
| Memória dinâmica + sem leaks | 15% |
| Modularização + Makefile | 10% |
| Validação + robustez | 5% |
| GitHub workflow | 5% |
| README | 5% |
| Apresentação | 5% |
Reflexão
Em meia página: quantas vezes apanhaste segfaults e como debug-aste? Que conceito de pointers te custou mais? Se voltasses, escolherias C ou C++? Sentes que percebes melhor como o computador funciona depois desta UC? Linguagem next — Rust, Go, ou ficas em C?