Skip to content

DevPool1/DataStructs-Person-App

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📋 Sistema de Gestão de Registos Pessoais

Trabalho Prático 3 - Algoritmia e Estruturas de Dados
Ano Letivo: 2024/2025 | Universidade do Algarve

Java NetBeans License

👥 Autores

Nome Email
Alexandru Tutunaru a58379@ualg.pt
André Nunes a89979@ualg.pt
Cosmin Ciocan a89983@ualg.pt

📖 Sobre o Projeto

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.

Objetivo Principal

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

✨ Funcionalidades

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
⚠️ Validação Mensagens de aviso quando não há dados
🧠 Dedução de Género Dedução automática via hashtable para nomes ambíguos

🗂️ Estrutura do Projeto

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

📊 Estruturas de Dados Utilizadas

Lista Duplamente Ligada (ListaDupla)

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

Árvore Binária de Pesquisa (BSTree)

Utilizada para otimizar a pesquisa por nome com complexidade O(log n) em casos balanceados.

Hashtable

Utilizada para dedução de género em nomes ambíguos, baseada nas terminações dos nomes.


🛠️ Formatos de Ficheiro Suportados

Formato Descrição
Texto (.txt) Nome, data de nascimento, telefone (separados por vírgula)
Binário (.bin) Serialização de objetos Pessoa

🚀 Como Executar

Requisitos

  • Java JDK 8+
  • NetBeans IDE (recomendado) ou outra IDE compatível com Java Swing

Passos

  1. Clone o repositório:

    git clone https://github.com/DevPool1/AlgoritmiaTP3.git
  2. Abra o projeto no NetBeans:

    • File → Open Project
    • Selecione a pasta TP3_GUI
  3. Configure as dependências:

    • O projeto TP3_GUI depende de TP2lib
    • Verifique se a biblioteca TP2lib.jar está incluída
  4. Execute a aplicação:

    • Execute a classe Main.java em src/app/

📸 Screenshots

A interface apresenta três abas principais para visualização de registos por género, com funcionalidades de pesquisa, edição e exportação.


📚 Documentação Adicional

Para mais detalhes sobre o projeto, consulte a Wiki.


🔧 Observações Técnicas

  • As listas são estruturas próprias (ListaDupla), sem uso de ArrayList
  • 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

📜 Licença

Este projeto foi desenvolvido para fins académicos na Universidade do Algarve.


🎓 Conclusão

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages