Hola gente linda! Estoy haciendo un trabajo que nos pidió el prof Méndez de Algoritmos. Es aparte del integrador y lo tenemos que hacer los que cursamos con él.
En resumen tengo que armar un sistema de viajes que tiene dos archivos binarios micros.dat y choferes.dat. En esos archivos guardo cada struct de tipo micro y de tipo chofer con los campos correspondientes y blablabla. Tenemos que usar listas (todavía no me doy cuenta si tienen que ser simple o doblemente enlazadas).
La duda que tengo yo es más de la parte algorítmica, no termino de darme cuenta si el manejo de los datos en el programa con los archivos tiene que ser puramente con punteros y nodos y como manejar el tema del ordenado de los datos y la busqueda de un registro en particular. Hay algo que estoy haciendo mal y no me doy cuenta.
Adjunto el pdf con la consigna completa y el pedazo de codigo que me está volviendo loca.
struct Chofer {
char apellido[50];
char nombre[50];
char dni[20];
int nro_contrato;
};
struct NodoListaChoferes
{
Chofer info; // Datos de el nodo
NodoListaChoferes *sgte; // Puntero al siguiente nodo
};
void ListaChoferInsertar (NodoListaChoferes *&n, Chofer x) // inserta un nodo al final del utimo nodo de la lista
{
NodoListaChoferes *nuevo= new NodoListaChoferes();
nuevo->info=x;
if (n!=NULL)
{
nuevo->sgte= n->sgte;
n->sgte = nuevo;
}
else
{
nuevo->sgte= n;
n= nuevo;
}
}
/*TODO: metodo para buscar el dni */
int buscar(char DNI[])
{
FILE *f;
int encontrado =0;
struct Chofer p;
if (f=fopen(ARCHIVOCHOFERES,"rb"))
{
while(!feof(f) && !encontrado)
{
fread(&p,sizeof(Chofer),1,f);
if (strcmp(DNI, p.dni)==0)
{
encontrado = 1;
}
}
if (!encontrado)
printf("No se encontro la persona buscada.\n");
fclose(f);
return 1;
}
return 0;
}
bool ingresarNuevoChofer()
{
FILE *f;
NodoListaChoferes *nodoChoferes = NULL;
Chofer ch;
if (f=fopen(ARCHIVOCHOFERES,"ab"))
{
cout << "Ingrese apellido:" << endl;
cin >> ch.apellido;
cout << "Ingrese nombre:" << endl;
cin >> ch.nombre;
cout << "Ingrese DNI:" << endl;
cin >> ch.dni;
cout << "Ingrese numero de contrato:" << endl;
cin >> ch.nro_contrato;
if(!(buscar(ch.dni)))
{
ListaChoferInsertar(nodoChoferes, ch); /**ACA ME ESTOY HACIENDO LA ENSALADA**/
fwrite(&ch, sizeof(Chofer),1,f);
fclose(f);
return true;
}
else
{
cout << "El numero de documento ingresado ya existe" << endl;
fclose(f);
}
}
return false;
}
Si me dan una mano con eso se los re agradezco!!!!
Saludos!