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 seterbestillBtn.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()
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.