Estou programando uma aplicação em C (CRUD) e preciso fazer cadastro de usuário e login. O cadastro eu consegui fazer!
O problema é quando tenho que comparar o conteúdo já salvo no arquivo com o que o usuário acabou de digitar.
Como posso resolver isso? Já tentei várias formas e nada de dar certo, alguém pode me dar um help?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#define ARQ "Dados.dat" /* arquivo com os dados*/
#define OP_SAIR '0'
#define OP_INSERIR '1'
#define OP_LOGIN '2'
#define OP_LISTAR '3'
char *menuMain[]={
"1. Cadastro",
"2. Login",
"3. Listar registros",
"0. Sair",
NULL /* ACABARAM AS OPÇOES*/
};
FILE *fp; /*variavel global pois é util ao longo do programa*/
typedef struct{ //Estrutura para cadastro de funcionários
char usuario[30+1];
char senha[30+1];
}Pessoa;
typedef struct{ //Requisição de usuário e senha para login
char req_usuario[30+1];
char req_senha[30+1];
}Entrada;
void Ler_Usuario(Pessoa *p){ //Aqui ele vai ler o usuário e senha de cada funcionário no arquivo
printf("Username: "); gets(p->usuario);
printf("Password: "); gets(p->senha);
fflush(stdin);
}
char Menu(char *opcoes[]){ //Necessário para selecionar as opções do menu
int i;
char ch;
while(1){
for(i=0; opcoes[i]!=NULL; i++)
printf("\t\t%s\n\n",opcoes[i]);
printf("\n\n\t\tOpcao: ");
ch = getchar(); fflush(stdin);
for(i=0; opcoes[i]!= NULL; i++)
if(opcoes[i][0]==ch)
return ch;
}
}
void Cadastro_Usuario(){ //Método responsável pelo cadastro de usuários
Pessoa x;
Ler_Usuario(&x);
Adiciona_Usuario(x);
}
void Adiciona_Usuario(Pessoa p){
fseek(fp, 0L, SEEK_END);
if(fwrite(&p, sizeof(p), 1, fp)!=1)
Mensagem("Adicionar usuário: Falhou a escrita do registro");
}
/*Exibe uma mensagem na tela*/
void Mensagem(char *msg){
printf(msg);
getchar();
}
void Inic(){
fp= fopen(ARQ, "r+b"); //tentar abrir
if(fp==NULL){
fp = fopen(ARQ, "w+b"); // criar o arquivo
if(fp==NULL){
printf(stderr," Erro fatal: impossivel criar arquivo de dados\n");
exit(1);
}
}
}
/*Mostra na tela os dados existentes no registro*/
void Mostrar_Usuario(Pessoa p){
printf("Usuário: %s | Senha: %s\n",p.usuario, p.senha);
}
void Listar(){ //Listar registros
long int n_Linhas = 0;
Pessoa reg;
rewind(fp);
while(1){
if(fread(®, sizeof(reg), 1, fp)!= 1)break; /*Sair do laco*/
Mostrar_Usuario(reg);
n_Linhas++;
if(n_Linhas%20==0)
Mensagem("Pressione <Enter> para continuar . . .");
}
Mensagem("\n\n Pressione <Enter> para continuar . . ."); /*No fim da listagem*/
}
void Validacao(){
//Comparação do conteúdo do arquivo com o que foi digitado pelo usuário
Exibir();
}
void Exibir(){
printf("Bem vindo!");
}
void Login(){
Validacao();
}
// -------------------------------------- PRINCIPAL ---------------------------------------- //
void main(int arg) //Método pricipal
{
char opcao;
Inic();
while((opcao = Menu(menuMain))!= OP_SAIR){
switch(opcao){
case OP_INSERIR: Cadastro_Usuario(); break;
case OP_LOGIN: Login(); break;
case OP_LISTAR: Listar(); break;
}
}
}
//É nesse "método" que preciso fazer a comparação do conteúdo do arquivo com o que o usuário acabou de digitar pelo prompt de comando.
void Validacao(){
//Comparação do conteúdo do arquivo com o que foi digitado pelo usuário
//Caso a operação de comparação seja verdadeira, o "metodo" exibir é chamado.
Exibir();
}