Jump to content
Fórum Script Brasil
  • 0

Função para cadastrar e fazer login de usuários


Dark Lotus

Question

Boa tarde à todos.

Preciso criar uma função que sirva para fazer login de usuários num programinha que estou desenvolvendo. Estou programando em C, não C++, sem orientação à objetos. A parte do cadastro eu já consegui fazer. Aoós o cadastro, é gravado um arquivo com o nome do usuário, e dentro dele, a senha.

Exemplo:

nome: fulano

senha: 12345

arquivo: fulano.txt, conteúdo do arquivo: *123456

Eu sei que é um método tosco, mas num momento, é só o que eu preciso. A parte difícil é a leitura do arquivo, para identificar a senha e usuário em cada arquivo na hora do login. Cada arquivo fica com o nome de quem criou ("fulano.txt"), mas não sei como fazer pra procurar uma determinada palavra no arquivo e usá-la em outra variável, até deixei os marcador (* para senha), mas estou com dificuldades para implementar isso. Alguém pode me ajudar?

O código-fonte, comentado, por enquanto, é esse:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <conio.c>
#include <locale.h>

char opl;
char usr[50],senha[10];
FILE *ArqUsr;

int main()
{
    setlocale(LC_ALL, "Portuguese");

    do{
    textcolor(WHITE);clrscr();
            gotoxy(26,2);        printf("*---------------------------*");
            gotoxy(26,3);        printf("|******CRIPTOFAGO-LOGIN*****|");
            gotoxy(26,4);        printf("*---------------------------*");
            gotoxy(26,5);        printf("| 1: Fazer login            |");
            gotoxy(26,6);        printf("|                           |");
            gotoxy(26,7);        printf("| 2: Fazer cadastro         |");
            gotoxy(26,8);        printf("|                           |");
            gotoxy(26,9);        printf("| 3: Voltar                 |");
            gotoxy(26,10);        printf("|                   Opção:  |");
            gotoxy(26,11);        printf("*---------------------------*");
            gotoxy(52,10);        opl=getch();
            
        switch(opl)
            {
                case '1'://login
                {
                    gotoxy(3,16);printf("Digite seu nome de usuário: ");gets(usr);//Usuário digita o nome com que quer se logar
                    gotoxy(3,17);printf("Digite sua senha: ");textcolor(BLACK);gets(senha);textcolor(WHITE);//usuário informa sua senha                
                    
                    if(ArqUsr!=NULL)//se o arquivo com nome e senha não for inexistente
                    {
                    /*
                    Aqui está a parte difícil: Como eu faço para procurar uma 
                    palavra específica no arquivo (a senha), e compará-la com a senha 
                    informada pelo usuário? 
                    */                    
                    }
                    else
                    {
                    gotoxy(3,16);printf("Nenhum usuário cadastrado!");break;
                    }
                    
                }    
                
                case '2'://cadastro
                {
                        
                textbackground(BLACK); textcolor(WHITE); 
                gotoxy(3,16);printf("Digite seu nome: ");gets(usr);//Usuário insere o nome com que quer ser cadastrado
                gotoxy(3,17);printf("Digite sua senha: ");textcolor(BLACK);gets(senha);//usuário digita sua senha
                
                ArqUsr=fopen(usr,"a");//fazer um arquivo com o nome do usuário
                  
                textcolor(WHITE);gotoxy(3,18);printf("Usuário cadastrado com sucesso!");
                fprintf(ArqUsr,"*%s",senha);//grava no arquivo a senha do usuário, antecedida pelo caractere *
                fclose(ArqUsr);//fecha o arquivo
                getch();
                }
                case '3': opl=0;break;
                default : printf("\a");break;              
            }
    }while (opl!=0);

}

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Estudei bastante, mas ainda não consigo o que eu queria. Qualquer nome que eu coloque dá "usuário inválido". Estou quase conseguindo... Onde estou errando? Repare nas linhas "fscanf (ArqUsr,"%s",&senhareal);" e "(strcmp(senha,senhareal)!=0)" . Nesta parte, supostamente, o programa copia o conteúdo do arquivo com o nome do usuário (a senha) para a string senhareal, e então compara com a senha informada pelo usuário para ver se elas batem.

gotoxy(3,16);printf("Digite seu nome de usuário: ");gets(usr);//Usuário digita o nome com que quer se logar
                    ArqUsr = fopen(usr,"r");//abre o arquivo com o nome do usuário
                    gotoxy(3,17);printf("Digite sua senha: ");textcolor(BLACK);gets(senha);textcolor(WHITE);//usuário informa sua senha
                    if(ArqUsr!=NULL)//se o arquivo com o nome informado existir
                    {
                        fscanf (ArqUsr,"%s",&senhareal);//grava o conteúdo de ArqUsr na variável senhareal
                        if (strcmp(senha,senhareal)!=0)//e a senha informada pelo usuário bater com a senha real...
                        {
                        gotoxy(20,23);printf("Login feito com sucesso!");//é informado ao usuário que ele conseguiu se logar
                        getch();break;
                        }
                        else//se não...
                        {
                        gotoxy(20,23);
                        printf("Usuário ou senha não está correto. Tente novamente...");//é informado que os dados estão incorretos
                        getch();break;
                        }                                
                    }
                    else
                    {
                    gotoxy(20,23);printf("Usuário ou senha não está correto. Tente novamente...");//quando o usuário tenta entrar com um nome inválido
                    getch();break;
                    }

Edited by Dark Lotus
Link to comment
Share on other sites

  • 0

O modo binário fica mais fácil de comparar ler gravar sem perda nenhuma de bytes é só colocar um b na frente do modo de abertura do arquivo.

aí usa duas funções que facilitam muito. por exemplo

char senha[10];

char senha2[10];

FILE *arq;

arq = fopen("arquivo.dat", "wb"); //abertura em binário ou seja não cria um texto e sim uma sequencia que reprezenta os dados brutos

fwrite(senha, sizeof(char) * 10, 1, arq);//grava a senha no arquivo

arq = fopen("arquivo.dat", "rb"); //abertura em binário para

fread(senha2, sizeof(char) * 10, 1, arq); //lê os dados e grava na variável

mas porque desse jeito?

porque a abertura em modo binário escreve a própria variável no arquivo sem acrescentar ou tirar. é bem mais fácil trabalhar com binário que é o que o computador mais entende

fread e fwrite pesquise sobre elas: poderia explicar como utiliza elas mas para fins didáticos tente aprender com você mesmo.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...