simpele ja/nee tool: efficient programmeren

Status
Niet open voor verdere reacties.

veebeeleek

Gebruiker
Lid geworden
22 mei 2009
Berichten
5
Goedemiddag,

Op dit moment ben ik bezig met het creeren van een simpele tool ter ondersteuning bij bepaalde technische problemen op het werk. Ik heb alleen het idee dat ik wel heel inefficient bezig ben en zou graag wat tips van andere gebruikers willen hieromtrent.

De tool is in basis zeer eenvoudig en bevat een aantal ja-nee vragen die vervolgens weer leiden tot andere ja-nee vragen en uiteindelijk een oplossing.

Momenteel maak ik voor elke vraag een apart label en 2 daarbij behorende buttons met ja en nee. Dit wordt al gauw erg omslachtig. Wanneer de form namelijk geladen wordt moet enkel vraag 1 zichtbaar zijn, en de buttons ja/nee. In dit geval is dit ook label 1. Bij "ja" worden bijvoorbeeld label 2 en de ja/nee buttons die hierbij horen getoond, bij "nee" label 3 en deze buttons, enzovoorts.

Een korte vraag: Hoe kan dit efficienter? :rolleyes:
 
ja, dit kan een stuk efficienter, of in ieder geval overzichtelijker.

Er zijn verschillende opties. Optie 1 bestaat uit een textbestand, met alle vragen. Deze wordt dan geladen bij startup, en op het form (waar overgens 1 label staat) word 1 voor 1 de vragen laten zien.

Optie twee bestaat uit de vragen die in de code staan. Zoiets:
Code:
dim vragen(0 to 10) as string
vragen(0) = "Dit is de eerste vraag"
vragen(1) = "2e vraag"
[COLOR="SeaGreen"]'etcetera[/COLOR]

function showVraag(welke as integer)
   label1.text = vragen(welke)
   [COLOR="SeaGreen"]'...[/COLOR]
end function

oid.


Dit is opzich niet heel lastig. Wat wel wat lastiger is, is het doorsturen. Bv, vraag 1 met 'nee' beantwoorden -> naar vraag 5, maar vraag 1 met 'ja' -> vraag 3. Daarom zul je daar iets op moeten verzinnen. Dit kan in bijde bovenstaande oplossingen; je moet alleen je array (of file) iets anders indelen.

Code:
dim vragen(0 to 10) as string
vragen(0) = "Dit is de eerste vraag|5|3"
vragen(1) = "2e vraag|4|2"
[COLOR="SeaGreen"]'etcetera[/COLOR]

function showVraag(welke as integer)
   dim tmp as string
   tmp = vragen(welke)

   dim stuff as string
   stuff = tmp.split("|")
   [COLOR="SeaGreen"]'stuff(0) is nu de vraag, stuff(1) is de volgende vraag indien antwoord 'ja', stuff(2) indien 'nee'
   '...[/COLOR]
end function


Let wel: deze code is niet zo netjes, en kan nog wel wat efficienter. Het gaat op het moment even om het idee.
 
Laatst bewerkt:
Bedankt voor je snelle reactie, Vegras!

Ik zal het eens laten bezinken en je tips in de praktijk toepassen.

Nogmaals thanks :thumb:
 
Zoals Vegras al zei : dat met die ja/nee doorsturen.

Ik heb een mini-code voor je gemaakt waarin ik dit laat zien :

Code:
Public Class Form1

    Dim VraagNummer As Integer
    Dim Vragen(10) As Vraag

    Public Class Vraag
        Private MijnVraag As String
        Private MijnJaNummer As Integer
        Private MijnNeeNummer As Integer

        Public Sub New(ByVal _Vraag As String, ByVal _JaNummer As Integer, ByVal _NeeNummer As Integer)
            MijnVraag = _Vraag
            MijnJaNummer = _JaNummer
            MijnNeeNummer = _NeeNummer
        End Sub

        Public Function Vraag() As String
            Return MijnVraag
        End Function

        Public Function JaNummer() As Integer
            Return MijnJaNummer
        End Function

        Public Function NeeNummer() As Integer
            Return MijnNeeNummer
        End Function

    End Class

    Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call LaadVragen()

        VraagNummer = 1

        Do Until VraagNummer = 0 Or VraagNummer = 7
            Dim Result As String = MsgBox(Vragen(VraagNummer).Vraag, MsgBoxStyle.YesNo, "Vraag" & VraagNummer)
            If Result = vbYes Then
                VraagNummer = Vragen(VraagNummer).JaNummer
            Else
                VraagNummer = Vragen(VraagNummer).NeeNummer
            End If
        Loop

    End Sub

    Public Sub LaadVragen()

        Vragen(1) = New Vraag("Bent u een man?", 2, 3)
        Vragen(3) = New Vraag("U bent dus een vrouw. Bent u getrouwd?", 5, 4)
        Vragen(2) = New Vraag("Bent u getrouwd?", 5, 6)
        Vragen(6) = New Vraag("Heeft u een vriendin?", 5, 4)
        Vragen(4) = New Vraag("Heeft u een vriend?", 5, 6)
        Vragen(5) = New Vraag("Heeft u kinderen?", 7, 0)

    End Sub

End Class

Hij blijft als je helemaal geen vriend/vriendin hebt in een loop maar het gaat even om het idee.
ps. Een blokdiagram maken in Visio is geen overbodige luxe , omdat het anders erg onoverzichtelijk gaat worden met programmeren van je vragen.

-
 
Laatst bewerkt:
Kijk, dat is nog eens nuttige informatie!

Ik vond het uitwerken van het spoorboekje op papier al erg lastig dus ik ga Visio zeker proberen. Momenteel ben ik niet in staat om een trial te downloaden omdat de site eruit ligt, maar ik zal dit alsnog doen wanneer het weer mogelijk is.
Ook je voorbeeldcode vind ik een goede aanvulling op Vegras' tekst, hier heb ik zeker iets aan.

Bedankt voor je hulp :)
 
Het is gelukt!
Hoewel de tool nog erg simpel is, functioneert deze exact zoals ik het wil.

Aan het begin heb ik een vraagnummer gedimensioneerd.
Voor elke vraag heb ik een aparte private sub aangemaakt. Bij elke sub wordt bovendien de integer met het correcte vraagnummer gevuld.

Er zijn twee buttons, een ja/opnieuw en een nee/ einde (functie hangt af van de vraag/stap)
. Bij beide buttons heb ik met een select case functie de gewenste volgende stap beschikbaar gemaakt a.d.h.v. het vraagnummer.

Ook Visio heeft mij hierbij erg geholpen voor het overzicht; deze ga ik vaker gebruiken!

Nogmaals bedankt voor de hulp! :thumb:
 
Mag ik zo vrij zijn om dit topic te heropenen. Ik ben nu bezig met een back-button, maar ik kom er niet echt uit.
Bij de 2 private subs van de ja- en nee-button heb ik een string "Vorigevraag" gedemensioneerd. Een kort voorbeeld:
Private Sub btn_2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_2.Click 'wat gebeurt er wanneer men op de tweede / nee button klikt

Select Case Vraagnummer 'functie van de "nee" button is afhankelijk van het vraagnummer

Case 1 'functie van de "nee" button bij vraag 1
dp_02() 'ga naar vraag 2
Case 2
Vorigevraag = "2N" 'de string Vorigevraag wordt 2N (vraag 2 met nee beantwoord)
dp_03()

So far so good, d.w.z. bij vraag 2 gaat men keurig naar vraag 1 wanneer er op de back-button geklikt wordt. Echter, wanneer men bijvoorbeeld van vraag 3 naar 2 gaat, en nogmaals de back-button aanklikt, blijft men natuurlijk bij vraag 2, omdat de string "Vorigevraag" niet aangepast wordt.

Mijn vraag komt dus eigenlijk op het volgende neer: hoe kan ik simpel een back-button programmeren zonder het wiel opnieuw uit te vinden?

Enige hulp hierin zou zwaar gewaardeerd worden :)
 
Laatst bewerkt:
Nou, als het goed is kan je de 'current question' ofwel de vraag waar je op dat moment zit, opvragen. Ergens houd je als het goed is een variabele bij welke de index ervan is.

Nu, als je deze index public maakt, dwz. dat 'alles' erbij kan, kan je deze opvragen bij een 'back' button, en er dan 1tje vanaf halen. Dat is dan de 'vorige vraag'. Niet vergeten er 1tje af te halen natuurlijk.


Ohja, even gekeken in de code van Pizara: de index is als t goed is de variabele VraagNummer.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan