-
Notifications
You must be signed in to change notification settings - Fork 1
/
ContaCorrente.cpp
120 lines (92 loc) · 2.35 KB
/
ContaCorrente.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* ContaCorrente.cpp
*
* Created on: 16 de nov de 2019
* Author: rafaelamoreira
*/
#include "ContaCorrente.h"
#include "Cliente.h"
#include "SaldoDiaBase.h"
#include "Erro.h"
ContaCorrente::ContaCorrente() : Conta()
{
this->limiteCredito = 0;
}
ContaCorrente::ContaCorrente(Cliente * clienteNovo, double limiteCredito): Conta(clienteNovo) {
this->limiteCredito = limiteCredito;
}
ContaCorrente::~ContaCorrente() {
// TODO Auto-generated destructor stub
}
double ContaCorrente::getLimiteCredito()
{
return this->limiteCredito;
}
void ContaCorrente::removeElemento(int elemento) {
}
void ContaCorrente::adicionaElemento(SaldoDiaBase &sb) {
}
bool ContaCorrente::debitar(double valor, std::string descricao) {
bool transacaorealizada = false;
char debitoCredito = 'D';
Movimentacao * mov = new Movimentacao(descricao, debitoCredito, valor);
if (this->saldo + this->limiteCredito >= valor) {
this->saldo = this->saldo - valor;
this->movimentacoes.push_back(* mov);
transacaorealizada = true;
} else {
throw Erro("Saldo insuficiente");
}
delete mov;
return transacaorealizada;
}
string ContaCorrente::type() const
{
return "C";
}
void ContaCorrente::write(std::ostream& out) const
{
out << *this;
}
void ContaCorrente::read(std::istream& in)
{
in >> *this;
}
std::ostream& operator<<(std::ostream& out, const ContaCorrente& obj)
{
//Escreve o tipo da conta
out << "C" << "\n";
out << obj.numConta << "\n" << obj.saldo << "\n" << *obj.cliente << "\n" << obj.proximoNumConta << "\n" << obj.movimentacoes.size() << "\n";
for (int i = 0; i < obj.movimentacoes.size(); i++) {
out << obj.movimentacoes[i];
}
out << "\n" << obj.limiteCredito;
std::cout << std::endl;
return out;
}
std::istream& operator>>(std::istream& in, ContaCorrente& obj)
{
in >> obj.numConta;
in >> obj.saldo;
Cliente* novo = new Cliente;
in >> *novo;
obj.cliente = novo;
in >> obj.proximoNumConta;
int size;
in >> size;
for (int i = 0; i < size; i++) {
Movimentacao* aux = new Movimentacao();
in >> *aux;
obj.movimentacoes.push_back(*aux);
delete aux;
}
in >> obj.limiteCredito;
return in;
}
void ContaCorrente::creditar(double valor, std::string descricao){
char debitoCredito = 'C';
Movimentacao * mov = new Movimentacao(descricao, debitoCredito, valor);
this->saldo = this->saldo + valor;
this->movimentacoes.push_back(* mov);
delete mov;
}