Advertisement
gonzalob

Untitled

May 17th, 2022
670
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct
  5. {
  6.     char nombreCalle[50];
  7.  
  8. } Direccion;
  9.  
  10. typedef struct
  11. {
  12.     char nombre[50];
  13.     int edad;
  14.     int arreglo_notas[50];
  15.     int validos_notas;
  16.  
  17.     Direccion direccionAlumno;
  18.  
  19. } Alumno;
  20.  
  21. Alumno cargarAlumno();
  22. void mostrarArreglo(int arreglo[50],int validos);
  23.  
  24. void mostrarAlumno(Alumno unAlumno);
  25.  
  26. Direccion cargarDireccion();
  27. void mostrarDireccion(Direccion d);
  28.  
  29.  
  30. int main()
  31. {
  32.  
  33.  
  34.  
  35.     mostrarUnRegistro("datos.info",3);
  36.     /*
  37.  
  38.      //este es nuestro buffer!
  39.     FILE * bufferarchivo;
  40.  
  41.     bufferarchivo = fopen("datos.info","rb");
  42.  
  43.     if (bufferarchivo == NULL )
  44.     {
  45.         printf("El archivo no existe\n");
  46.  
  47.         fclose(bufferarchivo);
  48.  
  49.         bufferarchivo = fopen("datos.info","wb");
  50.  
  51.         int validos = 0;
  52.  
  53.         char mander = 's';
  54.  
  55.  
  56.         if (bufferarchivo != NULL)
  57.         {
  58.             printf("todo ok\n");
  59.  
  60.             while (mander == 's')
  61.             {
  62.                 Alumno aux = cargarAlumno();
  63.  
  64.                 fwrite(&aux,sizeof(Alumno),1,bufferarchivo);
  65.  
  66.                 validos++;
  67.  
  68.                 printf("Desea seguir con los alumnos\n");
  69.                 fflush(stdin);
  70.                 scanf("%c",&mander);
  71.             }
  72.         }
  73.         else
  74.         {
  75.             printf("error");
  76.         }
  77.  
  78.         fclose(bufferarchivo);
  79.  
  80.         bufferarchivo = fopen("datos.info","rb");
  81.  
  82.         if (bufferarchivo!=NULL)
  83.         {
  84.              //podemos leerlo!
  85.             Alumno unAlumno;
  86.             //1-cargar a la variable del primer parametro (carga lo leido)
  87.             //2-devolver la cant. bytes para saber si leyo o no
  88.             //3-pasar el cursor a la siguiente "posicion"
  89.             while (fread(&unAlumno,sizeof(Alumno),1,bufferarchivo)>0)
  90.             {
  91.                 mostrarAlumno(unAlumno);
  92.             }
  93.         }
  94.  
  95.         fclose(bufferarchivo);
  96.  
  97.  
  98.     }
  99.  
  100.  
  101.  
  102.  
  103.     /*
  104.     for (int i=0; i<validos; i++)
  105.     {
  106.        // mostrarAlumno(facultad[i]);
  107.  
  108.       // facultad[i].direccionAlumno.nombreCalle
  109.  
  110.         /*
  111.  
  112.         printf("edad %d\n",facultad[i].edad);
  113.  
  114.         for (int j=0;j<facultad[i].validos_notas;j++)
  115.         {
  116.          printf("edad %d\n",facultad[i].arreglo_notas[j]);
  117.  
  118.         }
  119.  
  120.     }
  121.     */
  122.  
  123.     return 0;
  124. }
  125.  
  126. void mostrarUnRegistro(char nombre[50],int pos)
  127. {
  128.     int contador = contarRegistro(nombre);
  129.  
  130.     FILE * archi = fopen(nombre,"rb");
  131.  
  132.  
  133.     Alumno unAlumno;
  134.     if (archi !=NULL)
  135.     {
  136.         if (pos <= contador)
  137.         {
  138.             // 10 * 4 -> 40
  139.             fseek(archi,sizeof(Alumno)*(pos-1),SEEK_SET);
  140.             if (fread(&unAlumno,sizeof(Alumno),1,archi)>0)
  141.             {
  142.                 mostrarAlumno(unAlumno);
  143.             }
  144.         }
  145.         else
  146.         {
  147.             printf("no existe ese registro\n");
  148.         }
  149.  
  150.     }
  151.     fclose(archi);
  152. }
  153.  
  154. int contarRegistro(char nombre[50])
  155. {
  156.     int cantidad = 0;
  157.     long tam = 0;
  158.     FILE * archi = fopen(nombre,"rb");
  159.     if (archi !=NULL)
  160.     {
  161.         fseek(archi,0,SEEK_END); //desde el final (SEEK_END) me desplazo 0
  162.         tam = ftell(archi);//cant. bytes hasta el cursor
  163.         cantidad = tam / sizeof(Alumno);
  164.         //printf("la cantidad es %d",cantidad);
  165.     }
  166.  
  167.     fclose(archi);
  168.     return cantidad;
  169. }
  170.  
  171. void mostrarAlumno(Alumno unAlumno)
  172. {
  173.     printf("---Alumno---\n");
  174.  
  175.     printf("edad %d\n",unAlumno.edad);
  176.  
  177.  
  178.     mostrarDireccion(unAlumno.direccionAlumno);
  179.  
  180.     mostrarArreglo(unAlumno.arreglo_notas,unAlumno.validos_notas);
  181. }
  182.  
  183. void mostrarArreglo(int arreglo[50],int validos)
  184. {
  185.     printf("---Notas---\n");
  186.  
  187.     for (int i=0; i<validos; i++)
  188.     {
  189.         printf("nota %d\n",arreglo[i]);
  190.     }
  191. }
  192.  
  193.  
  194. Alumno cargarAlumno()
  195. {
  196.     Alumno temp;
  197.  
  198.     printf("---Alumno---\n");
  199.     printf("Ingrese edad del alumno\n");
  200.     fflush(stdin);
  201.     scanf("%d",&temp.edad);
  202.  
  203.     char izard = 's';
  204.  
  205.     int validos = 0;
  206.  
  207.  
  208.     temp.direccionAlumno = cargarDireccion();
  209.  
  210.     printf("---Notas---\n");
  211.  
  212.     while (izard == 's')
  213.     {
  214.  
  215.         printf("Ingrese nota\n");
  216.         fflush(stdin);
  217.         scanf("%d",&temp.arreglo_notas[validos]);
  218.  
  219.         validos++;
  220.  
  221.         printf("Desea seguir con las notas\n");
  222.         fflush(stdin);
  223.         scanf("%c",&izard);
  224.     }
  225.  
  226.     temp.validos_notas = validos;
  227.  
  228.     return temp;
  229.  
  230. }
  231.  
  232. Direccion cargarDireccion()
  233. {
  234.     Direccion unaDireccion;
  235.     printf("---Direccion---\n");
  236.  
  237.     printf("Ingrese nombre de la calle\n");
  238.     fflush(stdin);
  239.     gets(unaDireccion.nombreCalle);
  240.  
  241.     return unaDireccion;
  242. }
  243.  
  244. void mostrarDireccion(Direccion d)
  245. {
  246.     printf("---Direccion---\n");
  247.     printf("%s\n",d.nombreCalle);
  248. }
  249.  
Advertisement
RAW Paste Data Copied
Advertisement