none
Попытка ввода пин кода в TextBox RRS feed

  • Вопрос

  • Есть маленькое приложение с БД. В ней хранятся пин код и номер счёта. У пользователя есть 3 попытки на ввод пин кода (в текст бокс), в случае если все три попытки были безуспешными приложение закрывается. Есть условие где проверяется на правильность пин кода и на количество попыток:

    bool correctPin = false;
                    int attempts  = 3;
    
                    while(attempts  > 0 && !correctPin)
                    {
                        if (correctPin && (account.AccountNumber == accountDB) && (account.Pin == pinDB))
                        {
                            MessageBox.Show("Welcome!");
                            account.AccountNumber = accountDB;
    
                            WelcomeForm welcome = new WelcomeForm(account, customer, bank);
                            welcome.Show();
                            this.Hide();
                        }
                        else 
                        {
                            MessageBox.Show("Вы ввели неправильный пин код. " 
                                + "Попытка № " + --attempts );
                        }
                    }
    
                    if (!correctPin)
                    {
                        MessageBox.Show("Вы слишком часто вводили неправильный пин код. До свидания!");
                        Application.Exit();
                    }

    Когда появляется первое сообщение об ошибке, сразу за ним появляется второе сообщение об ошибке и так до конца, и у меня нет возможности попробовать ввести пин код ещё раз, вслед за этим приложение закрывается.

    Собственно вопрос, как попасть после первого сообщения  на форму с текст-боксами, чтобы была возможность ввести пароль ещё раз. Пробола прерывать условие, не получается. 

    6 июня 2013 г. 18:20

Ответы

  • Единичку к attempts добавлять не надо - с attempts все правильно,
    после каждого прохода единичка отнимается,
    а процесс завершается, когда attempts обнуляется.

    Другое дело, что не нужен цикл,
    << attempts = 3 >> должен находиться в начале программы,
    а каждая очередная проверка должна следовать после нажатия <Enter>,
    которого здесь нет.
    • Помечено в качестве ответа nigina_1989 6 июня 2013 г. 21:19
    6 июня 2013 г. 19:26

Все ответы

  • В данной ситуации вам не нужен цикл. Вам просто в случае не правильного ввода нужно выдать сообщение и к переменной attempts прибавить единичку. А следом за этим кодом проверять не достигла ли attempts предела и если да закрывать приложение. Как то так.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    6 июня 2013 г. 18:45
    Отвечающий
  • Единичку к attempts добавлять не надо - с attempts все правильно,
    после каждого прохода единичка отнимается,
    а процесс завершается, когда attempts обнуляется.

    Другое дело, что не нужен цикл,
    << attempts = 3 >> должен находиться в начале программы,
    а каждая очередная проверка должна следовать после нажатия <Enter>,
    которого здесь нет.
    • Помечено в качестве ответа nigina_1989 6 июня 2013 г. 21:19
    6 июня 2013 г. 19:26
  • QazRdx спасибо что поправили, я в C# только и понял что там цикл, который не нужен.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    6 июня 2013 г. 19:29
    Отвечающий
  • Убрала цикл, оставила только условия. Но странно что у attempts отнимается только один раз единичка, и при повторном проходе по условиям, переменная сново принимает значение 3.

    if (attempts > 0 && !correctPin)
                    {
                        if (correctPin && (account.AccountNumber == accountDB) && (account.Pin == pinDB))
                        {
                            MessageBox.Show("Welcome!");
                            account.AccountNumber = accountDB;
    
                            WelcomeForm welcome = new WelcomeForm(account, customer, bank);
                            welcome.Show();
                            this.Hide();
                        }
                        else if (account.Pin != pinDB)
                        {
                            MessageBox.Show("Вы ввели неправильный пин код. "
                                + "Попытка № " + --attempts);
                        }
    
                        else if (!correctPin && attempts == 0)
                        {
                            MessageBox.Show("Вы слишком часто вводили неправильный пин код. До свидания!");
                            Application.Exit();
                        }
                    }



    • Изменено nigina_1989 6 июня 2013 г. 20:56
    6 июня 2013 г. 20:54
  • Всё заработало, всем спасибо, забыла поместить attempts = 3 в начало программы.

    • Изменено nigina_1989 6 июня 2013 г. 21:19
    6 июня 2013 г. 21:19