jueves, 25 de abril de 2013

Archivos en C++

Esta vez les traigo un código en c++, donde se utiliza lo que es archivos (.dat).
Tomando como ejemplo, suponiendo, una cuenta en un banco cualquiera. Una simulación de lo que sería abrir una cuenta en un banco de la localidad.

Bueno, no quiero adentrarme a la teoría, mas bien, solo al código suponiendo que los conceptos que se utilizan en este código ya han sido "masticado y digeridos" o sea aprendidos.

En este caso se utiliza lo que son estructuras, una estructura llamada banco que contiene el nombre, un numero de cuenta que se incrementa automáticamente a medida que vayamos agregando un usuario y un saldo que nos servirá para hacer las transacciones cotidianas (depositar, retirar, consultar...).

A esta estructura le pondremos como seudónimo la variable bank, el cual le agregaremos o lo convertiremos en un vector de 50 clientes, se podría hacer dinámicamente, pero este sería otra clase :). Y bueno, tiene un menú el cualquier nos indicará que queremos hacer con nuestra cuenta ficticia.

Bueno cualquiera pregunta, escríbanme al correo msantos01@hotmail.com. Así sabré si por lo menos ven mis aportes, sino pues que sea de buen provecho para ustedes. 

Aquí esta el código

#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<conio.h>

struct banco {
  char nombre[20];
  int cuenta;
  float saldo;
};
typedef struct banco bank;

/***********************************************************************/

main()
{
  bank cliente[50];
  int cant_cliente=0, opc;

  int menu(void);
  int abrir(bank cliente[], int cant_cliente);
  void depositar(bank cliente[], int cant_cliente);
  void retirar(bank cliente[], int cant_cliente);
  void consultar(bank cliente[], int cant_cliente);
  int recuperar(bank cliente[], int cant_cliente);
  void guardar(bank cliente[], int cant_cliente);

  cant_cliente = recuperar(cliente, cant_cliente);

  do {
    opc=menu();
      switch(opc) {
case 1: cant_cliente=abrir(cliente,cant_cliente);
break;

case 2: depositar(cliente,cant_cliente);
break;

case 3: retirar(cliente,cant_cliente);
break;

case 4: consultar(cliente,cant_cliente);
break;

case 5: guardar(cliente,cant_cliente);
cout<<"\n SALIENDO......"<<endl;
getch();
break;

default: cout<<"NO ES OPCION......"<<endl;
getch();
break;
      }
  } while(opc!=5);
}

/***********************************************************************/

int menu(void)
{
  int opc;
    clrscr();  /* Limpia pantalla */
  cout<<"BANCO NACIONAL"<<endl;
  cout<<"\n1. Apertura de cuenta"<<endl;
  cout<<"2. Depositar en cuenta"<<endl;
  cout<<"3. Retirar de la cuenta"<<endl;
  cout<<"4. Consultar cuenta"<<endl;
  cout<<"5. Salir del menu"<<endl;
  cout<<"\n Escoja una opcion: ";
  cin>>opc;

  return(opc);
}

/***********************************************************************/

int recuperar(bank cliente[50], int cant_cliente)
{
  ifstream entrada;                                       
  entrada.open("C:\CUENTAS.dat");

  if(!entrada) {
    cout<<"Error en la apertura"<<endl;
    cout<<"Posiblemente el banco inicia operaciones"<<endl;
    getch();
  }
  else {
    while(!entrada.eof()) {
      entrada>>cliente[cant_cliente].nombre;
      entrada>>cliente[cant_cliente].cuenta;
      entrada>>cliente[cant_cliente].saldo;
      cant_cliente++;
    }
  cant_cliente-=1;
  }

  entrada.close();
  return(cant_cliente);
}

/***********************************************************************/

void guardar(bank cliente[50], int cant_cliente)
{
  int i;
  ofstream salida;
  salida.open("C:\CUENTAS.dat");

  if(!salida) {
    cout<<"ERROR"<<endl;
  }
  else {
    for(i=0; i<cant_cliente; i++) {
      salida<<cliente[i].nombre<<" ";
      salida<<cliente[i].cuenta<<" ";
      salida<<cliente[i].saldo<<" ";
      salida<<"\n";
    }
  }
  salida.close();
}

/***********************************************************************/

int abrir(bank cliente[50], int cant_cliente)
{
  int c=0;
  cout<<"\nIntroduzca el nombre: ";
  cin>>cliente[cant_cliente].nombre;
  cout<<"Introduzca el saldo de apertura: ";
  cin>>cliente[cant_cliente].saldo;
  c+=cant_cliente;
  c++;
  cliente[cant_cliente].cuenta=c;
  cout<<"\nSu numero de cuenta es: "<<cliente[cant_cliente].cuenta;
  getch();
  cant_cliente++;

  return(cant_cliente);
}

/***********************************************************************/

void consultar(bank cliente[50], int cant_cliente)
{
  int i, n_cuenta, pos=-1;

  cout<<"\nInserte el numero de su cuenta: ";
  cin>>n_cuenta;
    for(i=0; i<cant_cliente; i++) {
      if(n_cuenta==cliente[i].cuenta)
pos=i;
    }

    if(pos!=-1) {
      cout<<"\n Cliente: "<<cliente[pos].nombre<<endl;
      cout<<" Usted posee en su cuenta: B/"<<cliente[pos].saldo<<endl;
    }
    else {
      cout<<"\nLa cuenta no esta registrada"<<endl;
    }
    getch();

    return;
}

/***********************************************************************/

void depositar(bank cliente[50], int cant_cliente)
{
  int i, n_cuenta, pos=-1;
  float deposito;

  cout<<"\nInserte el numero de su cuenta: ";
  cin>>n_cuenta;
    for(i=0; i<cant_cliente; i++) {
      if(n_cuenta==cliente[i].cuenta)
pos=i;
    }

    if(pos!=-1) {
      cout<<"\n Cuanto es el deposito: ";
      cin>>deposito;
      cliente[pos].saldo+=deposito;
    }
    else {
      cout<<"\nLa cuenta no esta registrada"<<endl;
      getch();
    }

  return;
}

/***********************************************************************/

void retirar(bank cliente[50], int cant_cliente)
{
  int i, n_cuenta, pos=-1;
  float retiro;

  cout<<"\nInserte el numero de su cuenta: ";
  cin>>n_cuenta;
    for(i=0; i<cant_cliente; i++) {
      if(n_cuenta==cliente[i].cuenta)
pos=i;
    }

    if(pos!=-1) {
      cout<<"\n Cuanto es el retiro: ";
      cin>>retiro;
if(retiro > cliente[pos].saldo) {
 cout<<"\n No dispone de tal cantidad"<<endl;
 getch();
}
else {
 cliente[pos].saldo-=retiro;
}
    }
    else {
      cout<<"\nLa cuenta no esta registrada"<<endl;
      getch();
    }

  return;
}  

/********************************************************************************/

y como siempre, estas son las capturas del programa.


Este es el mensaje que nos aparece en la primera ejecución, ya que se crea el archivo CUENTAS.dat que en mi caso se encuentra en BORLANDC/BIN/. allí se guardarán los datos y saldos de nuestro banco ficticio.







Y bueno,.. eso es todo.

Algo más, si quieres donar a mi blog, se le agradecería mucho, ya que me animaría a publicar más programas hecho por este servidor. Gracias.

No hay comentarios:

Publicar un comentario