def menu():
menu = """\n
================ MENU ================
[d]\tDepositar
[s]\tSacar
[e]\tExtrato
[nc]\tNova conta
[lc]\tListar contas
[nu]\tNovo usuário
[hs]\tHistórico de saques
[q]\tSair
=> """
return input(textwrap.dedent(menu))
def obter_valor(mensagem):
while True:
try:
valor = float(input(mensagem))
if valor <= 0:
raise ValueError
return valor
except ValueError:
print("Valor inválido! Por favor, insira um número positivo.")
def depositar(saldo, valor, extrato):
if valor > 0:
saldo += valor
extrato += f"Depósito:\tR$ {valor:.2f}\n"
print("\n=== Depósito realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return saldo, extrato
if excedeu_saldo:
print("\n@@@ Operação falhou! Você não tem saldo suficiente. @@@")
elif excedeu_limite:
print("\n@@@ Operação falhou! O valor do saque excede o limite. @@@")
elif excedeu_saques:
print("\n@@@ Operação falhou! Número máximo de saques excedido. @@@")
elif valor > 0:
saldo -= valor
extrato += f"Saque:\t\tR$ {valor:.2f}\n"
numero_saques += 1
saques.append(valor) # Armazenar o valor do saque
print("\n=== Saque realizado com sucesso! ===")
else:
print("\n@@@ Operação falhou! O valor informado é inválido. @@@")
return saldo, extrato, numero_saques, saques
def exibir_extrato(saldo, extrato):
print("\n================ EXTRATO ================")
print("Não foram realizadas movimentações." if not extrato else extrato)
print(f"\nSaldo:\t\tR$ {saldo:.2f}")
print("==========================================")
if usuario:
print("\n@@@ Já existe usuário com esse CPF! @@@")
return
nome = input("Informe o nome completo: ")
data_nascimento = input("Informe a data de nascimento (dd-mm-aaaa): ")
endereco = input("Informe o endereço (logradouro, nro - bairro - cidade/sigla estado): ")
usuarios.append({"nome": nome, "data_nascimento": data_nascimento, "cpf": cpf, "endereco": endereco})
print("=== Usuário criado com sucesso! ===")
def filtrar_usuario(cpf, usuarios):
usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf]
return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios):
cpf = input("Informe o CPF do usuário: ")
usuario = filtrar_usuario(cpf, usuarios)
if usuario:
print("\n=== Conta criada com sucesso! ===")
return {"agencia": agencia, "numero_conta": numero_conta, "usuario": usuario}
print("\n@@@ Usuário não encontrado, fluxo de criação de conta encerrado! @@@")
def listar_contas(contas):
for conta in contas:
linha = f"""\
Agência:\t{conta['agencia']}
C/C:\t\t{conta['numero_conta']}
Titular:\t{conta['usuario']['nome']}
"""
print("=" * 100)
print(textwrap.dedent(linha))
def exibir_historico_saques(saques):
print("\n================ HISTÓRICO DE SAQUES ================")
if not saques:
print("Nenhum saque realizado.")
else:
for i, valor in enumerate(saques, start=1):
print(f"Saque {i}: R$ {valor:.2f}")
print("======================================================")
def main():
LIMITE_SAQUES = 3
AGENCIA = "0001"
saldo = 0
limite = 500
extrato = ""
numero_saques = 0
saques = [] # Histórico de saques
usuarios = []
contas = []
while True:
opcao = menu()
if opcao == "d":
valor = obter_valor("Informe o valor do depósito: ")
saldo, extrato = depositar(saldo, valor, extrato)
elif opcao == "s":
valor = obter_valor("Informe o valor do saque: ")
saldo, extrato, numero_saques, saques = sacar(
saldo=saldo,
valor=valor,
extrato=extrato,
limite=limite,
numero_saques=numero_saques,
limite_saques=LIMITE_SAQUES,
saques=saques,
)
elif opcao == "e":
exibir_extrato(saldo, extrato=extrato)
elif opcao == "hs":
exibir_historico_saques(saques)
elif opcao == "nu":
criar_usuario(usuarios)
elif opcao == "nc":
numero_conta = len(contas) + 1
conta = criar_conta(AGENCIA, numero_conta, usuarios)
if conta:
contas.append(conta)
elif opcao == "lc":
listar_contas(contas)
elif opcao == "q":
break
else:
print("Operação inválida, por favor selecione novamente a operação desejada.")
import textwrap
def menu(): menu = """\n ================ MENU ================ [d]\tDepositar [s]\tSacar [e]\tExtrato [nc]\tNova conta [lc]\tListar contas [nu]\tNovo usuário [hs]\tHistórico de saques [q]\tSair => """ return input(textwrap.dedent(menu))
def obter_valor(mensagem): while True: try: valor = float(input(mensagem)) if valor <= 0: raise ValueError return valor except ValueError: print("Valor inválido! Por favor, insira um número positivo.")
def depositar(saldo, valor, extrato): if valor > 0: saldo += valor extrato += f"Depósito:\tR$ {valor:.2f}\n" print("\n=== Depósito realizado com sucesso! ===") else: print("\n@@@ Operação falhou! O valor informado é inválido. @@@") return saldo, extrato
def sacar(saldo, valor, extrato, limite, numero_saques, limite_saques, saques): excedeu_saldo = valor > saldo excedeu_limite = valor > limite excedeu_saques = numero_saques >= limite_saques
def exibir_extrato(saldo, extrato): print("\n================ EXTRATO ================") print("Não foram realizadas movimentações." if not extrato else extrato) print(f"\nSaldo:\t\tR$ {saldo:.2f}") print("==========================================")
def criar_usuario(usuarios): cpf = input("Informe o CPF (somente número): ") usuario = filtrar_usuario(cpf, usuarios)
def filtrar_usuario(cpf, usuarios): usuarios_filtrados = [usuario for usuario in usuarios if usuario["cpf"] == cpf] return usuarios_filtrados[0] if usuarios_filtrados else None
def criar_conta(agencia, numero_conta, usuarios): cpf = input("Informe o CPF do usuário: ") usuario = filtrar_usuario(cpf, usuarios)
def listar_contas(contas): for conta in contas: linha = f"""\ Agência:\t{conta['agencia']} C/C:\t\t{conta['numero_conta']} Titular:\t{conta['usuario']['nome']} """ print("=" * 100) print(textwrap.dedent(linha))
def exibir_historico_saques(saques): print("\n================ HISTÓRICO DE SAQUES ================") if not saques: print("Nenhum saque realizado.") else: for i, valor in enumerate(saques, start=1): print(f"Saque {i}: R$ {valor:.2f}") print("======================================================")
def main(): LIMITE_SAQUES = 3 AGENCIA = "0001"
main()