Kirjautuminen

Haku

Tehtävät

Koodit: VB6: Yksinkertainen käyttäjälista

Kirjoittaja: Pöytälamppu

Kirjoitettu: 15.06.2006 – 15.06.2006

Tagit: koodi näytille, vinkki

Yksinkertainen käyttäjälista, joka on dynaaminen. Mielestäni erittäin simppeli jota voi soveltaa muihinkin tarkoituksiin. Sisältää kutsut käyttäjien lisäykseen,poistoon ja listaamiseen.

Edit. Korjattu virhe joka esti ainoan käyttäjän poistamisen
Edit 2. Korjattu virhe joka aiheutti virheen kutsuessa Listaa_käyttäjät ennen käyttäjien lisäämista
Edit 3. Nothing ei toiminutkaan ihan samanlailla kuin muistin

Moduuliin (selkeyden vuoksi)

'Tehdään jokaiselle käyttäjälle tyyppi
Type Käyttäjä
    'Joka sisältää käyttäjän nickin
    name As String
    'ja tiedon esim missä soketissa se on
    id As Integer
End Type

Dim Käyttäjät() As Käyttäjä
Dim Käyttäjät_on_alustettu As Boolean
Dim onko_tyhjä As Boolean
Sub Lisää_käyttäjä(Nimi As String, Optional id As Integer = 0)
    If Not Käyttäjät_on_alustettu Then
        'luodaan taulukko
        Käyttäjät_on_alustettu = True
        ReDim Käyttäjät(0)
    Else
        If Not onko_tyhjä Then
           'Kasvatetaan Käyttäjien_nimet taulukkoa yhdellä niin, että vanhat tiedot
           ReDim Preserve Käyttäjät(UBound(Käyttäjät) + 1)
        End If
    End If

    'Sijoitetaan taulukon viimeiseen kohtaan uusi käyttäjä
    Dim temp As Käyttäjä
    temp.name = Nimi
    temp.id = id
    Käyttäjät(UBound(Käyttäjät)) = temp
    onko_tyhjä = False
End Sub

Sub Poista_käyttäjä_id(id As Integer)
    Dim i As Integer

    If Not Käyttäjät_on_alustettu Then Exit Sub

    'käydään kaikki käyttäjät läpi
    For i = 0 To UBound(Käyttäjät)
        'ja verrataan sitä etsittyyn nimeen
        If (Käyttäjien_nimet(i).id = id) Then
            'jos täsmää niin poistetaan nimi luettelosta (siirretään alemmat askeleen ylemmäs)
            Dim e As Integer
            For e = i To UBound(Käyttäjät) - 1
                Käyttäjät(e) = Käyttäjät(e + 1)
            Next

            'pienennetään taulukkoa yhdellä
            If Not UBound(Käyttäjät) = 0 Then
                ReDim Preserve Käyttäjät(UBound(Käyttäjät) - 1)
            Else
                onko_tyhjä = True
            End If
            Exit Sub
        End If
    Next
End Sub
Sub Poista_käyttäjä_name(name As String)
    Dim i As Integer

    If Not Käyttäjät_on_alustettu Then Exit Sub

    'käydään kaikki käyttäjät läpi
    For i = 0 To UBound(Käyttäjät)
        'ja verrataan sitä etsittyyn nimeen
        If (Käyttäjät(i).name = name) Then
            'jos täsmää niin poistetaan nimi luettelosta
            Dim e As Integer
            For e = i To UBound(Käyttäjät) - 1
                Käyttäjät(e) = Käyttäjät(e + 1)
            Next

            'pienennetään taulukkoa yhdellä jos voidaan
            If Not UBound(Käyttäjät) = 0 Then
                ReDim Preserve Käyttäjät(UBound(Käyttäjät) - 1)
            Else
                onko_tyhjä = True
            End If
            Exit Sub
        End If
    Next
End Sub
Function Get_käyttäjä_name(name As String) As Käyttäjä
    Dim i As Integer

    If onko_tyhjä Or Not Käyttäjät_on_alustettu Then
        Exit Function
    End If

    'käydään kaikki käyttäjät läpi
    For i = 0 To UBound(Käyttäjät)
        'ja verrataan sitä etsittyyn nimeen
        If (Käyttäjät(i).name = name) Then
            'palautetaan kayttäjä
            Get_käyttäjä_name = Käyttäjät(i)
            Exit Function
        End If
    Next
End Function
Function Get_käyttäjä_id(id As Integer) As Käyttäjä
    Dim i As Integer

    If onko_tyhjä Or Not Käyttäjät_on_alustettu Then
        Exit Function
    End If

    'käydään kaikki käyttäjät läpi
    For i = 0 To UBound(Käyttäjät)
        'ja verrataan sitä etsittyyn nimeen
        If (Käyttäjät(i).id = id) Then
            'palautetaan kayttäjä
            Get_käyttäjä_name = Käyttäjät(i)
            Exit Function
        End If
    Next
End Function
Function Listaa_käyttäjät(Optional Erotin As String = vbCrLf) As String
    Dim i As Integer
    Dim retuni As String

    If onko_tyhjä Or Not Käyttäjät_on_alustettu Then
        Listaa_käyttäjät = ""
        Exit Function
    End If

    'käydään kaikki käyttäjät läpi
    For i = 0 To UBound(Käyttäjät)
        If i = 0 Then
            'ja lisätään returniin ilman erotinta
            retuni = Käyttäjät(i).name
        Else
            'ja lisätään returniin erottimen kanssa
            retuni = retuni & Erotin & Käyttäjät(i).name
        End If
    Next
    Listaa_käyttäjät = retuni
End Function

Käyttö

Lisää_käyttäjä "mikko" 'lisätään mikko
Lisää_käyttäjä "seppo" 'ja seppo
msgbox Listaa_käyttäjät("|") '(Erottimeksi "|") tulee mikko|seppo
Lisää_käyttäjä "teppo" 'lisätään teppo
Poista_käyttäjä_name "seppo"
msgbox Listaa_käyttäjät("|") 'tulee mikko|teppo

Kommentit

kayttaja-3842 [16.06.2006 09:35:27]

#

Olisiko mitenkään mahdollista laskea nimien määrän?

eli siis "/liityn|mikko|esko|saku|sanna" tuon /liityn jälkeen niin pitäisis saada selville, että siinä on 4 nimeä.

kayttaja-4976 [19.06.2006 11:22:33]

#

kayttaja-3842:

Dim Users As String
Dim Maara As Long
Dim tmp As Variant
Dim i As Long

Users = Listaa_käyttäjät("|")
i = 1

Do
    tmp = InStr(i, Users, "|")
    If tmp <> 0 Then Maara = Maara + 1
    i = i + 1
Loop While tmp <> 0

EDIT: Typo koodissa

stere [21.06.2006 15:28:36]

#

Minkänimisee tiedostoo tää pitää tallentaa?

kayttaja-4976 [22.06.2006 15:19:09]

#

stere:

Saat käsiisi merkkijonon. Voit tallentaa sen vaikka kuvaksi jos haluat. Itse tykkään kryptata merkkijonon Xorilla ja muilla jutuilla ja tökätä tuloksen .dat, .bin tai .sys tiedostoon.

moptim [18.09.2007 19:04:40]

#

Numero on sama kuin Helsingin perustamisvuosi \o/

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta