Tengo al personal en un fichero y las ventas en otro, la cuestion es que si borro un empleado debo borrar tambien todas las ventas que a realizado y no me funciona esa parte.
Si alguien me pudiera ayudar estaria muy agradecido
Estas son las estructuras, he intentado realiazar la tarea de borrar las ventas que ha realizado una persona, ambas coinciden por el campo NIF.
Para ello he recorido el fichero de ventas moviendo la posicion bloque a bloque con el tamaño de la estructura, comparando el NIF del la estructura ventas con NIF de la persona ha borrar. Y no me funciona.
Que esta mal en el codigo?
Código:
struct persona { char nif[tam]; char nombre[tam]; char direccion[tam]; char tf[tam]; int puesto; float comision; int control_alta; }; struct venta { char nif[18]; float cantidad; char fecha[10]; int control_alta; };
Código:
void bajaspersonal() { FILE *canal; FILE *canal2; struct persona p; struct venta v; int num; while((canal=fopen("personal","r+b"))==NULL) { canal=fopen("personal","wb"); fclose(canal); } while((canal2=fopen("ventas","r+b"))==NULL) { canal=fopen("ventas","wb"); fclose(canal); } do { fflush(stdin); do { clrscr(); gotoxy(21,7); printf("Introduce el numero de cliente: "); scanf("%d",&num); } while(num<1||num>MAX); p.control_alta='0'; fseek(canal,(num-1)*sizeof(struct persona),SEEK_SET); fread(&p,sizeof(struct persona),1,canal); if(p.control_alta!='1') { gotoxy(10,20); printf("Empleado no existente"); } else { pantalla_datos(); gotoxy(17,7); printf("%s",p.nif); gotoxy(17,9); printf("%s",p.nombre); gotoxy(17,11); printf("%s",p.direccion); gotoxy(17,13); printf("%s",p.tf); gotoxy(54,13); printf("%f",p.comision); gotoxy(25,18); printf("Puesto %s",puestos[p.puesto-1]); printf("\nSe borraran todas las ventas realizadas por este empleado"); if(pregunte_s_n("\nConfirma la baja?(S/N):")=='S') {/*Borra las ventas y el empleado*/ for(int i=0;i<=numven && !feof(canal2);i++) /* numven contiene el numero de ventas que se han realizado*/ { //Mientras no llege al final del archivo y haya ventas fseek(canal2,i*sizeof(struct venta),SEEK_SET); fread(&v,sizeof(struct venta),1,canal2); if(p.nif==v.nif) { v.control_alta='0'; // Borra la venta del empleado fseek(canal2,(i-1)*sizeof(struct venta),SEEK_SET); fwrite(&v,sizeof(struct venta),1,canal2); numven-=num; } } p.control_alta='0';//Borra el empleado fseek(canal,(num-1)*sizeof(struct persona),SEEK_SET); fwrite(&p,sizeof(struct persona),1,canal); numper=num-1; } } } while(pregunte_s_n("Mÿs bajas?(S/N):")=='S'); menupersonal(); fclose(canal); fclose(canal2); }