diff --git a/Banco.cpp b/Banco.cpp new file mode 100644 index 0000000..1771097 --- /dev/null +++ b/Banco.cpp @@ -0,0 +1,27 @@ +#include "Banco.hpp" +#include +#include + +ContaPoupanca* Banco::adicionar_conta_poupanca(std::string titular, double saldo, double taxa_juros) { + ContaPoupanca* conta = new ContaPoupanca(titular, saldo, taxa_juros); + contas.push_back(conta); + return conta; +} + +ContaCorrente* Banco::adicionar_conta_corrente(std::string titular, double saldo, double limite_cheque_especial) { + ContaCorrente* conta = new ContaCorrente(titular, saldo, limite_cheque_especial); + contas.push_back(conta); + return conta; +} + +void Banco::exibir_todas_contas() { + for (ContaBancaria* conta : contas) { + std::cout << "Saldo da conta de " << conta->get_titular() << ": R$" << conta->get_saldo() << "\n"; + } +} + +Banco::~Banco() { + for (ContaBancaria* conta : contas) { + delete conta; + } +} \ No newline at end of file diff --git a/Banco.hpp b/Banco.hpp index 66b8739..3daeba8 100644 --- a/Banco.hpp +++ b/Banco.hpp @@ -1,26 +1,22 @@ #ifndef BANCO_H #define BANCO_H - #include -#include #include #include "ContaBancaria.hpp" - -using namespace std; +#include "ContaPoupanca.hpp" +#include "ContaCorrente.hpp" class Banco { +private: + std::vector contas; + public: - void adicionarConta(ContaBancaria* conta) { - contas.push_back(conta); - } + ContaPoupanca* adicionar_conta_poupanca(std::string titular, double saldo, double taxa_juros); + ContaCorrente* adicionar_conta_corrente(std::string titular, double saldo, double limite_cheque_especial); - void exibir_todas_contas() { - for (ContaBancaria* conta : contas) { - std::cout << "Saldo da conta de " << conta->titular << ": R$" << conta->saldo << "\n"; - } - } + void exibir_todas_contas(); - std::vector contas; + ~Banco(); }; #endif \ No newline at end of file diff --git a/ContaBancaria.cpp b/ContaBancaria.cpp new file mode 100644 index 0000000..b0332f8 --- /dev/null +++ b/ContaBancaria.cpp @@ -0,0 +1,36 @@ +#include "ContaBancaria.hpp" +#include +#include +#include + +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 { + std::cout << "Valor de depósito inválido.\n"; + } +} + +void ContaBancaria::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"; + } +} + +double ContaBancaria::get_saldo() const { + return saldo; +} + +std::string ContaBancaria::get_titular() const { + return titular; +} + +void ContaBancaria::set_saldo(double _saldo){ + saldo = _saldo; +} \ No newline at end of file diff --git a/ContaBancaria.hpp b/ContaBancaria.hpp index b11e26c..960e9fa 100644 --- a/ContaBancaria.hpp +++ b/ContaBancaria.hpp @@ -1,33 +1,30 @@ -#ifndef CONTA_BANCARIA_H -#define CONTA_BANCARIA_H +#ifndef CONTABANCARIA_H +#define CONTABANCARIA_H #include #include #include class ContaBancaria { +private: + std::string titular; + double saldo; + 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() const; + double get_saldo() const; + + +protected: + void set_saldo(double _saldo); - std::string titular; - double saldo; }; + #endif + diff --git a/ContaCorrente.cpp b/ContaCorrente.cpp new file mode 100644 index 0000000..68ba3ec --- /dev/null +++ b/ContaCorrente.cpp @@ -0,0 +1,22 @@ +#include "ContaCorrente.hpp" + +ContaCorrente::ContaCorrente(std::string titular, double saldo, double limite_cheque_especial) + : ContaBancaria(titular, saldo), limite_cheque_especial(limite_cheque_especial) {} + +void ContaCorrente::usar_cheque_especial(double valor) { + double valor_total = get_saldo() + limite_cheque_especial; + if (valor > 0 && valor <= valor_total) { + set_saldo(get_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"; + } +} + +double ContaCorrente::get_limite_cheque_especial() const { + return limite_cheque_especial; +} + +void ContaCorrente::set_limite_cheque_especial(double _limite_cheque_especial) { + limite_cheque_especial = _limite_cheque_especial; +} diff --git a/ContaCorrente.hpp b/ContaCorrente.hpp index 5736421..47152c0 100644 --- a/ContaCorrente.hpp +++ b/ContaCorrente.hpp @@ -1,23 +1,21 @@ -#ifndef CONTA_CORRENTE_H -#define CONTA_CORRENTE_H +#ifndef CONTACORRENTE_H +#define CONTACORRENTE_H #include #include "ContaBancaria.hpp" -class conta_corrente : public ContaBancaria { +class ContaCorrente : public ContaBancaria { +private: + double limite_cheque_especial; + 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 limite_cheque_especial); + + void usar_cheque_especial(double valor); - double limiteChequeEspecial; -}; + double get_limite_cheque_especial() const; + void set_limite_cheque_especial(double limite_cheque_especial); +}; #endif \ No newline at end of file diff --git a/ContaPoupanca.cpp b/ContaPoupanca.cpp new file mode 100644 index 0000000..586ea88 --- /dev/null +++ b/ContaPoupanca.cpp @@ -0,0 +1,26 @@ +#include "ContaPoupanca.hpp" +#include + +ContaPoupanca::ContaPoupanca(const std::string titular, double saldo, double taxa_juros) + : ContaBancaria(titular, saldo), taxa_juros(taxa_juros) {} + +void ContaPoupanca::calcular_juros() { + if (taxa_juros >= 0) { + double juros = get_saldo() * taxa_juros / 100; + adicionar_juros_ao_saldo(juros); + } +} + +void ContaPoupanca::adicionar_juros_ao_saldo(double juros) { + set_saldo(juros + get_saldo()); + std::cout << "Juros de R$" << juros << " calculados e adicionados à conta.\n"; +} + +double ContaPoupanca::get_juros() const { + return taxa_juros; +} + +void ContaPoupanca::set_juros(double _taxa_juros) { + taxa_juros = _taxa_juros; +} + diff --git a/ContaPoupanca.hpp b/ContaPoupanca.hpp index 25c986a..d469677 100644 --- a/ContaPoupanca.hpp +++ b/ContaPoupanca.hpp @@ -1,18 +1,22 @@ -#ifndef CONTA_POUPANCA_H -#define CONTA_POUPANCA_H +#ifndef CONTAPOUPANCA_H +#define CONTAPOUPANCA_H -#include #include "ContaBancaria.hpp" +#include -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 { +private: + double taxa_juros; + +public: + ContaPoupanca(std::string titular, double saldo, double taxa_juros); + void calcular_juros(); + void adicionar_juros_ao_saldo(double juros); + + double get_juros() const; + void set_juros(double taxa_juros); + +}; #endif \ No newline at end of file diff --git a/main.cpp b/main.cpp index 8d0111b..e85af3b 100644 --- a/main.cpp +++ b/main.cpp @@ -8,40 +8,15 @@ int main() { - Banco meuBanco; + Banco* meu_banco = new Banco(); - conta_corrente* conta1 = new conta_corrente(); - conta1->titular = "Joao"; - conta1->saldo = 1500; - conta1->limiteChequeEspecial = 200; + ContaCorrente* conta1 = meu_banco->adicionar_conta_corrente("Joao", 1500, 200); + ContaPoupanca* conta2 = meu_banco->adicionar_conta_poupanca("Maria", 1000, 2.0); + ContaPoupanca* conta3 = meu_banco->adicionar_conta_poupanca("Luiz", 3000, 1.5); + ContaPoupanca* conta4 = meu_banco->adicionar_conta_poupanca("Lara", 2000, 2.5); + ContaCorrente* conta5 = meu_banco->adicionar_conta_corrente("Luisa", 5000, 300); - conta_poupanca* conta2 = new conta_poupanca(); - conta2->titular = "Maria"; - conta2->saldo = 1000; - conta2->taxaJuros = 2.0; - - conta_poupanca* conta3 = new conta_poupanca(); - conta3->titular = "Luiz"; - conta3->saldo = 3000; - conta3->taxaJuros = 1.5; - - conta_poupanca* conta4 = new conta_poupanca(); - conta4->titular = "Lara"; - conta4->saldo = 2000; - conta4->taxaJuros = 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); - - meuBanco.exibir_todas_contas(); + meu_banco->exibir_todas_contas(); conta1->depositar(500); conta2->sacar(200); @@ -49,7 +24,7 @@ int main() { conta4->depositar(-1); conta5->sacar(5001); - meuBanco.exibir_todas_contas(); + meu_banco->exibir_todas_contas(); conta1->sacar(500); conta2->depositar(200); @@ -57,15 +32,17 @@ int main() { conta4->sacar(300); conta5->depositar(50); - meuBanco.exibir_todas_contas(); + meu_banco->exibir_todas_contas(); + + conta1->usar_cheque_especial(500); + conta2->calcular_juros(); + conta3->calcular_juros(); + conta4->calcular_juros(); + conta5->usar_cheque_especial(50); + + meu_banco->exibir_todas_contas(); - conta1->usarChequeEspecial(500); - conta2->calcularJuros(); - conta3->calcularJuros(); - conta4->calcularJuros(); - conta5->usarChequeEspecial(50); - - meuBanco.exibir_todas_contas(); + delete meu_banco; return 0; -} +} \ No newline at end of file diff --git a/vpl_exec b/vpl_exec new file mode 100755 index 0000000..420ff50 Binary files /dev/null and b/vpl_exec differ