Programeer opdrachtenOpdracht : opdr7b_IIljitsj.txt

Terug naar de inzendingen
Opdracht 7b,IIljitsj
18 Jan 2010
 Omdat ik wel een vingeroefening kon gebruiken, de inschrijftermijn maar even
 eenzijdig verlengd ;-)
 
 Gewoon in Bash, en te laat ingeleverd. Ja maar meester, het programma is wel
 interactief. Dat kost nou eenmaal tijd om te maken.
 
 Even wat uitleg. Een beurt duurt twee seconde. En iedere kassier kan per beurt
 een klant helpen. Als je dus iedere keer een klant naar binnen stuurt, dan
 gebeurt er dus niets. Want de kassier kan het aan. Stuur je er dertig naar
 binnen, dan gaan alle kassa's open en per beurt gaan er vier klanten af (vier
 kassiers helpen vier klanten; drie kassiers drie, etc). Doe je niets, dan
 loopt de zaak vanzelf leeg.
 
 1 
*****kassasoftware.sh*****
  
 2#!/bin/bash
 3#
 4# MegaPeters(tm) kassasoftware
 5#
 6WelkomstBoodschap () {
 7        clear
 8        echo "Welkom in supermarkt Peters"
 9        echo -n "Hoeveel vakkenvullers zijn vandaag in dienst? "
 10        read -n 1 AANTAL_VAKKENVULLERS
 11        echo " "
 12}
 13
 14
 15BerekenKassas () {
 16
 17        AANTAL_KLANTEN=`expr $AANTAL_KLANTEN + ${AANTAL_NIEUWE_KLANTEN:-0} -
 18$KASSIERS`
 19        if [ $AANTAL_KLANTEN -lt 0 ] ; then
 20                AANTAL_KLANTEN="0"
 21        fi
 22
 23        if [ $AANTAL_KLANTEN -gt 12 ] ; then
 24                if [ $AANTAL_VAKKENVULLERS -ge 3 ] ; then
 25                        KASSA=( open open open open)
 26                        KASSIERS="4"
 27                fi
 28        elif [ $AANTAL_KLANTEN -gt 8 ] ; then
 29                if [ $AANTAL_VAKKENVULLERS -ge 2 ] ; then
 30                        KASSA=( open open open dicht)
 31                        KASSIERS="3"
 32                fi
 33        elif [ $AANTAL_KLANTEN -gt 4 ] ; then
 34                if [ $AANTAL_VAKKENVULLERS -ge 1 ] ; then
 35                        KASSA=( open open dicht dicht)
 36                        KASSIERS="2"
 37                fi
 38        else
 39                KASSA=( open dicht dicht dicht)
 40                KASSIERS="1"
 41        fi
 42
 43}
 44
 45
 46ToonUitvoer () {
 47        clear
 48        cat << EOF
 49        KASSA1  KASSA2  KASSA3 KASSA4
 50        ${KASSA[0]}     ${KASSA[1]}     ${KASSA[2]}     ${KASSA[3]}
 51
 52
 53Aantal klanten:         ${AANTAL_KLANTEN:-0}
 54Aantal vakkenvullers:   ${AANTAL_VAKKENVULLERS:-0}
 55
 56
 57EOF
 58}
 59
 60
 61NieuweKlanten () {
 62        echo -n "Hoeveel klanten komen binnen? "
 63        read -t 2 -n 1 AANTAL_NIEUWE_KLANTEN
 64}
 65
 66
 67
 68# Werk!
 69WelkomstBoodschap
 70BerekenKassas
 71ToonUitvoer
 72while true ; do
 73        unset AANTAL_NIEUWE_KLANTEN
 74        NieuweKlanten
 75        BerekenKassas
 76        ToonUitvoer
 77done
 
 
Mijn commentaar
 
 Op zich netjes uitgewerkt, duidelijke variabelennamen maken verder commentaar
 minder belangrijk
 Ook is de werking van je programma goed te volgen (het gaat echter wel mis als
 Kassa3 om technische reden buiten gebruik is, maar daarover had ik ook niets
 gespecificeerd)
 
 Waar ik niet zo blij mee ben is het gebruik van globale variabelen die je
 bovendien in verschillende subroutines wijzigt, dit kan leiden tot de beruchte
 spagheti structuur van BASIC programma's.
 
 Door je enigzinds spartaanse keuze van ShellScript is het programma zeer zeker
 inovatief te noemen.
 
 Dank voor het meedoen.