Advertisement
apollw

login_senha

May 23rd, 2014
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.20 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. struct LOGIN{
  5.  
  6.     /*Esta estrutura recebe nome de usuário e senha, e armazena em vetor de char de até 8 caracteres*/
  7.  
  8.     char nome[9];
  9.     char senha[9];
  10.  
  11. };
  12. typedef struct LOGIN login;/*Define o tipo da struct como tipo login*/
  13.  
  14. void main(){/*Função void,não precisa retornar valor*/
  15.  
  16.     int i=0,k=0,flag=0,temp=0;/*i-contador de laço,k-contador de laço,flag-verificador de letras,temp-armazenar flag */
  17.     login cadastro[3];/*Recebe 10 variáveis tipo login*/
  18.     char verificacao[9];/*Variável para verificar se o nome digitado está cadastrado*/
  19.     char verificacao_senha[9];/*Variável para verificar se senha digitada para usuário i é correta ou não*/
  20.     int flag_cadastro=0;/*Flag para verificar se nome digitado é igual a algum nome da lista de cadastros*/
  21.     int flag_cadastro_senha=0;/*Flag para verificar se senha é igual à senha do cadastro respectivo, depois desse cadastro
  22.     ter sido encontrado*/
  23.  
  24.     for(i=0;i<3;i++){/*Laço de recebimento de estruturas de cadastro*/
  25.         fflush(stdin);/*Limpar buffer a cada renovação de laço*/
  26.         printf("Entre com o nome do usuario %d\n",i+1);
  27.             gets(cadastro[i].nome);/*Recebe nome 1*/
  28.         printf("Entre com sua senha. Apenas sao permitidos letras ou numeros:\n");
  29.  
  30.         /*Ativar do while para repetir laço até o usuário entrar com uma senha válida*/
  31.         do{
  32.         fflush(stdin);
  33.         scanf("%s",&cadastro[i].senha);
  34.  
  35.         /*puts(cadastro[i].senha);*/
  36.  
  37.         for(k=0;k<strlen(cadastro[i].senha);k++){/*Isso vai verificar cada caractere da variável senha do cadastro i. A
  38.             variável flag vai incrementando para cada caractere dentro das especificações. Se essa senha tiver algum
  39.             caractere fora das especificações, a flag não incrementa*/
  40.             if((cadastro[i].senha[k]>=48&&cadastro[i].senha[k]<=57)||(cadastro[i].senha[k]>=65&&cadastro[i].senha[k]<=90)||(cadastro[i].senha[k]>=97&&cadastro[i].senha[k]<=122)){
  41.                 ++flag;
  42.                 temp=flag;/*Armazena temporariamente essa flag, pois a flag precisa ser renovada para cada nova senha de
  43.             um novo usuário i+1*/
  44.             }
  45.         }
  46.         flag=0;/*A flag precisa ser zerada para poder entrar novamente no laço de verificação*/
  47.  
  48.         /*printf("TEMP %d FLAG %d STRLEN %d",temp,flag,strlen(cadastro[i].senha));*/
  49.  
  50.         if(temp!=strlen(cadastro[i].senha)){/*Se temp for diferente do tamanho da senha do usuário i,isso significa que
  51.                 a senha contém caracteres inválidos*/
  52.             printf("A senha pode conter apenas letras ou numeros. Digite uma nova senha:\n");
  53.         }
  54.         else
  55.             continue;/*Se estiver tudo certo, continua o recebimento de usuários e senhas*/
  56.         }
  57.         while(temp!=strlen(cadastro[i].senha));
  58.  
  59.     }
  60.  
  61.     fflush(stdin);
  62. /*Depois da verificação de cada usuário, hora de testar login e senha*/
  63.  
  64.     printf("%c%c%c - TESTE DE USUARIO - %c%c%c\n",178,178,178,178,178,178);
  65.     printf("\n");
  66.     printf("Entre com o nome do usuario:\n");
  67.         gets(verificacao);/*Variável armazena string teste para comparação com os cadastros armazenados na estrutura*/
  68.  
  69.     for(i=0;i<3;i++){/*O laço verificará todos os cadastros da estrutura, um a um*/
  70.         if(strcmp((cadastro[i].nome),verificacao)==0)/*Usando strcmp, comparamos cada nome de usuário ao nome teste digitado.
  71.         Se o nome do usuário i for igual ao nome da verificação, a variável flag_cadastro é incrementada.*/
  72.         /*Caso o nome i seja igual à verificação de login, isso retorna um 0, caso contrário, retorna 1*/
  73.         /*printf("%d",strcmp((cadastro[i].nome),verificacao));*/
  74.             ++flag_cadastro;
  75.     }
  76.         if(flag_cadastro==0){/*Caso a variável tenha sido incrementada, significa que ela é diferente de zero, e significa também
  77.         que o nome teste de verificação está contido na estrutura de cadastros. Mas se ela for igual a zero, esse nome não
  78.         está contido, ou seja, cadastro não encontrado e impede a próxima verificação*/
  79.             printf("USUARIO NAO ENCONTRADO\n");
  80.             system("break");
  81.         }
  82.  
  83.     else/*Caso contrário, o nome foi encontrado, agora verifica se a senha correspondente a esse nome é correta*/
  84.     printf("Entre com a senha do usuario:\n");
  85.         gets(verificacao_senha);/*Pega uma string de verificação da senha*/
  86.  
  87.     for(i=0;i<3;i++){/*Laço de varredura de cada nome para verificar se a senha corresponde ao nome e se é correta*/
  88.  
  89.         if(strcmp((cadastro[i].senha),verificacao_senha)==0)/*Mesma lógica usada anteriormente*/
  90.             ++flag_cadastro_senha;
  91.     }
  92.         if(flag_cadastro!=0&&flag_cadastro_senha!=0)/*Se a flag de cadastro for correta e a flag da senha for correta, ambas
  93.             as flags se correspondem, e sena será correta.*/
  94.             printf("USUARIO ENCONTRADO - SENHA CORRETA\n");
  95.         else if(flag_cadastro!=0&&flag_cadastro_senha==0)/*Se a flag de cadastro for correta e a flag de senha for incorreta,
  96.         o usuário foi encontrado, mas a senha não corresponde*/
  97.             printf("USUARIO ENCONTRADO - SENHA INCORRETA\n");
  98.  
  99. puts("\n");
  100. system("pause");
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement