Advertisement
Guest User

FunciónAltaUsuario

a guest
Jun 24th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. ///Estructura del usario:
  6. typedef struct {
  7.      int idUsuario;
  8.      char nombreUsuario[30];
  9.      char pass[2][5];
  10.      int anioNacimiento;
  11.      char genero;  // ‘m’ o ‘f’
  12.      char pais[20];
  13.      int peliculasVistas[30]; //Guarda los id de las películas.
  14.      int cantVistas; // Es el válidos de películas vistas.
  15.      int eliminado;   // indica 1 o 0 si el cliente fue eliminado
  16. } stUsuario;
  17.  
  18.  
  19. int main()
  20. {
  21.     char archivo[]={"archi.dat"};
  22.     char pass[10];
  23.     int matrizParaEncriptar[2][2]={2,3,-1,1};
  24.     int passNumerica[2][5];
  25.     int passEncriptada[2][5];
  26.  
  27.     altaUsuario(archivo, matrizParaEncriptar, passNumerica, passEncriptada);
  28.     //mostrarUsuarios(archivo, passNumerica);
  29.  
  30.     return 0;
  31. }
  32.  
  33. ///Función alta usuario:
  34. void altaUsuario(char nombreArchivo[], char pass[], int matrizParaEncriptar[][5], int passNumerica[][5], int passEncriptada[][5])
  35. {
  36.     FILE *archi;
  37.     stUsuario a;
  38.     int iD=0, testigo=0, f, c, i=0;
  39.  
  40.  
  41.  
  42.     archi=fopen(nombreArchivo, "r+b");
  43.     if(archi==NULL)
  44.     {
  45.         archi=fopen(nombreArchivo, "w+b");
  46.     }
  47.  
  48.     if(archi!=NULL)
  49.     {
  50.         printf("Bienvenido a UTN-etflix:\n");
  51.  
  52.         /**------------------------------------------------------NOMBRE DE USUARIO----------------------------------------------------------*/
  53.         printf("\n\nNombre de Usuario (maximo 30 caracteres): ");
  54.         fflush(stdin);
  55.         gets(a.nombreUsuario);
  56.         ///En el caso de que el usuario ingrese un nombre con mas de los caracteres disponibles.
  57.         if(strlen(a.nombreUsuario)>30)
  58.         {
  59.             printf("\nLo sentimos, su nombre de usuario tiene mas de 30 caracteres.\nPor favor vuelva a ingresarlo: ");
  60.             fflush(stdin);
  61.             gets(a.nombreUsuario);
  62.         }
  63.         ///En el caso de que el nombre de usuario ingresado ya exista.
  64.         while(testigo=buscarNombreUsuario(nombreArchivo, a.nombreUsuario)==1)
  65.         {
  66.             printf("\nLo sentimos, su nombre de usuario ya existe.\nPor favor ingrese otro (maximo 30 caracteres): ");
  67.             fflush(stdin);
  68.             gets(a.nombreUsuario);
  69.         }
  70.  
  71.         /**------------------------------------------------------CONTRASEÑA-----------------------------------------------------------------*/
  72.         printf("\nIngrese una contrasenia de 10 caracteres: ");
  73.         for(f=0; f<1; f++)
  74.         {
  75.             gets(a.pass[f]);
  76.         }
  77.         ///En el caso de que el usuario ingrese una contraseña con menos de los caracteres solicitados.
  78.         while(strlen(a.pass)<10)
  79.         {
  80.             printf("\nLo sentimos, su contrasenia tiene menos de 10 caracteres.\nPor favor ingrese una contrasenia de 10 caracteres: ");
  81.  
  82.             for(f=0; f<1; f++)
  83.             {
  84.                 gets(a.pass[f]);
  85.             }
  86.         }
  87.         ///En el caso de que el usuario ingrese una contraseña con más de los caracteres solicitados.
  88.         while(strlen(a.pass)>10)
  89.         {
  90.             printf("\nLo sentimos, su contrasenia tiene mas de 10 caracteres.\nPor favor ingrese una contrasenia de 10 caracteres: ");
  91.  
  92.             for(f=0; f<1; f++)
  93.             {
  94.                 gets(a.pass[f]);
  95.             }
  96.         }
  97.  
  98.         ///Transformamos la contraseña de caracteres en una numerica, segun el orden de cada letra en el abecedario:
  99.         strcpy(pass, a.pass); //Trabajamos con una copia de la contraseña para no alterar los datos originales.
  100.         int cant=strlen(pass);
  101.         numeroAletras(pass);
  102.         pasarAnumeros(pass, 25, passNumerica, 10);
  103.         //encriptarPass(nombreArchivo, passNumerica, passEncriptada, matrizParaEncriptar);
  104.         /**------------------------------------------------------EL RESTO-------------------------------------------------------------------*/
  105.         printf("\nAnio de nacimiento: ");
  106.         scanf("%d", &a.anioNacimiento);
  107.  
  108.         printf("\nGenero (m/f): ");
  109.         fflush(stdin);
  110.         scanf("%c", &a.genero);
  111.  
  112.         printf("\nPais: ");
  113.         fflush(stdin);
  114.         gets(a.pais);
  115.  
  116.         fseek(archi, 0, SEEK_END);
  117.         iD=ftell(archi)/sizeof(stUsuario);
  118.         a.idUsuario=iD+1;
  119.  
  120.         fwrite(&a, sizeof(stUsuario), 1, archi);
  121.  
  122.         if(fclose(archi)==0)
  123.         {
  124.             printf("\nLos datos se guardaron con exito.");
  125.         }
  126.         else
  127.         {
  128.             printf("\nError al guardar los datos.");
  129.         }
  130.     }
  131. }
  132.  
  133. ///Buscar si un nuevo nombre de usuario ya existe en el archivo:
  134. int buscarNombreUsuario(char nombreArchivo[], char nombre[])
  135. {
  136.     int testigo=0;
  137.     stUsuario a;
  138.     FILE* archi;
  139.  
  140.     archi=fopen(nombreArchivo, "rb");
  141.     if(archi!=NULL)
  142.     {
  143.         while(!feof(archi))
  144.         {
  145.             fread(&a, sizeof(stUsuario), 1, archi);
  146.             if(strcmp(nombre, a.nombreUsuario)==0)      //Recorremos el archivo y buscamos si ya existe un usuario con ese nombre.
  147.             {
  148.                 testigo=1;
  149.             }
  150.         }
  151.         fclose(archi);
  152.     }
  153.     return testigo;
  154. }
  155.  
  156.  
  157. ///Función para pasar la pass de caracteres a enteros:
  158. void numeroAletras(char letra[])
  159. {
  160.     char abc[]= {' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  161.     int i=0;
  162.     while(i<=26)
  163.     {
  164.         if(letra==abc[i])
  165.         {
  166.             return i;
  167.         }
  168.         i++;
  169.     }
  170. }
  171.  
  172. void pasarAnumeros(char pass[],int cant_letras,int contra[][5], int cantidad) /// Ingresa el numero a la matriz
  173. {
  174.     int j=0;
  175.     int k=0;
  176.     int i=0;
  177.     for(k=0; k<5; k++)
  178.     {
  179.         for(j=0; j<2; j++)
  180.         {
  181.             if(i<cantidad)
  182.             {
  183.                 contra[j][k]=numeroAletras(pass[i]);
  184.             }
  185.             else
  186.             {
  187.                 contra[j][k]=0;
  188.             }
  189.             i++;
  190.         }
  191.         j=0;
  192.     }
  193. }
  194.  
  195. ///Función para encriptar la contraseña:
  196. void encriptarPass(char nombreArchivo[], int passNumerica[][5], int passEncriptada[][5], int matrizParaEncriptar[][2])
  197. {
  198.     stUsuario a;
  199.     FILE *archi;
  200.  
  201.     archi=fopen(nombreArchivo, "ab");
  202.     if(archi!=NULL)
  203.     {
  204.         ///------------------------------------------------PRIMERA FILA--------------------------------------------------///
  205.         passEncriptada[0][0]=(matrizParaEncriptar[0][0]*passNumerica[0][0])+(matrizParaEncriptar[0][1]*passNumerica[1][0]);
  206.         passEncriptada[0][1]=(matrizParaEncriptar[0][0]*passNumerica[0][1])+(matrizParaEncriptar[0][1]*passNumerica[1][1]);     //Multiplicamos la primer fila de la matriz que utilizamos para encriptar por todas
  207.         passEncriptada[0][2]=(matrizParaEncriptar[0][0]*passNumerica[0][2])+(matrizParaEncriptar[0][1]*passNumerica[1][2]);     //las columnas de la matriz que contiene la pass en numeros enteros.
  208.         passEncriptada[0][3]=(matrizParaEncriptar[0][0]*passNumerica[0][3])+(matrizParaEncriptar[0][1]*passNumerica[1][3]);
  209.         passEncriptada[0][4]=(matrizParaEncriptar[0][0]*passNumerica[0][4])+(matrizParaEncriptar[0][1]*passNumerica[1][4]);
  210.  
  211.         ///------------------------------------------------SEGUNDA FILA--------------------------------------------------///
  212.         passEncriptada[1][0]=(matrizParaEncriptar[1][0]*passNumerica[0][0])+(matrizParaEncriptar[1][1]*passNumerica[1][0]);
  213.         passEncriptada[1][1]=(matrizParaEncriptar[1][0]*passNumerica[0][1])+(matrizParaEncriptar[1][1]*passNumerica[1][1]);     //Hacemos lo mismo pero con la segunda fila de la matriz que
  214.         passEncriptada[1][2]=(matrizParaEncriptar[1][0]*passNumerica[0][2])+(matrizParaEncriptar[1][1]*passNumerica[1][2]);     //utilizamos para encriptar.
  215.         passEncriptada[1][3]=(matrizParaEncriptar[1][0]*passNumerica[0][3])+(matrizParaEncriptar[1][1]*passNumerica[1][3]);
  216.         passEncriptada[1][4]=(matrizParaEncriptar[1][0]*passNumerica[0][4])+(matrizParaEncriptar[1][1]*passNumerica[1][4]);
  217.  
  218.         a.pass[2][5]=passEncriptada;    //Luego guardamos en la estructura y el archivo la contraseña encriptada.
  219.         fwrite(&a, sizeof(stUsuario), 1, archi);
  220.  
  221.         fclose(archi);
  222.     }
  223. }
  224.  
  225.  
  226. ///Función auxiliar para mostrar contenido del archivo:
  227. void mostrarUsuarios(char nombreArchivo[])
  228. {
  229.     stUsuario a;
  230.     FILE *archi;
  231.     int f, c;
  232.  
  233.     archi=fopen(nombreArchivo, "rb");
  234.     if(archi!=NULL)
  235.     {
  236.         while(!feof(archi))
  237.         {
  238.             fread(&a, sizeof(stUsuario), 1, archi);
  239.             if(!feof(archi))
  240.             {
  241.                 printf("\n\nContrasenia numerica:\n");
  242.                 for(f=0; f<2; f++)
  243.                 {
  244.                     printf("\n");
  245.                     for(c=0; c<5; c++)
  246.                     {
  247.                         printf("{%d}", passNumerica[f][c]);
  248.                     }
  249.                 }
  250.             }
  251.         }
  252.         fclose(archi);
  253.     }
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement