aqui esta la solucion, ahora guarda, carga y edita los datos
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <cctype>
/*====================
[Defines]
======================*/
#define cls system("CLS");
#define File_OpenRead doc=fopen("DB_","r");
#define File_OpenWrite doc=fopen("DB_","a+");
/*====================
[Funciones]
======================*/
void guardar();
void cargar();
void buscar();
/*====================
[Base de Datos]
======================*/
FILE *doc;
struct DATA{
char nombre[13];
int edad;
};
/*====================
[Programa]
======================*/
int main()
{
fclose(doc);
int selec;
printf("1.Guardar \n2.Cargar \n3.Buscar \n"); fflush(stdin);
selec = getch();
switch(selec){
case '1':{
cls
guardar();
break;
}
case '2':{
cls
cargar();
break;
}
case '3':{
buscar();
break;
}
}
cls
printf("[ESA OPCION NO EXISTE]\n");
main();
return 0;
}
void guardar()
{
DATA e;
int selec;
File_OpenWrite // abriendo el archivo.
if(doc == NULL)
{
cls
printf("[ERROR EN EL ARCHIVO]\n");
main();
}
do{
cls
printf("Ingrese su nombre: "); fflush(stdin);
gets(e.nombre);
for (char i = 0; i < strlen(e.nombre) ; i++){
e.nombre[i] = tolower(e.nombre[i]);
}
printf("Ingrese su edad: "); fflush(stdin);
scanf("%d", &e.edad);
printf("\n\n---Nombre:%s \n---edad: %d\n", e.nombre, e.edad);
printf("\n\n1.desea finalizar el registro? \n2.Registrar otro usuario? \nElija una opcion porfavor: "); fflush(stdin);
selec = getch();
fwrite(&e, sizeof(e),1,doc);
}while(selec == '2');
fclose(doc);
cls
main();
}
void cargar()
{
File_OpenRead
DATA e;
if(doc == NULL)
{
cls
printf("[ERROR EN EL ARCHIVO]\n");
main();
}
fread(&e, sizeof(e),1,doc);
while(!feof(doc)){
printf("\nNombre.....: %s", e.nombre);
printf("\nEdad.........: %d", e.edad);
fread(&e, sizeof(e),1,doc);
}
printf("\n\nPrecione una tecla para volver...");
fclose(doc);
getch();
cls
main();
}
void buscar()
{
File_OpenWrite
DATA e;
char b_nombre[13];
if(doc == NULL)
{
cls
printf("[ERROR EN EL ARCHIVO]\n");
main();
}
cls
printf("Ingrese el nombre a buscar: \n");fflush(stdin);
gets(b_nombre);
for (char i = 0; i < strlen(b_nombre) ; i++){
b_nombre[i] = tolower(b_nombre[i]);
}
cls
while(strcmp(e.nombre, b_nombre)){
fread(&e, sizeof(e),1,doc);
if(feof(doc)){
cls
printf("[NO SE ENCONTRARON RESULTADOS]\n");
main();
}
}
printf("\nNombre.....: %s", e.nombre);
printf("\nEdad.........: %d\n", e.edad);
printf("\n\nPrecione una tecla para volver...");
fclose(doc);
getch();
cls
main();
}
Listo ya logre conseguir la solucion al problema y dejo la solucion aqui para los que necesiten hacer algo parecido..
Funcion: Funciona creando un archivo temporar y mientras que no se encuentre el dato que estas buscando se van guardando los otros...
Código:
void eliminar()
{
File_OpenRead
FILE *d_temp; d_temp = fopen("DB_TEMP", "w");
DATA e;
int b_cedula;
if(doc == NULL)
{
cls
printf("[ERROR EN EL ARCHIVO]\n");
main();
}
cls
printf("Escriba el numero de cedula del usuario que desea eliminar: "); fflush(stdin);
scanf("%d", &b_cedula);
cls
fread(&e, sizeof(e),1,doc);
while(!feof(doc)){
if((e.cedula == b_cedula)==0){
fwrite(&e, sizeof(e),1,d_temp);
}else{
printf("Estos datos han sido eliminados...");
printf("\nNombre.....: %s", e.nombre);
printf("\nCedula.....: %d", e.cedula);
printf("\nEdad.......: %d\n", e.edad);
}
fread(&e, sizeof(e),1,doc);
}
printf("\n\nPrecione una tecla para volver...");
fclose(d_temp);
fclose(doc);
remove("DB_");
rename("DB_TEMP", "DB_");
getch();
cls
main();
}