Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Desafio do projeto: "Otimizando o Sistema Bancário com Funções Python" #68

Open
raphaeldoamaralvaz opened this issue May 5, 2024 · 0 comments

Comments

@raphaeldoamaralvaz
Copy link

Neste projeto o professor apresentou as possíveis configurações do código e a partir dos códigos apresentados foi possível fazer o exercício da replicação, compreendendo a lógica da programação e a funcionalidade dos códigos bem como o funcionamento do Python. Segue abaixo o código baseado na aula do desafio do projeto e em seguida a execução que fiz com exemplos que fui utilizando.

import textwrap

def menu():
    menu = """\n
    ============ MENU ===========
    [d]\tDepositar
    [s]\tSacar
    [e]\tExtrato
    [nc]\tNova conta
    [lc]\tListar contas
    [nu]\tNovo usuário
    [q]\tSair
    """
    return input(textwrap.dedent(menu))

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):
    excedeu_saldo = valor > saldo
    excedeu_limite = valor > limite
    excedeu_saques = numero_saques > limite_saques

    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 excedeu 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
        print("\n%%%% Saque realizado com sucesso! %%%%")
    
    else: 
        print("\n#### Operação falhou! O valor informado é inválido. ####")
    
    return saldo, extrato

def exibir_extrato(saldo, /, *, extrato):
    print("\n============= EXTRATO ================")
    print("Não foram realizados 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)
    
    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 (lograduro, 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 main():
    LIMITE_SAQUES = 3
    AGENCIA = "0001"

    saldo = 0
    limite = 500
    extrato = ""
    numero_saques = 0
    usuarios = []
    contas = []

    while True:
        opcao = menu()

        if opcao == "d":
            valor = float(input("Informe o valor do depósito: "))

            saldo, extrato = depositar(saldo, valor, extrato)
        
        elif opcao == "s":
            valor = float(input("Informe o valor do saque: "))

            saldo, extrato = sacar(
                saldo=saldo,
                valor=valor,
                extrato=extrato,
                limite=limite,
                numero_saques=numero_saques,
                limite_saques=LIMITE_SAQUES,
            )
        
        elif opcao == "e":
            exibir_extrato(saldo, extrato=extrato)
        
        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álido, por favor selecione novamente a operação desejada.")
main()

Agora segue a execução das funções do código com exemplos que fui inserindo:

PS C:\Users\Rafael> & C:/Users/Rafael/AppData/Local/Programs/Python/Python312/python.exe c:/Users/Rafael/desafio.py

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
d
Informe o valor do depósito: 100

**** Depósito realizado com sucesso! ****

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nc
Informe o CPF do usuário: 123

Usuário não encontrado, fluxo de criação de conta encerrado!

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nu
Informe o CPF (somente número): 123
Informe o nome completo: Raphael do Amaral Vaz
Informe a data de nascimento (dd-mm-aaaa): 05-05-2024
Informe o endereço (lograduro, nro - bairro - cidade/sigla estado): Rua Odette de Oliveira. 500 - Jardim da Penha - Vitória/ES
@@@@ Usuário criado com sucesso! @@@@

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nc
Informe o CPF do usuário: 123

**** Conta criada com sucesso! ****

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
lc

Agência: 0001
C/C: 1
Titular: Raphael do Amaral Vaz

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nc
Informe o CPF do usuário: 123

**** Conta criada com sucesso! ****

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
lc

Agência: 0001
C/C: 1
Titular: Raphael do Amaral Vaz

====================================================================================================
Agência: 0001
C/C: 2
Titular: Raphael do Amaral Vaz

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nu
Informe o CPF (somente número): 123

$$$$ Já existe usuário com esse CPF! $$$$

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nu
Informe o CPF (somente número): 456
Informe o nome completo: João Carvalho
Informe a data de nascimento (dd-mm-aaaa): 31-10-1994
Informe o endereço (lograduro, nro - bairro - cidade/sigla estado): Rua Silva Pinto, 134 aptº 201 - Vila Isabel - Rio de Janeiro/RJ
@@@@ Usuário criado com sucesso! @@@@

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
nc
Informe o CPF do usuário: 456

**** Conta criada com sucesso! ****

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair
lc

Agência: 0001
C/C: 1
Titular: Raphael do Amaral Vaz

====================================================================================================
Agência: 0001
C/C: 2
Titular: Raphael do Amaral Vaz

====================================================================================================
Agência: 0001
C/C: 3
Titular: João Carvalho

============ MENU ===========
[d] Depositar
[s] Sacar
[e] Extrato
[nc] Nova conta
[lc] Listar contas
[nu] Novo usuário
[q] Sair

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant