Kommentarer til heldagsprøve 12.05.2016

H-P Ulven

Oppgave 2a

Mye å holde rede på, så her bør man bygge ut etter hvert:

Først bestilling av et og et sete, deretter flere seter, disabling av opptatte seter, angre på valg osv.

Oppgaven illustrerer at man bør planlegge datastrukturen og alle tabellene før kode!

Koden under resulterer i dette programmet: oppgave2a.swf

/*
    Oppgave 2 a
    GUI:
      seter: s11, s12, ...   (checkbox)
      typeCb                 (Type billett combobox)
      bestillBtn             (Bestill-knapp)
      kvitteringTa	       (Kvittering  TextArea)
*/
/// --- Datastruktur --- ///
/* Tabell med setene i brukergrensesnittet.
   OBS:
      Vises som om den var 2-dimensjonal,men er en-dimensjonal
      for å kunne bruke Array-metoden indexOf!
      Konvertering av index til rader og plasser gjøres med
      funksjonen indeks2rader() og index2plasser lengre ned.
*/
var setetabell: Array =
   [s11,s12,s13,s14,s15,
    s21,s22,s23,s24,s25,
    s31,s32,s33,s34,s35];
/* Funksjoner som returnerer plass og rad fra indeks i
   tabellen over.
   int (i/5) gir heltall etter divisjon uten desimaler
   (i % 5) gir rest etter divisjon. 
   Eksempel:   indeks 13 (som er s34) gir  
               int(13/5)=2 og (13 % 5)= 3
               som egentlig er rad 3 og plass 4!
	     Husk at alt regnes fra 0, ikke 1!
*/
function indeks2rad(i:int):int { return  int(i/5)+1; }
function indeks2plass(i:int):int { return (i%5)+1; }
// Tabell med typenavn og priser
var typenavntabell: Array =  ["V", "B", "S", "M"];
var pristabell: Array = [100, 50, 50, 30];
/* Bestilling-tabell med type billett:
	[ "V","B","", ... ]
   med samme indeksering som setene.
   Deklarerer eller lager med for-løkke:
*/
var bestillingtabell: Array = new Array();
for(var s=0;s<setetabell.length;s++) {
   bestillingtabell.push("");
}//for
/// --- Lyttere og funksjoner --- ///
for(s=0;s<setetabell.length;s++) {
   setetabell[s].addEventListener(MouseEvent.CLICK, seteKlikket);
}//for alle seter
bestillBtn.addEventListener(MouseEvent.CLICK, bestillKlikket);
/* Setter type billett.
   Opptatt settes når ferdig med å velge.
   Rader og plasser kan regnes ut senere.  */
function seteKlikket(evt: MouseEvent):void {
   var sete = evt.target;
   var indeks: int = setetabell.indexOf(sete);
   if(typeCb.selectedIndex<0) {    // Type ikke valgt
      kvitteringTa.text = "Du må velge type billett!";
      sete.selected=false;        // Fjern ugyldig valg
   }else{
      kvitteringTa.text = "";      
      if(sete.selected) {          // har valgt et ledig sete
         bestillingtabell[indeks]= 
            typenavntabell[typeCb.selectedIndex];
      }else{                   // har angret på et valg
         bestillingtabell[indeks]= "";  //Setter tilbake
      }//if valgt sete
   }//if type valgt
}//seteKlikket()
/* Disabler opptatte seter.
   Lager kvittering ut fra bestillingstabell,
   setetabell, pristabell og statustabell.
   (Senere versjoner må også lagre bestillingen
    slik at betalingsdelen av systemet lagrer
    alle kunder og bestillinger i en totaloversikt.)
*/
function bestillKlikket(evt: MouseEvent):void {
   var kvittering: String = "type:\t rad: \t plass: \t pris: \n";
   var totalpris: int = 0;
   var typenavn: String = "";
   var pris: int = 0;
   for(var s=0;s<setetabell.length;s++) {
      typenavn=bestillingtabell[s];
      if( !(typenavn=="") ) { //Hvis ikke blankt
         pris=pristabell[typenavntabell.indexOf(typenavn)];
         kvittering += 
                typenavn+"\t\t"+            // type
                indeks2rad(s) +"\t\t"+      // rad
                indeks2plass(s)+"\t\t"+     // plass
                pris+                       // pris
                "\n";                       // linjeskift
         totalpris += pris;
         setetabell[s].enabled=false;       // opptatt
         bestillingtabell[s]="";            // nullstiller
      }//if sete er valgt
   }//for alle seter
   kvittering += "Totalt:   " + totalpris + "\n"
   kvitteringTa.text = kvittering;
}//bestillKlikket()

Oppgave 2 b

 

var navnetabell: Array =
["Frekneset FK", "Mosebakken FK", "Nedsiden FK", "Sparket FK"];
var kamptabell: Array =
   [
      [{H:-1, B:-1}, {H: 0, B: 1}, {H:-1, B:-1}, {H:-1, B:-1}],
      [{H:-1, B:-1}, {H:-1, B:-1}, {H: 2, B: 3}, {H:-1, B:-1}],
      [{H:-1, B:-1}, {H:-1, B:-1}, {H:-1, B:-1}, {H: 2, B: 0}],
      [{H: 1, B: 0}, {H:-1, B:-1}, {H:-1, B:-1}, {H:-1, B:-1}]
   ];
function lagStatus (): Array {
   // Lager en poengtabell som skal returneres etter oppdatering
   var poengtabell: Array = 
      [
         {lag: "Freksneset",    poeng: 0},
         {lag: "Mosebakken FK", poeng: 0},
         {lag: "Nedsiden FK",   poeng: 0},
         {lag: "Sparket Fk",    poeng: 0}
      ];
/* Kunne også vært laget med:
   var poengtabell: Array = new Array();
   for(var l:int = 0; l < navnetabell.length; l++) {
      var o: Object = new Object();
      o.lag = navnetabell[l];
      o.poeng = 0;
      poengtabell.push(o);
   }//for
*/
   // Traverserer 2-dimensjonal tabell og gir poeng
   // avhengig av hvem som hadde hvilke mål
   for(var hlag = 0; hlag < kamptabell.length; hlag++) {
      for (var blag = 0; blag < kamptabell.length; blag++) {
         var Hmal = kamptabell[hlag][blag].H;
         var Bmal = kamptabell[hlag][blag].B;
         if (Hmal != -1) {            // Hvis kampen er spillt
            if (Hmal > Bmal) {        // Hjemmelag vant...
               poengtabell[hlag].poeng += 3;
            } else if (Bmal > Hmal) { // Bortelag vant...
               poengtabell[blag].poeng += 3;
            } else {                  // Uavgjort ...
               poengtabell[hlag].poeng++;
               poengtabell[blag].poeng++;
            }//if mål
         }//if kampen er spillt
      }//for bortelag
   }//for hjemmelag
   // Sorterer etter fallende poeng
   poengtabell.sortOn("poeng",Array.DESCENDING+Array.NUMERIC);
   return poengtabell;
}// lagStatus()
/// --- Tester om funksjonen virker --- ///
var t: Array = lagStatus();
for(var i:int = 0; i<t.length;i++) {
   trace("Lag: " + t[i].lag + " hadde " + t[i].poeng + " poeng.");
}//for

Programmet over gir følgende output:

Lag: Nedsiden FK hadde 6 poeng.
Lag: Mosebakken FK hadde 3 poeng.
Lag: Sparket Fk hadde 3 poeng.
Lag: Freksneset hadde 0 poeng.