// II17 2005-06 // Tema1/CuentaCorriente.cpp // 21-10-2005 #include using namespace std; #include "CuentaCorriente.h" CuentaCorriente ConstruirCuentaCorriente (string nombre, string dni) { CuentaCorriente cc; cc.saldo = 0; cc.cantidadMovimientos = 0; cc.ultimoMovimiento = NULL; cc.nombreTitular = nombre; cc.dniTitular = dni; return cc; } float ConsultarSaldo (CuentaCorriente cc) { return cc.saldo; } void VerMovimiento (Movimiento movimiento) { cout << "Fecha: "; VerFecha(movimiento.fecha); if (movimiento.importe < 0) cout << "\tReintegro: " << -movimiento.importe; else cout << "\tIngreso: " << movimiento.importe; } void VerListadoMovimientos (CuentaCorriente cc) { VerListadoMovimientos (cc, cc.cantidadMovimientos); } void VerListadoMovimientos (CuentaCorriente cc, int cantidad) { VerDatosTitular(cc); if (cc.ultimoMovimiento == NULL) cout << "No hay movimientos." << endl; else { cout << "Los ultimos movimientos de la cuenta son:" << endl; NodoCuentaCorriente *aux; float s = cc.saldo; int i; for (aux = cc.ultimoMovimiento, i = 0; aux != NULL && i < cantidad; aux = aux->siguiente, i++) { VerMovimiento(aux->mov); 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 VerDatosTitular (CuentaCorriente cc) { if (cc.nombreTitular == "" || cc.dniTitular == "") cout << "Faltan datos del titular en esta cuenta." << endl; else cout << "Esta cuenta pertenece a " << cc.nombreTitular << " (DNI: " << cc.dniTitular << ")" << endl; } void Ingresar (CuentaCorriente &cc, Fecha fecha, float importe) { NodoCuentaCorriente *nuevo = new NodoCuentaCorriente; nuevo->mov.fecha = fecha; nuevo->mov.importe = importe; nuevo->siguiente = cc.ultimoMovimiento; cc.ultimoMovimiento = nuevo; cc.saldo += importe; cc.cantidadMovimientos++; } void Reintegrar (CuentaCorriente &cc, Fecha fecha, float importe) throw (int) { if (importe > cc.saldo) throw -1; Ingresar(cc, fecha, -importe); } void LiberarCuentaCorriente (CuentaCorriente & cc) { while (cc.ultimoMovimiento != NULL) { NodoCuentaCorriente *aux = cc.ultimoMovimiento->siguiente; delete cc.ultimoMovimiento;; cc.ultimoMovimiento = aux; } cc.saldo = 0; cc.cantidadMovimientos = 0; cc.nombreTitular = ""; cc.dniTitular = ""; }