import time
import sys
import os
import matplotlib.pyplot as plt
class CalculadoraFinanceira:
def __init__(self):
self.historico = [] # Armazena os cálculos realizados
@staticmethod
def barra_progresso(total, atual, tamanho=40):
"""Exibe uma barra de progresso"""
percentagem = (atual / total) * 100
barra = '█' * int(percentagem / (100 / tamanho))
espacos = ' ' * (tamanho - len(barra))
sys.stdout.write(f"\r[{barra}{espacos}] {percentagem:.2f}%")
sys.stdout.flush()
def calcular_roi(self, investido_inicial, rentabilidade):
try:
roi = ((rentabilidade - investido_inicial) / investido_inicial) * 100
resultado = f"ROI: {roi:.2f}%"
self.historico.append(("ROI", resultado))
return resultado
except ZeroDivisionError:
return "Erro: O valor investido não pode ser zero."
def calcular_juros_compostos(self, principal, taxa_juros, tempo):
try:
valor_final = principal * (1 + taxa_juros / 100) ** tempo
resultado = f"Valor final com Juros Compostos: € {valor_final:.2f}"
self.historico.append(("Juros Compostos", resultado))
return resultado
except ValueError:
return "Erro: Certifique-se de que todos os campos foram preenchidos corretamente."
def calcular_val(self, fluxos_caixa, taxa_desconto):
try:
val = sum([fluxo / (1 + taxa_desconto / 100) ** i for i, fluxo in enumerate(fluxos_caixa, start=1)])
resultado = f"VPL: € {val:.2f}"
self.historico.append(("VAL", resultado))
return resultado
except Exception as e:
return f"Erro: {str(e)}"
def mostrar_historico(self):
if not self.historico:
print("Nenhum cálculo foi realizado ainda.")
else:
print("\nHistórico de cálculos:")
for tipo, resultado in self.historico:
print(f"- {tipo}: {resultado}")
def plotar_juros_compostos(self, principal, taxa_juros, tempo):
"""Plota o crescimento dos juros compostos ao longo do tempo"""
try:
valores = [principal * (1 + taxa_juros / 100) ** t for t in range(tempo + 1)]
plt.figure(figsize=(10, 6))
plt.plot(range(tempo + 1), valores, marker='o', label='Juros Compostos')
plt.title("Crescimento com Juros Compostos")
plt.xlabel("Tempo (anos)")
plt.ylabel("Valor (€)")
plt.grid(True)
plt.legend()
plt.show()
except Exception as e:
print(f"Erro ao plotar gráfico: {str(e)}")
def menu():
calculadora = CalculadoraFinanceira()
while True:
os.system('cls' if os.name == 'nt' else 'clear')
print("=" * 60)
print("\t\tCalculadora Avançada de Índices Financeiros")
print("=" * 60)
print("1. Calcular ROI")
print("2. Calcular Juros Compostos")
print("3. Plotar Gráfico de Juros Compostos")
print("4. Calcular VAL")
print("5. Mostrar Histórico")
print("6. Sair")
print("=" * 60)
opcao = input("Escolha uma opção: ")
if opcao == "1":
try:
valor_investido = float(input("Digite o valor investido (€): "))
rentabilidade = float(input("Digite a rentabilidade (€): "))
print(calculadora.calcular_roi(valor_investido, rentabilidade))
except ValueError:
print("Erro: Insira valores numéricos válidos.")
time.sleep(2)
elif opcao == "2":
try:
principal = float(input("Digite o capital inicial (€): "))
taxa_juros = float(input("Digite a taxa de juros (% ao ano): "))
tempo = int(input("Digite o tempo (em anos): "))
print(calculadora.calcular_juros_compostos(principal, taxa_juros, tempo))
except ValueError:
print("Erro: Insira valores numéricos válidos.")
time.sleep(2)
elif opcao == "3":
try:
principal = float(input("Digite o capital inicial (€): "))
taxa_juros = float(input("Digite a taxa de juros (% ao ano): "))
tempo = int(input("Digite o tempo (em anos): "))
calculadora.plotar_juros_compostos(principal, taxa_juros, tempo)
except ValueError:
print("Erro: Insira valores numéricos válidos.")
time.sleep(2)
elif opcao == "4":
try:
fluxos_str = input("Digite os fluxos de caixa (separados por vírgula): ")
fluxos_caixa = list(map(float, fluxos_str.split(',')))
taxa_desconto = float(input("Digite a taxa de desconto (%): "))
print(calculadora.calcular_val(fluxos_caixa, taxa_desconto))
except ValueError:
print("Erro: Insira valores numéricos válidos.")
time.sleep(2)
elif opcao == "5":
calculadora.mostrar_historico()
input("Pressione Enter para continuar...")
elif opcao == "6":
print("Encerrando o programa...")
total = 100
for i in range(1, total + 1):
calculadora.barra_progresso(total, i)
time.sleep(0.02)
print("\nObrigado por usar a Calculadora Avançada!")
break
else:
print("Opção inválida. Tente novamente.")
time.sleep(2)
if __name__ == "__main__":
menu()
Comentários
Enviar um comentário