8.10 Voorbeeld: bestelbus

Een bedrijf beschikt over een bestelbusje dat iedereen in het bedrijf mag gebruiken. Om het gebruik in goede banen te leiden moet iedereen reserveren. Dit reserveren gebeurt per dagdeel: een morgen en/of een middag en/of een avond.

In het indexed bestand bestelbus houdt men bij of het busje gereserveerd is en door wie. Het bestand bevat voor elke werkdag een record. De sleutel is de datum in de vorm jjmmdd (jaar, maand, dag). Daarna volgen in het record drie velden van vijf posities. Het eerste veld voor de morgen, het tweede voor de middag en het derde voor de avond. Elk van die drie velden bevat spaties als het busje niet is gereserveerd op dat dagdeel. Als het busje wel is gereserveerd, dan staat er een personeelscode van 5 posities in het betrokken veld.

illustratie: Geert Nijmolen

cartoon

Een gedeelte van het bestand kan bij voorbeeld de volgende inhoud hebben:

900523          MK867
900525VK123VK123
900528
  

Dit betekent dat op 23 mei het personeelslid met nummer MK867 het busje heeft gereserveerd. Op 25 mei staat VK123 overdag geboekt. Voor 28 mei is er nog geen reservering. Tussen haakjes: 24 mei 1990 is hemelvaartsdag; 26 en 27 mei zijn weekend.

Er moet een programma komen dat de gebruiker om vier cijfers vraagt. Die stellen een jaar en een maand voor. Van de opgegeven maand moet het programma de nog niet-gereserveerde dagdelen (morgen, middag en/of avond) afdrukken.

 identification division.
 program-id. NOG-VRIJ.
*afdrukken niet-gereserveerde dagdelen uit bestand bestelbus
*Andree Hollander; 1988/08/18

 environment division.
 input-output section.
 file-control.
  select bestelbus assign to disk
         organization is indexed, access is sequential
         record key is datum.
     select papier    assign to printer.

 data division.
 file section.
 fd bestelbus.
 01 filler.
    02 datum.
       03 jaar-maand   pic x(4).
       03 dag          pic x(2).
    02 dagdeel         pic x(5), occurs 3 times.
 fd papier.
 01 regel              pic x(50).
 
 working-storage section.
 01 gewenste-maand     pic x(4).
 01 string-plaats      pic 99.
 01 einde-maand        pic x(3), value "Nee".

 procedure division.
 aanroepen.
     perform gewenste-maand-opvragen
     open input bestelbus, output papier
     perform bepaal-startpunt
     perform lees-maand
     close papier, bestelbus
     display "klaar"
     stop run.
 gewenste-maand-opvragen.
     display "Afdrukken beschikbare dagdelen."
     display "Geef jaar en maand in de vorm JJMM"
     accept gewenste-maand.
 bepaal-startpunt.
     move gewenste-maand to jaar-maand
     start bestelbus key = jaar-maand
         invalid key 
             display "jaar-maand onjuist."
             stop run
     end-start.
 lees-maand.
     perform with test after until einde-maand = "Ja"
         read bestelbus next record
             at end 
                 move "Ja" to einde-maand
             not at end
                 if jaar-maand = gewenste-maand then
                     perform regel-afdrukken
                 else
                     move "Ja" to einde-maand
                 end-if
         end-read
     end-perform.
 regel-afdrukken.
     move 1 to string-plaats
     move space to regel
     string datum delimited by size 
         into regel with pointer string-plaats
     if dagdeel(1) = space then
         string space, "morgen" delimited by size into regel
         with pointer string-plaats
     end-if
     if dagdeel(2) = space then
         string space, "middag" delimited by size into regel
         with pointer string-plaats
     end-if
     if dagdeel(3) = space then
         string space, "avond" delimited by size into regel
         with pointer string-plaats
     end-if
     write regel.
omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 1

Auteur: Andree Hollander

naamlogo