0% acharam este documento útil (0 voto)
12 visualizações5 páginas

CRUD de Finanças Com Python

O documento apresenta um sistema de controle de finanças pessoais em Python, permitindo adicionar, listar, atualizar e remover transações financeiras, além de gerar relatórios. As transações são armazenadas em um arquivo CSV e o sistema oferece um menu interativo para o usuário. O código inclui classes para gerenciar transações e manipular dados financeiros de forma eficiente.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
12 visualizações5 páginas

CRUD de Finanças Com Python

O documento apresenta um sistema de controle de finanças pessoais em Python, permitindo adicionar, listar, atualizar e remover transações financeiras, além de gerar relatórios. As transações são armazenadas em um arquivo CSV e o sistema oferece um menu interativo para o usuário. O código inclui classes para gerenciar transações e manipular dados financeiros de forma eficiente.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 5

Python

import csv
from datetime import datetime

class Transacao:
def __init__(self, id, data, descricao, valor, tipo):
self.id = id
self.data = datetime.strptime(data, '%Y-%m-%d').date()
self.descricao = descricao
self.valor = float(valor)
self.tipo = tipo # 'receita' ou 'despesa'

def __str__(self):
return f"{self.id},{self.data.strftime('%Y-%m-%d')},{self.descricao},{self.valor},{self.tipo}"

@staticmethod
def from_string(csv_line):
parts = csv_line.strip().split(',')
if len(parts) == 5:
return Transacao(int(parts[0]), parts[1], parts[2], parts[3], parts[4])
return None

class GerenciadorFinancasCSV:
def __init__(self, nome_arquivo='financas.csv'):
self.nome_arquivo = nome_arquivo
self.proximo_id = self._carregar_proximo_id()

def _carregar_proximo_id(self):
transacoes = self.obter_todas_transacoes()
if transacoes:
return max(t.id for t in transacoes) + 1
return 1

def adicionar_transacao(self, data, descricao, valor, tipo):


nova_transacao = Transacao(self.proximo_id, data, descricao, valor, tipo)
self._salvar_transacao(nova_transacao)
self.proximo_id += 1

def obter_transacao(self, id):


for transacao in self.obter_todas_transacoes():
if transacao.id == id:
return transacao
return None

def obter_todas_transacoes(self):
transacoes = []
try:
with open(self.nome_arquivo, 'r', newline='') as arquivo_csv:
leitor_csv = csv.reader(arquivo_csv)
for linha in leitor_csv:
if linha:
transacao = Transacao.from_string(','.join(linha))
if transacao:
transacoes.append(transacao)
except FileNotFoundError:
pass
return transacoes

def atualizar_transacao(self, id, nova_data=None, nova_descricao=None, novo_valor=None,


novo_tipo=None):
transacoes = self.obter_todas_transacoes()
atualizado = False
for transacao in transacoes:
if transacao.id == id:
if nova_data:
transacao.data = datetime.strptime(nova_data, '%Y-%m-%d').date()
if nova_descricao:
transacao.descricao = nova_descricao
if novo_valor is not None:
transacao.valor = float(novo_valor)
if novo_tipo:
transacao.tipo = novo_tipo
atualizado = True
break
if atualizado:
self._salvar_todas_transacoes(transacoes)
return True
return False

def remover_transacao(self, id):


transacoes = self.obter_todas_transacoes()
transacoes_filtradas = [t for t in transacoes if t.id != id]
if len(transacoes_filtradas) < len(transacoes):
self._salvar_todas_transacoes(transacoes_filtradas)
return True
return False

def _salvar_transacao(self, transacao):


with open(self.nome_arquivo, 'a', newline='') as arquivo_csv:
escritor_csv = csv.writer(arquivo_csv)
escritor_csv.writerow(str(transacao).split(','))

def _salvar_todas_transacoes(self, transacoes):


with open(self.nome_arquivo, 'w', newline='') as arquivo_csv:
escritor_csv = csv.writer(arquivo_csv)
for transacao in transacoes:
escritor_csv.writerow(str(transacao).split(','))

def gerar_relatorio(self, data_inicio, data_fim):


data_inicio = datetime.strptime(data_inicio, '%Y-%m-%d').date()
data_fim = datetime.strptime(data_fim, '%Y-%m-%d').date()
transacoes = self.obter_todas_transacoes()
receitas = [t for t in transacoes if t.tipo == 'receita' and data_inicio <= t.data <= data_fim]
despesas = [t for t in transacoes if t.tipo == 'despesa' and data_inicio <= t.data <= data_fim]
total_receitas = sum(t.valor for t in receitas)
total_despesas = sum(t.valor for t in despesas)
saldo_periodo = total_receitas - total_despesas
return {
'receitas': receitas,
'despesas': despesas,
'total_receitas': total_receitas,
'total_despesas': total_despesas,
'saldo_periodo': saldo_periodo
}

def exibir_relatorio(relatorio):
print("\nRelatório de Finanças:")
print("--------------------")
print("Receitas:")
if not relatorio['receitas']:
print("Nenhuma receita no período.")
else:
for r in relatorio['receitas']:
print(f"- {r.data.strftime('%Y-%m-%d')}: {r.descricao} - {r.valor:.2f}")
print(f"Total de Receitas: {relatorio['total_receitas']:.2f}")
print("\nDespesas:")
if not relatorio['despesas']:
print("Nenhuma despesa no período.")
else:
for d in relatorio['despesas']:
print(f"- {d.data.strftime('%Y-%m-%d')}: {d.descricao} - {d.valor:.2f}")
print(f"Total de Despesas: {relatorio['total_despesas']:.2f}")
print(f"\nSaldo do Período: {relatorio['saldo_periodo']:.2f}")

def main():
gerenciador = GerenciadorFinancasCSV()

while True:
print("\nControle de Finanças Pessoal")
print("--------------------------")
print("1. Adicionar Transação")
print("2. Listar Todas as Transações")
print("3. Obter Transação por ID")
print("4. Atualizar Transação")
print("5. Remover Transação")
print("6. Gerar Relatório por Período")
print("7. Sair")
opcao = input("Escolha uma opção: ")
if opcao == '1':
data = input("Data (yyyy-mm-dd): ")
descricao = input("Descrição: ")
valor = input("Valor: ")
tipo = input("Tipo (receita/despesa): ")
gerenciador.adicionar_transacao(data, descricao, valor, tipo)
print("Transação adicionada com sucesso.")
elif opcao == '2':
transacoes = gerenciador.obter_todas_transacoes()
if not transacoes:
print("Nenhuma transação registrada.")
else:
print("\nTodas as Transações:")
for t in transacoes:
print(t)
elif opcao == '3':
id_busca = int(input("Digite o ID da transação: "))
transacao = gerenciador.obter_transacao(id_busca)
if transacao:
print("Transação encontrada:", transacao)
else:
print(f"Transação com ID {id_busca} não encontrada.")
elif opcao == '4':
id_atualizar = int(input("Digite o ID da transação a ser atualizada: "))
transacao_existente = gerenciador.obter_transacao(id_atualizar)
if transacao_existente:
nova_data = input(f"Nova Data (yyyy-mm-dd, deixe em branco para manter
{transacao_existente.data.strftime('%Y-%m-%d')}): ") or None
nova_descricao = input(f"Nova Descrição (deixe em branco para manter
'{transacao_existente.descricao}'): ") or None
novo_valor_str = input(f"Novo Valor (deixe em branco para manter
{transacao_existente.valor:.2f}): ") or None
novo_valor = float(novo_valor_str) if novo_valor_str is not None else None
novo_tipo = input(f"Novo Tipo (receita/despesa, deixe em branco para manter
'{transacao_existente.tipo}'): ") or None
if gerenciador.atualizar_transacao(id_atualizar, nova_data, nova_descricao,
novo_valor, novo_tipo):
print("Transação atualizada com sucesso.")
else:
print("Erro ao atualizar a transação.")
else:
print(f"Transação com ID {id_atualizar} não encontrada.")
elif opcao == '5':
id_remover = int(input("Digite o ID da transação a ser removida: "))
if gerenciador.remover_transacao(id_remover):
print("Transação removida com sucesso.")
else:
print(f"Transação com ID {id_remover} não encontrada.")
elif opcao == '6':
data_inicio_relatorio = input("Data de Início do Relatório (yyyy-mm-dd): ")
data_fim_relatorio = input("Data de Fim do Relatório (yyyy-mm-dd): ")
relatorio = gerenciador.gerar_relatorio(data_inicio_relatorio, data_fim_relatorio)
exibir_relatorio(relatorio)
elif opcao == '7':
print("Saindo do sistema.")
break
else:
print("Opção inválida. Tente novamente.")

if __name__ == "__main__":
main()

Como Executar:
1.​ Salve o código Python em um arquivo chamado controle_financas.py.
2.​ Execute o script a partir do seu terminal:
3.​ Bash

python controle_financas.py
4.​
5.​

Você terá um menu interativo no terminal para realizar as operações de CRUD e


gerar relatórios. Os dados das transações serão armazenados no arquivo
financas.csv na mesma pasta.

Você também pode gostar