Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Tunnus ja salasana

tanja [20.09.2006 22:22:21]

#

Visual Basic -kurssi menossa koulussa ja nyt ilmaantui ongelma, johon en löytänyt vastausta netistä.

Harjoitus 5.1
Tee ohjelma, jossa tutkitaan käyttäjän
* tunnus ja salasana. (esim. InputBox ja If -rakenne)
* tervehdys (Select Case)

Miten saisin koodin toimimaan niin, ettei tarvitse jokaisen if:n tai elseif:n jälkeen laittaa select case rimpsua?

Private Sub Form_Load()
    lstKäyttäjätunnus.AddItem "tun"
    lstKäyttäjätunnus.AddItem "jaa"
    lstKäyttäjätunnus.AddItem "aun"
    lstKäyttäjätunnus.AddItem "run"
    lstKäyttäjätunnus.AddItem "saa"
    lstKäyttäjätunnus.AddItem "iaa"
End Sub

Private Sub cmdKirjaudu_Click()

If lstKäyttäjätunnus = "tun" And txtSalasana.Text = "qwerty" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "jaa" And txtSalasana.Text = "pinus" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "aun" And txtSalasana.Text = "lotta" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "run" And txtSalasana.Text = "hessu" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "saa" And txtSalasana.Text = "aapo" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "iaa" And txtSalasana.Text = "kaura" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

Else
    lblTervehdys.Caption = "Väärä salasana"

End If

End Sub

Harjoitus 5.2
Muuta edellistä tehtävää niin, että käyttäjällä on kolme mahdollisuutta arvata tunnus ja salasana (For -silmukka)

Tämä oli ihan sekavaa minulle. Eli sama kysymys kuin edelliseen, eli myös tässä on nuo kaikki select case rimpsut tuolla if:n ja elseif:n välissä.

Lisäksi haluaisin, että ohjelma ilmottaisi kolmannen yrityksen jälkeen "Väärä salasana" ja samuttaisi automaattisesti ohjelman. Nyt en saa sitä ainakaan tällä koodilla toimimaan.
Lisäksi nyt se valittaa "End If without block If", ei ymmärrä.

Private Sub Form_Load()
    lstKäyttäjätunnus.AddItem "tun"
    lstKäyttäjätunnus.AddItem "jaa"
    lstKäyttäjätunnus.AddItem "aun"
    lstKäyttäjätunnus.AddItem "run"
    lstKäyttäjätunnus.AddItem "saa"
    lstKäyttäjätunnus.AddItem "iaa"
End Sub

Private Sub cmdKirjaudu_Click()

For i = 1 To 4

If lstKäyttäjätunnus = "tun" And txtSalasana.Text = "qwerty" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "jaa" And txtSalasana.Text = "pinus" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "aun" And txtSalasana.Text = "lotta" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "run" And txtSalasana.Text = "hessu" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "saa" And txtSalasana.Text = "aapo" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

ElseIf lstKäyttäjätunnus = "iaa" And txtSalasana.Text = "kaura" Then

Select Case lstKäyttäjätunnus.ListIndex
    Case 0
        lblTervehdys.Caption = "Tervetuloa, Tanja"
    Case 1
        lblTervehdys.Caption = "Tervetuloa, Janne"
    Case 2
        lblTervehdys.Caption = "Tervetuloa, Anneli"
    Case 3
        lblTervehdys.Caption = "Tervetuloa, Raimo"
    Case 4
        lblTervehdys.Caption = "Tervetuloa, Sirkka"
    Case 5
        lblTervehdys.Caption = "Tervetuloa, Ilmo"
    End Select

Else
    lblTervehdys.Caption = "Väärä salasana"

End If

If i > 3 Then lblTervehdys.Caption = "Väärä salasana"
Unload Me
End If

Next i

End Sub

Iso kiitos kaikille auttaville neroille!

Antti Laaksonen [20.09.2006 22:35:25]

#

5.1. Selkein ratkaisu olisi tallentaa kaikki nimet, tunnukset ja salasanat taulukkoon, jolloin koodi kutistuisi muutamaan riviin. Mutta jos teillä ei ole vielä käsitelty taulukoita, niin helppo ratkaisu on tehdä muuttuja nimeltä kelpaa, joka saa arvon 1, jos mikä tahansa ehto toteutuu. Jos muuttujan arvo on kaikkien ehtojen jälkeen 0, poistutaan aliohjelmasta (komento "Exit Sub"). Vasta tämän jälkeen tulostetaan tervehdys. Nyt Select-rakenteita tarvitaan ainoastaan yksi.

5.2. Harjoituksen 5.1 ohjeessa viitattiin InputBox-funktion käyttöön, mutta jos toteutatkin ohjelman listan avulla, For-silmukan käyttö ei tule kysymykseen. Tarvitaan yleinen muuttuja kerrat, jonka arvo on aluksi 0. Yleisen muuttujan määrittely kirjoitetaan ohjelman ensimmäiselle riville ennen kaikkia aliohjelmia. Aina, kun käyttäjä painaa napista, muuttujan arvo kasvaa yhdellä. Jos muuttujan uusi arvo on suurempi kuin kolme, ohjelma sulkeutuu.

BadSource [21.09.2006 08:04:20]

#

5.1./2.

Dim strPwd As String 'Password

strPwd = InputBox("Anna Salasana:")

InputBoxille pitää määritellä muuttuja, johon arvo syötetään, sekä vähintään "ohjetekstin" InputBoxiin. Muita mahdollisuuksia ovat esim. InputBoxin otsikko sekä oletusarvo.

muuttuja = InputBox(Ohjeteksti[, Otsikko][, Oletusarvo]) <-hakasulkeet merkkaavat valinnaisuutta

5.2. Virheilmoituksen aiheuttaa seuraavat rivit

If i > 3 Then lblTervehdys.Caption = "Väärä salasana"
Unload Me
End If

Jos If...Then rakennetta seuraa samalla rivillä tapahtumia, niin silloin ainoastaan nuo tapahtumat kuuluvat ehdon piiriin, eikä tällöin käytetä enään End If:ä.

If i > 3 Then lblTervehdys.Caption = "Väärä salasana" 'tulosti tai ei, mutta ehto loppuu tähän riviin
Unload Me 'formi unloadataan aina ja joka kerta
End If 'aiheuttaa virheen, sillä ei ole lopetusta tarvitsevaa If-alkua

Jos haluat ratkaista tehtävä itse, niin lopeta lukeminen tähän!

Private Sub cmdKirjaudu_Click()
    Dim strTunnus As String
    Dim strPwd As String 'password
    Dim intKuka As Integer
    Dim i As Integer

    For i = 1 To 3 'kysytään max kolmesti tunnusta ja salasanaa
        strTunnus = InputBox("Anna Tunnus:") 'kysytään tunnusta InputBoxilla
        strPwd = InputBox("Anna Salasana:")
        If strTunnus = "tun" And strPwd = "qwerty" Then
            intKuka = 1 'Tanja
            Exit For 'poistutaan silmukasta ja jatketaan koodia Select Case -kohdasta
        ElseIf strTunnus = "jaa" And strPwd = "pinus" Then
            intKuka = 2 'Janne
            Exit For
        Else
            MsgBox "Väärä tunnus ja/tai salasana."
        End If
    Next i
    Select Case intKuka
        Case 0 'ketään ei sijoitettu intKuka-muuttujaan, joten se pysyi nollana
            MsgBox "Käyttäjätunnistus epäonnistui"
            End 'ohjelma sammutetaan
        Case 1
            MsgBox "Tervetuloa, Tanja"
        Case 2
            MsgBox "Tervetuloa, Janne"
    End Select

End Sub

tanja [21.09.2006 18:45:22]

#

Kiitos avusta, nyt on tehtävät saatu tehtyä ja osasin jopa tehdä kolmannen tehtävän ilman neuvoja (Do-While-Silmukka).

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta