sábado, 13 de abril de 2019

Asp.Net - Desenvolvendo um teclado numérico randômico – Parte 2



Olá amigos, neste mês irei dar continuidade ao artigo iniciado no mês anterior. Demonstrarei toda a codificação necessária para obtermos a funcionalidade proposta. Lembramos que estamos utilizando o Microsoft Visual Studio, junto com a linguagem C#. Desenvolveremos alguns métodos, como por exemplo: o “EmbaralhaLista ()”, responsável por embaralhar os números do teclado numérico, o “CarregaNumeros ()”, o qual irá alimentar os textos dos botões em diversos momentos, entre outros.

Codificando o Exemplo

Inicialmente deveremos declarar alguns namespaces, sendo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
O uso do Namespace “System.Collections” foi necessário para utilizar principalmente a classe “List”.

A rotina “EmbaralhaLista” recebe como parâmetro um dado do tipo “List” com uma determinada lista numérica. Irá nos retornar uma “List” com uma numeração embaralhada. Para isto criamos uma varável “randomList”, uma do tipo “Random” e um inteiro chamado “randomIndex”. Dentro de um laço de repetição “While” iremos varrer todos os itens recebidos como parâmetro de entrada e contidos na variável “inputList” atribuindo o índice randômico e logo em seguida adicionando na lista randômica. O resultado será uma lista de 10 números sortidos. Ver Listagem 01.


public List<E> EmbaralharLista<E>(List<E> inputList)
{
    List<E> randomList = new List<E>();
    Random r = new Random();
    int randomIndex = 0;
   
    while (inputList.Count > 0)
    {
        randomIndex = r.Next(0, inputList.Count);
        randomList.Add(inputList[randomIndex]);
        inputList.RemoveAt(randomIndex);
    }
     return randomList;
}
Listagem 01.


O método “CarregarNumeros()” irá atribuir valores numéricos à propriedade “Text” dos cinco botões do teclado, sendo:

Botão 01
0 - 1
Botão 02
2 – 3
Botão 03
4 – 5
Botão 04
6 – 7
Botão 05
8 – 9

O primeiro passo seria criar uma variável do tipo “List” contendo valores inteiros. Adicione o intervalo de 0 a 9 nesta variável, com o auxílio da estrutura de repetição “For”. Neste momento iremos fazer o uso da função “EmbaralhaLista” descrita anteriormente, declarando mais uma variável do tipo List<int> e invocando o método “EmbaralhaLista”. Montaremos a propriedade “Text” dos botões com dois números aleatórios separados um traço “ – “. Ver Listagem 02.


public
void CarregarNumeros()
{

List<int> numeros = new List<int>();
for (int i = 0; i <= 9; i++)
{
    numeros.Add(i);
}

List<int> numeros_randomicos = new List<int>();
numeros_randomicos = EmbaralharLista(numeros);

btn01.Text = numeros_randomicos[0].ToString() + " - " + numeros_randomicos[1].ToString();

btn02.Text = numeros_randomicos[2].ToString() +
" - " + numeros_randomicos[3].ToString();

btn03.Text = numeros_randomicos[4].ToString() + " - " + numeros_randomicos[5].ToString();

btn04.Text = numeros_randomicos[6].ToString() +
" - " + numeros_randomicos[7].ToString();

btn05.Text = numeros_randomicos[8].ToString() +
" - " + numeros_randomicos[9].ToString(); 
}
Listagem 02.

Não podemos esquecer de implementar a função “CarregarNumeros” no método “Load” da página. Listagem 03.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        CarregarNumeros();
    }      
}
Listagem 03.

A implementação da função “RecebeValores” foi de extrema importância para armazenarmos apenas os valores numéricos dos botões, ou seja, teremos como valores de entrada o texto puro da propriedade “Text” do botão e o retorno numérico. Ver listagem 04.

public string RecebeValores(string btn)
{
    return btn.Substring(0, 1) + btn.Substring(4, 1);
}
Listagem 04.

Teremos a mesma codificação no evento “Click” dos cinco botões. Iremos testar o campo TextBox txtSenha verificando se a mesma possui um tamanho menor que 6 e logo em seguida atribuímos o valor “#”, assim conseguimos identificar que foi digitado algum valor. Usaremos uma “Session” para armazenar nossos valores. Ver Listagem 05 abaixo.


protected void btn01_Click(object sender, EventArgs e)
{
     if (txtSenha.Text.Length < 6)
     {
         txtSenha.Text += "#";
         Session["senha"] += RecebeValores(btn01.Text)+",";
     }
}

protected void btn02_Click(object sender, EventArgs e)
{
     if (txtSenha.Text.Length < 6)
     {
         txtSenha.Text += "#";
         Session["senha"] += RecebeValores(btn02.Text)+",";
     }
}

protected void btn03_Click(object sender, EventArgs e)
{
     if (txtSenha.Text.Length < 6)
     {
         txtSenha.Text += "#";
         Session["senha"] += RecebeValores(btn03.Text)+",";
        }
}

protected void btn04_Click(object sender, EventArgs e)
{
     if (txtSenha.Text.Length < 6)
     {
         txtSenha.Text += "#";
         Session["senha"] += RecebeValores(btn04.Text)+",";
     }
}

protected void btn05_Click(object sender, EventArgs e)
{
     if (txtSenha.Text.Length < 6)
     {
         txtSenha.Text += "#";
         Session["senha"] += RecebeValores(btn05.Text)+",";
     }
}
Listagem 05.

No evento Click do botão “Ok” faremos o trabalho de comparar a senha digitada com a senha contida em uma tabela de um banco de dados por exemplo. No nosso caso específico iremos criar uma senha a partir de uma variável do tipo “String”, contendo qualquer valor numérico aleatório com seis caracteres.
Exemplo: string senha_banco = “855971”.
Faremos a comparação da senha e do cpf digitado. Trataremos a variável “senhadigitada” armazenando cada caracatere em uma variável alfanumérica. A minha sugestão de lógica seria ir comparando caractere por caractere através de uma combinação de “Ifs” com o auxílio da função “Substring”.  Confiram maiores detalhes na Listagem 06.

protected void btnOk_Click(object sender, EventArgs e)
{
      
 string senha_banco = "855971";
 string cpf_banco = "31222288860";

        if (cpf_banco == txtCpf.Text)
        {
            string senha_digitada = Session["senha"].ToString();

            if (senha_digitada.Length == 18)
            {
    string[] senha_digitada_char = senha_digitada.Split(',');

                string str0 = senha_digitada_char[0];
                string str1 = senha_digitada_char[1];
                string str2 = senha_digitada_char[2];
                string str3 = senha_digitada_char[3];
                string str4 = senha_digitada_char[4];
                string str5 = senha_digitada_char[5];

if ((str0.Substring(0, 1) == senha_banco.Substring(0, 1)) || (str0.Substring(1, 1) == senha_banco.Substring(0, 1)))
                {
if ((str1.Substring(0, 1) == senha_banco.Substring(1, 1)) || (str1.Substring(1, 1) == senha_banco.Substring(1, 1)))
                    {
if ((str2.Substring(0, 1) == senha_banco.Substring(2, 1)) || (str2.Substring(1, 1) == senha_banco.Substring(2, 1)))
                        {
if ((str3.Substring(0, 1) == senha_banco.Substring(3, 1)) || (str3.Substring(1, 1) == senha_banco.Substring(3, 1)))
                            {
if ((str4.Substring(0, 1) == senha_banco.Substring(4, 1)) || (str4.Substring(1, 1) == senha_banco.Substring(4, 1)))
                                {
if ((str5.Substring(0, 1) == senha_banco.Substring(5, 1)) || (str5.Substring(1, 1) == senha_banco.Substring(5, 1)))
{                                        Response.Write("Autenticação Realizada com Sucesso!");
                                  }
                                }
                            }
                        }
                    }
                }
            }
        }         
    }
Listagem 06.
No evento “Click” do botão “limpar” removeremos todos os dados contidos na sessão, e por consequência limparemos o componenete “txtsenha”. Ver código abaixo na Listagem 07.

protected void btnLimpar_Click(object sender, EventArgs e)
{
    txtSenha.Text = "";
    Session.Contents.Remove("senha");
}
Listagem 07.

Teremos um resultado idêntico ao da Figura 01.

Figura 01: Resultado Final.

 

 
Conclusões

Nesta segunda e última parte procurei explorar todo o código necessário, contendo todas as explanações e comentários referentes a este tipo de funcionalidade utilizando páginas Web Asp.Net.
Espero ter ajudado, fica aí a dica galera.


Nenhum comentário:

Postar um comentário