Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xMaiicon

Cadastro e Login em C

Recommended Posts

Então, eu estou tentando fazer um programa onde o programa oferece 3 opções de começo:

1 - Cadastrar

2 - Logar

3 - Fechar

 

Depois de cadastrado, voltaria ao menu e apareceria denovo essas 3 opções, o que eu ainda nao fiz.

Por enquanto o que tento fazer é que Cadastre o usuário, depois de cadastrado ir pro login, pede login e senha, se estiver certo loga, se não dá falha e fecha.

Eu consegui fazer o programa funcionar direitinho, mas tudo no main, agora estou tentando dividir em funções, uma para o cadastro, posteriormente outras funções, mas depois de montar em funções, tive que montar 2 funções, uma para cadastrar o login, e outra para a senha, pois a função retornaria o valor final (login / senha) para a variável, e não sei como fazer retornar 2 valores para 2 variáveis diferentes. Então vim aqui pedir uma ajuda, no momento o código aponta 2 erros na função main, que são: "Incompatyble types when assigning to type 'char[20]' from type 'char'", os 2 são iguais, e apontam para as linhas:

logando[a].user = cadastro_login();
logando[a].pass = cadastro_senha();

 

Enfim, aí vai o código:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct cadastro{
   char user[20];
   char pass[20];
   char login[20];
   char senha[20];
}cadastro;

char cadastro_login()
{
   struct cadastro usuario[1];

  // for (a=0;a<3;a++)
  // {
  //     b = a+1;
       system("cls");
       printf("\n\tCadastro");
       puts("\n\n\tDigite o login: ");
       printf("\t");
       scanf(" %s",usuario[0].user);
  // }
   return(*usuario[0].user);
}

char cadastro_senha()
{
   struct cadastro password[1];

   puts("\tDigite a senha: ");
   printf("\t");
   scanf(" %s",password[0].pass);
   system("cls");
   return(*password[0].pass);
}

int main(void)
{
   int a,b,c,d,nc;
   int logado;
   int op;
   //char user[3][20],pass[3][20];
   char login[20], senha[20];
   struct cadastro logando[3];

   printf("1 - Cadastro\n");
   printf("2 - Logar\n");
   printf("3 - Fechar\n");
   scanf("%d", &op);
   if (op == 1) {
       printf("\nQuantos cadastros deseja fazer? \n");
       scanf("%d",&nc);
       for (a=0;a<nc;a++){
           logando[a].user = cadastro_login();
           logando[a].pass = cadastro_senha();
       }
   }
   else if (op == 3) exit(0);
   system("cls");
   printf("\n\tLogon\n");
   printf("\n\tLogin: ");
   scanf(" %s",&login);
   printf("\n\tSenha: ");
   scanf(" %s",&senha);


   for (c=0;c<3;c++)
   {
       if ((strcmp(login,logando[c].user)!=0) || (strcmp(senha,logando[c].pass)!=0))
       {
           logado= 1; //login e/ou senha incorretos
       }
       else if(strcmp(login,logando[c].user)==0)
       {
           if (strcmp(senha,logando[c].pass)==0)
           {
               logado = 2; //logado com sucesso
               break;
           }

       }
   }

   if (logado==1)
   {
       printf("\nLogin e/ou senha incorretos(s)\n");
   }
   else if (logado==2)
   {
       printf("\nLogado com sucesso!\nBem-vindo(a) %s\n",login[0]);
   }
}

Qualquer "coisa de noob" aí é normal, sou bem iniciante xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

O que acontece é que você está tentando inserir o valor de um char em um vetor de chars. O correto seria utilizar a função strcpy() da <string.h> para copiar a string retornada para o vetor e retornar um ponteiro de caractere para o início da string em cada função.

 

Além disso, que eu detectei, faltou a instrução de return em main() (embora, até onde eu me lembre, o retorno de main() a partir da C99 seja facultativo, é bom manter backward compatibility se isso não vai te causar trabalho).

 

Abaixo o código:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct cadastro {
   char user[20];
   char pass[20];
   char login[20];
   char senha[20];
} cadastro;

char *cadastro_login()
{
   struct cadastro usuario[1];

  // for (a=0;a<3;a++)
  // {
  //     b = a+1;
       system("cls");
       printf("\n\tCadastro");
       puts("\n\n\tDigite o login: ");
       printf("\t");
       scanf(" %s",usuario[0].user);
  // }
   returnusuario[0].user;
}

char *cadastro_senha()
{
   struct cadastro password[1];

   puts("\tDigite a senha: ");
   printf("\t");
   scanf(" %s",password[0].pass);
   system("cls");
   return password[0].pass;
}

int main(void)
{
   int a,b,c,d,nc;
   int logado;
   int op;
   //char user[3][20],pass[3][20];
   char login[20], senha[20];
   struct cadastro logando[3];

   printf("1 - Cadastro\n");
   printf("2 - Logar\n");
   printf("3 - Fechar\n");
   scanf("%d", &op);
   if (op == 1) {
       printf("\nQuantos cadastros deseja fazer? \n");
       scanf("%d",&nc);
       for (a=0;a<nc;a++){
           strcpy(logando[a].user, cadastro_login());
           strcpy(logando[a].pass, cadastro_senha());
       }
   }
   else if (op == 3) exit(0);
   system("cls");
   printf("\n\tLogon\n");
   printf("\n\tLogin: ");
   scanf(" %s",&login);
   printf("\n\tSenha: ");
   scanf(" %s",&senha);


   for (c=0;c<3;c++)
   {
       if ((strcmp(login,logando[c].user)!=0) || (strcmp(senha,logando[c].pass)!=0))
       {
           logado= 1; //login e/ou senha incorretos
       }
       else if(strcmp(login,logando[c].user)==0)
       {
           if (strcmp(senha,logando[c].pass)==0)
           {
               logado = 2; //logado com sucesso
               break;
           }

       }
   }

   if (logado==1)
   {
       printf("\nLogin e/ou senha incorretos(s)\n");
   }
   else if (logado==2)
   {
       printf("\nLogado com sucesso!\nBem-vindo(a) %s\n",login[0]);
   }

   return 0;
}

 

Em caso de boa prática, geralmente se recomenda utilizar memcpy() ao invés de strcpy() onde possível, por ser uma função consideravelmente mais rápida. Que fique como uma diversãozinha substituir o strcpy() por memcpy(), se quiser postar depois como você fez para vermos se está certo... você vai precisar algum dia :)

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu mesmo, lol, esse memcpy eu nem conhecia xP, pesquisei aqui rapidinho e alterei pra ele mesmo, eu não vi diferença mas beleza uihuaiehua.

 

Alterei poucas coisas que estavam erradas no seu código,tipo um espaço ali um () aqui xD, foram essas:

 

de   returnusuario[0].user;
para return (usuario[0].user);

 

de   return password[0].pass;
para return (password[0].pass);

 

de:
int a,b,c,d,nc;
   int logado;
   int op;
   //char user[3][20],pass[3][20];
   char login[20], senha[20];
   struct cadastro logando[3];

para:
   int a,b,c,d,nc;
   int logado;
   int op;
   char login[1][20], senha[1][20];
   struct cadastro logando[3];

 

de:
   strcpy(logando[a].user, cadastro_login());
   strcpy(logando[a].pass, cadastro_senha());

para:
   memcpy(logando[a].user, cadastro_login(), 50);
   memcpy(logando[a].pass, cadastro_senha(), 50);

 

Isso e as partes que precisaria mudar alterando isso, ficando assim:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct cadastro {
   char user[20];
   char pass[20];
   char login[20];
   char senha[20];
} cadastro;

char *cadastro_login()
{
   struct cadastro usuario[1];

   system("cls");
   printf("\n\tCadastro");
   puts("\n\n\tDigite o login: ");
   printf("\t");
   scanf(" %s",usuario[0].user);
   return (usuario[0].user);
}

char *cadastro_senha()
{
   struct cadastro password[1];

   puts("\tDigite a senha: ");
   printf("\t");
   scanf(" %s",password[0].pass);
   system("cls");
   return (password[0].pass);
}

int main(void)
{
   int a,b,c,d,nc;
   int logado;
   int op;
   char login[1][20], senha[1][20];
   struct cadastro logando[3];

   printf("1 - Cadastro\n");
   printf("2 - Logar\n");
   printf("3 - Fechar\n");
   scanf("%d", &op);
   if (op == 1) {
       printf("\nQuantos cadastros deseja fazer? \n");
       scanf("%d",&nc);
       for (a=0;a<nc;a++){
           memcpy(logando[a].user, cadastro_login(), 50);
           memcpy(logando[a].pass, cadastro_senha(), 50);
       }
   }
   else if (op == 3) exit(0);
   system("cls");
   printf("\n\tLogon\n");
   printf("\n\tLogin: ");
   scanf(" %s",login[0]);
   printf("\n\tSenha: ");
   scanf(" %s",senha[0]);


   for (c=0;c<3;c++)
   {
       if ((strcmp(login[0],logando[c].user)!=0) || (strcmp(senha[0],logando[c].pass)!=0))
       {
           logado = 1; //login e/ou senha incorretos
       }
       else if(strcmp(login[0],logando[c].user)==0)
       {
           if (strcmp(senha[0],logando[c].pass)==0)
           {
               logado = 2; //logado com sucesso
               break;
           }

       }
   }

   if (logado==1)
   {
       printf("\nLogin e/ou senha incorretos(s)\n");
   }
   else if (logado==2)
   {
       printf("\nLogado com sucesso!\nBem-vindo(a) %s\n",login[0]);
   }

   return 0;
}

 

Então, valeu mesmo cara, tudo certo no código? xP

 

Teria como me dizer se seria difícil (pra mim (iniciante)) transformar esse login em uma função fora do main, e guardar os cadastros em um arquivo .txt? E se possível me dizer como, eu agradeço xP

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu mesmo, lol, esse memcpy eu nem conhecia xP, pesquisei aqui rapidinho e alterei pra ele mesmo, eu não vi diferença mas beleza uihuaiehua.

 

Alterei poucas coisas que estavam erradas no seu código,tipo um espaço ali um () aqui xD, foram essas:

 

de   returnusuario[0].user;
para return (usuario[0].user);

 

Foi mal, erros acontecem xD

Mas o parêntesis não é necessário não.

 

de   return password[0].pass;
para return (password[0].pass);

 

Como disse acima também, o parêntesis não é necessário aqui.

 

de:
int a,b,c,d,nc;
   int logado;
   int op;
   //char user[3][20],pass[3][20];
   char login[20], senha[20];
   struct cadastro logando[3];

para:
   int a,b,c,d,nc;
   int logado;
   int op;
   char login[1][20], senha[1][20];
   struct cadastro logando[3];

 

Essa parte eu nem mexi, eu só mexi nas strings mesmo.

 

de:
   strcpy(logando[a].user, cadastro_login());
   strcpy(logando[a].pass, cadastro_senha());

para:
   memcpy(logando[a].user, cadastro_login(), 50);
   memcpy(logando[a].pass, cadastro_senha(), 50);

 

Esse memcpy() que você colocou tá perigoso, sempre colocque o limite da string que você está copiando, porque aí caso alguém digitar mais caracteres do que era para digitar, não vai dar buffer overflow no logando[a].user/.pass, porque quando chegar no limite vai parar. E como não é adicionado um '\n' no final da string com o memcpy(), precisamos fazer isso.

 

O correto seria isso:

 

memcpy(logando[a].user, cadastro_login(), 19);
logando[19].user = '\n';
memcpy(logando[a].pass, cadastro_senha(), 19);
logando[19].pass = '\n';

 

Uma alternativa ainda melhor seria utilizar o strncpy(), que vai limitar o limite de caracteres copiados para não dar buffer overflow e ainda vai adicionar o '\n' no final.

 

Outra coisa que sugiro é usar macros para definir constantes, como o 20 que você usou. Aí caso você mudar o tamanho da string, só precisa mudar em um lugar, os outros mudam automaticamente. Não tem que ficar caçando onde colocou o 20 e agora você mudou pra, por exemplo, 30...

 

 

 

Então, valeu mesmo cara, tudo certo no código? xP

 

Não sei, tá rodando? O que eu vi de relance foi aquilo mesmo.

 

 

Teria como me dizer se seria difícil (pra mim (iniciante)) transformar esse login em uma função fora do main, e guardar os cadastros em um arquivo .txt? E se possível me dizer como, eu agradeço xP

 

Sempre terá que separar as coisas do main(), mais cedo ou mais tarde, iniciante ou não. Isso é algo bem básico, com o básico de noção de funções você consegue separar ;)

 

Para guardar os cadastros em um .txt você vai ter que usar a I/O de arquivos da C. As funções de I/O de arquivos se localizam no header <stdio.h>, procure por isso depois no google pra aprender a usar ;)

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

A parte do login e do cadastro em funções eu consegui fazer, só falta a parte de arquivos, e o memcpy, não precisa mais, eu montei uma struct, e um cara me falou pra usar variaveis globais, e ficou tudo beleza :P

 

E eu não sabia que não precisava dos parênteses, mas agora não vou precisar usar mesmo xD

 

Código:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct cadastro{
   char user[20];
   char pass[20];
   int codigo;;
}usuario[1000];



void cadastro_cliente(int a)
{
   system("cls");
   usuario[a].codigo = a+1;
   printf("\n\tCadastro %d",usuario[a].codigo);
   puts("\n\n\tDigite o login: ");
   printf("\t");
   scanf(" %s",usuario[a].user);
   puts("\tDigite a senha: ");
   printf("\t");
   scanf(" %s",usuario[a].pass);
   system("cls");
}

void logar_sist()
{
   int c;
   int logado;
   char login[1][20], senha[1][20];

   erro_login:

   printf("\n\tLogon\n");
   printf("\n\tLogin: ");
   scanf(" %s",login[0]);
   printf("\n\tSenha: ");
   scanf(" %s",senha[0]);


   for (c=0;c<1000;c++)
   {
       if ((strcmp(login[0],usuario[c].user)!=0) || (strcmp(senha[0],usuario[c].pass)!=0))
       {
           logado = 1; //login e/ou senha incorretos
       }
       else if(strcmp(login[0],usuario[c].user)==0)
       {
           if (strcmp(senha[0],usuario[c].pass)==0)
           {
               logado = 2; //logado com sucesso
               break;
           }

       }
   }

   if (logado==1)
   {
       system("cls");
       printf("\nLogin e/ou senha incorreto(s)\n");
       printf("\nTente Novamente!\n");
       goto erro_login;
   }
   else if (logado==2)
   {
       system("cls");
       printf("\nLogado com sucesso!\n\nBem-vindo(a) %s\n",login[0]);
       printf("Codigo do usuario: %d\n\n",usuario[c].codigo);
   }
}

int main(void)
{
   int a = 0,b,c,nc;
   int logado;
   int op;
   int codigo[1000];

   tela_inicial:
   printf("1 - Cadastro\n");
   printf("2 - Logar\n");
   printf("3 - Fechar\n");
   scanf("%d", &op);
   system("cls");
   if (op == 1)
   {
       printf("\nQuantos cadastros deseja fazer? \n");
       scanf("%d",&nc);
       if (a==0)
       {
           for (a=0;a<nc;a++)
           {
               cadastro_cliente(a);
           }
           goto tela_inicial;
       }
       else if (a!=0)
       {
           b = a;
           c = a+nc-1;
           printf("\n%d\n",a);
           for (a=b;a<=c;a++)
           {
               cadastro_cliente(a);
           }
           goto tela_inicial;
       }

   }
   else if (op == 2) logar_sist();
   else if (op == 3) exit(0);

   return 0;
}

 

Dá uma olhada aí pra ver como ficou xD

 

--------------------------

 

Agora tem outra coisa, quando eu cadastro um usuário, o programa verifica se o login existe, logo que digitado o login, mas ele está fechando, e eu tenho quase certeza de que o problema é na função validar_login, pode me ajudar aqui? Recomendo que veja no Code::Blocks o programa, vai ficar mais legível xD

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define conta_adm "root"
#define senha_adm "root"
void login_adm();
void menu_login_inicial();
struct cadastro{
   char user[20];
   char pass[20];
   int codigo;
}usuario[1000],admin[20],cadastro_user[1000];

int validar_login_usuario(int a,int c)
{
   char verifica_login[20],usuario1[20];
   int r;

   memcpy(verifica_login,usuario[c].user,50);
   memcpy(usuario1,cadastro_user[a].user,50);
   if (strcmp(verifica_login,usuario1)==0)
   {
       r = 1; //usuario ja existe
   }
   else r = 0; //usuario nao existe
   return (r);
}

void cadastro_cliente(int a)
{
   int b = 0,c;
   system("cls");
   usuario[a].codigo = a+1;
   printf("\n\tCadastro %d",usuario[a].codigo);
   puts("\n\n\tDigite o login: ");
   printf("\t");
   scanf(" %s",cadastro_user[a].user);
   if (b==0)
   {
       for (c=0;c<1000;c++)
       {
           b = validar_login_usuario(a,c);
           if (b==1)
           {
               printf("\nLogin ja existente!\n");
               break;
           }
       }
       if (b==0)
       {
           puts("\tDigite a senha: ");
           printf("\t");
           scanf(" %s",usuario[a].pass);
       }
   }
}

void cadastro_administrador(int a)
{
   system("cls");
   admin[a].codigo = a+1;
   printf("\n\tCadastro %d",admin[a].codigo);
   puts("\n\n\tDigite o login: ");
   printf("\t");
   scanf(" %s",admin[a].user);
   puts("\tDigite a senha: ");
   printf("\t");
   scanf(" %s",admin[a].pass);
   system("cls");
}

void logar_usuario()
{
   int c;
   int logado;
   char login[1][20], senha[1][20];
   char fechar_login[] = {"EXIT"}, fechar_senha[] = {"EXIT"};

   erro_login:

   printf("\n\tPara fechar digite o usuario e a senha EXIT em maiusculo\n");
   printf("\n\tLogon\n");
   printf("\n\tLogin: ");
   scanf(" %s",login[0]);
   printf("\n\tSenha: ");
   scanf(" %s",senha[0]);

   if ((strcmp(login[0],fechar_login)==0)&&(strcmp(senha[0],fechar_senha)==0)) exit(0);
   else
   {
       for (c=0;c<1000;c++)
       {
           if ((strcmp(login[0],usuario[c].user)!=0) || (strcmp(senha[0],usuario[c].pass)!=0))
           {
               logado = 1; //login e/ou senha incorretos
           }
           else if((strcmp(login[0],usuario[c].user)==0) && (strcmp(senha[0],usuario[c].pass)==0))
               {
                   logado = 2; //logado com sucesso
                   break;
               }

       }

       if (logado==1)
       {
           system("cls");
           printf("\nLogin e/ou senha incorreto(s)\n");
           printf("\nTente Novamente!\n");
           goto erro_login;
       }
       else if (logado==2)
       {
           system("cls");
           printf("\nLogado com sucesso!\n\nBem-vindo(a) %s\n",login[0]);
           printf("Codigo do usuario: %d\n\n",usuario[c].codigo);
       }
   }
}
void logar_adm()
{
   int c;
   int logado;
   char login[1][20], senha[1][20];
   char fechar_login[] = {"EXIT"}, fechar_senha[] = {"EXIT"};

   erro_login:

   printf("\n\tPara fechar digite o usuario e a senha EXIT em maiusculo\n");
   printf("\n\tLogon\n");
   printf("\n\tLogin: ");
   scanf(" %s",login[0]);
   printf("\n\tSenha: ");
   scanf(" %s",senha[0]);

   if ((strcmp(login[0],conta_adm)==0)&&(strcmp(login[0],senha_adm)==0)) logado = 2;
   else if ((strcmp(login[0],fechar_login)==0)&&(strcmp(senha[0],fechar_senha)==0)) exit(0);
   else
   {
       for (c=0;c<1000;c++)
       {
           if ((strcmp(login[0],admin[c].user)!=0) || (strcmp(senha[0],admin[c].pass)!=0))
           {
               logado = 1; //login e/ou senha incorretos
           }
           else if((strcmp(login[0],admin[c].user)==0) && (strcmp(senha[0],admin[c].pass)==0))
               {
                   logado = 2; //logado com sucesso
                   break;
               }

       }
   }

       if (logado==1)
       {
           system("cls");
           printf("\nLogin e/ou senha incorreto(s)\n");
           printf("\nTente Novamente!\n");
           goto erro_login;
       }
       else if (logado==2)
       {
           system("cls");
           printf("\n\tLogado com sucesso!\n\n\tBem-vindo(a) %s\n",login[0]);
          // printf("Codigo do ADMIN: %d\n\n",admin[c].codigo);
           login_adm();
       }
}

void login_adm()
{
   int op_adm;
   int a=0,adm_cad=0,b,c,nc;

   tela_inicial_adm:
       printf("\n\t1- Cadastro de usuarios\n");
       printf("\n\t2- Cadastro de administradores\n");
       printf("\n\t9- Voltar a tela de login\n");
       printf("\n\t0- Fechar\n");
       printf("\t");
       scanf("%d", &op_adm);
       system("cls");
       if (op_adm == 1)
       {
           printf("\nQuantos cadastros deseja fazer? \n");
           scanf("%d",&nc);
           if (a==0)
           {
               for (a=0;a<nc;a++)
               {
                   cadastro_cliente(a);
               }
               goto tela_inicial_adm;
           }
           else if (a!=0)
           {
               b = a;
               c = a+nc-1;
               printf("\n%d\n",a);
               for (a=b;a<=c;a++)
               {
                   cadastro_cliente(a);
               }
               goto tela_inicial_adm;
           }
   }
   else if (op_adm == 2)
   {
       printf("\nQuantos cadastros deseja fazer? \n");
       scanf("%d",&nc);
       if (adm_cad==0)
       {
       for (adm_cad=0;adm_cad<nc;adm_cad++)
       {
           cadastro_administrador(adm_cad);
       }
       goto tela_inicial_adm;
       }
       else if (adm_cad!=0)
       {
           b = adm_cad;
           c = adm_cad+nc-1;
           printf("\n%d\n",a);
           for (adm_cad=b;adm_cad<=c;adm_cad++)
           {
               cadastro_administrador(adm_cad);
           }
           goto tela_inicial_adm;
       }
   }
   else if (op_adm == 0) exit(0);
   else if (op_adm == 9) menu_login_inicial();
}

void menu_login_inicial()
{
   int op_login;

   menu_de_login:
   printf("1- Login de USUARIO\n");
   printf("2- Login de ADMINISTRADOR\n");
   printf("0- FECHAR\n");
   scanf(" %d",&op_login);
   if (op_login==1) logar_usuario();
   else if (op_login==2) logar_adm();
   else if (op_login==0) exit(0);
   else
   {
       system("cls");
       printf("Opcao invalida!\n");
       goto menu_de_login;
   }
}

int main(void)
{
   menu_login_inicial();
   return 0;
}

 

-----------------------------------

 

Bom, eu consegui arrumar o que estava errado, que no momento eu não lembro o que era xP

 

Vou deixar o código aqui, se alguém que está iniciando como eu quiser dar uma olhada, até usar esse código, tá certo que não é o melhor que vão achar, nem o melhor jeito de fazer (acho eu), mas fazendo um código assim já dá pra começar a entender um pouquinho de C xD (ou não).

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define conta_adm "root"
#define senha_adm "root"

void login_adm();
void menu_login_inicial();
void login_usuario();
int validar_login_usuario();

struct cadastro{
   char user[20];
   char pass[20];
   int codigo;
}usuario[1000],admin[50],cadastro_user[1000],cad_admin[50];

int validar_login_usuario(int a,int c)
{
   int r;

   if (strcmp(cadastro_user[a].user,usuario[c].user)==0)
   {
       r = 1; //usuario ja existe
   }
   else r = 0; //usuario nao existe
   return (r);
}

int validar_login_adm(int a,int c)
{
   int r;

   if (strcmp(cad_admin[a].user,admin[c].user)==0)
   {
       r = 1; //usuario ja existe
   }
   else r = 0; //usuario nao existe
   return (r);
}

void cadastro_cliente(int a)
{
   int b,c;
   system("cls");
   usuario_existente:
   usuario[a].codigo = a+1;
   printf("\n\tCadastro %d",usuario[a].codigo);
   puts("\n\n\tDigite o login: ");
   printf("\t");
   scanf(" %s",cadastro_user[a].user);
   for (c=0;c<1000;c++)
   {
       b = validar_login_usuario(a,c);
       if (b==1) break;
   }
   if (b==0)
   {
       memcpy(usuario[a].user,cadastro_user[a].user,50);
       puts("\tDigite a senha: ");
       printf("\t");
       scanf(" %s",usuario[a].pass);
   }
   else if (b==1)
   {
       printf("\nLogin ja existente!\n");
       goto usuario_existente;
   }
}

void cadastro_administrador(int a)
{
   int b,c;
   system("cls");
   admin_existente:
   admin[a].codigo = a+1;
   printf("\n\tCadastro %d",admin[a].codigo);
   puts("\n\n\tDigite o login: ");
   printf("\t");
   scanf(" %s",cad_admin[a].user);
   for (c=0;c<50;c++)
   {
       b = validar_login_adm(a,c);
       if (b==1) break;
   }
   if (b==0)
   {
       memcpy(admin[a].user,cad_admin[a].user,50);
       puts("\tDigite a senha: ");
       printf("\t");
       scanf(" %s",admin[a].pass);
   }
   else if (b==1)
   {
       printf("\nLogin ja existente!\n");
       goto admin_existente;
   }
}

void logar_usuario()
{
   int c;
   int logado;
   char login[1][20], senha[1][20];
   char fechar_login[] = {"EXIT"}, fechar_senha[] = {"EXIT"};

   erro_login:

   printf("\n\tPara fechar digite o usuario e a senha EXIT em maiusculo\n");
   printf("\n\tLogon\n");
   printf("\n\tLogin: ");
   scanf(" %s",login[0]);
   printf("\n\tSenha: ");
   scanf(" %s",senha[0]);

   if ((strcmp(login[0],fechar_login)==0)&&(strcmp(senha[0],fechar_senha)==0)) exit(0);
   else
   {
       for (c=0;c<1000;c++)
       {
           if ((strcmp(login[0],usuario[c].user)!=0) || (strcmp(senha[0],usuario[c].pass)!=0))
           {
               logado = 1; //login e/ou senha incorretos
           }
           else if((strcmp(login[0],usuario[c].user)==0) && (strcmp(senha[0],usuario[c].pass)==0))
               {
                   logado = 2; //logado com sucesso
                   break;
               }

       }

       if (logado==1)
       {
           system("cls");
           printf("\nLogin e/ou senha incorreto(s)\n");
           printf("\nTente Novamente!\n");
           goto erro_login;
       }
       else if (logado==2)
       {
           system("cls");
           printf("\nLogado com sucesso!\n\nBem-vindo(a) %s\n",login[0]);
           printf("Codigo do usuario: %d\n\n",usuario[c].codigo);
           login_usuario();
       }
   }
}

void login_usuario()
{
   int op_user;

   tela_inicial_user:
       printf("\n\t9- Voltar a tela inicial de login");
       printf("\n\t0- Fechar\n\t");
       scanf("%d",&op_user);

       if (op_user==9) {system("cls");menu_login_inicial();}
       else if (op_user==0) exit(0);
       else {system("cls"); printf("\n\tOpcao Invalida\n"); goto tela_inicial_user;}
}

void logar_adm()
{
   int c;
   int logado;
   char login[1][20], senha[1][20];
   char fechar_login[] = {"EXIT"}, fechar_senha[] = {"EXIT"};

   erro_login:

   printf("\n\tPara fechar digite o usuario e a senha EXIT em maiusculo\n");
   printf("\n\tLogon\n");
   printf("\n\tLogin: ");
   scanf(" %s",login[0]);
   printf("\n\tSenha: ");
   scanf(" %s",senha[0]);

   if ((strcmp(login[0],conta_adm)==0)&&(strcmp(login[0],senha_adm)==0)) logado = 2;
   else if ((strcmp(login[0],fechar_login)==0)&&(strcmp(senha[0],fechar_senha)==0)) exit(0);
   else
   {
       for (c=0;c<1000;c++)
       {
           if ((strcmp(login[0],admin[c].user)!=0) || (strcmp(senha[0],admin[c].pass)!=0))
           {
               logado = 1; //login e/ou senha incorretos
           }
           else if((strcmp(login[0],admin[c].user)==0) && (strcmp(senha[0],admin[c].pass)==0))
               {
                   logado = 2; //logado com sucesso
                   break;
               }

       }
   }

       if (logado==1)
       {
           system("cls");
           printf("\nLogin e/ou senha incorreto(s)\n");
           printf("\nTente Novamente!\n");
           goto erro_login;
       }
       else if (logado==2)
       {
           system("cls");
           printf("\n\tLogado com sucesso!\n\n\tBem-vindo(a) [ADM]%s\n",login[0]);
          // printf("Codigo do ADMIN: %d\n\n",admin[c].codigo);
           login_adm();
       }
}

void login_adm()
{
   int op_adm;
   int a=0,adm_cad=0,b,c,nc;

   tela_inicial_adm:
       printf("\n\t1- Cadastro de usuarios\n");
       printf("\n\t2- Cadastro de administradores\n");
       printf("\n\t9- Voltar a tela de login\n");
       printf("\n\t0- Fechar\n");
       printf("\t");
       scanf("%d", &op_adm);
       system("cls");
       if (op_adm == 1)
       {
           printf("\nQuantos cadastros deseja fazer? \n");
           scanf("%d",&nc);
           if (a==0)
           {
               for (a=0;a<nc;a++)
               {
                   cadastro_cliente(a);
               }
               goto tela_inicial_adm;
           }
           else if (a!=0)
           {
               b = a;
               c = a+nc-1;
               printf("\n%d\n",a);
               for (a=b;a<=c;a++)
               {
                   cadastro_cliente(a);
               }
               goto tela_inicial_adm;
           }
   }
   else if (op_adm == 2)
   {
       printf("\nQuantos cadastros deseja fazer? \n");
       scanf("%d",&nc);
       if (adm_cad==0)
       {
       for (adm_cad=0;adm_cad<nc;adm_cad++)
       {
           cadastro_administrador(adm_cad);
       }
       goto tela_inicial_adm;
       }
       else if (adm_cad!=0)
       {
           b = adm_cad;
           c = adm_cad+nc-1;
           printf("\n%d\n",a);
           for (adm_cad=b;adm_cad<=c;adm_cad++)
           {
               cadastro_administrador(adm_cad);
           }
           goto tela_inicial_adm;
       }
   }
   else if (op_adm == 0) exit(0);
   else if (op_adm == 9) menu_login_inicial();
}

void menu_login_inicial()
{
   int op_login;

   menu_de_login:
   printf("1- Login de USUARIO\n");
   printf("2- Login de ADMINISTRADOR\n");
   printf("0- FECHAR\n");
   scanf(" %d",&op_login);
   if (op_login==1) logar_usuario();
   else if (op_login==2) logar_adm();
   else if (op_login==0) exit(0);
   else
   {
       system("cls");
       printf("Opcao invalida!\n");
       goto menu_de_login;
   }
}

int main(void)
{
   menu_login_inicial();
   return 0;
}

 

Pra mim agora só falta eu ligar o código a arquivos de texto com os cadastros :P

E foi mal pelos 3 posts seguidos, só tou deixando o código aqui pra verem como tá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.