Zum Inhalt springen

Windows forms: Benutzeranmeldung fehlschlagen, Code eingeben und Fehlversuche zurücksetzen.


patr96

Empfohlene Beiträge

Hallo,
Ich habe noch eine Aufgabe, die ich noch für die Schule erledigen muss. Ich habe drei von vier Aufgaben erledigt. Den letzte Aufgabe habe ich leider noch nie gemacht. Ich hoffe, dass da jemand mir helfen kann.

4. Aufgabe:
Wenn dreimal hintereinander ein falscher Benutzername oder ein falsches Passwort eingegeben wird, wird die GUI unter 4. durch eine Bezeichnung "lbl_code" und ein Textfeld "txt_code" ergänzt. Es ist nicht mehr möglich, den Benutzernamen und das Passwort einzugeben. Nach Eingabe des Codes "0815" zeigt die GUI wieder den Grundzustand an und die fehlgeschlagenen Versuche werden gelöscht.

Hier ist meine Programm.

namespace Projektarbeit_Pförtneranlage
{
    public partial class FormLogin : Form
    {
        static int attempt = 3;
        public FormLogin()
        {
            InitializeComponent();
        }
        //Verbindungszeichenfolge
        string cs = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\patri\Downloads\LoginApplicationSourceCode\LoginApplicationSourceCode\LoginApplication\LoginApplication\MyDatabase.mdf;Integrated Security=True;Connect Timeout=30;";

        private void button2_Click(object sender, EventArgs e)
        {
            string username = txt_name.Text;
            string password = txt_pwd.Text;

            if (txt_name.Text == "" || txt_pwd.Text == "")
            {
                attempt = 0;

                MessageBox.Show("Bitte geben Sie Benutzername und Passwort ein!");
                return;
            }
            else if ((attempt == 3) && (attempt > 0))
            {
                lbl_versuch.Text = ("Sie haben nur noch " + Convert.ToString(attempt) + " Versuche.");
                --attempt;
            }
            else if ((attempt == 2) && (attempt > 0))
            {
                lbl_versuch.Text = ("Sie haben nur noch " + Convert.ToString(attempt) + " Versuche.");
                --attempt;
            }
            else if ((attempt == 1) && (attempt > 0))
            {
                lbl_versuch.Text = ("Sie haben nur noch " + Convert.ToString(attempt) + " Versuch.");
                --attempt;
            }
            
            try
            {
                //Erstellen Sie SqlConnection
                SqlConnection con = new SqlConnection(cs);
                SqlCommand cmd = new SqlCommand("Select * from tbl_Login where UserName=@username and Password=@password", con);
                cmd.Parameters.AddWithValue("@username", txt_name.Text);
                cmd.Parameters.AddWithValue("@password", txt_pwd.Text);
                con.Open();
                SqlDataAdapter adapt = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                adapt.Fill(ds);
                con.Close();
                int count = ds.Tables[0].Rows.Count;
                //Wenn count gleich 1 ist, wird die Form frmMain angezeigt
                if (count == 1)
                {
                    MessageBox.Show("Anmeldung erfolgreich!");
                    this.Hide();
                    FormGUI fm = new FormGUI();
                    fm.Show();
                }
                else
                {
                    MessageBox.Show("Login Failed!");

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Puh - das sieht chaotisch aus..

- Ist es gewollt, dass man die Anzahl Versuche durch weglassen von Name und Passwort zurücksetzen kann?

- Die Anzahl der Versuche ist irrelevant, wenn man die korrekte Name/Passwort Kombi eingibt - deswegen sollte man die Versuche vielleicht nur anzeigen, wenn der Login fehlschlägt.

- Die if else -Schlange (was ist bei 100 erlaubten Versuchen?) kann man zu einem if statement zusammenfassen, zudem

((attempt == 3) && (attempt > 0))

ist doppelt gemoppelt.  Du solltest evtl. nur vergleichen, ob der aktuelle (fehlgeschlagene) Versuch unter der Anzahl maximaler Versuche liegt oder ob diese erreicht sind.

Den ganzen Code in die button2_Click Methode zu quetschen ist extemst Spaghetti :)

Zu deiner eigentlichen Frage: GUI-Elemente wie Label und Textboxen lassen sich z.B. mittels ihrer "Visible"-Eigenschaft anzeigen und verbergen  sowie mittels der "Enabled"-Eigenschaft aktivieren und deaktivieren - Bsp:

label1.Visible = true;
textbox1.Enabled = false;

 

 

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Stunden schrieb RipperFox:

- Die if else -Schlange (was ist bei 100 erlaubten Versuchen?) kann man zu einem if statement zusammenfassen, zudem


((attempt == 3) && (attempt > 0))

ist doppelt gemoppelt.  Du solltest evtl. nur vergleichen, ob der aktuelle (fehlgeschlagene) Versuch unter der Anzahl maximaler Versuche liegt oder ob diese erreicht sind.

Wie soll das denn gehen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Code verwirrt mich minimal.

  • Wäre es nicht einfacher attempt von 0 auf 3 hochzuzählen, statt attempt = 3 zu setzen und --attempt zu machen?
    Ich verstehe zwar, dass übrige Versuche angezeigt werden sollen, laut Aufgabe muss das aber nicht. 😄
  • Du deklarierst die Variablen username und password, benutzt sie aber nicht? 😕
  • username oder password nicht einzugeben setzt attempt zurück, statt als gültiger fehlgeschlagener Login zu zählen (attempt + 1).
  • Beim dritten, fehlgeschlagenen Versuch werden Label- und Textfeld für den Code (lbl_codetxt_code) nicht eingeblendet und entsprechend erfolgt auch keine Verarbeitung des Codes 0815?
  • Ein fehlgeschlagener Login-Versuch zählt attempt weder rauf noch runter, sondern erzeugt lediglich eine MessageBox?
  • Ein erfolgreicher Login-Versuch setzt attempt nicht wieder auf 0?
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 13 Stunden schrieb patr96:

Wie soll das denn gehen?

In deiner Bauart interessiert ja nur, ob man noch Versuche hat (attempt > 0 ) - somit brauchst du auch nur das abfragen.

Außerdem fehlt die Behandlung des Falls 0 Versuche (attempt = 0) komplett und somit landet man bei dann immer im try-Block. Auch, wenn man Name und Passwort einmal leer gelassen hat, wird attempt aufd 0 gesetzt und somit das (unnötige wiederholte) "if else"-Gewurstel immer übersprungen.

Das Dekrementieren von attempt / die Anzeige, dass der Login fehlgeschlagen ist sollte erst nach der Prüfung des Passworts kommen. So wie das ist ist das relativ seltsam - momentan wird bei dir attempt auch bei korrektem Passwort dekrementiert.

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...