SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: i82maria en Martes 14 de Junio de 2005, 13:51
-
Hola buenas, tengo un problemilla a la hora de hacer una funcion, resulta que me piden, que teniendo un fichero de texto de clientes (nombre, apellidos, dni, y direccion) y uno de coches(tipo, matricula, coste), debo visualizar dad su matricula un coche, y su clienre correspondiente. Y bueno tengo la idea, de que si tengo q abrir los dos ficheros, primero en el de coches, buscar la matricula, pero luego, me pierdo a la hora de relacionar, para buscar el Nif en el de clientes, y q me muestre aquel cliente q tiene ese coche.
Tambien cuenta con un registro binario, (matri, NIF), tengo q hacer uso de este, para relacionar los otros?.
Aqui pongo el codigo q he hecho, si alguien puede ayudarme, para decirme donde tengo el fallo, no consigo q me ejecute bien.
[CODE]
int consultaCocheCliente(int matri)
{
FILE *fp1, *fp2, *fp3;
struct vehiculo c1;
struct propietario p1;
struct vehiculoPropietario bin;
int coincide = 0;
fp1 = fopen("vehiculos.txt", "r");
fp2 = fopen("propietarios.txt", "r");
fp3 = fopen("vehiculosPropietario.bin", "rb");
while(fscanf(fp1, "%s %d %f", c1.tipo, &c1.matri, &c1.coste) == 3)
{
if(c1.matri == bin.matri)
{
while(fscanf(fp2, "%s %s %s %s", p1.nombre, p1.apellidos, p1.NIF, p1.direccion) ==4)
{
if(strcmp(p1.NIF, bin.NIF)==0)
{
imprimirCocheMatricula(bin.matri);
imprimirPropietarioNIF(p1.NIF);
coincide = 1;
}
}
}
}
return(coincide);
fclose(fp1);
fclose(fp2);
fclose(fp3);
}
Gracias
Saludos Maria
-
si ;)
-
si ;)
Vale pero como se hace en C, es q tengo dudas acerca de ello.
-
debes tener abiertos los tres archivos y a medida que sacas registros de uno, saces los del otro, es decir:
1- buscas la matricula del automovil en el archivo d automoviles
2- con la matricula buscas en el archivo de autos-nif el NIF correspondiente a esa matricula
3- con el nif buscas en la tabla de nif los datos que faltan.
Por supues que hay muchas maneras de hacerlo, todo depende de comoq uieras y del tamaño los archivos, si son pequeños (menos de 2 mb por archivo) lo que puedes hacer es cargar todos los archivos, cada uno en un array en memoria y luego hacer las busquedas sobre los arrays.
Si quieres algo mas profesional podrias hacer un ordenamiento de datos y usar algoritmos de busqueda.. pero te quitaria mas tiempo.
-
debes tener abiertos los tres archivos y a medida que sacas registros de uno, saces los del otro, es decir:
1- buscas la matricula del automovil en el archivo d automoviles
2- con la matricula buscas en el archivo de autos-nif el NIF correspondiente a esa matricula
3- con el nif buscas en la tabla de nif los datos que faltan.
Por supues que hay muchas maneras de hacerlo, todo depende de comoq uieras y del tamaño los archivos, si son pequeños (menos de 2 mb por archivo) lo que puedes hacer es cargar todos los archivos, cada uno en un array en memoria y luego hacer las busquedas sobre los arrays.
Si quieres algo mas profesional podrias hacer un ordenamiento de datos y usar algoritmos de busqueda.. pero te quitaria mas tiempo.
Lo primero gracias por responderme, veras seria una cosa asi, en C:
[CODE]
fp1 = fopen("vehiculos.txt", "r");
fp2 = fopen("propietarios.txt", "r");
fp3 = fopen("vehiculosPropietario.bin", "rb");
while(fscanf(fp1, "%s %d %f", c1.tipo, &c1.matri, &c1.coste) == 3)
{
while(fscanf(fp2, "%s %s %s %s", p1.nombre, p1.apellidos, p1.NIF, p1.direccion) == 4)
{
while(fread(&bin, sizeof(struct vehiculoPropietario),1, pf1)==1)
{
if(c1.matri == matri)
{
encontrado = 1;
c1.matri = bin.matri;
if(strcmp(bin.NIF,p1.NIF )==0){
imprimirCoche(matri);
imprimirCliente(bin.NIF);
Seria algo asi???
-
si ya tienes la idea ;)
-
si ya tienes la idea ;)
Pero no me funciona, porfi, me puedes decir como seria exactamente la funcion.
Gracias