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

VPL #41

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

VPL #41

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Banco.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#include "Banco.hpp"

void Banco::adicionar_conta(ContaBancaria* conta) {
contas.push_back(conta);
}

void Banco::exibir_todas_contas() {
for (ContaBancaria* conta : contas) {
std::cout << "Saldo da conta de " << conta->get_titular() << ": R$" << conta->get_saldo() << "\n";
}
}
18 changes: 5 additions & 13 deletions Banco.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,12 @@
#include <vector>
#include "ContaBancaria.hpp"

using namespace std;

class Banco {
public:
void adicionarConta(ContaBancaria* conta) {
contas.push_back(conta);
}

void exibir_todas_contas() {
for (ContaBancaria* conta : contas) {
std::cout << "Saldo da conta de " << conta->titular << ": R$" << conta->saldo << "\n";
}
}

public:
void adicionar_conta(ContaBancaria* conta);
void exibir_todas_contas();

private:
std::vector<ContaBancaria*> contas;
};

Expand Down
24 changes: 6 additions & 18 deletions ContaBancaria.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,13 @@

class ContaBancaria {
public:
void depositar(double valor) {
if (valor > 0) {
saldo += valor;
std::cout << "Depósito de R$" << valor << " efetuado com sucesso.\n";
} else {
std::cout << "Valor de depósito inválido.\n";
}
}

void sacar(double valor) {
if (valor > 0 && valor <= saldo) {
saldo -= valor;
std::cout << "Saque de R$" << valor << " efetuado com sucesso.\n";
} else {
std::cout << "Saque inválido. Verifique o valor ou saldo insuficiente.\n";
}
}

ContaBancaria(std::string titular,double saldo);
void depositar(double valor);
void sacar(double valor);
std::string get_titular();
double get_saldo();

protected:
std::string titular;
double saldo;
};
Expand Down
30 changes: 30 additions & 0 deletions ContaBancario.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include "ContaBancaria.hpp"
#include "ExcecaoBiblioteca.hpp"

ContaBancaria::ContaBancaria(std::string _titular,double _saldo) : titular(_titular), saldo(_saldo) {}

void ContaBancaria::depositar(double valor) {
if (valor > 0) {
saldo += valor;
std::cout << "Depósito de R$" << valor << " efetuado com sucesso.\n";
} else {
throw biblioteca_excp::ExcecaoValorInvalido();
}
}

void ContaBancaria::sacar(double valor) {
if (valor > 0 && valor <= saldo) {
saldo -= valor;
std::cout << "Saque de R$" << valor << " efetuado com sucesso.\n";
} else {
throw biblioteca_excp::ExcecaoSaldoInsuficiente();
}
}

std::string ContaBancaria::get_titular(){
return this->titular;
}

double ContaBancaria::get_saldo(){
return this->saldo;
}
17 changes: 17 additions & 0 deletions ContaCorrente.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include "ContaCorrente.hpp"
#include "ExcecaoBiblioteca.hpp"

ContaCorrente::ContaCorrente(std::string _titular, double _saldo, double _limiteChequeEspecial) :
ContaBancaria(_titular, _saldo), limiteChequeEspecial(_limiteChequeEspecial) {}

void ContaCorrente::usar_cheque_especial(double valor) {
double valorTotal = saldo + limiteChequeEspecial;
if (valor > 0){
if (valor <= valorTotal){
saldo -= valor;
std::cout << "Uso de cheque especial de R$" << valor << " efetuado com sucesso.\n";
} else {
throw biblioteca_excp::ExcecaoSemLimite();}
} else {
throw biblioteca_excp::ExcecaoValorInvalido();}
}
16 changes: 5 additions & 11 deletions ContaCorrente.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,13 @@
#include <iostream>
#include "ContaBancaria.hpp"

class conta_corrente : public ContaBancaria {
class ContaCorrente : public ContaBancaria {
public:
void usarChequeEspecial(double valor) {
double valorTotal = saldo + limiteChequeEspecial;
if (valor > 0 && valor <= valorTotal) {
saldo -= valor;
std::cout << "Uso de cheque especial de R$" << valor << " efetuado com sucesso.\n";
} else {
std::cout << "Uso de cheque especial inválido. Verifique o valor ou limite.\n";
}
}
ContaCorrente(std::string _titular, double _saldo, double _limiteChequeEspecial);
void usar_cheque_especial(double valor);

double limiteChequeEspecial;
private:
double limiteChequeEspecial;
};


Expand Down
10 changes: 10 additions & 0 deletions ContaPoupanca.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#include "ContaPoupanca.hpp"

ContaPoupanca::ContaPoupanca(std::string _titular, double _saldo, double _taxaJuros) :
ContaBancaria(_titular, _saldo), taxaJuros(_taxaJuros) {}

void ContaPoupanca::calcular_juros() {
double juros = saldo * taxaJuros / 100;
saldo += juros;
std::cout << "Juros de R$" << juros << " calculados e adicionados à conta.\n";
}
15 changes: 7 additions & 8 deletions ContaPoupanca.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@
#include <iostream>
#include "ContaBancaria.hpp"

class conta_poupanca : public ContaBancaria {
public:
void calcularJuros() {
double juros = saldo * taxaJuros / 100;
saldo += juros;
std::cout << "Juros de R$" << juros << " calculados e adicionados à conta.\n";
}
double taxaJuros;
class ContaPoupanca : public ContaBancaria {
public:
ContaPoupanca(std::string _titular, double _saldo, double _taxaJuros);
void calcular_juros();

private:
double taxaJuros;
};


Expand Down
36 changes: 36 additions & 0 deletions ExcecaoBiblioteca.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#ifndef BIBLIOTECA_EXCP_H
#define BIBLIOTECA_EXCP_H
#include <iostream>
#include <exception>
#include <string>

namespace biblioteca_excp {

class ExcecaoBiblioteca : public std::exception {
private:
std::string _message;

public:
ExcecaoBiblioteca(std::string message) : _message(message){};
const char* what() const throw(){
return this->_message.c_str();}
};

class ExcecaoValorInvalido : public ExcecaoBiblioteca {
public:
ExcecaoValorInvalido() : ExcecaoBiblioteca("Valor Invalido.") {}
};

class ExcecaoSaldoInsuficiente : public ExcecaoBiblioteca {
public:
ExcecaoSaldoInsuficiente() : ExcecaoBiblioteca("Saldo Insuficiente.") {}
};

class ExcecaoSemLimite : public ExcecaoBiblioteca {
public:
ExcecaoSemLimite() : ExcecaoBiblioteca("Uso de cheque especial inválido. Verifique o valor ou limite.") {}
};

}

#endif
149 changes: 105 additions & 44 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,65 +5,126 @@
#include "ContaPoupanca.hpp"
#include "ContaCorrente.hpp"
#include "Banco.hpp"
#include "ExcecaoBiblioteca.hpp"


int main() {
Banco meuBanco;

conta_corrente* conta1 = new conta_corrente();
conta1->titular = "Joao";
conta1->saldo = 1500;
conta1->limiteChequeEspecial = 200;
ContaCorrente* conta1 = new ContaCorrente("Joao", 1500, 200);

conta_poupanca* conta2 = new conta_poupanca();
conta2->titular = "Maria";
conta2->saldo = 1000;
conta2->taxaJuros = 2.0;
ContaPoupanca* conta2 = new ContaPoupanca("Maria", 1000, 2.0);

conta_poupanca* conta3 = new conta_poupanca();
conta3->titular = "Luiz";
conta3->saldo = 3000;
conta3->taxaJuros = 1.5;
ContaPoupanca* conta3 = new ContaPoupanca("Luiz", 3000,1.5);

conta_poupanca* conta4 = new conta_poupanca();
conta4->titular = "Lara";
conta4->saldo = 2000;
conta4->taxaJuros = 2.5;
ContaPoupanca* conta4 = new ContaPoupanca("Lara", 2000, 2.5);

conta_corrente* conta5 = new conta_corrente();
conta5->titular = "Luisa";
conta5->saldo = 5000;
conta5->limiteChequeEspecial = 300;

meuBanco.adicionarConta(conta1);
meuBanco.adicionarConta(conta2);
meuBanco.adicionarConta(conta3);
meuBanco.adicionarConta(conta4);
meuBanco.adicionarConta(conta5);
ContaCorrente* conta5 = new ContaCorrente("Luisa", 5000, 300);

meuBanco.adicionar_conta(conta1);
meuBanco.adicionar_conta(conta2);
meuBanco.adicionar_conta(conta3);
meuBanco.adicionar_conta(conta4);
meuBanco.adicionar_conta(conta5);

meuBanco.exibir_todas_contas();

conta1->depositar(500);
conta2->sacar(200);
conta3->sacar(100);
conta4->depositar(-1);
conta5->sacar(5001);
try {
conta1->depositar(500);
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

try {
conta2->sacar(200);
} catch (biblioteca_excp::ExcecaoSaldoInsuficiente& e) {
std::cout << e.what() << std::endl;
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

try {
conta3->sacar(100);
} catch (biblioteca_excp::ExcecaoSaldoInsuficiente& e) {
std::cout << e.what() << std::endl;
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

try {
conta4->depositar(-1);
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

try {
conta5->sacar(5001);
} catch (biblioteca_excp::ExcecaoSaldoInsuficiente& e) {
std::cout << e.what() << std::endl;
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}



meuBanco.exibir_todas_contas();

conta1->sacar(500);
conta2->depositar(200);
conta3->depositar(100);
conta4->sacar(300);
conta5->depositar(50);

try {
conta1->sacar(500);
} catch (biblioteca_excp::ExcecaoSaldoInsuficiente& e) {
std::cout << e.what() << std::endl;
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

try {
conta2->depositar(200);
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

try {
conta3->depositar(100);
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

try {
conta4->sacar(300);
} catch (biblioteca_excp::ExcecaoSaldoInsuficiente& e) {
std::cout << e.what() << std::endl;
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

try {
conta5->depositar(50);
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}


meuBanco.exibir_todas_contas();

conta1->usarChequeEspecial(500);
conta2->calcularJuros();
conta3->calcularJuros();
conta4->calcularJuros();
conta5->usarChequeEspecial(50);

try {
conta1->usar_cheque_especial(500);
} catch (biblioteca_excp::ExcecaoSemLimite& e) {
std::cout << e.what() << std::endl;
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}

conta2->calcular_juros();
conta3->calcular_juros();
conta4->calcular_juros();

try {
conta5->usar_cheque_especial(50);
} catch (biblioteca_excp::ExcecaoSemLimite& e) {
std::cout << e.what() << std::endl;
} catch (biblioteca_excp::ExcecaoValorInvalido& e) {
std::cout << e.what() << std::endl;
}


meuBanco.exibir_todas_contas();

Expand Down