Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Exercício "Simulação de Login"

Fiz desta forma. Depois de ver o código do professor, vi que era possível deixar bem mais "enxuto".

<meta charset="UTF-8">

<script>
    // FUNÇÃO DE QUEBRA DE LINHA
    function jump() {

        document.write("<br>");    
        document.write("<br>");    
    }
    // FUNÇÃO DE EXIBIR TEXTO
    function text(x) {

        document.write(x);
        jump();
    }

// EXERCÍCIO DE SIMULAÇÃO DE TELA DE LOG-IN

var usuarioCadastro = "athos";
var senhaCadastro = 990077;
var tentativas = 3; 


while(tentativas > 0)
{
    var usuario = prompt("Digite o usuário: ");

     if(usuario==usuarioCadastro){
       var senha = prompt("Digite a senha: ");
          if(senha==senhaCadastro){

            alert("Log-in feito com sucesso! Bem-vindo, Athos.")
            break;

    }
       else{
        var tentativas = tentativas - 1;
              alert("Senha incorreta. Você possui " + tentativas + " tentativas restantes.");
}

}
       else{
          var tentativas = tentativas - 1; 
             alert("Usuário incorreto. Você possui " + tentativas + " tentativas restantes.")
}

}

if(tentativas <= 0){
    text("Você não possui mais tentativas. Log-in bloqueado!");

}

</script>
6 respostas

Athos,

Você está no caminho correto! Vida de programador é desta forma: fazer sempre melhor!

Parabéns e bons estudos!

Athos,

seu código tenta ser funcionalmente diferente do professor, no conceito, pois pede login primeiro e tenta validá-lo, antes de pedir a senha. Nisso pode ter melhor funcionalidade que a versão do professor, que só informa se há erro após digitar login e senha. Aí o usuário pode não saber o que digitou errado.

O problema é que, da maneira que você implementou, as tentativas são contadas como uma coisa só, ou seja, se tentar 2 vezes o login, só vai ter uma chance pra senha. O ideal seria que houvesse 3 tentativas para login, e após acertar o login, o usuário tivesse outras 3 chances para a senha.

Complica um pouco, mas seria a correta implementação da sua idéia, caso tenha interesse em desenvolver.

Bons estudos!

Olá, Akashi. Precisei quebrar a cabeça, mas consegui fazer do jeito que você sugeriu. Aqui está o código.

<meta charset="UTF-8">

<script>
    // FUNÇÃO DE QUEBRA DE LINHA
    function jump() {

        document.write("<br>");    
        document.write("<br>");    
    }
    // FUNÇÃO DE EXIBIR TEXTO
    function text(x) {

        document.write(x);
        jump();
    }

// EXERCÍCIO DE SIMULAÇÃO DE TELA DE LOG-IN
var usuarioCadastro = "athos";
var senhaCadastro = 990077;
var tentUsuario = 3; 
var tentSenha = 3;

//USUÁRIO
for(tentUsuario; tentUsuario >= 0; tentUsuario--) {
    var usuarioDigitado = prompt('Bem-vindo. Digite o usuário.' );
    if(usuarioDigitado==usuarioCadastro) {
      var usuarioOK = true; 
      break; 
    }
    else{
        alert('Usuário incorreto. Você possui ' + tentUsuario + ' tentativa(s) restante(s).')
    }
    }

//SENHA
if(usuarioOK) {
for(tentSenha; tentSenha >= 0; tentSenha--) {
    var senhaDigitada = prompt('Digite a senha.' );
    if(senhaDigitada==senhaCadastro) {
      var senhaOK = true; 
      break; 
    }
    else{
        alert('Senha incorreta. Você possui ' + tentSenha + ' tentativa(s) restante(s).')
    }
    }    
}

//VERIFICA
if(usuarioOK==true && senhaOK ==true) {
    text('CREDENCIAIS CORRETAS! SEJA BEM VINDO, ' + usuarioCadastro + '!');
}
else{
text('Você esgotou todas as suas tentativas. Log-in bloqueado!');    
}

</script>

O que você achou? Poderia ter feito de uma maneira mais simplificada? Adoraria ver sua opinião sobre. Obrigado.

solução!

Athos,

muito bom! Que bom que tentou reimplementar. Ao quebrar a cabeça sobre um projeto/ideia própria é que a gente consolida o conhecimento. Só reproduzir os exercícios já e bom, mas nos apropriamos do conhecimento ao tentar fazer algo da própria cabeça.

Como pediu, aqui vão opiniões. Nem vou pensar se dá pra melhorar, porque acho que já está ótimo assim. São só sugestões sem muita importância, não precisa mudar, coloco só para saber:

  • a function jump() e sua invocação jump() não são utilizadas, podem ser excluídas (imagino que tenha deixado pelo aproveitamento de exercícios anteriores. Então, sem problema).
  • as variáveis tentUsuario e tentSenha poderiam deixar de ser declaradas no escopo, já que sua aparição dentro de um 'for' conta como declaração. Entendi que deixou a declaração e a atribuição de valor para fora para ficar mais fácil mudar a quantidade de tentativas. Se for isso, ok. Se não, pode deixar só dentro do 'for' mesmo. Se tirar a declaração das duas, as linhas ficariam assim:
//código ocultado

for(tentUsuario = 3; tentUsuario >= 0; tentUsuario--) {

  //código ocultado

for(tentSenha = 3; tentSenha >= 0; tentSenha--) {

//código ocultado
  • como nos dois casos usou a condição >= 0, terá 4 tentativas, e não 3 (que era sua ideia original): as tentativas 3, 2, 1 e 0. Sem problemas se pensou em mudar para 4. Se quiser 3, faça apenas >0.
  • e por último, só para que saiba (caso não saiba), estas condições finais de 'if' poderiam ser feitas sem a comparação '== true'. Elas mesmas já dizem 'sou true' ou 'sou false'. Ficaria assim:
//código ocultado

if(usuarioOK && senhaOK) {

//código ocultado

Parabéns, e bons estudos!

Muito obrigado pelas dicas, Akashi.

Oi!

Puts, a gente tá achando difícil entender o while, if, else... (e por "a gente" quero dizer eu).O que significa esses parâmetros do for?! e quais lógicas (if, else, for... são lógicas? Se não, são o que?) permitem usar ponto-e-vírgula dentro dos parâmetros?!

Obrigada!