8. Gevorderde formulieren

8.1 Omschrijving en notatie
8.2 Een werkwijze om vlot formulieren op te bouwen
8.3 Voorbeelden
8.4 Oefeningen

8.1 Omschrijving en notatie

Je leerde reeds werken met een tekstvak (<input type = "Text" ...>) en een opdrachtenknop (<input type = "Button" name = ...>)

Naast deze eenvoudige invoerobjecten bestaan er ook nog enkele gevorderde objecten nl.:

<textarea rows = "aantal rijen" cols = "aantal karakters breed" name = "variabele"> standaard waarde </textarea>

<input type = "radio" name = "variabele" value = "waarde" selected>

<input type = "checkbox" name = "variabele" value = "waarde" selected>

<select name="variabele" size="aantal zichtbare opties" >
<option value="waarde1" SELECTED>keuze1</option>
<option value="waarde2">keuze2</option>
....
</option>
</select>

Het kenmerk SELECTED geeft een standaardselectie weer. De sluittag </option>is facultatief.

Met de eigenschap selectedIndex(index) van een keuzelijst kan men controleren welke optie gekozen werd. De eerste optie heeft index 0, de tweede index 1 ...

 

8.2 Een werkwijze om vlot formulieren op te bouwen

Als je ingewikkelde formulieren wil opbouwen, gebruik je best de volgende methode:

 

8.3 Voorbeelden

 

 

<html>
<head>
</head>
<body>
<script language="javascript">
function Controleer(f){
if (f.TOTAAL.value==0) {
alert("Tenminste 1 product invullen")
return false}
else
if (f.naam.value.length == 0)
{alert("Niet alle persoonlijke gegevens zijn ingevuld !!")
f.naam.focus()
return false}
else
if (f.straat.value.length == 0)
{alert("Niet alle persoonlijke gegevens zijn ingevuld !!")
f.straat.focus()
return false}
else
if (f.postcode.value.length == 0)
{alert("Niet alle persoonlijke gegevens zijn ingevuld !!")
f.postcode.focus()
return false}
else
if (f.plaats.value.length == 0)
{alert("Niet alle persoonlijke gegevens zijn ingevuld !!")
f.plaats.focus()
return false}
else
{return true}
}
function ContrBtw(f) {}

//creatie van het object Product

function Product(prodNaam,prodPrijs,btwProc) {
this.prodNaam = prodNaam
this.prodPrijs = prodPrijs
this.btwProc = btwProc
}

//creatie van het object HulpTabel

function HulpTabel(n) {
this.length = n
for (i = 0; i <= n; i++) {
this[i] = 0
}
return this
}

// creatie van het object Bestelling

function Bestelling(prodNaamB,eenhPrijs,aantal,som,btw) {
this.prodNaamB = prodNaamB
this.eenhPrijs = eenhPrijs
this.aantal = aantal
this.som = som
this.btw = btw
}

//creatie van productLijst

productLijst = new HulpTabel(11)

productLijst[0] = new Product("*****Geef uw keuze*****",0,0)
productLijst[1] = new Product("Product 1",1100,21)
productLijst[2] = new Product("Product 2",1200,12)
productLijst[3] = new Product("Product 3",1300,21)
productLijst[4] = new Product("Product 4",1400,12)
productLijst[5] = new Product("Product 5",1500,21)
productLijst[6] = new Product("Product 6",1600,21)
productLijst[7] = new Product("Product 7",1700,21)
productLijst[8] = new Product("Product 8",1800,12)
productLijst[9] = new Product("Product 9",1900,21)
productLijst[10] = new Product("Product 10",2000,12)

//creatie van een bestellinglijn

bestellingLijn = new HulpTabel(11)
for (i=1; i <= 10; i++) {
bestellingLijn[i] = new Bestelling(0,0,0,0,0)
}

//functie die een lijn evalueert en de nodige gegevens aanvult

function evalLijn(lijn){
index = " "
totaal = 0
btw = 0
totaalExBtw = 0
eval('index=document.BestelForm.PRODUCT'+lijn+'.selectedIndex')
eval('bestellingLijn[lijn].prodNaamB=document.BestelForm.PRODUCT'+lijn+'.value')
eval('bestellingLijn[lijn].aantal=document.BestelForm.AANTAL'+lijn+'.value')
bestellingLijn[lijn].eenhPrijs=productLijst[index].prodPrijs
bestellingLijn[lijn].som=bestellingLijn[lijn].aantal*productLijst[index].prodPrijs
Math.round(bestellingLijn[lijn].som/((100+eval(productLijst[index].btwProc))/100))
bestellingLijn[lijn].btw=bestellingLijn[lijn].som- Math.round(bestellingLijn[lijn].som/((100+eval(productLijst[index].btwProc))/100))

eval('document.BestelForm.BTW'+lijn+'.value=productLijst[index].btwProc')
eval('document.BestelForm.EENHPRIJS'+lijn+'.value=productLijst[index].prodPrijs')
eval('document.BestelForm.PRIJS'+lijn+'.value=bestellingLijn[lijn].som')

for (j = 1; j <= 10 ; j++) {
totaal += bestellingLijn[j].som
btw += bestellingLijn[j].btw
}
document.BestelForm.BTW_TOTAAL.value=btw
document.BestelForm.TOTAAL.value=totaal
document.BestelForm.TOTAAL_EX_BTW.value = totaal - btw
}

</script>

<form name="BestelForm">

<h1>Bestelformulier</h1><p>
<h3>Vul hieronder je persoonlijke gegevens in, kies uit de producten die
je wenst te bestellen en geef het aantal op. </h3>
<table>
<tr>
<td width=192>Naam + voornaam :</td>
<td width=120><input name="naam" size="40"></td>
</tr><tr>
<td>Straat + nr. :</td>
<td><input name="straat" size="40"</td>
</tr><tr>
<td>Postcode :</td>
<td><input name="postcode" size="4" maxlength="4"></td>
</tr><tr>
<td>Plaats :</td>
<td><input name="plaats" size="40"></td>
</tr><tr>
<td>BTW-nummer :</td>
<td><input name="btwnr" size="15" onChange="ContrBtw(this.form)">&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp
<input type="Radio" name="geslacht" value="man">Man
<input type="Radio" name="geslacht" value="vrouw">Vrouw <td>
</tr>
</table>


<hr>

<table>
<tr>
<th width=192><center><b>Product</b></center>
</th>
<th width=72><center><b>Aantal</b></center>
</th>
<th width=72><center><b>BTWproc</b></center>
</th>
<th width=120><center><b>Eenheidsprijs</b></center>
</th>
<th width=120><center><b>Prijs</b></center>
</th>
</tr>


<br>
<script language="javascript">
for (lijn = 1;lijn <= 10; lijn++) {
document.write('<tr><td>')
document.write('<select name="PRODUCT'+lijn+'" onChange="evalLijn('+lijn+')">')
for (i = 0; i <= 10; i++) {
document.write("<option>"+productLijst[i].prodNaam)
}

document.write('</select>')

document.write('</td><td><center><input name="AANTAL'+lijn+'" value="1" size="3" maxlength="3" onChange="evalLijn('+lijn+')" ></center>')
document.write('</td><td><center><input name="BTW'+lijn+'" value=" " size="4" maxlength="4" onfocus="this.blur()" ></center>')
document.write('</td><td><center><input name="EENHPRIJS'+lijn+'" maxlength="10" size="10" onfocus="this.blur()"></center>')
document.write('</td><td><center><input name="PRIJS'+lijn+'" value="" size="10" maxlength="10" onfocus="this.blur()"></center>')
document.write('</td></tr>')
}
</script>
<hr> <tr><td>&nbsp</td><td>&nbsp</td><td>&nbsp</td><td>&nbsp</td><td>&nbsp</td></tr>
<tr><td><b>Bedrag</b> &nbsp <input name="TOTAAL_EX_BTW" size="10"></td>
<td><b><center>BTW</center></b></td>
<td><center><input name="BTW_TOTAAL" value="0" size="10"></center></td>
<td><b><center>Totaal</center></b></td>
<td><center><input name="TOTAAL" value=0 size="10"></center></td>
</tr>
</table>
<p>
<input type="reset" value="Formulier wissen">&nbsp &nbsp &nbsp &nbsp
<input type="submit" value="Bestelling doorsturen" onClick="return Controleer(this.form)"><p>
<h3>We danken u voor uw bestelling. Veel plezier met de producten !</h3>
</form>
</html>

8.4 Oefeningen

1. Na invoer van een aantal personen wordt de toegangsprijs berekend. Voor groepen van 10 of meer personen betaalt men 350 BEF per persoon, anders 500 BEF per persoon.
2. Schrijf een algoritme dat de controle op een BTW-nummer (xxx-xxx-xxx) uitvoert.
- Vorm het getal dat bestaat uit de eerste zeven cijfers
- Deel dit getal door 97
- Indien het verschil van 97 en de rest van de deling gelijk is aan de laatste twee cijfers, dan is het BTW-nummer correct.
3. Stel het algoritme op voor de werking van een frisdrankautomaat. Men moet 25 BEF in de automaat stoppen (5 x 5 BEF of 20 BEF + 5 BEF of 20 BEF + 20 BEF waarbij men 3 x 5 BEF terugkrijgt). De automaat laat enkel toe muntstukken van 5 BEF en 20 BEF te gebruiken. De automaat biedt volgende dranken aan: cola, fanta, spuitwater en chocolademelk.
Dit algoritme kan stapsgewijze aangebracht worden:

stap1: 1 opdrachtknop (5). Bepaal welk bedrag de gebruiker aanklikt. oplossing

stap2: 2 opdrachtknoppen (5 en 20). Bepaal welk bedrag de gebruiker aanklikt. oplossing

stap3: uitbreidingen
- wordt een te groot bedrag ingevoerd, dan krijg je een passend bedrag terug
- via een keuzelijst kan je de frisdrank kiezen
- druk je op een OK-knop dan krijg je het ingevoerde bedrag, het terug-bedrag en de gekozen frisdrank
- een gebruiksaanwijzing leidt de gebruiker door de werkwijze.
oplossing

stap4: van zodra een frisdrank wordt gekozen, worden de resultaatgegevens gewist. oplossing

4. Een firma berekent het volgend commissieloon voor haar vertegenwoordigers:

1% voor een omzet tot 200 000 BEF
2% voor een omzet van 200 001 BEF tot 1 000 000 BEF
3% voor een omzet van meer dan 1 000 000 BEF.

Bereken het commissieloon op basis van de ingevoerde omzet. zorg er bovendien voor dat, van zodra een volgende omzet wordt ingevoerd, het vorig commissieloon wordt gewist.oplossing

5. Bereken, op basis van een aantal producten, hun prijs en hun BTW-tarief, het totaal bedrag te betalen door de klant. oplossing
6. Schrijf een programma dat BEF omzet naar Euro en omgekeerd.
oplossing1 of beter oplossing2
7. Stel een proef op met enkele meerkeuzevragen en geef het resultaat van de juiste antwoorden.