You are on page 1of 11

#include <iostream> #include <cstdlib> #include <string.

h> #include <fstream>

using namespace std;

struct datos { char nombre[50]; int telefono; char direccion[50]; char email[50]; int valido; //valido=1->si existe valido=0->no existe

int valido2; //checara si el registro es correcto... siempre sera igual a 1706887114 };

int menu() { int n=0; system("cls"); cout<<endl<<endl; cout<<" cout<<" cout<<" cout<<" ==========================================="<<endl; || AGENDA PERSONAL ||"<<endl;

==========================================="<<endl; || 1. AGREGAR NUEVO REGISTRO ||"<<endl;

cout<<" cout<<" cout<<" cout<<"

|| || ||

2. BUSCAR REGISTRO

||"<<endl;

3. MOSTRAR TODOS LOS REGISTROS ||"<<endl; 4. SALIR ||"<<endl;

==========================================="<<endl<<endl;

while ((n<1) || (n>4)) { cout<<" cout<<endl; return n; } Introduce un numero de las opciones listadas arriba [1-4]: "; cin>>n; }

void agregar(struct datos d) { char na='s'; while (na=='s') { char nn='x'; //nn=verificacion para agregar el registro system ("cls"); //borramos pantalla //guardamos los datos temporalmente en el struct cout<<"Nombre: "; cin>> d.nombre; cout<<"Telefono: "; cin>> d.telefono; cout<<"Direccion: "; cin>> d.direccion; cout<<"Email: "; cin>> d.email; cout<<endl; d.valido=1; //decimos ke el registro si existe d.valido2=1706887114; //con esto garantizamos ke es uno de nuestros registros //na=preguntar si kiere nuevo registro

//verificamos si kiere agregar el nuevo registro

while ((nn!='s') && (nn!='n')) { cout<<endl<<"Deseas agregar el nuevo registro? [s-n]: "; cin>>nn; }

//agregamos if (nn=='s') { ofstream reg("registros.dat", ios::app | ios::binary); //activamos el archivo en modo de escritura tomando en cuenta el parametro "app" para agregar en la ultima posicion del archivo if(!reg) //si no se pudo abrir el archivo

{ cout <<"No se puede abrir el fichero."; } reg.seekp(0, ios::end); // Colocar el cursor al final del archivo reg.write((char *) &d, sizeof(d)); //escribimos el nuevo registro reg.close(); //cerramos el archivo cout<<endl<<"Registro agregado exitosamente"<<endl; system("pause"); } else { //borramos los datos temporales del struct strcpy(d.nombre,""); d.telefono=0; strcpy(d.direccion,""); strcpy(d.email,""); d.valido=0; d.valido2=0; cout<<endl<<"El Registro NO fue agregado"<<endl;

system("pause"); } na='x'; while ((na!='s') && (na!='n')) { cout<<endl<<endl<<"Deseas agregar un registro nuevo? [s-n]: "; cin>>na; } //la validacion se hace en el while inicial }//endwhile }

void modificar(struct datos d, int nm) { char nnm='x'; system ("cls"); //borramos pantalla //guardamos los datos temporalmente en el struct cout<<"Nombre: "; cin>> d.nombre; cout<<"Telefono: "; cin>> d.telefono; cout<<"Direccion: "; cin>> d.direccion; cout<<"Email: "; cin>> d.email; cout<<endl; d.valido=1; //decimos ke si existe d.valido2=1706887114;

//verificamos si kiere modificar el registro while ((nnm!='s') && (nnm!='n')) { cout<<endl<<"Deseas modificar este registro? [s-n]: "; cin>>nnm; }

//agregamos

if (nnm=='s') { ofstream reg("registros.dat", ios::out | ios::binary); //activamos el archivo en modo de escritura (creamos el objeto 'reg') if(!reg) //si no se pudo abrir el archivo

{ cout <<"No se puede abrir el fichero."; } reg.seekp((nm-1)*sizeof(d)); modificar //colocamos el apuntador en la posicion inicial del registro a

reg.write((char *) &d, sizeof(d)); //escribimos el nuevo registro reg.close(); //cerramos el archivo cout<<endl<<"Registro modificado exitosamente"<<endl; } else { //borramos los datos temporales del struct strcpy(d.nombre,""); d.telefono=0; strcpy(d.direccion,""); strcpy(d.email,""); d.valido=1; d.valido2=0; cout<<endl<<"El Registro NO fue modificado"<<endl; } system("pause"); }

void eliminar(struct datos d, int ne) { system ("cls"); //borramos pantalla d.valido=0; //modificamos "valid0" del struct para decir ke ese registro no sera tomado en cuenta d.valido2=1706887114; //agregamos nuestra garantia de registro

//ahora actualizamos el registro ofstream reg("registros.dat", ios::out | ios::binary); //activamos el archivo en modo de escritura (creamos el objeto 'reg') if(!reg) //si no se pudo abrir el archivo

{ cout <<"No se puede abrir el fichero."<<endl; system("pause");} reg.seekp((ne-1)*sizeof(d)); modificar //colocamos el apuntador en la posicion inicial del registro a

reg.write((char *) &d, sizeof(d)); //escribimos el nuevo registro reg.close(); //cerramos el archivo cout<<endl<<"Registro eliminado"<<endl; system("pause"); }

void buscar(struct datos d) { int nb1=0, nb=-2; //nb1=variable auxiliar para saber si kiere volver a buskar o salir nb=variable ke guarda el #de registro buskado while (nb1<4) { if (nb1==2)

{ modificar(d, nb); } else { if (nb1==3) { eliminar(d, nb); } } system("cls"); //borramos pantalla int nb=-2; while (nb<0) { cout<<"Introduce el registro a buscar [0 para salir]: "; cin>>nb; } if (nb!=0) //si kiere buskar... { ifstream reg("registros.dat", ios::in | ios::binary); (creamos el objeto 'reg') reg.seekg((nb-1)*sizeof(d)); encontrado //activa el archivo en modo de lectura

//colocamos el apuntador en la posicion inicial del registro

reg.read((char *) &d, sizeof d);

//leemos el registro encontrado

//verificamos que el registro es correcto if ((d.valido==1) && (d.valido2==1706887114)) { cout<<endl<<endl<<"--------Registro encontrado--------"<<endl; cout<<"Nombre: "<<d.nombre<<endl<<"Telefono: "<<d.telefono<<endl<<"Direccion: "<<d.direccion<<endl<<"Email: "<<d.email<<endl<<endl; cout<<endl; //imprimimos menu de opciones cout<<" cout<<" cout<<" ================================"<<endl; || OPCIONES ||"<<endl;

================================"<<endl;

cout<<" cout<<" cout<<" cout<<" cout<<" nb1=0;

|| 1. NUEVA BUSQUEDA

||"<<endl;

|| 2. MODIFICAR REGISTRO ||"<<endl; || 3. ELIMINAR REGISTRO ||"<<endl; || 4. SALIR ||"<<endl;

================================"<<endl<<endl;

while ((nb1<1) || (nb1>4)) { cout<<" cout<<endl; }//endif ((d.valido==1) && (d.valido2==1706887114)) else //si el registro encontrado no es correcto { cout<<endl<<"El registro buscado no existe"<<endl; system("pause"); nb1=1; } }//endif (nb!=0) else //si ya se kiere salir Introduce un numero de las opciones listadas arriba [1-4]: "; cin>>nb1; }

{ nb1=4; } //igualamos la bandera a 4 para ke se salga } //endwhile }

void mostrar(struct datos d) { int nb11=0,con=0,nme=0,bandera=0; //nb1=variable auxiliar para saber si kiere volver a buskar o salir nb=variable ke guarda el #de registro buskado

while (nb11<3) { if (nb11==1) { modificar(d, nme); } else { if (nb11==2) { eliminar(d, nme); } } system("cls"); //borramos pantalla ifstream reg("registros.dat", ios::in | ios::binary); (creamos el objeto 'reg') con=0; bandera=0; while (reg && !reg.eof()) { reg.seekg((con)*sizeof(d)); encontrado //colocamos el apuntador en la posicion inicial del registro //activa el archivo en modo de lectura

reg.read((char *) &d, sizeof d);

//leemos el registro encontrado

con++; //incrementamos contador del registro //verificamos que el registro es correcto if ((d.valido==1) && (d.valido2==1706887114)) { bandera=1; cout<<endl<<"--------Registro "<<con<<"--------"<<endl; cout<<"Nombre: "<<d.nombre<<endl<<"Telefono: "<<d.telefono<<endl<<"Direccion: "<<d.direccion<<endl<<"Email: "<<d.email<<endl<<endl;

}//endif }//endwhile if (bandera==1) { cout<<endl<<endl; //imprimimos menu de opciones cout<<" cout<<" cout<<" cout<<" cout<<" cout<<" cout<<" nb11=0; //preguntamos por ke opcion kiere realizar while ((nb11<1) || (nb11>3)) { cout<<" nme=0; while ((nme<1) && (nb11<3)) { cout<<" Introduce el numero del registro: "; cin>>nme; } Introduce un numero de las opciones listadas arriba [1-4]: "; cin>>nb11; } ================================"<<endl; || OPCIONES ||"<<endl;

================================"<<endl; || 1. MODIFICAR REGISTRO ||"<<endl; || 2. ELIMINAR REGISTRO ||"<<endl; || 3. SALIR ||"<<endl;

================================"<<endl<<endl;

}//endif bandera=1 else { cout<<"No existen registros!"<<endl; system("pause"); nb11=3;} } //endwhile }

int main()

{ struct datos d; int x=0; fstream ("registros.dat", ios::out | ios::in | ios::binary); //creamos el archivo int n=0,band=0; while (band==0) { n=menu(); switch (n) { case 1: agregar(d); break; case 2: buscar(d); break; case 3: mostrar(d); break; case 4: band=1; break; } } system("PAUSE"); return 0; }

You might also like