#include <iostream>
#include <fstream> // file stream
#include <iomanip>
#include <string>
#include <cstdlib>
using namespace std;
enum RequestType { ZERO_BALANCE = 1, CREDIT_BALANCE, DEBIT_BALANCE, END };
int getRequest(); // Obtener la consulta del usuario
bool shouldDisplay( int, double ); // determina si mostrar o no un registro
void outputLine( int, const string, double ); // muestra un regostro
int main(){
// El constructor ifstream abre el archivo
ifstream inClientFile( "clientes1.txt", ios::in );
// Sale del programa si ifstream no puede abrir el archivo
if( !inClientFile ){
cerr << "No se pudo abrir el archivo" << endl;
exit( 1 ); // sale con codigo de error
} // end if
int request;
int cuenta;
string nombre;
double saldo;
// Obtener el requerimiento del usuario
// (p.ej., Saldo Cero, Saldo con Credito o saldo con Debito)
request = getRequest();
// procesar el requerimiento del usuario
while( request != END ) {
switch( request ){
case ZERO_BALANCE:
cout << "\nCuentas con Saldo Cero:\n";
break;
case CREDIT_BALANCE:
cout << "\nCuentas de saldos con crédito:\n";
break;
case DEBIT_BALANCE:
cout << "\nCuentas con saldos de Debito:\n";
break;
} // end switch
// leer cuenta, nombre y saldo del archivo
inClientFile >> cuenta >> nombre >> saldo;
// Muestra el contenido hasta encontrar eof)
while( !inClientFile.eof() ) {
// Mostrar el registro
if ( shouldDisplay( request, saldo ) )
outputLine( cuenta, nombre, saldo );
// leer la cuenta, nombre y saldo del archivo
inClientFile >> cuenta >> nombre >> saldo;
} // fin while interno
inClientFile.clear(); // reset del eof para la siguiente entrada
inClientFile.seekg( 0 ); // reposicionarse al inicio del archivo
request = getRequest(); // obtener el requerimiento adicional del usuario
} // fin while externo
cout << "Fin de la corrida." << endl;
} // end main
// Muestra un registro del archivo de entrada
void outputLine( int cuenta, const string nombre, double saldo ){
cout<<left<<setw(10)
<<cuenta<<setw(13)
<<nombre<<setw(7)<<setprecision(2)
<<right
<<saldo<<endl;
} // fin de outputLine()
// Obtener requerimiento del usuario
int getRequest(){
int request; // requerimiento del usuario
// mostrar opciones de requerimiento
cout<<"\nIngrese Requerimiento" << endl
<<" 1 - Listado de cuentas con saldo cero" << endl
<<" 2 - Listado de cuentas con saldo de crédito" << endl
<<" 3 - Listado de cuentas con saldo de débito" << endl
<<" 4 - Finalizar programa" << fixed << showpoint;
do{ // ingresar el requerimiento del usuario
cout<< "\n? ";
cin>> request;
}while( request < ZERO_BALANCE && request > END );
return request;
} // fin de la funcion getRequest
// Determinar si se debe mostrar o no el registro dado
bool shouldDisplay( int type, double saldo ){
// determinar si mostrar o no saldos en cero
if ( type == ZERO_BALANCE && saldo == 0 )
return true;
// determinar si mostrar o no saldos con crédito
if ( type == CREDIT_BALANCE && saldo > 0 )
return true;
// determinar si mostrar o no saldos con débito
if ( type == DEBIT_BALANCE && saldo < 0 )
return true;
return false;
} // fin de la funcion shouldDisplay
100 jose 100.12
200 juan -399.3
300 carlos 299.99
400 Pedro 0.00
100 jose 100.12
200 juan -399.3
300 carlos 299.99
400 Pedro 0.00