// II17 2005-06 // Tema2/CuentaCorriente.cpp // 18-11-2005 #include using namespace std; #include "CuentaCorriente.h" CuentaCorriente::CuentaCorriente (string nombre, string dni) : saldo(0), cantidadMovimientos(0), ultimoMovimiento(NULL), nombreTitular(nombre), dniTitular(dni) { } float CuentaCorriente::ConsultarSaldo () const { return saldo; } void CuentaCorriente::Movimiento::Ver () const{ cout << "Fecha: "; fecha.Ver(); if (importe < 0) cout << "\tReintegro: " << -importe; else cout << "\tIngreso: " << importe; } void CuentaCorriente::VerListadoMovimientos () const { VerListadoMovimientos (cantidadMovimientos); } void CuentaCorriente::VerListadoMovimientos (int cantidad) const { VerDatosTitular(); if (ultimoMovimiento == NULL) cout << "No hay movimientos." << endl; else { cout << "Los ultimos movimientos de la cuenta son:" << endl; Nodo *aux; float s = saldo; int i; for (aux = ultimoMovimiento, i = 0; aux != NULL && i < cantidad; aux = aux->siguiente, i++) { aux->mov.Ver(); cout << "\tSaldo resultante: " << s; s -= aux->mov.importe; cout << endl; } if (aux == NULL) cout << "No hay mas movimientos." << endl; else cout << "Hay mas movimientos." << endl; } } void CuentaCorriente::VerDatosTitular () const { if (nombreTitular == "" || dniTitular == "") cout << "Faltan datos del titular en esta cuenta." << endl; else cout << "Esta cuenta pertenece a " << nombreTitular << " (DNI: " << dniTitular << ")" << endl; } CuentaCorriente::Movimiento::Movimiento (Fecha f, float i) : fecha(f), importe(i) { } CuentaCorriente::Nodo::Nodo (Movimiento m, Nodo * s) : mov(m), siguiente(s) { } void CuentaCorriente::Ingresar (Fecha fecha, float importe) { Nodo *nuevo = new Nodo (Movimiento(fecha, importe), ultimoMovimiento); ultimoMovimiento = nuevo; saldo += importe; cantidadMovimientos++; } void CuentaCorriente::Reintegrar (Fecha fecha, float importe) throw (int) { if (importe > saldo) throw -1; Ingresar(fecha, -importe); } void CuentaCorriente::LiberarCuentaCorriente () { while (ultimoMovimiento != NULL) { Nodo *aux = ultimoMovimiento->siguiente; delete ultimoMovimiento;; ultimoMovimiento = aux; } saldo = 0; cantidadMovimientos = 0; nombreTitular = ""; dniTitular = ""; } CuentaCorriente::~CuentaCorriente(){ LiberarCuentaCorriente(); } CuentaCorriente & CuentaCorriente::operator= (const CuentaCorriente &cc) { if (this != &cc) { Nodo *anterior; LiberarCuentaCorriente(); saldo = cc.saldo; cantidadMovimientos = cc.cantidadMovimientos; nombreTitular = cc.nombreTitular; dniTitular = cc.dniTitular; for (Nodo *aux = cc.ultimoMovimiento; aux != NULL; aux = aux->siguiente) { Nodo *nuevo = new Nodo(aux->mov); if (ultimoMovimiento == NULL) anterior = ultimoMovimiento = nuevo; else anterior = anterior->siguiente = nuevo; } } return *this; } CuentaCorriente::CuentaCorriente (const CuentaCorriente & cc) : ultimoMovimiento(NULL) { *this = cc; }