Ir para conteúdo
Fórum Script Brasil
  • 0

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


Dark Lotus

Pergunta

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 para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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;
                    }

Editado por Dark Lotus
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...