Mandar um cafézinho para o programador:


Me ajude a transformar café em código!

Sistema de Conta Bancária com Orientação a Objetos em C++

 Neste tutorial, vamos usar todo nosso conhecimento de Programação Orientada a Objetos, e criar um exemplo real de aplicação, uma conta bancária.

Como fazer um sistema de conta bancária
Exercício: Conta Bancária

Crie um sistema em que uma conta bancária de usuário é criada, onde ele pode checar seu saldo, depositar e sacar dinheiro, use os conhecimentos de orientação a objetos.

Seu sistema deve iniciar exibindo um menu com essas opções, e permita que o usuário faça essas operações quantas vezes ele quiser, e decida quando fechar o sistema.


A classe: Client.h

O saldo do cliente vai ficar armazenado na variável cash. Ela é inicializada com valor 0, na função construtor, ou seja, o cliente obviamente começa com 0 de dinheiro.

Temos a função menu(), que vai ficar exibindo o menu de opções, ou seja, a tela do caixa eletrônico do sistema bancário. Ela invoca a função action(), que vai chamar cada operação específica.

A primeira operação é a checkBalance(), que vai checar o balanço, o saldo da conta. 

Depois tem a função depositCash(), que serve pra adicionar dinheiro na sua conta.

Por fim, a função withdraw(), pra sacar dinheiro.

Nossa classe fica assim:

#ifndef CLIENT_H
#define CLIENT_H


class Client
{
    public:
        Client();
        void menu();
        void action(int);
        void checkBalance();
        void depositCash();
        void withdraw();

    private:
        double cash;
};

#endif // CLIENT_H

Código-fonte: Client.cpp

Tudo vai começar por onde deve começar, pela função construtor Client().
Ela simplesmente zera seu dinheiro, pois é como se sua conta fosse criada no momento que instanciou o objeto.

A função menu() vai ficar exibindo um menu de opções pro usuário, e pedindo pra ele digitar algum valor. Esse valor é armazenado na variável op e enviado para a função action(), isso é feito dentro de um laço do while, que só terminar se você digitar 0. Ou seja, só sai do menu, se digitar 0 pra sair.

A action() vai tomar uma ação, avaliando o valor op recebido da menu(). Isso é feito num teste condicional switch.
Se for 0, diz que o sistema está encerrando.

Se for 1, invoca a função checkBalance(), que simplesmente vai exibir a variável cash. Nada demais.

Na depositCash(), pedimos um valor ao usuário. Mas temos que testar se esse valor é positivo, pois obviamente não tem como depositar valor negativo. Esse teste é feito num IF ELSE. Se o valor for positivo, simplesmente adicionamos ele ao cash e exibimos o balanço do usuário.

Na função withdraw(), perguntamos o valor que o usuário deseja sacar. Antes de retirar esse valor da variável cash, precisamos avaliar se ele é menor que cash. Afinal, você só pode sacar algo abaixo, ou no máximo igual ao seu saldo. Esse teste é feito com um IF ELSE também.

Veja como fica o código:

#include "Client.h"
#include <iostream>
using namespace std;

Client::Client()
{
    cash = 0;
    menu();
}

void Client::menu()
{
    int op=0;

    do{
        cout<<"0. Sair"<<endl;
        cout<<"1. Checar saldo"<<endl;
        cout<<"2. Depositar dinheiro"<<endl;
        cout<<"3. Sacar dinheiro"<<endl;
        cin >> op;

        action(op);

    }while(op);
}

void Client::action(int op)
{
    switch(op)
    {
        case 0:
                cout << "Fechando sistema."<<endl;
                break;
        case 1:
                checkBalance();
                break;

        case 2:
                depositCash();
                break;

        case 3:
                withdraw();
                break;

        default:
                cout << "Opção inválida"<<endl;
    }

}

void Client::checkBalance()
{
    cout<<"\nSeu saldo atual é: R$" << cash <<endl;
}

void Client::depositCash()
{
    double val;

    cout<< "Valor que deseja depositar: ";
    cin >> val;

    if(val>0){
        cash += val;
        checkBalance();
    }
    else
        cout<<"Valor inválido! Tente novamente"<<endl;

}

void Client::withdraw()
{
    double val;

    cout<< "Valor que deseja sacar: ";
    cin >> val;

    if(val<=cash){
        cash -= val;
        checkBalance();
    }
    else
        cout<<"Saldo insuficiente"<<endl;
}

main.cpp

Nossa main vai simplesmente instanciar um objeto. Automaticamente ele aciona a função construtor, e tudo começa a acontecer:

#include "Client.h"

int main()
{
    Client c;
    return 0;
}

Veja como nossa main() é simples, enxuta e direta ao ponto.


Desafio Hacker

Tem uma maneira de burlar esse sistema. De adicionar dinheiro na sua conta de uma maneira 'hacker'. Você consegue descobrir como é? Digite nos comentários.

2 comentários:

  1. Para adicionar dinheiro na conta de uma maneira 'hacker', pode-se apenas colocar um valor negativo ao sacar cash, onde este em vez de diminuir, aumenta.
    Para corrigir deve-se efetuar mais uma condicionalidade na função "withdraw":
    if(val<=cash && val > 0)

    ResponderExcluir
  2. Muito bom, cheguei a mesma conclusão.

    ResponderExcluir

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo