Archief - [PROG]VB.net Vraagje in verband met een VB progje...

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Nny

Legacy Member
Hallo,

Ik maak een programmatje om personeelsleden en de afdelingen waarop ze werken weer te geven. Het is de bedoeling dat het programmaverloop er als volgt uit ziet.

Code:
MENU : <a> Add Employee / <r> Remove Last Employee / <x> Exit : a
Name        : John
Departement : Management
Employees Overview :
John ( Management )
MENU : <a> Add Employee / <r> Remove Last Employee / <x> Exit : A
Name        : Paul
Departement : Marketing
Employees Overview :
John ( Management )
Paul ( Marketing )
MENU : <a> Add Employee / <r> Remove Last Employee / <x> Exit : b
Employees Overview :
John ( Management )
Paul ( Marketing )
MENU : <a> Add Employee / <r> Remove Last Employee / <x> Exit : r
Employees Overview :
John ( Management )

Nu zit ik met het volgende probleem: als ik een tweede werknemer wil toevoegen zie ik enkel die in de overview na het toevoegen ervan. Kan er me iemand helpen? Mijn code vind je hieronder. Dank bij voorbaat.

Code:
    Sub Main()
        Dim keuzeInvoer As String
        Do
            Dim rowCount As Integer = 0
            Dim columnCount As Integer = 1

            Console.Write("MENU : <a> Add Employee / <r> Remove Last Employee / <x> Exit : ")
            keuzeInvoer = Console.ReadLine
            Dim tabel(rowCount, columnCount) As String
            Dim naam As String
            Dim afdeling As String

            If keuzeInvoer = "a" Then
                Console.Write("Name: ")
                naam = Console.ReadLine
                tabel(rowCount, columnCount - 1) = naam
                Console.Write("Departement: ")
                afdeling = Console.ReadLine
                tabel(rowCount, columnCount) = afdeling
                ReDim tabel(rowCount + 1, columnCount)

            ElseIf keuzeInvoer = "r" Then
                ReDim tabel(rowCount - 1, columnCount)
            End If
            Dim rowIndex As Integer
            For rowIndex = 0 To rowCount
                Console.WriteLine("Employees Overview: ")
                Console.WriteLine(naam & " (" & afdeling & ")")
            Next

        Loop Until keuzeInvoer = "x"
        Console.ReadLine()
    End Sub

Obliv`

Legacy Member
Het is niet te begrijpen hoeveel slechte code er staat in dat kleine blokje dat je hebt geschreven :).

Je declareert en instantieert uw variabelen IN uw loop, dus bij elke keer dat hij loopt heb je een nieuwe instantie van al je variabelen. Dus ook uw array is telkens weer terug leeg.

Weet je wel juist hoe een array werkt? Want aan de hand van de code die daar staat is het nogal vrij logisch dat je maar 1 werknemer terugkrijgt.

Als je een array groter wil maken adhv redim, moet je dat in combinatie doen met het 'preserve' keyword, anders verlies je de waarden die er al instonden.

Mischien is een List of een Dictionary wel handiger om te gebruiken als je nog niet veel kennis hebt van een Array.

Bij het afdrukken van het overzicht loop je ook niet eens door je array, je drukt gewoon de huidige waarde af van de naam en het departement.

Als ik u was zou ik nog maar even die vb.net boek opengooien om wat verder te studeren ;).

Nny

Legacy Member
Heb nog wat in mijn cursus van vb.net zitten neuzen en heb mijn code vervolgens volledig herschreven, denk nu wel dat ik Arrays min of meer onder de knie heb :). Comments zijn wel nog steeds welkom.

Cheers, Nny

Code:
        Dim columnCount As Integer = 0
        Dim tabel(1, columnCount), keuzeInvoer, naam, afdeling As String
        Dim index As Integer

        Do
            If tabel(1, 0) = "" Then
                Console.WriteLine("No Employees")
            Else
                For index = 0 To columnCount - 1
                    Console.WriteLine(tabel(0, index) & " (" & tabel(1, index) & ")")
                Next
            End If
            Console.Write("MENU : <a> Add Employee / <r> Remove Last Employee / <x> Exit :")
            keuzeInvoer = Console.ReadLine
            Select Case keuzeInvoer
                Case "A", "a"
                    Console.Write("Name : ")
                    naam = Console.ReadLine
                    tabel(0, columnCount) = naam
                    Console.Write("Departement : ")
                    afdeling = Console.ReadLine
                    tabel(1, columnCount) = afdeling
                    columnCount = columnCount + 1
                    ReDim Preserve tabel(1, columnCount + 1)
                Case "R", "r"
                    columnCount = columnCount - 1
                    ReDim Preserve tabel(1, columnCount)
                Case "X", "x"
                    End
            End Select
        Loop
        Console.ReadLine()

Obliv`

Legacy Member
Nny zei:
Heb nog wat in mijn cursus van vb.net zitten neuzen en heb mijn code vervolgens volledig herschreven, denk nu wel dat ik Arrays min of meer onder de knie heb :). Comments zijn wel nog steeds welkom.

Cheers, Nny

Dat ziet er al wat beter uit :)

Je kan dingen als Case "A", "a" vermijden door keuzeInvoer om tezetten naar een kleine letter (keuzeInvoer.ToLower).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan