Tengo una pequeña complicación con un programa en "C".
Es un registro de usuarios, agrega información, los busca, etc...
El problema es que al editar un dato, al volver a hacer la consulta, se borra la información del registro excepto lo modificado.
Les dejo el código, mi problema es con "editar usuario" y que no se borre lo que NO se quiera modificar.
Ayuda, no se que hacer, al parecer se sobrescriben los datos...
Fragmento de código:
Cita:
void Modificar (FILE *clientzz) ///////////////////////////////////////// Modificar registro :.
{
int codigoBuscado;
int encontrado = 0;
int opcion;
FILE *clientzzx;
textcolor(LIGHTGREEN); gotoxy(3,5); cprintf("REG Modificar: ");
scanf("%d", &codigoBuscado);
textcolor(GREEN); gotoxy(60,5); cprintf("1.");
textcolor(WHITE); gotoxy(63,5); cprintf("Representante");
textcolor(GREEN); gotoxy(60,6); cprintf("2.");
textcolor(WHITE); gotoxy(63,6); cprintf("RFC");
textcolor(GREEN); gotoxy(60,7); cprintf("3.");
textcolor(WHITE); gotoxy(63,7); cprintf("Empresa");
textcolor(GREEN); gotoxy(60,8); cprintf("4.");
textcolor(WHITE); gotoxy(63,8); cprintf("Fecha Alta");
textcolor(GREEN); gotoxy(60,9); cprintf("5.");
textcolor(WHITE); gotoxy(63,9); cprintf("Servicio");
textcolor(GREEN); gotoxy(60,11); cprintf("6.");
textcolor(WHITE); gotoxy(63,11); cprintf("Total");
textcolor(GREEN); gotoxy(60,12); cprintf("7.");
textcolor(WHITE); gotoxy(63,12); cprintf("Cant. Recibida");
textcolor(LIGHTRED); gotoxy(60,14); cprintf("0.");
textcolor(WHITE); gotoxy(63,14); cprintf("Cancelar");
if ((clientzz = fopen("clientzz", "r")) == NULL)
{
printf ( "No existe registro" );
}
else
{
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
while (!feof(clientzz) && (encontrado != 1))
{
if (codigoBuscado == registro.codigo)
encontrado = 1;
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
}
}
fclose (clientzz);
if (encontrado == 0)
{
getchar();
sleep(1);
gotoxy(5,17); textcolor(LIGHTRED); cprintf("Registro no encontrado");
return;
}
if (encontrado == 1)
{
newregistro.newcodigo = codigoBuscado;
gotoxy(60,19);
printf("Opcion: ");
scanf("%d", &opcion);
switch(opcion)
{
case 1:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,7); cprintf("Representante: ");
gets(newregistro.newNombre);
break;
case 2:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,8); cprintf("RFC: ");
gets(newregistro.newRFC);
break;
case 3:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,10); cprintf("Empresa: ");
gets(newregistro.newEmpresa);
break;
case 4:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,11); cprintf("Fecha Alta: ");
gets(newregistro.newFecha);
break;
case 5:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,13); cprintf("Servicio: ");
gets(newregistro.newServicio);
break;
case 6:
textcolor(LIGHTGREEN); gotoxy(3,13); cprintf("Total: ");
printf("$ "); scanf("%d", &newregistro.newCtotal);
break;
case 7:
textcolor(LIGHTGREEN); gotoxy(3,13); cprintf("Cant. Recibida: ");
printf("$ "); scanf("%d", &newregistro.newCrecibida);
break;
}
if ((clientzz = fopen("clientzz", "r")) == NULL)
printf ( "No existen registros" );
else
if ((clientzzx = fopen("clientzzx", "w")) == NULL)
printf ( "No existen registros" );
else
{
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
while (!feof(clientzz))
{
if (newregistro.newcodigo == registro.codigo)
fwrite(&newregistro, sizeof(struct sRegistro), 1, clientzzx);
else
fwrite(®istro, sizeof(struct sRegistro), 1, clientzzx);
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
}
fclose (clientzz);
fclose (clientzzx);
remove("clientzz");
rename("clientzzx", "clientzz");
sleep(1);
gotoxy(5,17); textcolor(YELLOW); cprintf("Registro modificado");
gotoxy(55,19); textcolor (RED); cprintf("Click para continuar");
getchar();
}
}
return;
}
void Modificar (FILE *clientzz) ///////////////////////////////////////// Modificar registro :.
{
int codigoBuscado;
int encontrado = 0;
int opcion;
FILE *clientzzx;
textcolor(LIGHTGREEN); gotoxy(3,5); cprintf("REG Modificar: ");
scanf("%d", &codigoBuscado);
textcolor(GREEN); gotoxy(60,5); cprintf("1.");
textcolor(WHITE); gotoxy(63,5); cprintf("Representante");
textcolor(GREEN); gotoxy(60,6); cprintf("2.");
textcolor(WHITE); gotoxy(63,6); cprintf("RFC");
textcolor(GREEN); gotoxy(60,7); cprintf("3.");
textcolor(WHITE); gotoxy(63,7); cprintf("Empresa");
textcolor(GREEN); gotoxy(60,8); cprintf("4.");
textcolor(WHITE); gotoxy(63,8); cprintf("Fecha Alta");
textcolor(GREEN); gotoxy(60,9); cprintf("5.");
textcolor(WHITE); gotoxy(63,9); cprintf("Servicio");
textcolor(GREEN); gotoxy(60,11); cprintf("6.");
textcolor(WHITE); gotoxy(63,11); cprintf("Total");
textcolor(GREEN); gotoxy(60,12); cprintf("7.");
textcolor(WHITE); gotoxy(63,12); cprintf("Cant. Recibida");
textcolor(LIGHTRED); gotoxy(60,14); cprintf("0.");
textcolor(WHITE); gotoxy(63,14); cprintf("Cancelar");
if ((clientzz = fopen("clientzz", "r")) == NULL)
{
printf ( "No existe registro" );
}
else
{
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
while (!feof(clientzz) && (encontrado != 1))
{
if (codigoBuscado == registro.codigo)
encontrado = 1;
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
}
}
fclose (clientzz);
if (encontrado == 0)
{
getchar();
sleep(1);
gotoxy(5,17); textcolor(LIGHTRED); cprintf("Registro no encontrado");
return;
}
if (encontrado == 1)
{
newregistro.newcodigo = codigoBuscado;
gotoxy(60,19);
printf("Opcion: ");
scanf("%d", &opcion);
switch(opcion)
{
case 1:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,7); cprintf("Representante: ");
gets(newregistro.newNombre);
break;
case 2:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,8); cprintf("RFC: ");
gets(newregistro.newRFC);
break;
case 3:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,10); cprintf("Empresa: ");
gets(newregistro.newEmpresa);
break;
case 4:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,11); cprintf("Fecha Alta: ");
gets(newregistro.newFecha);
break;
case 5:
fflush(stdin);
textcolor(LIGHTGREEN); gotoxy(3,13); cprintf("Servicio: ");
gets(newregistro.newServicio);
break;
case 6:
textcolor(LIGHTGREEN); gotoxy(3,13); cprintf("Total: ");
printf("$ "); scanf("%d", &newregistro.newCtotal);
break;
case 7:
textcolor(LIGHTGREEN); gotoxy(3,13); cprintf("Cant. Recibida: ");
printf("$ "); scanf("%d", &newregistro.newCrecibida);
break;
}
if ((clientzz = fopen("clientzz", "r")) == NULL)
printf ( "No existen registros" );
else
if ((clientzzx = fopen("clientzzx", "w")) == NULL)
printf ( "No existen registros" );
else
{
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
while (!feof(clientzz))
{
if (newregistro.newcodigo == registro.codigo)
fwrite(&newregistro, sizeof(struct sRegistro), 1, clientzzx);
else
fwrite(®istro, sizeof(struct sRegistro), 1, clientzzx);
fread (®istro, sizeof(struct sRegistro), 1, clientzz);
}
fclose (clientzz);
fclose (clientzzx);
remove("clientzz");
rename("clientzzx", "clientzz");
sleep(1);
gotoxy(5,17); textcolor(YELLOW); cprintf("Registro modificado");
gotoxy(55,19); textcolor (RED); cprintf("Click para continuar");
getchar();
}
}
return;
}
El código es un poco largo, por lo que no puedo pegarlo... Dejo un enlace adjunto.
http://laboratoriosandoval.com/REG_Codigo.c