Esta es la agenda que hice pero me hace falta una función que me permita actualizar los registros. Tengo algunas ideas de como hacerlo pero ninguna dio resultado, quería saber si alguno de ustedes me podía ayudar, gracias y saludos.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
unsigned long int DNI;
unsigned long int fnac;
char apellido[64];
char nombres[64];
}Persona;
void crearArchivo(char a[],char b[]);
void menu (char* nombreArchivo, char* control);
Persona crearPersona();
void guardarPersona(Persona persona, char* nombreArchivo);
void mostrarLista(char* nombreArchivo);
void pausar();
int main()
{
char nombreArchivo[20], control[20];
int opcion1;
printf("Ingrese el nombre del archivo(Incluya su formato): ");
scanf("%s",&nombreArchivo);
printf("Ingrese el nombre del archivo de control(Incluya su formato): ");
scanf("%s",&control);
printf("Pulse 1 si desea crear los archivos, 2 si desea proceder al menu: ");
scanf("%d",&opcion1);
if(opcion1==1)
{
fopen(nombreArchivo,"wb");
fopen(control,"wb");
fclose;
menu (nombreArchivo,control);
}
else
{
menu(nombreArchivo,control);
}
return 0;
}
void menu(char* nombreArchivo, char* control)
{
int opcion;
do{
system("cls");
printf("1. Agregar Persona\n");
printf("2. Consultar Lista\n");
printf("3. Salir\n\n");
printf("Ingresar una opcion: ");
scanf(" %d", &opcion);
if (opcion>0 && opcion<5)
{
system("cls");
switch(opcion){
case 1:
guardarPersona(crearPersona(), nombreArchivo);
break;
case 2:
mostrarLista(nombreArchivo);
break;
case 3:
printf("Fin del programa\n");
break;
}
}
else
{
printf("\nOpcion no contemplada\n");
pausar();
}
}while (opcion!=5);
}
Persona crearPersona()
{
Persona persona;
printf("DNI: ");
scanf(" %d", &persona.DNI);
printf("fnac: ");
scanf(" %d", &persona.fnac);
printf("Apellido: ");
scanf(" %s", persona.apellido);
printf("Nombres: ");
scanf(" %s", persona.nombres);
return persona;
}
void guardarPersona(Persona persona, char* nombreArchivo)
{
FILE* file= fopen(nombreArchivo, "ab");
if (file==NULL)
{
printf("Error al intentar acceder al archivo\n");
pausar();
}
else
{
fwrite(&persona, sizeof(Persona), 1, file);
printf("\nPersona guardada!\n");
pausar();
fclose(file);
}
}
void mostrarLista(char* nombreArchivo)
{
FILE* file= fopen(nombreArchivo, "rb");
if (file==NULL)
{
printf("Error al intentar acceder al archivo\n");
pausar();
}
else
{
Persona persona;
printf("%-10s %-15s %-10s %s\n\n", "DNI", "FechaDeNac", "Apellido", "Nombres");
while (fread(&persona, sizeof(Persona), 1, file))
{
printf("%-10d %-15d %-10s %s\n", persona.DNI, persona.fnac, persona.apellido, persona.nombres);
}
fclose(file);
printf("\n\n");
pausar();
}
}
void pausar()
{
printf("Presione ENTER para continuar");
while (getchar() != '\n');
getchar();
printf("");
Tienes que plantear como quieres hacerlo.
Opciones:
- Reescribir todos los registros del archivo
- Reescribir solo el registro a modificar
Saludos
ya lo resolvi pero gracias de todas formas.
unsigned long int DNI;
unsigned long int fnac;
char apellido[64];
char nombres[64];
para que hacer un long con el DNI ya de por si solo con int es un numero grande, al igual que en apellido y nombres, a lo sumo no pasan de 20 a 25 caracreres por lo cual 64 es mucho con demasiado y es mas memoria que ocupada tu programa en ejecucion
Tal vez es una base de datos Mundial y un Numero Entero no alcanza para los mas de 7 Mil millones de Personas que vivimos en la tierra.
Saludos
Honestamente fue porque la consigna así lo pedia.