diff --git a/Banco.cpp b/Banco.cpp new file mode 100644 index 0000000..a594bc9 --- /dev/null +++ b/Banco.cpp @@ -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"; + } + } \ No newline at end of file diff --git a/Banco.hpp b/Banco.hpp index 66b8739..3470522 100644 --- a/Banco.hpp +++ b/Banco.hpp @@ -6,20 +6,12 @@ #include #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 contas; }; diff --git a/ContaBancaria.hpp b/ContaBancaria.hpp index b11e26c..7d339de 100644 --- a/ContaBancaria.hpp +++ b/ContaBancaria.hpp @@ -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; }; diff --git a/ContaBancario.cpp b/ContaBancario.cpp new file mode 100644 index 0000000..31ee8dc --- /dev/null +++ b/ContaBancario.cpp @@ -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; +} \ No newline at end of file diff --git a/ContaCorrente.cpp b/ContaCorrente.cpp new file mode 100644 index 0000000..a9d6e9c --- /dev/null +++ b/ContaCorrente.cpp @@ -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();} + } \ No newline at end of file diff --git a/ContaCorrente.hpp b/ContaCorrente.hpp index 5736421..d3edbeb 100644 --- a/ContaCorrente.hpp +++ b/ContaCorrente.hpp @@ -4,19 +4,13 @@ #include #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; }; diff --git a/ContaPoupanca.cpp b/ContaPoupanca.cpp new file mode 100644 index 0000000..55213fa --- /dev/null +++ b/ContaPoupanca.cpp @@ -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"; +} \ No newline at end of file diff --git a/ContaPoupanca.hpp b/ContaPoupanca.hpp index 25c986a..e3de043 100644 --- a/ContaPoupanca.hpp +++ b/ContaPoupanca.hpp @@ -4,14 +4,13 @@ #include #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; }; diff --git a/ExcecaoBiblioteca.hpp b/ExcecaoBiblioteca.hpp new file mode 100644 index 0000000..cb6af05 --- /dev/null +++ b/ExcecaoBiblioteca.hpp @@ -0,0 +1,36 @@ +#ifndef BIBLIOTECA_EXCP_H +#define BIBLIOTECA_EXCP_H +#include +#include +#include + +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 \ No newline at end of file diff --git a/main.cpp b/main.cpp index 8d0111b..ce4010d 100644 --- a/main.cpp +++ b/main.cpp @@ -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();