• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomocy jestem początkujący w tym więc popełniam błędy

Object Storage Arubacloud
+1 głos
182 wizyt
pytanie zadane 3 czerwca 2021 w C# przez Szynshi Nowicjusz (130 p.)
edycja 8 czerwca 2021 przez Arkadiusz Waluk

Nie mam pojęcia czy robię to źle.

napisz część programu, która będzie odpowiedzialna za to że po trzech błędnych próbach wyrzuci informacje - błędne hasło, i zamknie program wprowadzenia hasła - wyłączy po 30 sekundach

string haslo = txtHaslo.Text;

            if (string.IsNullOrWhiteSpace(haslo))
            {
                MessageBox.Show("Hasło nie może być puste!");
            }

            else if (haslo.Length < 8)
            {
                MessageBox.Show("Hasło jest za krótkie, musi posiadac co najmnniej 8 znaków!");
            }

            else if (haslo.Contains("?") || haslo.Contains("-") || haslo.Contains("!"))
            {
                MessageBox.Show("Hasło zawiera niedozwolone znaki");
            }

            else
            {
                MessageBox.Show("Podane hasło jest prawidłowe");

string haslo = txtHaslo.Text;

            if (string.IsNullOrWhiteSpace(haslo))
            {
                MessageBox.Show("Hasło nie może być puste!");
            }

            else if (haslo.Length < 8)
            {
                MessageBox.Show("Hasło jest za krótkie, musi posiadac co najmnniej 8 znaków!");
            }

            else if (haslo.Contains("?") || haslo.Contains("-") || haslo.Contains("!"))
            {
                MessageBox.Show("Hasło zawiera niedozwolone znaki");
            }

            else
            {
                MessageBox.Show("Podane hasło jest prawidłowe");

Dobra zrobiłem a jeszcze jedno pytanko jak dodać takie coś żeby wyłączało się po 30 sekundach jak 3 razy wpiszemy źle hasło.

2 odpowiedzi

0 głosów
odpowiedź 3 czerwca 2021 przez Wiciorny Ekspert (269,710 p.)

Sformatuj kod do bloków kodu, łatwiej wtedy odczytać i pomóc
 

if (podaneHaslo>Haslodoodgadniecia)

wiesz dokładnie co siedzi pod wskazanymi zmiennymi ? Debugowałeś to? Warunek może być niepoprawny. 
Zresztą to są stringi które rzutujesz na int więc raczej bym tego nie robił

0 głosów
odpowiedź 8 czerwca 2021 przez VBService Ekspert (253,120 p.)
edycja 8 czerwca 2021 przez VBService

żeby wyłączało się po 30 sekundach jak 3 razy wpiszemy źle hasło.

Możesz użyć System.Windows.Forms Timer np.:

using System;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private const int INCORRECT_PASSWORD_TIME_TO_CLOSE_APPLIOCATION = 30; // 30 sekund
        private const int INCORRECT_PASSWORD_MAXIMUM_ATTEMPTS = 3;
        private int incorrect_password_attempts_counter = 0;

        private const int PASSWORD_MIN_LENGTH = 8;
        private const string PASSWORD_FORBIDDEN_CHARACTERS = "?-!";

        private const string CORRECT_PASSWORD = "lorem123";

        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter) checkPassword();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            checkPassword();
        }

        private void checkPassword()
        {
            string password = textBox1.Text.ToString();
            if (! String.IsNullOrWhiteSpace(password))
            {
                if (password.Length >= PASSWORD_MIN_LENGTH)
                {
                    if (! PASSWORD_FORBIDDEN_CHARACTERS.Any(password.Contains))
                    {
                        if (CORRECT_PASSWORD == password)
                        {
                            MessageBox.Show("Podane hasło jest prawidłowe");
                        }
                        else
                        {
                            incorrect_password_attempts_counter++;
                            if (incorrect_password_attempts_counter == INCORRECT_PASSWORD_MAXIMUM_ATTEMPTS)
                            {
                                textBox1.Enabled = false;
                                button1.Enabled = false;                               
                                string message = "Podano " + incorrect_password_attempts_counter + " razy nieprawidłowe hasło\n"
                                               + "Za " + INCORRECT_PASSWORD_TIME_TO_CLOSE_APPLIOCATION + " s. program zostanie zamknięty.";
                                MessageBox.Show(message);
                                Timer IncorrectPasswordApplicationClose = new Timer {
                                    Interval = INCORRECT_PASSWORD_TIME_TO_CLOSE_APPLIOCATION * 1000
                                };
                                IncorrectPasswordApplicationClose.Enabled = true;
                                IncorrectPasswordApplicationClose.Tick += new EventHandler(delegate (Object o, EventArgs a) {
                                    Application.Exit();
                                });
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Hasło zawiera niedozwolone znaki\n" + PASSWORD_FORBIDDEN_CHARACTERS);
                    }
                }
                else 
                {
                    MessageBox.Show("Hasło jest za krótkie,\n musi posiadac co najmnniej 8 znaków!");
                }
            }
            else
            {
                MessageBox.Show("Hasło nie może być puste!");
            }

            textBox1.Focus();
        }
    }
}

 

1
komentarz 8 czerwca 2021 przez adrian17 Ekspert (344,860 p.)

Ale po co tak skomplikowanie :D Coś takiego nie zadziała?

        private async void button1_Click(object sender, EventArgs e)
        {
            await checkPassword();
        }
 
        private async void checkPassword()
            // ...
                    MessageBox.Show("Podano N razy nieprawidłowe hasło");
                    await Task.Delay(TIME_TO_CLOSE);
                    Application.Exit();

 

komentarz 8 czerwca 2021 przez VBService Ekspert (253,120 p.)
edycja 8 czerwca 2021 przez VBService

Pewnie, że można krócej  wink  ( System.Threading.Timer )

new System.Threading.Timer(s => Application.Exit(), null, (INCORRECT_PASSWORD_TIME_TO_CLOSE_APPLIOCATION * 1000), 0);

 

private void checkPassword()
        {
            string password = textBox1.Text.ToString();
            if (! String.IsNullOrWhiteSpace(password))
            {
                if (password.Length >= PASSWORD_MIN_LENGTH)
                {
                    if (! PASSWORD_FORBIDDEN_CHARACTERS.Any(password.Contains))
                    {
                        if (CORRECT_PASSWORD == password)
                        {
                            MessageBox.Show("Podane hasło jest prawidłowe");
                        }
                        else
                        {
                            incorrect_password_attempts_counter++;
                            if (incorrect_password_attempts_counter == INCORRECT_PASSWORD_MAXIMUM_ATTEMPTS)
                            {
                                textBox1.Enabled = false;
                                button1.Enabled = false;                               
                                string message = "Podano " + incorrect_password_attempts_counter + " razy nieprawidłowe hasło\n"
                                               + "Za " + INCORRECT_PASSWORD_TIME_TO_CLOSE_APPLIOCATION + " s. program zostanie zamknięty.";
                                MessageBox.Show(message);
                                new System.Threading.Timer(s => Application.Exit(), null, (INCORRECT_PASSWORD_TIME_TO_CLOSE_APPLIOCATION * 1000), 0);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("Hasło zawiera niedozwolone znaki\n" + PASSWORD_FORBIDDEN_CHARACTERS);
                    }
                }
                else
                {
                    MessageBox.Show("Hasło jest za krótkie,\n musi posiadac co najmnniej 8 znaków!");
                }
            }
            else
            {
                MessageBox.Show("Hasło nie może być puste!");
            }
 
            textBox1.Focus();
        }

 

 

Timer to close the application ]

Podobne pytania

0 głosów
1 odpowiedź 273 wizyt
0 głosów
1 odpowiedź 163 wizyt
+1 głos
2 odpowiedzi 265 wizyt

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...