Advertisement
gonzalob

Untitled

Jun 30th, 2020
1,446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.67 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct
  6. {
  7.     char NyA[30];
  8.     char tipoCuenta[30]; //ahorro en pesos - ahorro en dólares - ahorro en bitcoins
  9.     int dni;
  10.     float monto;
  11. } stCuentaBancaria;
  12.  
  13. float verificarMonto();
  14. void cargarCuentas(char nombreArchivo[20]);
  15. int verifcarExistenciaDNIyTIPO(char nombreArchivo[20], int DNI, char tipoCuenta[20]);
  16. void mostrarTodas(char nombreArchivo[20]);
  17. void mostrarPorTipo(char nombreArchivo[20],char tipoCuenta[20]);
  18. int pasarArchivoToArreglo(char nombreArchivo[20],stCuentaBancaria cuentas[20],int DIM);
  19. void pasarArregloToArchivos(float monto,stCuentaBancaria cuentas[20], int validos);
  20. stCuentaBancaria menorArchivo(char nombreArchivo[20]);
  21. stCuentaBancaria mayorArchivo(char nombreArchivo[20]);
  22.  
  23. int main()
  24. {
  25.     //cargarCuentas("cuentas.dat");
  26.    // int v = verifcarExistenciaDNIyTIPO("cuentas.dat",1,"dolares");
  27.    // printf("v -> %d\n",v);
  28.    //mostrarTodas("cuentas.dat");
  29.    /*
  30.    stCuentaBancaria cuentas[20];
  31.    int validos = pasarArchivoToArreglo("cuentas.dat",cuentas,20);
  32.    pasarArregloToArchivos(2000,cuentas,validos);
  33.    printf("***************mostrando mayores\n");
  34.    mostrarTodas("mayores.dat");
  35.    printf("***************fin mostrando mayores\n");
  36.    printf("***************mostrando menores\n");
  37.    mostrarTodas("menores.dat");
  38.    printf("***************fin mostrando menores\n");
  39.    */
  40.    stCuentaBancaria menor = menorArchivo("menores.dat");
  41.    stCuentaBancaria mayor = mayorArchivo("mayores.dat");
  42.  
  43.    printf("el mayor de los mayores fue %s \n",mayor.NyA);
  44.    printf("el menor de los menores fue %s \n",menor.NyA);
  45.     return 0;
  46. }
  47.  
  48.  
  49. //Hacer una función que verifique si un dato existe en un archivo
  50. //buscando por dni y tipo de cuenta. Retornará 1 ó 0. 10 pts.
  51. int verifcarExistenciaDNIyTIPO(char nombreArchivo[20], int DNI, char tipoCuenta[20])
  52. {
  53.     int encontrado = 0 ;
  54.  
  55.     FILE * archi = fopen(nombreArchivo,"rb");
  56.     stCuentaBancaria aux;
  57.  
  58.     if (archi != NULL)
  59.     {
  60.         while ((fread(&aux,sizeof(stCuentaBancaria),1,archi)>0)&&(encontrado==0))
  61.         {
  62.             if (DNI == aux.dni)
  63.             {
  64.                 if (strcmp(tipoCuenta,aux.tipoCuenta) == 0)
  65.                 {
  66.                     encontrado = 1;
  67.                 }
  68.             }
  69.  
  70.         }
  71.     }
  72.     fclose(archi);
  73.     return encontrado;
  74. }
  75.  
  76. //Hacer una función que cargue cuentas bancarias
  77. //en un archivo utilizando la función anterior y que el monto sea válido (>1000) 15 pts.
  78. //Modularizar todo.
  79.  
  80. void cargarCuentas(char nombreArchivo[20])
  81. {
  82.     FILE * archi;
  83.     char mander = 's';
  84.     int verifcarExistencia;
  85.     stCuentaBancaria aux;
  86.  
  87.     if (archi != NULL)
  88.     {
  89.         while (mander=='s')
  90.         {
  91.  
  92.             float monto;
  93.  
  94.             do
  95.             {
  96.                 monto = verificarMonto();
  97.             }
  98.             while (monto == -1);
  99.  
  100.             aux.monto = monto;
  101.  
  102.             printf("ingrese Nombre\n");
  103.             fflush(stdin);
  104.             scanf("%s",&aux.NyA);
  105.  
  106.             printf("ingrese Tipo de Cuenta\n");
  107.             fflush(stdin);
  108.             scanf("%s",&aux.tipoCuenta);
  109.  
  110.             printf("ingrese DNI\n");
  111.             fflush(stdin);
  112.             scanf("%d",&aux.dni);
  113.  
  114.             verifcarExistencia = verifcarExistenciaDNIyTIPO(nombreArchivo,aux.dni,aux.tipoCuenta);
  115.  
  116.             //printf("verifcarExistencia -> %d\n",verifcarExistencia);
  117.  
  118.             while (verifcarExistencia == 1)
  119.             {
  120.                 printf("Hubo un error, carge nuevamente\n");
  121.  
  122.                 printf("ingrese Tipo de Cuenta\n");
  123.                 fflush(stdin);
  124.                 scanf("%s",&aux.tipoCuenta);
  125.  
  126.                 printf("ingrese DNI\n");
  127.                 fflush(stdin);
  128.                 scanf("%d",&aux.dni);
  129.  
  130.                 verifcarExistencia = verifcarExistenciaDNIyTIPO(nombreArchivo,aux.dni,aux.tipoCuenta);
  131.             }
  132.  
  133.             archi = fopen(nombreArchivo,"ab");
  134.             fwrite(&aux,sizeof(stCuentaBancaria),1,archi);
  135.             fclose(archi);
  136.  
  137.             printf("ingrese s para seguir\n");
  138.             fflush(stdin);
  139.             scanf("%c",&mander);
  140.         }
  141.     }
  142.  
  143. }
  144.  
  145. float verificarMonto()
  146. {
  147.     float verificado = -1;
  148.     printf("ingrese Monto\n");
  149.     fflush(stdin);
  150.     scanf("%f",&verificado);
  151.     if (verificado < 1000)
  152.     {
  153.         verificado = -1;
  154.     }
  155.     return verificado;
  156. }
  157.  
  158. /*
  159. Hacer una función que muestre todas las cuentas del archivo pero ordenadas por tipo. En el archivo se guardan desordenadas.
  160. No hay que modificar el archivo. Modularizar. 15 pts.*/
  161. void mostrarPorTipo(char nombreArchivo[20],char tipoCuenta[20])
  162. {
  163.     FILE * archi = fopen(nombreArchivo,"rb");
  164.     stCuentaBancaria aux;
  165.  
  166.     if (archi != NULL)
  167.     {
  168.         while (fread(&aux,sizeof(stCuentaBancaria),1,archi)>0)
  169.         {
  170.  
  171.             if (strcmp(tipoCuenta,aux.tipoCuenta) == 0)
  172.             {
  173.                     printf("mostrando cuenta--->\n");
  174.                     printf("DNI -> %d\n",aux.dni);
  175.                     printf("Tipo De cuenta -> %s\n",aux.tipoCuenta);
  176.                     printf("Monto -> %f\n",aux.monto);
  177.                     printf("fin mostrando cuenta--->\n");
  178.             }
  179.         }
  180.     }
  181.     fclose(archi);
  182. }
  183.  
  184. void mostrarTodas(char nombreArchivo[20])
  185. {
  186.     mostrarPorTipo(nombreArchivo,"pesos");
  187.     mostrarPorTipo(nombreArchivo,"dolares");
  188.     mostrarPorTipo(nombreArchivo,"bitcoins");
  189. }
  190.  
  191. //Hacer una función que pase el archivo a un arreglo de stCuentaBancaria. 10 pts.
  192. int pasarArchivoToArreglo(char nombreArchivo[20],stCuentaBancaria cuentas[20],int DIM)
  193. {
  194.     FILE * archi = fopen(nombreArchivo,"rb");
  195.     stCuentaBancaria aux;
  196.     int pos = 0;
  197.     if (archi != NULL)
  198.     {
  199.         while ((fread(&aux,sizeof(stCuentaBancaria),1,archi)>0) && (pos<DIM))
  200.         {
  201.             cuentas[pos] = aux;
  202.             pos++;
  203.  
  204.         }
  205.     }
  206.     fclose(archi);
  207.     return pos;
  208. }
  209.  
  210. //Hacer una función que pase del arreglo al archivo de “ricos”
  211. //todas aquellas cuentas cuyo monto sea mayor o igual a un dato recibido
  212. //y el resto al archivo de “resto”.
  213. void pasarArregloToArchivos(float monto,stCuentaBancaria cuentas[20], int validos)
  214. {
  215.     FILE * archiMayores = fopen("mayores.dat","ab");
  216.     FILE * archiMenores = fopen("menores.dat","ab");
  217.  
  218.     int i = 0;
  219.     for (i=0;i<validos;i++)
  220.     {
  221.         if (cuentas[i].monto > monto)
  222.         {
  223.             fwrite(&cuentas[i],sizeof(stCuentaBancaria),1,archiMayores);
  224.         }
  225.         else
  226.         {
  227.             fwrite(&cuentas[i],sizeof(stCuentaBancaria),1,archiMenores);
  228.         }
  229.     }
  230.  
  231.     fclose(archiMayores);
  232.     fclose(archiMenores);
  233.  
  234. }
  235.  
  236. //Hacer dos funciones que muestre el mayor de “ricos” y el menor del “resto”.
  237. stCuentaBancaria mayorArchivo(char nombreArchivo[20])
  238. {
  239.     stCuentaBancaria mayor;
  240.     stCuentaBancaria aux;
  241.     FILE * archi = fopen(nombreArchivo,"rb");
  242.  
  243.     if (archi != NULL)
  244.     {
  245.         fread(&mayor,sizeof(stCuentaBancaria),1,archi);
  246.         while (fread(&aux,sizeof(stCuentaBancaria),1,archi)>0)
  247.         {
  248.             if (aux.monto > mayor.monto)
  249.             {
  250.                mayor = aux;
  251.             }
  252.         }
  253.     }
  254.  
  255.     fclose(archi);
  256.     return mayor;
  257. }
  258.  
  259. stCuentaBancaria menorArchivo(char nombreArchivo[20])
  260. {
  261.     stCuentaBancaria menor;
  262.     stCuentaBancaria aux;
  263.     FILE * archi = fopen(nombreArchivo,"rb");
  264.  
  265.     if (archi != NULL)
  266.     {
  267.         fread(&menor,sizeof(stCuentaBancaria),1,archi);
  268.         while (fread(&aux,sizeof(stCuentaBancaria),1,archi)>0)
  269.         {
  270.             if (aux.monto < menor.monto)
  271.             {
  272.                menor = aux;
  273.             }
  274.         }
  275.     }
  276.  
  277.     fclose(archi);
  278.     return menor;
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement