Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- #include <cstring>
- #include <fstream>
- using namespace std;
- struct tCliente
- {
- char dni[10];
- char nombre[50];
- char apellidos[50];
- };
- struct tCuenta
- {
- char codCuenta[5];
- char dni[10];
- double saldo;
- };
- struct tMovimiento
- {
- char codCuenta[5];
- double cantidad;
- };
- void insertarCliente(char nfichero[], tCliente cliente);
- void insertarCuentaNueva(char nfichero[],char dni[]);
- bool buscarCliente(char nfichero[], char dni[], tCliente &cliente);
- void altaCuenta(char nfciherocuentas[],char nficheroclientes);
- /*
- Dado el nombre de un fichero y un cliente, se encarga de insertar el cliente en el fichero, manteniendo el orden
- lexicográfico por DNI. Si no existe el fichero se encarga de crearlo
- */
- void insertarCliente(char nfichero[], tCliente cliente)
- {
- fstream f,faux;
- tCliente aux;
- f.open(nfichero,ios::in|ios::binary);
- if (f)
- {
- faux.open("auxiliar.DAT",ios::in|ios::binary);
- if (faux)
- {
- f.read((char *) &aux,sizeof(aux));
- while (!f.eof()&&strcmp(aux.dni,cliente.dni<0))
- {
- faux.write((char *) &aux,sizeof(aux));
- f.read((char *) &aux,sizeof(aux));
- }
- faux.write((char *) &cliente,sizeof(aux));
- while(!f.eof())
- {
- faux.write((char *) &aux,sizeof(aux));
- f.read((char *) &aux,sizeof(aux));
- }
- faux.close();
- f.close();
- delete(nfichero);
- rename("auxiliar.DAT",nfichero);
- }
- else
- {
- cout<<"Error: No se ha podido escribir el nuevo cliente";
- }
- }
- else
- {
- cout<<endl<<"No se encontró fichero de clientes, se ha uno nuevo."<<endl;
- f.open(nfichero,ios::in|ios::binary);
- if (f)
- {
- f.write((char *) &cliente,sizeof(cliente));
- f.close();
- }
- else
- {
- cout<<"Error: No se encontro fichero de clientes y no se pudo crear uno nuevo";
- }
- }
- }
- /* Dado un DNI, y un fichero donde buscar el cliente, devuelve true si el DNI pertenece a un
- cliente archivado en ese fichero y falso en caso contrario. En el primer caso, modifica la variable
- cliente con los datos del cliente buscado.
- Si el fichero no existe, muestra un error por pantalla y devuelve falso.
- */
- bool buscarCliente(char nfichero[], char dni[], tCliente &cliente)
- {
- fstream f;
- tCliente aux;
- f.open(nfichero,ios::in|ios::binary);
- if (f)
- {
- f.read((char *) &aux,sizeof(aux));
- while (!f.eof())
- {
- if (strcmp(aux.dni,dni)==0)
- {
- cliente=aux;
- return true;
- }
- f.read((char *) &aux,sizeof(aux));
- }
- f.close();
- return false;
- }
- else
- {
- cout<<"Error al intentar abrir el archivo "<<nfichero<<" para la busqueda por DNI";
- return false;
- }
- }
- /*
- Inserta una nueva cuenta bancaria en el fichero de cuentas con el DNI que le pasamos, saldo 0
- y Codigo que le corresponde.
- Si no existe se encarga de crearlo
- */
- void insertarCuentaNueva(char nfichero[], char dni[])
- {
- fstream f;
- int codigo;
- tCuenta cuenta;
- // Para asignar el código, se busca el último numero y se le suma uno, si es el primero, se asigna el 1000
- f.open(nfichero,ios::in|ios::binary);
- if (f)
- {
- f.read((char *) &cuenta,sizeof(cuenta));
- while (!f.eof())
- {
- f.read((char *) &cuenta,sizeof(cuenta));
- }
- f.close();
- itoa(atoi(cuenta.codCuenta)+1,cuenta.codCuenta,10);
- }
- else
- {
- strcpy(cuenta.codCuenta,"1000");
- }
- //Resto de datos de la nueva cuenta
- cuenta.saldo=0;
- strcpy(cuenta.dni,dni);
- //Escribimos la cuenta:
- f.open(nfichero,ios::app|ios::binary);
- if (f)
- {
- f.write((char *) &cuenta,sizeof(cuenta));
- f.close();
- }
- else
- {
- cout<<endl<<"No se pudo escribir el fichero de cuentas";
- }
- }
- void altaCuenta(char nficherocuentas[],char nficheroclientes)
- {
- tCliente cliente;
- char dni[10];
- cout<<"DNI del cliente? ";
- fflush(stdin);
- fgets(dni,sizeof(dni),stdin);
- if (buscarCliente(nficheroclientes,dni,cliente))
- {
- insertarCuentaNueva(nficherocuentas,dni);
- }
- else
- {
- cout<<endl<<"El cliente no figura en la base de datos. Creando un nuevo cliente:"<<endl;
- cout<<endl<<"Nombre?";
- fflush(stdin);
- fgets(cliente.nombre,sizeof(cliente.nombre),stdin);
- cout<<endl<<"Apellidos?";
- fgets(cliente.apellidos,sizeof(cliente.apellidos),stdin);
- strcpy(cliente.dni,dni);
- insertarCliente(nficheroclientes,cliente);
- insertarCuentaNueva(nficherocuentas,dni);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement