• Sábado 14 de Diciembre de 2024, 22:57

Autor Tema:  Re: Hola, Una Duda Con Ficheros Y Estructuras...  (Leído 1224 veces)

rizzla

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Hola, Una Duda Con Ficheros Y Estructuras...
« en: Sábado 16 de Junio de 2007, 16:55 »
0
Bueno primero que todo soy nuevo en este foro, espero me sea de gran ayuda :), lo que pasa es lo siguiente, estoy tratando de hacer una agenda que guarde datos de personas con memoria dinamica, estructuras y los datos deben ir guardados en un archivo.txt, ya tengo la parte en la que me ingresa los datos, pero no se como puedo acceder a ellos para poder modificarlos o borrarlos y tambien debo ordenar los datos del fichero segun el rut es decir de menor rut a mayor....aca les dejo el codigo para ver si alguien puede ayudarme...de antemano gracias...
Código: Text
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. struct agenda{ /*Creación de la estructura*/
  5. char *name /*Variable que guarda el nombre de la persona*/;
  6. char *paterno; /*Variable que guarda el apellido paterno de la persona*/
  7. char *materno; /*Variable que guarda el apellido materno de la persona*/
  8. char *mail; /*Variable que guarda el correo electronico de la persona*/
  9. int rut;  /*Variable que guarda el rut de la persona*/
  10. char *phone; /*Variable que guarda el telefono de la persona*/  
  11. }; /*Estructura Creada*/
  12.  
  13. /*Declaracion de Funciones*/
  14. int menu ();
  15. int validacion();
  16. void llenado (struct agenda personas);
  17. void modificado (struct agenda people);
  18. void busqueda (struct agenda files);
  19. /*Fin de declaracion de funciones*/  
  20.  
  21. int menu () /*Funcion de Menu Principal*/
  22. {
  23. int opcion; /*Variable que guarda la decision tomada por el usuario*/
  24. system ("clear");
  25. printf ("\n");  
  26. printf ("___________ Menu Principal ___________\n");
  27. printf ("(1)Ingresar datos al sistema.\n");
  28. printf ("(2)Modificar datos del sistema.\n");
  29. printf ("(3)Buscar datos.\n");
  30. printf ("(4)Salir.\n");
  31. printf ("Escoja Opcion:\n");
  32. printf ("________ Hecho por Pablo Munoz. _______\n");
  33. scanf ("%d",&opcion);  
  34. return (opcion);
  35. }
  36.  
  37. void llenado (struct agenda personas)
  38. {
  39. struct agenda *c; /*puntero de tipo agenda que apunta a la estructura*/
  40. struct agenda nodo[n]; /*Cadena de tipo agenda que contiene cada campo de la estructura (cadena de estructura)*/
  41. FILE *puntero;  /*Puntero de tipo FILE que apuntara al archivo que queramos crear/modificar*/
  42. int i=0;
  43. int j;
  44. int b;   /*Variable que almacena el valor del rut para ser enviado a la funcion validacion*/
  45. int k;    /*Guarda el valor que retorna la funcion validacion i.e almacena el codigo verificador*/
  46. int v;   /*Almacena el codigo verificador ingresado por el usuario y lo compara con k para validar si son iguales*/
  47. int opc; /*Variable que indica si estan los datos ingresados por el usuario de manera correcta*/
  48. int opi; /*Variable que indica si el usuario quiere seguir ingresando usuarios*/  
  49. char buffer[50];  /*Buffer temporal que almacena los datos ingresados como NOMBRE por el usuario*/
  50. char buffer1[50]; /*Buffer temporal que almacena los datos ingresados como APELLIDO PATERNO por el usuario*/
  51. char buffer2[50]; /*Buffer temporal que almacena los datos ingresados como APELLIDO MATERNO por el usuario*/
  52. char buffer3[50]; /*Buffer temporal que almacena los datos ingresados como TELEFONO por el usuario*/
  53. char buffer4[50]; /*Buffer temporal que almacena los datos ingresados como MAIL por el usuario*/
  54.    c=(struct agenda *)malloc(sizeof(struct agenda));  
  55.   printf ("Ingrese RUT, sin codigo verificador:  ");
  56.   scanf ("%d",&b);
  57.   k=validacion(b);
  58.   do{
  59.   printf ("Ingrese Codigo Verificador.\nEn caso de ser K, reemplazelo por un 0 (cero):  ");
  60.   scanf ("%d",&v);
  61.   if (k!=v) printf ("Ingrese un codigo valido:\n");
  62.     }
  63.   while (k!=v);
  64.     personas.rut=b;
  65.  
  66.    
  67.   printf ("\nIngrese Nombre:  ");
  68.   scanf("%s",buffer);
  69.   c->name=(char *)malloc(strlen(buffer)+1);
  70.   if (c->name) strcpy(c->name,buffer);
  71.      
  72.  
  73.   printf ("Ingrese Apellido Paterno:  ");
  74.   scanf("%s",buffer1);
  75.   c->paterno=(char *)malloc(strlen(buffer1)+1);
  76.   if (c->paterno) strcpy(c->paterno,buffer1);
  77.    
  78.    
  79.   printf ("Ingrese Apellido Materno:  ");
  80.   scanf("%s",buffer2);
  81.   c->materno=(char *)malloc(strlen(buffer2)+1);
  82.   if (c->materno) strcpy(c->materno,buffer2);
  83.  
  84.   printf ("Ingrese Numero de Telefono:  ");
  85.   scanf("%s",buffer3);
  86.   c->phone=(char *)malloc(strlen(buffer3)+1);
  87.   if (c->phone) strcpy(c->phone,buffer3);
  88.      
  89.    
  90.   printf ("Ingrese Correo Electronico:  ");
  91.   scanf("%s",buffer4);
  92.   c->mail=(char *)malloc(strlen(buffer4)+1);
  93.   if (c->mail) strcpy(c->mail,buffer4);
  94.  
  95.   do
  96.   {
  97.   printf ("\n");
  98.     printf ("_____________________________________\n");  
  99.    printf ("RUT: %d-%d\n",personas.rut,v);
  100.   printf ("Nombre: %s\n",c->name);
  101.   printf ("Apellido Paterno: %s\n",c->paterno);
  102.   printf ("Apellido Materno: %s\n",c->materno);
  103.   printf ("Telefono: %s\n", c->phone);
  104.   printf ("Correo Electronico: %s\n",c->mail);  
  105.  
  106.   printf ("¿Estan los datos correctos?\n 1) Si \n 2) No (volvera al menu principal)\n");
  107.   scanf ("%d",&opc);
  108.   if (opc==1)
  109.   {
  110.     system ("clear");
  111.     printf ("¿Desea Agregar Otra Persona?\n1) Si \n2) No\n");
  112.     scanf("%d",&opi);
  113.     if (opi==1){
  114.   puntero=fopen("datos.txt","a");
  115.   if (puntero == '\0') printf ("Error al abrir el archivo");
  116.   fprintf(puntero,"%d %s %s %s %s %s\n",personas.rut,c->name,c->paterno,c->materno,c->phone,c->mail);                  
  117.   fclose(puntero);    
  118.   llenado(*c);
  119.     }
  120.     if (opi==2){
  121.   puntero=fopen("datos.txt","a");
  122.   if (puntero == '\0') printf ("Error al abrir el archivo");
  123.   fprintf(puntero,"%d %s %s %s %s %s\n",personas.rut,c->name,c->paterno,c->materno,c->phone,c->mail);                  
  124.   fclose(puntero);    
  125.   printf ("Datos Guardados de forma exitosa.");
  126.   main();
  127.     }
  128.   }
  129.   if (opc==2) main();
  130.     if (opc!=1 && opc!=2) printf ("Ingrese una opcion valida por favor.\n");
  131.   }  
  132.   while (opc>2 || opc<1);        
  133. }  
  134.  
  135. void modificado (struct agenda people)
  136. {
  137. struct agenda *c;
  138. struct agenda nodo[50];  
  139. char cad[80];
  140. int rut;
  141. FILE *puntero;
  142.   c=(struct agenda *)malloc(sizeof(struct agenda));  
  143.   printf ("Ingrese RUT de la persona que desea modificar, sin codigo verificador:  ");
  144.   scanf ("%d",&rut);
  145.   puntero=fopen("datos.txt","r");
  146.   if (puntero == '\0') printf ("Error al abrir el archivo");
  147.     while (feof!=0){
  148. /*fread( *buffer, tamaño, nº de veces, puntero_fichero );*/
  149.     fclose(puntero);
  150.     }
  151. }  
  152.  
  153. void busqueda (struct agenda files)
  154. {
  155. }
  156.  
  157. int validacion (int rut) /*Funcion de validacion del RUT*/
  158. {
  159. int acumulador=0; /*Variable que va sumando la multiplicacion del ultimo digito del rut por el contador*/
  160. int multiplo; /*Variable que almacena la multiplicacion el digito del RUT por un contador*/
  161. int contador=2; /*Variable que es multiplicada por el digito del RUT (es 2 porque el algoritmo de validacion es asi*/
  162. int digito; /*Variable que almacena el digito verificador*/
  163. int rutdigito; /*Variable que almacena el codigo verificador ingresado por el usuario validado para el K y el 0*/
  164. while (rut!=0){
  165. multiplo=(rut%10)*contador;
  166. acumulador=acumulador+multiplo;
  167. rut=rut/10;
  168. contador=contador+1;
  169. if(contador==8) contador=2;
  170. }
  171. digito=11-(acumulador%11);
  172. rutdigito=digito;
  173. if (digito==10) rutdigito=0;
  174. if (digito==11) rutdigito=0;
  175. return (rutdigito);
  176. }  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184. /*Main*/
  185. main ()
  186. {
  187.  
  188. struct agenda *gente;/*Creamos un puntero del tipo agenda de nombre gente i.e cuando queramos enviar la estructura a una funcion, solo utilizaremos *gente*/
  189. int op;/*Variable que almacena el valor que retorna la funcion menu (es decir la decision de lo que quiera hacer el usuario con el programa*/
  190.   op=menu();
  191.       switch (op)
  192.     {
  193.       case 1: llenado(*gente);
  194.           main();
  195.       break;
  196.       case 2: modificado(*gente);
  197.           main();
  198.       break;
  199.       case 3: busqueda(*gente);
  200.             main();
  201.       break;
  202.       case 4: system ("clear");
  203.       printf ("Hecho por Pablo Muñoz Moreno.\n");
  204.       break;
  205.       default:printf ("\n\nOpcion no valida. Reintente por favor.");
  206.       main();    
  207.         break;
  208.     }
  209. }
  210.  

rizzla

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Hola, Una Duda Con Ficheros Y Estructuras...
« Respuesta #1 en: Sábado 16 de Junio de 2007, 17:34 »
0
nadie? :(

weps84

  • Miembro MUY activo
  • ***
  • Mensajes: 138
    • Ver Perfil
Re: Hola, Una Duda Con Ficheros Y Estructuras...
« Respuesta #2 en: Martes 19 de Junio de 2007, 18:30 »
0
buenbo realmente tendrias que leer linea por linea y separar la informacion para que puedas tener acceso a ella con fgets();