Advertisement
nahuelbkn

segundoParcialLaboratorio

Jul 3rd, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.69 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. #define archMonos "monotributistas.bin"
  7.  
  8. typedef struct {
  9.     int dni;
  10.     char nombreYapellido[30];
  11.     char categoria; /// a,b,c,d,etc...
  12.     float recaudacion;
  13. } monotributista;
  14.  
  15. /// PROTOTIPADO
  16. int cargar_monotributistas (monotributista m[], int dimension);
  17. void mostrar_array_monotributistas (monotributista m[], int cant);
  18. void ordenacion_por_seleccion (monotributista m[], int cant);
  19. int encontrar_menor_pos (monotributista m[], int cant, int pos);
  20. void array_to_archivo (monotributista m[], int cant);
  21. void mostrar_archivo ();
  22. int cantidad_registros ();
  23. float porcentaje_categoria (char categoria);
  24. void mostrar_registro (int reg);
  25. /// FIN PROTOTIPADO
  26.  
  27. int main() {
  28.     monotributista monos[30];
  29.     int cant_monos = cargar_monotributistas (monos, 30);
  30.     system("pause");
  31.  
  32.     system("cls");
  33.     mostrar_array_monotributistas(monos, cant_monos);
  34.     system("pause");
  35.  
  36.     system("cls");
  37.     ordenacion_por_seleccion (monos, cant_monos);
  38.     mostrar_array_monotributistas(monos, cant_monos);
  39.     system("pause");
  40.  
  41.     system("cls");
  42.     array_to_archivo(monos, cant_monos);
  43.     mostrar_archivo();
  44.     system("pause");
  45.  
  46.     system("cls");
  47.     int cant_reg=cantidad_registros();
  48.     printf("La cantidad de registros en el archivo es de: %d\n", cant_reg);
  49.     system("pause");
  50.  
  51.     system("cls");
  52.     char cat;
  53.     printf("De que categoria quiere conocer el pocentaje de monotributistas? ");
  54.     fflush(stdin);
  55.     scanf("%c", &cat);
  56.     float porcent= porcentaje_categoria (cat);
  57.     printf("\nEl porcentaje que supone esa categoria es de %.2f%% del total.\n", porcent);
  58.     system("pause");
  59.  
  60.     system("cls");
  61.     int reg;
  62.     printf("Que registro desea ver? ");
  63.     scanf("%d", &reg);
  64.     mostrar_registro (reg);
  65.     return 0;
  66. }
  67. /// carga el array de monotributistas
  68. int cargar_monotributistas (monotributista m[], int dimension) {
  69.     int i=0;
  70.     int control='s';
  71.  
  72.     while (i<dimension && control=='s'){
  73.         puts("\n|| CARGAR MONOTRIBUTISTA ||");
  74.         printf("Ingrese nombre y apellido: ");
  75.         fflush(stdin);
  76.         gets(&m[i].nombreYapellido);
  77.  
  78.         printf("Ingrese su DNI: ");
  79.         scanf("%d", &m[i].dni);
  80.  
  81.         printf("Ingrese su categoria: ");
  82.         fflush(stdin);
  83.         scanf("%c", &m[i].categoria);
  84.  
  85.         printf("Ingrese su recaudadion: ");
  86.         scanf("%f", &m[i].recaudacion);
  87.         i++;
  88.  
  89.         printf("\nDesea cargar otro registro? (S/N)\n");
  90.         control=getch();
  91.     }
  92.     return i;
  93. }
  94. /// muestra el array de monotributistas
  95. void mostrar_array_monotributistas (monotributista m[], int cant) {
  96.     int i=0;
  97.  
  98.     while (i<cant) {
  99.         puts("\n|| MONOTRIBUTISTAS ||");
  100.         printf("Nombre y apellido: %s\n", m[i].nombreYapellido);
  101.         printf("              DNI: %d\n", m[i].dni);
  102.         printf("        Categoria: %c\n", m[i].categoria);
  103.         printf("      Recaudacion: %f\n", m[i].recaudacion);
  104.         i++;
  105.     }
  106. }
  107. /// funcion auxiliar para la ordenacion
  108. int encontrar_menor_pos (monotributista m[], int cant, int pos) {
  109.     int i=pos+1;
  110.     int menorPos=pos;
  111.     int menorDni=m[pos].dni;
  112.  
  113.     while (i<cant){
  114.         if (menorDni>m[i].dni) {
  115.             menorDni=m[i].dni;
  116.             menorPos=i;
  117.         }
  118.         i++;
  119.     }
  120.  
  121. return menorPos;
  122. }
  123. /// ordena los elementos del arreglo por DNI
  124. void ordenacion_por_seleccion (monotributista m[], int cant) {
  125.     int i=0;
  126.     int menor;
  127.     monotributista aux;
  128.  
  129.     while (i<cant) {
  130.         menor=encontrar_menor_pos(m, cant, i);
  131.         aux=m[menor];
  132.         m[menor]=m[i];
  133.         m[i]=aux;
  134.         i++;
  135.     }
  136. }
  137. /// pasa del arreglo al archivo los monotributistas con una recaudacion de mas de 25000
  138. void array_to_archivo (monotributista m[], int cant) {
  139.     int i=0;
  140.     monotributista aux;
  141.     FILE *archi=fopen(archMonos, "ab");
  142.  
  143.     if (archi!=NULL) {
  144.         while (i<cant) {
  145.             aux=m[i];
  146.             if (aux.recaudacion>=25000) {
  147.                 fwrite(&aux, sizeof(monotributista),1,archi);
  148.             }
  149.             i++;
  150.         }
  151.         fclose(archi);
  152.     } else {
  153.         printf("El archivo no pudo ser abierto.");
  154.     }
  155. }
  156. /// muestra el archivo cargado en la func anterior
  157. void mostrar_archivo () {
  158.     FILE *archi=fopen(archMonos, "rb");
  159.     monotributista m;
  160.  
  161.     if (archi!=NULL) {
  162.         puts("\n|| MONOTRIBUTISTAS ||");
  163.         while (fread(&m, sizeof(monotributista),1,archi)>0) {
  164.             printf("Nombre y apellido: %s\n", m.nombreYapellido);
  165.             printf("              DNI: %d\n", m.dni);
  166.             printf("        Categoria: %c\n", m.categoria);
  167.             printf("      Recaudacion: %f\n\n", m.recaudacion);
  168.         }
  169.         fclose(archi);
  170.     } else {
  171.         printf("\nEl archivo no se pudo abrir.");
  172.     }
  173. }
  174. /// devuelve la cant de registros ingresados al archivo
  175. int cantidad_registros () {
  176.     int regs=0;
  177.     FILE *archi=fopen(archMonos, "rb");
  178.  
  179.     if (archi!=NULL) {
  180.         fseek(archi, 0, SEEK_END);
  181.         regs=ftell(archi)/sizeof(monotributista);
  182.     } else {
  183.         printf("El archivo no se pudo abrir.\n");
  184.     }
  185.     return regs;
  186. }
  187. /// devuelve el porcentaje que significa una categoria sobre el total
  188. float porcentaje_categoria (char categoria) {
  189.     int total_monos=cantidad_registros();
  190.     int total_categoria=0;
  191.     float porcent;
  192.  
  193.     monotributista aux;
  194.     FILE *archi=fopen(archMonos, "rb");
  195.  
  196.     if (archi!=NULL){
  197.         while (fread(&aux, sizeof(monotributista),1,archi)>0){
  198.             if (aux.categoria==categoria){
  199.                 total_categoria++;
  200.             }
  201.         }
  202.         fclose(archi);
  203.     } else {
  204.         printf("El archivo no se pudo abrir.\n");
  205.     }
  206.     porcent=(total_categoria*100)/total_monos;
  207.  
  208.     return porcent;
  209. }
  210. /// muestra un registro especifico
  211. void mostrar_registro (int reg) {
  212.     int pos=reg-1;
  213.     int cant=cantidad_registros();
  214.     FILE *archi=fopen(archMonos, "rb");
  215.     monotributista aux;
  216.  
  217.     if (archi!=NULL){
  218.         if (pos<cant) {
  219.             fseek(archi, sizeof(monotributista)*(reg-1), SEEK_SET);
  220.             fread(&aux, sizeof(monotributista),1,archi);
  221.             puts("\n|| MONOTRIBUTISTA ELEGIDO ||");
  222.             printf("Nombre y apellido: %s\n", aux.nombreYapellido);
  223.             printf("              DNI: %d\n", aux.dni);
  224.             printf("        Categoria: %c\n", aux.categoria);
  225.             printf("      Recaudacion: %f\n", aux.recaudacion);
  226.         } else {
  227.             printf("El registro buscado no existe");
  228.             printf("Te pasaste de la cantidad maxima de registros");
  229.         }
  230.         fclose(archi);
  231.     } else {
  232.         printf("El archivo no pudo ser abierto.\n");
  233.     }
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement