Ir ao conteúdo

Pascal/Delphi Menu de login (Quero fazer tipo um bando de dados com o .txt)


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

Postado

Queria fazer um cadatro de login e senha, a partir dai poderia fazer tipo um bando de dados em txt.É possivel?

 Fiz um programa com login e senha, só q somente da pra cadastrar no código fonte e n dentro do programa.

Vou depositar aqui a seguir parte do código que estou desenvolvendo, ele tem varias procedures, n estranhem falta de códigos pois só colocarei a parte de menu:

Begin                     //Login and senha
        GotoXY(74,3);
        BV:= 'BEM VINDO LUIZ !!! :D ';
        TextBackground(Black);
        For i:= 1 to Length(BV)do
        Begin
          TextColor(Blink + 12);
          Write (BV[i]);
          Delay(100);
        end;                // termina o Welcome
        While V <> 1 do
        Begin
          Textbackground(black);
          GotoXY(3,6);
          TextBackGround(1);
          TextColor(blink+Red);
          lowvideo;
          Write ('|||||||||||||||||||||| Digite seu Login:   ');
          TextColor(White);
          TextBackGround(Black);
          Write('  ');
          TextBackGround(4);
          Write (' >>> ');
          TextBackGround(Black);
          TextColor(2);
          Write('  ');
          TextColor(Red);
          Read (Login);
          TextBackGround(Black);
          
          If (Upcase(Login)) = 'ANONYMOUSLPH' then
            Begin
              GotoXY (70,6);
              TextBackGRound(BLUE);
              TextColor(LightGreen);
              Write (' V ');
              V:= 1;
            end
            Else
            Begin
              GotoXY (70,6);
              TextBackGround(BLUE);
              TextColor(LightRed);
              Write (' X ');
              V:= 2;
            end;
            Readln;
            
            GotoXY(3,8);
            TextBackGround(1);
            TextColor(blink+Red);
            lowvideo;
            Write ('||||||||||||||||||||| Digite sua Senha:    ');
            TextColor(White);
            TextBackGround(Black);
            Write('  ');
            TextBackGround(4);
            Write (' >>> ');
            TextBackGround(Black);
            TextColor(2);
            Write('  ');
            TextColor(Red);
            Readln(Senha);
            TextBackGround(Black);
            
            If (Upcase(Senha)) = '9637ZX' then
              Begin
                GotoXY (70,8);
                TextBackGRound(BLUE);
                TextColor(LightGreen);
                Write (' V ');
                V:= 1;
              end
              Else
              Begin
                GotoXY (70,8);
                TextBackGround(BLUE);
                TextColor(LightRed);
                Write (' X ');
                V:=2;
              end;
              
              If V <> 1 then
              Begin
                TextBackGround(Black);
                Clrscr;
              end;
              
              Writeln;
              TextColor(Red+Blink);
              GotoXY(20,12);
              TextBackGround(LightRed);
              Textcolor(White+Blink);
              Writeln('---Press Enter---');
              Readkey;
            end;
            
            Case V of
              1:
              Begin
                Armazem;
              end
              Else if V = 2 then
              Begin
                GotoXY(60,10);
                Writeln('Senha ou Login incorretos...');
                readkey;
              end
              else
               Begin
                 GotoXY(60,10);
                 Writeln('Senha ou Login incorretos...');
               end;
              
            End;
            
          End.

E o que eu queria fazer é mais ou menos isso :

Program armazenamento ;
Var Nome, senha: string;
    Txt: text;
    Cont: integer;
Begin
  Assign(txt, 'C:\\ANTIPROCRASTINATOR\OpaTiozao.txt');
  Writeln('Digite seu login: ');
	Readln(Nome);
	Writeln('Digite sua senha: ');
	Readln(Senha);
	Append(txt);
	Writeln(txt);
	Writeln(txt);
	Writeln('Cadastrado com sucesso. ');
	
	Cont:=0;
	While cont <> 1 do
	Begin
	 if (Nome = txt and senha = txt then
	   Begin
	    Cont :=1;
	    Writeln('correto');
	   end;
	end;
	Close(txt);
	readln;   
End.

Seria um procedimento também.

  • Membro VIP
Postado

Adendo:

1 hora atrás, KXSY disse:

assign(arq,'Config.ini');

 

@AnonymousLPH, desta forma estará utilizando um caminho relativo (em detrimento de um caminho absoluto) para o arquivo. Geralmente ficará na mesma pasta onde está o .exe. (obs.: pelo que eu vi, não funciona no PZim)

 

Uma outra dica seria utilizando constantes para o nome e caminho (se quiser).

const
  TAMANHO_NOME = 10;
  TAMANHO_SENHA = 10;
  NOME_ARQUIVO = 'dados.bin'
begin
    assign(arq, NOME_ARQUIVO);
    {$I-}
    reset(arq);
    {$I+}

 

Obs.: o nome e a extensão meio que não importa, pois o que importa para o programa é a estrutura do conteúdo. Poderia ser "db.pwd" ou o que quiser. No no Windows, a extensão serve basicamente para "indicar quem vai abrir o arquivo", mas eu não usaria .ini, pois este é comumente usado como um arquivo de texto, ou seja: seria como um .txt com "dados de configurações" (é aberto pelo Notepad). Já os arquivos do tipo "file of" são binários... feitos com uma estrutura específica para o seu programa (não é feito para abrir em outros locais por definição. Um ".ini" não vai ser lido no Notepad)... fazendo mais sentido utilizar ".bin" ou qualquer outra coisa "mais próxima da funcionalidade real". Fazendo uma analogia: faria sentido chamar de "leai-me.pdf"? vai funcionar, mas lá na pasta de arquivo, não vai ser aberto pelo "Adobe Reader", nem muito menos o arquivo é um "readme".

 

1 hora atrás, KXSY disse:

        write(arq,usuario);
        if IoResult=0 then
            writeln('usuario Cadastrado com sucesso.')
        else

 

Aqui faltou também o write() entre as diretivas {$I-} e {$I+}. No caso TODAS as operações de entrada e saída precisariam verificar se deu certo ou não... acho melhor logo não verificar algo.. deixar apenas para verificar se o arquivo existe ou não lá no início (a para para criar um função que verifica, por exemplo).

 

 

Segue um exemplo utilizando arquivos text.

program senhas;

uses
  Crt;
  
const
  TAMANHO_NOME = 10;
  TAMANHO_SENHA = 10;
  NOME_ARQUIVO = 'c:\temp\logins.ini';
  //sendo texto, agora faz sentido usar .ini
  //deixeo o caminho absoluto pois não rodou no PZim (no Free Pascal passou de boa)
  
type                                       
  TUsuario = record
    nome :string[TAMANHO_NOME];
    senha :string[TAMANHO_SENHA];
  end;
  
var
  arq :text;
  usuario :TUsuario;
  codeError :byte;
  
begin
Assign(arq, NOME_ARQUIVO);
{$I-} reset(arq); {$I+}
codeError := IoResult;
if codeError<> 0 then
  begin
  {$I-} ReWrite(arq); {$I+}
  codeError := IoResult;
  if codeError <> 0 then
    begin
    writeln('Erro generido de IO: cod.', codeError);
    writeln('Nao foi possivel criar o arquivo.');
    readln;
    exit;
    end;
  writeln('Usuario : ');
  writeln('Senha   : ');
  GotoXY(11, WhereY-2); readln(usuario.nome);
  GotoXY(11, WhereY  ); readln(usuario.senha);
  Append(arq);
  writeln(arq, usuario.nome);
  writeln(arq, usuario.senha);
end
  else
    begin
    readln(arq, usuario.nome);
    readln(arq, usuario.senha);
    writeln('usuario Cadastrado no sistema.');
    writeln('Usuario : ', usuario.Nome);
    writeln('Senha   : ', usuario.Senha);
    readln;
    end;
Close(arq);
end.

 

Utilizando text, você pode acessar os dados diretamente por um editor de texto qualquer... inclusive pode editar e salvar, quando o programa abrir, vai usar o que ele encontrar lá... aí tem que analisar o que seria mais interessante para o seu contexto. Outra coisa: se for usar text, aí já poderia implementar algum recurso para criptografar/descriptografar a senha... em fim... a depender do sistema, a senha pode ficar em texto mesmo... cada tipo de arquivo (text ou file of) tem as suas vantagens. 

 

Analisa aí e vai futucando. Qualquer coisa é só postar.

 

  • Curtir 1
Postado

@Simon Viegas @KXSY Eu ja fiz um o programa para aparecer ali pra pessoa digitar algo, com cor e todas as funções, só queria saber se existe um jeito de quando a pessoa digitar um login e senha, o programa iria la no bloco txt e verificaria se o login e senha estaria corretor e voltaria para confirmar se estaria de acordo, se sim o programa iniciaria normalmente, se nao ele resetaria, quero acrescentar tipo uma função para cadastro, tipo um painel. sabe?

vou postar meu código inteiro aqui:

{ Objetivo --> Usar tudo o que aprendi }
////
////
////
Program Diaria ;
Var  i, V: integer;
Login, Senha, BV, Crono: String;
////
Procedure Cronometro;
var
hi,mi,si,csi,hh,mm,ss,cs:word;
Begin
  ClrScr;
  hi:=0;
  mi:=0;
  si:=0;
  csi:=0;
  cs:=0;
  gettime(hi,mi,si,csi);
  TextColor(2);
  Lowvideo;                                                                             //cronometro
  gotoxy(80,12);
  Write ('Hora atual:');
  Repeat
    gettime(hh,mm,ss,cs);
    gotoxy(80,14);
    Write (hh,':',mm,':',ss,':',cs);
  until keypressed;
  gotoxy(48,16);
  Lowvideo;
  Write('Demorou, ',hh-hi,' Horas/ ',mm-mi,' minutos/ ',ss-si,' segundos/ ',cs-csi,' centésimos, para executar a tarefa!');
  readkey;
  readln;
End;
Procedure Armazem;
Var VetorArmazem : Array[1..100] of string;
ValorFinal, i, numTarefa : integer;
Continuar : String;
Begin
  GotoXY(50,22);
  TextBackGround(10);
  TextColor(14);
  Write ('LUIZ, QUANTAS TAREFAS DESEJA ARMAZENAR HOJE ? (1,2,3,4...)   ');
  TextBackground(White);
  Textcolor(LightBlue);
  Write ('-->');
  TextBackGround(Black);
  Write('   ');
  Readln(ValorFinal);
  For i:= 1 to ValorFinal do
  Begin
    Clrscr;
    GotoXY(66,22);
    Write ('Digite a - ',i,' - tarefa: ');
    Readln(VetorArmazem[i]);
    Clrscr;
    Repeat
      GotoXY(62,24);
      Write ('QUAL TAREFA DESEJA CONSULTAR ? (1,2,3,4...)   ');
      Readln(numTarefa);
      GotoXY(68,26);
      TextBackGround(14);
      TextColor(LightRed);
      Writeln ('A TAREFA A FAZER É  ->> ', VetorArmazem[numTarefa],' <<- ');
      TextBackGround(Black);
      GotoXY(50,30);
      Write ('Deseja Iniciar a contagem de tempo para fazer essa tarefa ? (SIM/NAO) ');
      Readln(Crono);
      If (Upcase(Crono)) = 'SIM' then
        Begin
          Cronometro;
        end;
                                                                             //Armazenagem
        TextColor(14);
        GotoXY(68,28);
        Write ('Deseja continuar ? (SIM/NAO) -> ');
        Readln(Continuar);
        
        Clrscr;
    Until (Upcase(Continuar)) = 'NAO';
  end;
End;
    
    ////
    Begin                     //Login and senha
      GotoXY(74,3);
      BV:= 'BEM VINDO LUIZ !!! :D ';
      TextBackground(Black);
      For i:= 1 to Length(BV)do
      Begin
        TextColor(Blink + 12);
        Write (BV[i]);
        Delay(50);
      end;                // termina o Welcome
      While V <> 1 do
      Begin
        Textbackground(black);
        GotoXY(3,6);
        TextBackGround(1);
        TextColor(blink+Red);
        lowvideo;
        Write ('|||||||||||||||||||||| Digite seu Login:   ');
        TextColor(White);
        TextBackGround(Black);
        Write('  ');
        TextBackGround(4);
        Write (' >>> ');
        TextBackGround(Black);
        TextColor(2);
        Write('  ');
        TextColor(Red);
        Read (Login);
        TextBackGround(Black);
        
        If (Upcase(Login)) = 'ANONYMOUSLPH' then
        Begin
            GotoXY (70,6);
            TextBackGRound(BLUE);
            TextColor(LightGreen);
            Write (' V ');
            V:= 1;
            GotoXY(55,11);
            TextColor(Green);
            Writeln('Login Correto!!! ');
        end
          Else
          Begin
            GotoXY (70,6);
            TextBackGround(BLUE);
            TextColor(LightRed);
            Write (' X ');
            V:= 2;
            GotoXY(55,11);
            TextColor(RED);
            Writeln('Login incorreto!!!');
          end;
          
          
          GotoXY(3,8);
          TextBackGround(1);
          TextColor(blink+Red);
          lowvideo;
          Write ('||||||||||||||||||||| Digite sua Senha:    ');
          TextColor(White);
          TextBackGround(Black);
          Write('  ');
          TextBackGround(4);
          Write (' >>> ');
          TextBackGround(Black);
          TextColor(2);
          Write('  ');
          TextColor(Red);
          Readln(Senha);
          TextBackGround(Black);
          
          If (Upcase(Senha)) = '9637ZX' then
            Begin
              GotoXY (70,8);
              TextBackGRound(BLUE);
              TextColor(LightGreen);
              Write (' V ');
              V:= 1;
              GotoXY(55,10);
              TextColor(Green);
              Writeln('Senha correta!!!');
            end
            Else
            Begin
              GotoXY (70,8);
              TextBackGround(BLUE);
              TextColor(LightRed);
              Write (' X ');
              V:=2;
              GotoXY(55,10);
              TextColor(RED);
              Writeln('Senha incorreta!!!');
            end;
            
            If V <> 1 then
            Begin
              TextBackGround(Black);
            end;
            
            Writeln;
            TextColor(Red+Blink);
            GotoXY(20,12);
            TextBackGround(LightRed);
            Textcolor(White+Blink);
            Writeln('---Press Enter---');
            TextBackGround(Black);
            Readkey;
            Clrscr;
        end;
          
          Case V of
            1:
            Begin
              Armazem;
            end
            else
            Begin
              V:= 99;
            end;
            
            
      End;
          
    End.

Estou quebrando a cabeça com isso... 😢 kkkk :c

adicionado 5 minutos depois

Comandos que desconheço (IoResult, readln(usuario.nome), Reset)

  • Membro VIP
  • Solução
Postado
Em 03/09/2019 às 12:37, KXSY disse:

type TUsuario=record Nome:string[TAMANHO_NOME]; Senha:string[TAMANHO_SENHA]; end;

Sobre:

25 minutos atrás, AnonymousLPH disse:

@Simon Viegas @KXSY Eu ja fiz um o programa para aparecer ali pra pessoa digitar algo, com cor e todas as funções, só queria saber se existe um jeito de quando a pessoa digitar um login e senha, o programa iria la no bloco txt e verificaria se o login e senha estaria corretor e voltaria para confirmar se estaria de acordo, se sim o programa iniciaria normalmente, se nao ele resetaria, quero acrescentar tipo uma função para cadastro, tipo um painel. sabe?

vou postar meu código inteiro aqui:

 

Particularmente preciso que especifique qual parte está com dificuldades... o que não está funcionado...

 

 

 

Sobre:

25 minutos atrás, AnonymousLPH disse:

Comandos que desconheço (IoResult, readln(usuario.nome), Reset)

 

Quando desconhecer, dá um Google... especialmente para o IOResulte() e Reset() :).

 

Mas segue:

 

IOResult() = Traz o código do resultado da última operação de entrada e saída. Quando não ocorre erros, traz 0, caso contrário, retorna um código referente ao erro que ocorreu. (para nosso contexto, só importa se foi 0 ou não). É um comando inerente ao uso de arquivos...

usuario.nome = Esse "." é uma forma de acessar uma "variável" do registro que foi previamente definido. Ex.:

 

Em 03/09/2019 às 12:37, KXSY disse:

type
  TUsuario=record
    Nome:string[TAMANHO_NOME];
    Senha:string[TAMANHO_SENHA];
  end;

 

A variável usuario é do tipo TUsuario,  tendo assim esses "atributos". Record é meio que simplesmente uma forma de de agrupar variáveis.

 

Reset() = É o comando que abre o arquivo e posiciona o "cursor" para leitura, ou escrita, no início, ou seja: o arquivo vai ficar "aberto" e pronto para ser lido, ou escrito, lá no topo dele. Usado tanto no text, tando no file of. Mas tem diferença entre um e outro... No text existe também o Append(). Um com uso semelhante para o outro seria Seek().

 

- pesquise sobre registro (record) no Pascal;

- pesquise sobre arquivos no Pascal;

 

Por ai vai.

  • Obrigado 1
  • Membro VIP
Postado
28 minutos atrás, AnonymousLPH disse:

GotoXY(11, WhereY-2); readln(usuario.nome);
  GotoXY(11, WhereY  ); readln(usuario.senha);

Não entendi esses  pontos, o que fazer?

 

 

Vou só reforçar:

 

Em 03/09/2019 às 13:44, Simon Viegas disse:

  writeln('Usuario : ');
  writeln('Senha   : ');
  GotoXY(11, WhereY-2); readln(usuario.nome);
  GotoXY(11, WhereY  ); readln(usuario.senha);

 

Desta forma na tela vai aparecer já os campos de usuário e senha (em vez de ler um, e depois aparecer o outro)... como num formulário. Daí, precisa reposicionar para ler ao lado do texto.

 

WhereY()  =  valor da coordenada Y (linha) do cursor no momento.

 

Se estiver, por exemplo, na linha 15, vai voltar para a 13 e ficará na coluna 11. Na linha de baixo já estará na linha correta, pois foi dado ENTER ao ler o nome..., basta posicionar nesta mesma linha na coluna 11. A vantagem de utilizar o WhereY() é não precisa se preocupar em que linha está.

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!