Como funciona o sistema

Uma só lógica, duas interfaces: o pacote banco tem todo o funcionamento, o terminal e o site são apenas caras diferentes para o mesmo sistema.

🎓 O projeto

Este trabalho é o projeto final da UC UC00607 — Desenvolver Programas Complexos em Linguagem Estruturada. A linguagem de programação principal usada é o Python: toda a lógica do banco (o pacote banco), a versão de terminal e o servidor web da interface (Flask) estão escritos nele.

O formador da UC é o Diogo Lopes Vaz, da EISNT.

O código do projeto está no GitHub: github.com/bmmcastro/banco-python-uc607

🗂️ Organização do projeto
Ficheiro O que faz
main.pyArranque da versão de terminal
servidor.pyA API web (Flask) que o site chama com fetch
banco/modelos.pyAs estruturas Conta e Transacao (dataclasses)
banco/erros.pyOs erros próprios do sistema
banco/operacoes.pyAs funções do banco: criar conta, entrar, transferir, IBAN, retorno
banco/dados.pyA base de dados SQLite e a exportação para CSV
banco/relatorio.pyO relatório do sistema com threads
banco/menus.pyOs menus e a conversa com o utilizador no terminal
testes/testes.pyOs testes unitários (unittest)

🔁 O caminho de uma transferência

1️⃣
Escrever o IBAN

O limpar_iban() normaliza o que foi escrito: maiúsculas, sem espaços e sem o PT50 repetido. pt50 0002 e 0002 dão o mesmo resultado.

2️⃣
Ver o dono do IBAN

O procurar_por_iban() diz de quem é a conta. O destinatário é sempre mostrado antes de qualquer dinheiro sair da conta.

3️⃣
Confirmar e transferir

Só depois da confirmação o transferir() mexe nos saldos: o valor sai da conta de origem e entra na de destino.

4️⃣
Gravar tudo

A transação fica registada com data e hora e é gravada no banco.db logo a seguir à operação.

📏 Regras e validações
  • Password com 6 a 10 caracteres, pelo menos 1 letra e 1 número
  • Depois de 3 tentativas de login erradas, a conta fica bloqueada durante 30 segundos
  • IBAN único, gerado pelo sistema (PT50 seguido de um número livre)
  • Valor da transferência positivo e saldo suficiente (senão dá SaldoInsuficienteError)
  • Não se pode transferir para a própria conta
  • Erros próprios em erros.py, apanhados com try/except nas duas interfaces
💾 Os dados e os testes

Os dados vivem num ficheiro SQLite (banco.db), gravado após cada operação. O histórico é consultado por IBAN (enviadas e recebidas) e pode ser exportado para transacoes_<username>.csv.

O projeto tem 5 testes unitários: utilizador duplicado, IBAN inexistente, saldo insuficiente, levantamento e depósito.

Experimentar o sistema