hulp bij een eenklein progje

Status
Niet open voor verdere reacties.

flupeke

Gebruiker
Lid geworden
6 sep 2003
Berichten
79
Ik ben bijna verlegen dat ik dit moet posten:o
ik ben bezig met een lein progje dat een simpele berekening uitvoert,aan de logica mankeer het niet(bijna zeker van).
er staan 2 chkboxes op mijn formulier nl
chk_beurs en chk_kot
dan is er nog 1 txtveld dat ik nodig heb om te berekenen nl.
txtaantaljaar
Nu dacht ik zo te werk gaan maar........:confused:
Dim resultaat As Single
Dim basisprijs As Single
Private Sub Knop11_Click()
basisprijs = basisprijs + 15
If chk_kot.Enabled = True Or chk_beurs.Enabled = True Then
basisprijs = basisprijs - 4
Else
basisprijs = basisprijs - 2
End If
If txtaantaljaar.Value = 2 Or txtaantaljaar.Value = 3 Then
basisprijs = basisprijs - 2
Else
If basisprijs > 3 Then
basisprijs = basisprijs - 4
End If
End If
txtbijdrage.Value = basisprijs
mag wel geen and of select case gebruiken enkel if
End Sub
 
flupeke,

Vlak nadat de Click event van Knop11 wordt uitgevoerd, moet je de basisprijs al kunnen vaststellen middels het gebruik v.e. constante en niet van een variabele, want anders zou de basisprijs sterk gaan fluctueren en wat niet de bedoeling mag zijn. De basisprijs zal op een gegeven moment ook een negatieve waarde vertegenwoorden, en zoiets bestaat eenmaal niet. Wel schuld (rood staan) hebben bij een bank.

Concreter: Stel de basisprijs bijvoorbeeld op 15, en dit geeft je aan na de dim-statement v.d. basisprijs.
Dus:
Dim basisprijs As Single
basisprijs = 15

Verder zie ik, dat de variabele resultaat in je code helemaal niet wordt gebruikt, je hebt 'm alleen geDIMensioneerd. (Het begrip DIM is altijd al van Basic geweest, algemener gezegd: Declareren)

Het zou verder wel handig zijn wanneer je mij kunt vertellen welke omschrijvingen de 2 checkboxen hebben om de basisprijs te kunnen bepalen.

Dennis.
 
Bijvoorbeeld zo:

Dim resultaat As Single
Dim basisprijs As Single

Code:
Private Sub Knop11_Click() 
   'basisprijs = basisprijs + 15 <- Dit is niet juist.
   basisprijs = 15 '<- zo moet het. het getal 15 is maar als voorbeeld.
   If chk_kot.Enabled = True Or chk_beurs.Enabled = True Then 
       basisprijs = basisprijs - 4 
     Else 
       basisprijs = basisprijs - 2 
   End If 
   If txtaantaljaar.Value = 2 Or txtaantaljaar.Value = 3 Then 
       basisprijs = basisprijs - 2 
     Else 
       If basisprijs > 3 Then 
           basisprijs = basisprijs - 4 
       End If 
   End If 
   txtbijdrage.Value = basisprijs 
End Sub

Dennis.
 
flupeke,

Ik weet, dat "basisprijs" nu nog steeds een variabele is en geen constante. Op deze manier, zoals je het doet, kan het natuurlijk ook. Verder hoop ik, dat je het wel begrijp wat ik met een constante bedoel. Dan hoef ik je dit niet verder uit te leggen. In ieder geval is het zo, dat bij het gebruik v.e. constante een regel daarvoor er zo moet gaan uitzien:

variabelele = variabele + constante

Waarvan de constante steeds een vaste waarde heeft. Net zoals het getal PI (zeg maar 3,14) bevat steeds dezelfde waarde, waarvan de omterk v.e. bepaald circel kan veranderen/varieren.

Dennis.
 
:thumb: Alvast bedankt voor de tips en het verbeterwerk.Nu het begrip constante begrijp ik en heb ik ook willen toepassen op deze manier , maar kreeg de foutmelding dat ik geen constante kon toewijzen ???
const basisprijs as single = 15
dacht ik!
 
flupeke,

Eerder maakte ik al melding, dat de manier waarop je gebruikt maakte van de variabele "basisprijs" ook goed is hoor. Alleen moet de basisprijs, voordat het een bewerking ondergaat, van tevoren aan bepaalde vaste waarde worden toegekend.

Of anders gezegd: Direct nadat op knop11 wordt geklikt, moet de basisprijs voor wat betreft zijn begin waarde al worden vastgesteld.Bijvoorbeeld op 15.

In de listing hierboven gaf ik dit ook al aan dat het op die wijze gedaan moet worden. Hierbij alsnog een stukje code van mijn vorig bericht.

basisprijs = 15 '<- zo moet het. het getal 15 is maar als voorbeeld.

Verder was mijn uitleg misschien niet al te duidelijk, mijn schuld, over het gebruik van een constante. Ik zal hier wat nader(lees: beter) toelichten.

Ik schreef eerder: variabelele = variabele + constante

Aan de hand van je listing zie ik dat je 2 constanten(het zijn tegenovergestelden van variabelen) moet gebruiken.
De ene constante moet de waarde 2 hebben en de andere 4. Met welke constante de basisprijs wordt vermeerderd danwel verminderd wordt door de status waarin de checkboxen verkeerd bepaald.

Nu eindelijk over de syntax voor het declareren v.e. constante.
Je hebt het zo gedaan: const basisprijs as single = 15
Dat is heel goed, en het moet gewoon gaan werken, vreemd dat het bij jou niet werkte. Ik heb zo'n foutmelding nog nooit eerder gehad. Ik weet op dit moment niet zo gauw te vertellen waar het aan ligt.

Nu wil ik met name over dat stukje "Or" en "Else" van de allereerste If-Then/Else/End if constructie gaan hebben:
(ik wil niet kritisch zijn hoor, maar wil het alleen maar beter begrijpen)

Als één v.d. 2 checkboxen enabled zijn, dan wordt de basisprijs met 4 verminderd, anders(beide checkboxen zijn dan niet enabled) met 2.

Blijkbaar worden er aan 2 voorwaarden voldaan, wanneer de 2 chekboxen enabled zijn. Zijn de 2 voorwaarden dan aan elkaar identiek of heeft deze met een bepaalde bereik(bijvoorbeeld leeftijd, afstand, korting enz...) te maken? Als dit het geval is, dan kan het anders. In het kort: "Or" komt dan te vervallen en "Else" is nog steeds van toepassing.

Verder zie ik ook, dat je .value hebt gebruikt in de txt-variabele. Een Text-box heeft de eigenschap Value niet, maar ik neem aan dat je dat voor de checkbox bedoelt hebt.

Wist ik maar precies wat je probleemomschrijving is. Dan kan ik je beter van dienst zijn, flupeke.

Dennis.
 
Nogmaal bedankt voor de goede tips en de ik zal de oef wat verduidelijken.dit moet het eindresultaat zijn.
De bijdrage voor een bepaalde studentenvereniging bedraagt 15 euro per jaar. Volgende kortingen worden toegekend : 2 euro indien het 2° of het 3° jaar lid
4 euro indien langer dan 3 jaar lid
2 euro indien de student een beurs heeft
2 euro indien de student op kot zit
De bijdrage bedraagt echter minimum 9 euro per jaar.
Let op: Gebruik ENKEL IF-statements en OR-operatoren, GEEN Select Case-statements.


de korting via beurs en kot word via een chkbox ingegeven, aantaljaar is een gewoon tekstvak en heb daar .value gebruikt om de waarde van het textvak in de var aantaljaar toe te wijzen.:confused:
 
Geen dank, flupeke. En sorry voor mijn late reactie.

Erg jammer, dat ik van jouw "probleemomschrijving" nog niet in VB heb kunnen omzetten, omdat ik jou nog één toch wel belangrijke vraag te stellen heb:

Je gebruikt 2 checkboxen, betekent dit dat er op beide checkboxen geselecteerd mag worden, zodat een student zijn/haar korting (aantal jaren lidmaatschap even buiten beschouwing gelaten) 4 € bedraagt?

Ik zou op deze vraag graag een antwoord willen hebben, dan kan ik tenminste verder.

Uiteraard had ik deze vraag niet gesteld, als je 2 optionbuttons had gebruikt, want met zo'n button kun je namelijk alleen één v.d. 2 selecteren.

Echter, van de 2 checkboxen die je gebruikt kan dat ook, maar ik ben daar niet zo erg zeker van of je dit bewust hebt gebruikt, en dat is de verwarring.

Je mag van mij part de hele probleemomschrijving hier plaatsen. Of was dat echt alles?

Alvast bedankt,

Dennis.

P.S. Alhoewel ik ook weet dat het om een vrij simpel programma gaat, is de probleemdefinitie heel erg belangrijk, het moet eenduidig zijn. Zodra ik een respons van je krijg, ga ik direct aan de slag.
 
Om te beginnen er zijn geen exuses nodig voor de late reactie,de reacties zijn zeer vlot en informatief.Kan niet van elk forum gezegd worden.:p

Om je vraag te beantwoorden i.v.m. die chekboxes het is inderdaad zo dat er de mogelijkheid is om ze alle twee aan_te_vinken zodat er nog eens 4€ van de lidgeldbijdrage gaat, maar het moet ook mogelijk zijn maar een van de twee chekboxes aan_te_vinken zodat er maar 2€ van de lidgeldbijdrage wordt afgetrokken.

Bij verdere postingen zal ik vraagstellingen beter opstellen.Beloofd:D
 
Geplaatst door flupeke
Bij verdere postingen zal ik vraagstellingen beter opstellen.Beloofd:D
Oké dan.

O, wat ben ik blij met je snelle antwoord, maar ........
(ik loog een beetje, de vraag die ik nu aan je stel is ECHT de allerlaatste vraag)

Betekent dat ook dat die 4 € korting verkregen door beurs en kot een student die langer dan 3 jaar lid is de 4 € extra korting erbij krijgt, waardoor de totale korting 6 € i.p.v. 8 € bedraagt , vanwege de voorwaarde "De bijdrage bedraagt echter minimum 9 euro per jaar" ?

Of is "De bijdrage bedraagt echter minimum 9 euro per jaar" een dubbelzinnig adertje onder het gras?

Graag je antwoord aub,

Dennis.

Heb ff een typfout aangepast. (maak te veel typfouten)
 
Laatst bewerkt:
flupeke, Je had al 2 checkboxen, een knop en een textbox op het

Form. Voeg daarbij nog een textbox toe. En noem deze box

txtBijdrage.

Ik vind best erg voor jou dat het zolang geduurd heeft eer je

de listing krijgt.


Code:
Private Sub cmdBijdrage_Click()
   Dim Basis_Bijdrage As Integer
   Dim Bijdrage As Integer
   Dim AantalJarenLid As Integer
   Dim SomDerCkeckBoxenWaarden As Integer
   'Omdat bij jou Const waarschijnlik het niet doet,
   'Heb ik dit maar niet gebruikt. Het programmaatje
   'kan hierdoor ook wat langer worden.
   'De Basis_Bijdrage variabele wordt derhalve direct met een
   'getal verminderd, zie verder hieronder bij de berekening.
   'Const Beurs_Korting As Integer = 2
   'Const Kot_Korting As Integer = 2
   Basis_Bijdrage = 15
   'Als een checkBox aangeklikt wordt bezit deze box de waarde 1,
   'anders een 0 (nul)
   SomDerCkeckBoxenWaarden = (chk_beurs.Value) + (chk_kot.Value)
   'Hier wordt een String Numeriek gemaakt met Val()
   'En Trim zorgt ervoor, dat voor- en naloopspaties worden
   'verwijderd.
   AantalJarenLid = Val(Trim(txtAantalJaar))
   '=== Hieronder niet echt van belang ==='
   If txtAantalJaar = "" Then
       MsgBox "Vul het aantal lidmaatschapsjaar in aub."
       Exit Sub
     Else
       If ((AantalJarenLid <= 0) Or (AantalJarenLid > 150)) Then
          MsgBox ("Een onmogelijk getal!")
          Exit Sub
       End If
   End If
   '=== Hierboven niet echt van belang ==='

   'Berekenig contributie voor 1 jaar
   'Eventueel kortingen met beurs en Kot
   If AantalJarenLid = 1 Then
       If SomDerCkeckBoxenWaarden = 2 Then
           Bijdrage = Basis_Bijdrage - 4
           txtBijdrage = Bijdrage
         Else
           If SomDerCkeckBoxenWaarden = 1 Then
               Bijdrage = Basis_Bijdrage - 2
               txtBijdrage = Bijdrage
             Else
               Bijdrage = Basis_Bijdrage
               txtBijdrage = Bijdrage
           End If
      End If
   End If

   'Berekenig contributie voor 2 en 3 jaar
   'Eventueel kortingen met beurs en Kot
   If (AantalJarenLid = 2) Or (AantalJarenLid = 3) Then
      If SomDerCkeckBoxenWaarden = 2 Then
          Bijdrage = Basis_Bijdrage - 6
          txtBijdrage = Bijdrage
        Else
          If SomDerCkeckBoxenWaarden = 1 Then
              Bijdrage = Basis_Bijdrage - 4
              txtBijdrage = Bijdrage
            Else
              Bijdrage = Basis_Bijdrage - 2
              txtBijdrage = Bijdrage
          End If
      End If
   End If

   'Berekenig contributie voor meer dan 3 jaar
   'Eventueel kortingen met beurs en Kot
   If AantalJarenLid > 3 Then
       If SomDerCkeckBoxenWaarden = 2 Then
           Bijdrage = 9
           txtBijdrage = Bijdrage
         Else
           If SomDerCkeckBoxenWaarden = 1 Then
               Bijdrage = 9
               txtBijdrage = Bijdrage
             Else
               Bijdrage = Basis_Bijdrage - 4
               txtBijdrage = Bijdrage
           End If
       End If
   End If
End Sub

Groetjes,

Dennis.

P.S. Jammer, dat Select Case/End Select en de logische operator And niet gebruikt mag worden.
 
flupeke,

Zoals je het kunt zien heb ik op basis van je laatste gegevens het programmaatje geschreven.

Lukt het jou nu om het programmaatje te runnen, en is dit ook binnen je verwachting? Ik heb het voordat ik het hier plaats natuurlijk van tevoren getest, en het berekent de bijdrage goed. Mocht er onduidelijkheden zijn, dan verneem ik dat van jou graag.

Dennis.
 
:thumb: het werkt:thumb: :thumb: .Sorry voor de late reactie van mijn kant bedankt dat je je best hebt gedaan voor dit progje:) Een eersteklasforum en postingen die duidelijk zijn.ODE aan helpmij.nl.


dennis =

:thumb:
 
Is niet erg hoor, en geen dank. Heb het graag gedaan, maar ik zeg je eerlijk dat ik niet op alle vragen een antwoord kan geven hoor. Ik probeer het in ieder geval.

Ik wil toch iets kwijt over het niet mogen gebruiken van de logische operator "And". Deze operator heb ik omzeild, door naar de waarden v.d. 2 checkboxen te kijken:

Wanneer de som van deze checkboxen een 2 is, dan heb je eigenlijk de And functie op deze manier al bepaald. Zelfs bij een logische "Or" operator kan dat ook, dan is de som v.d. 2 checkboxen 1. Maar aangezien de Or operator wel mag worden gebruikt, is dit verder geen probleem. Er is trouwens in het progje ook één Or operator gebruikt.

Ik wil verder dit even kwijt:

Ik kan er ook niets aan doen, dat ik een paar zaken van jou eerst wilde weten, alvorens de probleemstelling correct in code te kunnen omzetten. Ik heb me trouwens zich vergist v.w.b. "De bijdrage bedraagt echter minimum 9 euro per jaar", ik dacht dat daardoor zinloos was om het probleem m.b.v. checkboxen te realiseren, en men daarvoor alleen optionbuttons moest gebruiken. (sorry daarvoor. O, dat mag ik toch niet meer zeggen?)

Maar door je één na laatste berichtgeving was mij alles wel duidelijker geworden.

Het was ook niet mijn bedoeling om van een mug een olifant te maken v.w.b. het exact definieren v.e. probleem. Ik moest het gewoon even weten.

Misschien wordt met dit navolgende kort verhaal wat duidelijker: (Weliswaar is dit voorbeeld voor een grootschalig project, maar het komt wel op hetzelfde neer)

Er zijn een 7-tal stappen die men goed moet doorlopen om tot een goed werkend product te komen. Ik heb het hier over een product, dat een informartiesysteem is, zeg maar een computerprogramma.

Van de 7 stappen, vind ik persoonlijk stap 2 één v.d. moeilijkste:

1) Organanisatieanalyse
2) Probleemanalyse
3) Functioneel ontwerp
4) Technisch ontwerp
5) Bouw/Testen
6) Invoering
7) Evaluatie

In stap 2 moet het probleem goed worden geanalyseerd en eenduidig worden omschreven. Natuurlijk zijn de andere stappen ook van groot belang, maar als in stap 2 de probleemdefinitie bekend is, dan levert stap5(het programmeren) geen enkel probleem meer. Omdat we met een betrekkelijk klein programma te maken hebben en geen organisatie(bedrijf) is, zijn de stappen 1,3 en 4 niet van groot belang.

Je bericht van ruim 10 minuten geleden, betreft de stappen 6 en 7.

Dennis.
 
Geplaatst door flupeke
dennis =

:thumb:
O, nu begrijp ik het pas wat hierboven staat: "Dennis = goed"

Ik heb dit bericht ook te snel gelezen. Maar bedankt hoor voor je compliment.

Groetjes,

Dennis.

ps. Ja, ik vind Helpmij ook een goed Forum!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan