Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.51 KB | None | 0 0
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8. struct tCliente
  9. {
  10.        char dni[10];
  11.        char nombre[50];
  12.        char apellidos[50];
  13. };
  14.  
  15. struct tCuenta
  16. {
  17.        char codCuenta[5];
  18.        char dni[10];
  19.        double saldo;
  20. };
  21.  
  22. struct tMovimiento
  23. {
  24.        char codCuenta[5];
  25.        double cantidad;
  26. };
  27.  
  28. void insertarCliente(char nfichero[], tCliente cliente);
  29. void insertarCuentaNueva(char nfichero[],char dni[]);
  30. bool buscarCliente(char nfichero[], char dni[], tCliente &cliente);
  31. void altaCuenta(char nfciherocuentas[],char nficheroclientes);
  32.  
  33. /*
  34. Dado el nombre de un fichero y un cliente, se encarga de insertar el cliente en el fichero, manteniendo el orden
  35. lexicográfico por DNI. Si no existe el fichero se encarga de crearlo
  36. */
  37.  
  38. void insertarCliente(char nfichero[], tCliente cliente)
  39. {
  40.      fstream f,faux;
  41.      tCliente aux;
  42.      f.open(nfichero,ios::in|ios::binary);
  43.      if (f)
  44.      {
  45.             faux.open("auxiliar.DAT",ios::in|ios::binary);
  46.             if (faux)
  47.             {
  48.                       f.read((char *) &aux,sizeof(aux));
  49.                       while (!f.eof()&&strcmp(aux.dni,cliente.dni<0))
  50.                       {
  51.                             faux.write((char *) &aux,sizeof(aux));
  52.                             f.read((char *) &aux,sizeof(aux));
  53.                       }
  54.                       faux.write((char *) &cliente,sizeof(aux));
  55.                       while(!f.eof())
  56.                       {
  57.                             faux.write((char *) &aux,sizeof(aux));
  58.                             f.read((char *) &aux,sizeof(aux));    
  59.                       }
  60.                       faux.close();
  61.                       f.close();
  62.                       delete(nfichero);
  63.                       rename("auxiliar.DAT",nfichero);
  64.             }      
  65.             else
  66.             {
  67.                 cout<<"Error: No se ha podido escribir el nuevo cliente";
  68.             }
  69.      }
  70.      else
  71.      {
  72.          cout<<endl<<"No se encontró fichero de clientes, se ha uno nuevo."<<endl;
  73.          f.open(nfichero,ios::in|ios::binary);    
  74.          if (f)
  75.          {
  76.                f.write((char *) &cliente,sizeof(cliente));
  77.                f.close();
  78.          }
  79.          else
  80.          {
  81.              cout<<"Error: No se encontro fichero de clientes y no se pudo crear uno nuevo";
  82.          }
  83.      }
  84. }
  85.  
  86. /* Dado un DNI, y un fichero donde buscar el cliente, devuelve true si el DNI pertenece a un
  87. cliente archivado en ese fichero y falso en caso contrario. En el primer caso, modifica la variable
  88. cliente con los datos del cliente buscado.
  89. Si el fichero no existe, muestra un error por pantalla y devuelve falso.
  90. */
  91.  
  92. bool buscarCliente(char nfichero[], char dni[], tCliente &cliente)
  93. {
  94.      fstream f;
  95.      tCliente aux;
  96.      f.open(nfichero,ios::in|ios::binary);
  97.      if (f)
  98.      {
  99.            f.read((char *) &aux,sizeof(aux));
  100.            while (!f.eof())
  101.            {
  102.                  if (strcmp(aux.dni,dni)==0)
  103.                  {
  104.                                             cliente=aux;
  105.                                             return true;
  106.                  }
  107.            f.read((char *) &aux,sizeof(aux));
  108.            }
  109.            f.close();
  110.            return false;
  111.      }
  112.      else
  113.      {
  114.          cout<<"Error al intentar abrir el archivo "<<nfichero<<" para la busqueda por DNI";
  115.          return false;
  116.      }
  117. }
  118.      
  119. /*
  120. Inserta una nueva cuenta bancaria en el fichero de cuentas con el DNI que le pasamos, saldo 0
  121. y Codigo que le corresponde.
  122. Si no existe se encarga de crearlo
  123. */    
  124. void insertarCuentaNueva(char nfichero[], char dni[])
  125. {
  126.      fstream f;
  127.      int codigo;
  128.      tCuenta cuenta;
  129.  
  130.      
  131.      // Para asignar el código, se busca el último numero y se le suma uno, si es el primero, se asigna el 1000
  132.      f.open(nfichero,ios::in|ios::binary);
  133.      if (f)
  134.      {
  135.            f.read((char *) &cuenta,sizeof(cuenta));
  136.            while (!f.eof())
  137.            {
  138.                  f.read((char *) &cuenta,sizeof(cuenta));
  139.            }
  140.            f.close();
  141.            itoa(atoi(cuenta.codCuenta)+1,cuenta.codCuenta,10);
  142.      }
  143.      else
  144.      {
  145.          strcpy(cuenta.codCuenta,"1000");
  146.      }    
  147.      //Resto de datos de la nueva cuenta
  148.      cuenta.saldo=0;
  149.      strcpy(cuenta.dni,dni);
  150.      
  151.      //Escribimos la cuenta:
  152.      f.open(nfichero,ios::app|ios::binary);
  153.      if (f)
  154.      {
  155.            f.write((char *) &cuenta,sizeof(cuenta));
  156.            f.close();
  157.      }
  158.      else
  159.      {
  160.          cout<<endl<<"No se pudo escribir el fichero de cuentas";
  161.      }
  162. }
  163.            
  164.                
  165. void altaCuenta(char nficherocuentas[],char nficheroclientes)
  166. {
  167.      tCliente cliente;
  168.      char dni[10];
  169.      cout<<"DNI del cliente? ";
  170.      fflush(stdin);
  171.      fgets(dni,sizeof(dni),stdin);  
  172.  
  173.      if (buscarCliente(nficheroclientes,dni,cliente))
  174.      {
  175.                                                             insertarCuentaNueva(nficherocuentas,dni);
  176.      }
  177.      else
  178.      {
  179.          cout<<endl<<"El cliente no figura en la base de datos. Creando un nuevo cliente:"<<endl;
  180.          cout<<endl<<"Nombre?";
  181.          fflush(stdin);
  182.          fgets(cliente.nombre,sizeof(cliente.nombre),stdin);
  183.          cout<<endl<<"Apellidos?";
  184.          fgets(cliente.apellidos,sizeof(cliente.apellidos),stdin);
  185.          strcpy(cliente.dni,dni);
  186.          insertarCliente(nficheroclientes,cliente);
  187.          insertarCuentaNueva(nficherocuentas,dni);
  188.      }                                            
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement