Trabalho Prático 3 - Algoritmia e Estruturas de Dados
Ano Letivo: 2024/2025 | Universidade do Algarve
| Nome | |
|---|---|
| Alexandru Tutunaru | a58379@ualg.pt |
| André Nunes | a89979@ualg.pt |
| Cosmin Ciocan | a89983@ualg.pt |
Este projeto consiste numa aplicação gráfica em Java (Swing) para gerir registos de pessoas. Foi desenvolvido como parte do Trabalho Prático 3 da unidade curricular de Algoritmia e Estruturas de Dados.
Desenvolver uma aplicação com suporte para:
- ✅ Leitura e gravação de ficheiros de texto e binário
- ✅ Visualização em tabelas dos dados
- ✅ Separação automática por género
- ✅ Ordenação por nome
- ✅ Edição e remoção de registos
- ✅ Exportação dos dados em diferentes formatos
- ✅ Interface intuitiva com contadores visuais
| Funcionalidade | Descrição |
|---|---|
| 📂 Leitura de Ficheiros | Suporte automático para .txt e .bin |
| 👤 Separação por Género | Três abas: Masculino, Feminino e Desconhecido |
| 🔢 Contadores | Contagem automática de registos em cada aba |
| ✏️ Edição | Edição e eliminação com ações diretas na tabela |
| 🔍 Pesquisa | Pesquisa instantânea com árvore binária (BST) |
| 💾 Exportação | Exportação para ficheiros em texto estruturado |
| Mensagens de aviso quando não há dados | |
| 🧠 Dedução de Género | Dedução automática via hashtable para nomes ambíguos |
AlgoritmiaTP3/
├── TP2lib/ # Biblioteca com lógica e estruturas de dados
│ └── src/tp2lib/ # Classes utilitárias e estruturas
│ ├── Pessoa.java # Modelo de dados principal
│ ├── ListaDupla.java # Lista duplamente ligada personalizada
│ ├── BSTree.java # Árvore binária de pesquisa
│ ├── ELEM.java # Elemento da lista ligada
│ ├── FicheiroBinario.java # Manipulação de ficheiros binários
│ ├── FicheiroTexto.java # Manipulação de ficheiros de texto
│ ├── GestorLista.java # Gestão de listas
│ └── Utils.java # Utilidades gerais
│
├── TP3_GUI/ # Interface Gráfica (Swing)
│ └── src/
│ ├── app/Main.java # Classe principal da aplicação
│ ├── gui/ # Componentes Swing
│ │ ├── MainFrame.java # Janela principal
│ │ ├── ButtonEditor.java
│ │ └── ButtonRenderer.java
│ └── icon/ # Ícones da interface
│
├── .gitignore # Ficheiros a ignorar pelo Git
└── README.md # Este ficheiro
Implementação própria sem uso de ArrayList, com suporte para:
- Adição no início e fim
- Remoção
- Ordenação por bubble-sort
- Iteração
Utilizada para otimizar a pesquisa por nome com complexidade O(log n) em casos balanceados.
Utilizada para dedução de género em nomes ambíguos, baseada nas terminações dos nomes.
| Formato | Descrição |
|---|---|
Texto (.txt) |
Nome, data de nascimento, telefone (separados por vírgula) |
Binário (.bin) |
Serialização de objetos Pessoa |
- Java JDK 8+
- NetBeans IDE (recomendado) ou outra IDE compatível com Java Swing
-
Clone o repositório:
git clone https://github.com/DevPool1/AlgoritmiaTP3.git
-
Abra o projeto no NetBeans:
- File → Open Project
- Selecione a pasta
TP3_GUI
-
Configure as dependências:
- O projeto
TP3_GUIdepende deTP2lib - Verifique se a biblioteca
TP2lib.jarestá incluída
- O projeto
-
Execute a aplicação:
- Execute a classe
Main.javaemsrc/app/
- Execute a classe
A interface apresenta três abas principais para visualização de registos por género, com funcionalidades de pesquisa, edição e exportação.
Para mais detalhes sobre o projeto, consulte a Wiki.
- As listas são estruturas próprias (
ListaDupla), sem uso deArrayList - Foi utilizada uma árvore binária para otimizar a pesquisa por nome
- Para dedução de género em nomes ambíguos, foi usada uma Hashtable baseada nas terminações
- O sistema identifica e separa registos automaticamente com base no género deduzido
Este projeto foi desenvolvido para fins académicos na Universidade do Algarve.
Este projeto permitiu aplicar os conhecimentos adquiridos ao longo da unidade curricular de Algoritmia e Estruturas de Dados, envolvendo:
- 📊 Estruturas dinâmicas
- 🔄 Algoritmos de ordenação
- 📁 Manipulação de ficheiros
- 🖥️ Desenvolvimento de interfaces gráficas em Java
Desenvolvido com ❤️ na Universidade do Algarve