alguien que pueda revisar mi codigo y ayudarme. esta en c y lo que necesito es que modifique bien y borre contacvtos del fichero solo que no se como hacerlo trate usando un fseek pero no se que hacer bien xc
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ char nombre [35]; char mail [25]; int telefono; }Contacto;
void menu (char* nombreArchivo); Contacto crearContacto(); void guardarContacto(Contacto contacto, char* nombreArchivo); void mostrarAgenda(char* nombreArchivo); void borrarContacto(Contacto contacto, char* nombreArchivo); void modificarContacto(Contacto contacto,char* nombreArchivo); void pausar(); int i,buscar=0; int main(){ char nombreArchivo[12]="agenda.bin"; menu (nombreArchivo); } void menu (char* nombreArchivo){ int opcion; do{ system ("cls"); printf("1. Crear contacto:\n"); printf("2.Consultar agenda:\n"); printf("3.borrar contacto:\n"); printf("4.Modificar contacto:\n"); printf("5.salir:\n\n"); printf("ingresa una opcion: "); scanf(" %d",&opcion); if (opcion>0 && opcion < 6){ system("cls"); switch (opcion){ case 1: guardarContacto(crearContacto(),nombreArchivo); break; case 2: mostrarAgenda (nombreArchivo); break; case 3: borrarContacto(Contacto(),nombreArchivo); break; case 4: modificarContacto(Contacto(),nombreArchivo); case 5: printf("fin del programa \n"); //pausar(); break; } } else { printf("\nOpcion no contemplada\n"); pausar (); } }while (opcion!=5); } Contacto crearContacto(){ Contacto contacto; printf("Nombre: "); scanf(" %[^\n]", contacto.nombre); printf("mail: "); scanf(" %[^\n]", contacto.mail); printf("Telefono: "); scanf(" %d", &contacto.telefono); return contacto; }
void guardarContacto(Contacto contacto, char* nombreArchivo){ FILE* file= fopen(nombreArchivo, "ab"); if (file==NULL){ printf("Error al intentar acceder al archivo\n"); pausar(); } else{ fwrite(&contacto, sizeof(Contacto), 1, file); printf("\nContacto guardado!\n"); pausar(); fclose(file); } } void mostrarAgenda(char* nombreArchivo){ FILE* file= fopen(nombreArchivo, "rb"); int i; if (file==NULL){ printf("Error al intentar acceder al archivo\n"); pausar(); } else{ Contacto contacto; printf("%2s %-35s %-25s %-14s\n", "ID", "Nombre", "mail", "Telefono"); i = 0; while (fread(&contacto, sizeof(Contacto), 1, file)){ i++; printf("%-2u %-35s %-25s %-14d\n", i, contacto.nombre, contacto.mail, contacto.telefono); } fclose(file); printf("\n\n"); pausar(); } } void borrarContacto(Contacto contacto,char*nombreArchivo){ FILE*file= fopen(nombreArchivo,"wb"); if (file==NULL){ printf("no se encontro el contacto a borrar"); pausar(); } else { fwrite(&contacto,sizeof(Contacto),1,file); printf("\n Contacto eliminado:\n"); pausar(); fclose(file); } }
void modificarContacto(Contacto contacto, char*nombreArchivo){ FILE*file= fopen(nombreArchivo,"a+b"); Contacto vec[1];
printf("ingresa el ID de registro que deseas modificar: "); scanf("%i",&buscar);
fseek(file, 100* sizeof(Contacto), SEEK_SET); fwrite(&vec,sizeof(Contacto),1,file); fseek(file, 100* sizeof(Contacto), SEEK_SET); fread(&vec,sizeof(Contacto),1,file); fgets(nombreArchivo,80,file);
ftell(file); fclose(file); } void pausar(){ printf("Presione ENTER para continuar"); while (getchar() != '\n'); getchar(); printf(""); }
|