function beregning(): Number {// Her skulle jeg gjort en komplisert beregning som ikke er ferdig ennå! // Foreløpig returneres 42, uansett.return 42; // Returnerer 42 ("Svaret på alt" ) }
(Tegning av skjermbilde, med angivelser av komponentnavn og lytterfunksjoner.)
(Jeg har konsentrert meg om det viktigste og har for eksempel ikke tatt med Gå-til-betaling-knapp )

Noe av det viktigste her er at alle data bør lagres ett sted; i datastrukturen!
En uting å ha samme data flere steder, for eksempel både i tabeller og i kode eller i brukergrensesnittet (komponenter).
Oppdatering er enklest hvis alt er et sted, ikke spredd på forskjellige steder i programkoden,
eller enda verre; samme data flere steder!Dette er eksempelvis ikke så lurt:
function hotellFalleferdig(romtype: String): Number { var pris: Number = 0.0; if (romtype == ENKELTROM) { pris = 630; // ikke lagre data i kode ... } else { pris = 330; // ikke lagre data i kode... } return pris; }
Navn: Type: Default: Navn: Type: Default: KULTURPASS int 700 ENKELTROM int 300 stedsindeks -1 hotellindeks int -1 sesong String "sommer" antallenkeltrom int 0 antalldobbeltrom int 0 antalldogn int 0 kulturpass Boolean false antallpersoner int 0 pris int 0 Hvis det ikke skal leveres som egen oppgave, er det likevel lurt å lage en enkel liste, for å huske navnene når man skriver kode!
Bør ikke skrive en linje kode før man har bestemt strukturen på disse tabellene!
Valg mellom Array og Asssosiative tabeller/Objekter, styres av behovet for å slå opp.
Her bruker jeg steds- og hotellindekser til å slå opp priser.
Steds- og hotellnavn i enkle tabeller:
stedsnavn:
"Amsterdam" "New York" "Roma" "St. Petersburg"
hotellnavn:
"Stinky" "Dirty"
"Aurora" "Downtown" "City Hall"
"BadView" "Ugly View"
"Putin" "Tall Tower"
priser:
Grønne objekter på formen: { sommer: 300, vinter: 400 }
Oppslag med: priser[stedsindeks][hotellindeks][sesong]
hent stedsindeks fra komboboks hotellNavnOppdatering(stedsindeks) nullstillAlleValg() oppdaterGui()
Hvis sted valgt hentData() regnUtPris() oppdaterGui() ellers vis "Velg et sted først!"
hent undertabell med hotellnavn fjern alle item i hotell-komboboksen for alle hotellnavn legg til hotellnavn i Itemliste i hotell-komboboksen
Sett alle komponenter og lagrede data til defaultverdier
Kommentar:
Kunne klart oss uten denne og gjort alt i regnUtPris(), men fint å isolere alt som har
med GUI å gjøre, slik som navn på komponenter, i denne ene funksjonen.
Hvis noe endres i brukergrensesnittet, slipper vi å endre andre steder enn i hentData(),
som eksempelvis i oppdaterGui() lenger ned der vi bruker variabler og slipper å
hente på nytt fra brukergrensesnittet!
hotellindeks=hotellCb.selecteIndex Hvis sommer sesong = "sommer" // Brukes som feltnavn i ellers // i pris-tabellen sesong = "vinter" antallenkeltrom = enkeltromNs.value antalldobbeltrom = dobbeltromNs.value antalldogn = antalldognNs.value kulturpass = kulturpassChk.selected antallpersoner = antallenkeltrom+2*antalldobbeltrom
dognpris = priser[stedsindeks][hotellindeks][sesong]
pris = antalldogn*(dognpris*antalldobbeltrom+
(dognpris+ENKELTROM)*antallenkeltrom)
Hvis kulturpass valgt
pris += antallpersoner*KULTURPASS
rapport =
"Reisested: " + stedsnavn[stedsindeks] +
"Hotell: " +
hotellnavn[stedsindeks][hotellindeks] +
"Enkeltrom: " + antallenkeltrom +
"Dobbeltrom: " + antalldobbeltrom +
"Antall døgn: " + antalldogn
Hvis kulturpass valgt
rapport += "Kulturpass: + antallpersoner
/*
Oppgave 3 - Eksamen V 2016
Author: H-P Ulven Version: 0.9
GUI:
reisestedCb hotellCb
sommerRb enkelromNs
vinterRb dobbelromNs
kulturpassChk
sjekkutBtn antalldognNs
rapportTa
*/
/// --- Datastruktur --- ///
const KULTURPASS: int = 700;
const ENKELTROM: int = 300;
var stedsindeks: int = -1;
var hotellindeks: int = -1;
var sesong: String = "sommer";
var antallenkeltrom: int = 0;
var antalldobbeltrom: int = 0;
var antalldogn: int = 0;
var kulturpass: Boolean = false;
var antallpersoner: int = 0;
var pris: int = 0;
var stedsnavn: Array = ["Amsterdam", "New York", "Roma","St. Petersburg"];
var hotellnavn: Array =
[
["Stinky", "Dirty"], //Amsterdam
["Aurora", "Downtown", "City Hall"], //New York
["BadView", "UglyView"], //Roma
["Putin", "TallTower"] //St. Petersburg
];
var priser: Array =
[
[{sommer: 300, vinter: 400},{sommer: 250, vinter: 300}],
[{sommer: 590, vinter: 690},{sommer: 660, vinter: 750},
{sommer:450,vinter:530}],
[{sommer: 320, vinter: 410},{sommer: 400, vinter: 500}],
[{sommer: 500, vinter: 600},{sommer: 400, vinter: 500}]
];
/// --- Oppkobling av lytterfunksjoner --- ///
reisestedCb.addEventListener(Event.CHANGE,stedEndret);
function stedEndret(evt: Event):void {
stedsindeks = reisestedCb.selectedIndex;
hotellNavnOppdatering(stedsindeks);
nullstillAlleValg(); // Stedsskifte endrer alt!
oppdaterGui();
}//stedEndret()
// Alle andre skal medføre oppdatering av pris:
hotellCb.addEventListener(Event.CHANGE,noeBleEndret);
sommerRb.group.addEventListener(Event.CHANGE,noeBleEndret);
enkeltromNs.addEventListener(Event.CHANGE,noeBleEndret);
dobbeltromNs.addEventListener(Event.CHANGE,noeBleEndret);
antalldognNs.addEventListener(Event.CHANGE,noeBleEndret);
kulturpassChk.addEventListener(Event.CHANGE,noeBleEndret);
function noeBleEndret(evt: Event): void {
if(stedsindeks>=0) {
hentData(); // Hent data fra GUI
regnUtPris(); // Beregninger
oppdaterGui(); // Oppdater GUI
}else{
rapportTa.text = "Velg sted først!";
}//if
}//noeBleEndret()
/// --- Andre funksjoner --- ///
//Hent data fra brukergrensesnitt:
function hentData():void {
hotellindeks = hotellCb.selectedIndex;
if(sommerRb.selected) {
sesong = "sommer";
}else{
sesong = "vinter";
}//if
antallenkeltrom=enkeltromNs.value;
antalldobbeltrom=dobbeltromNs.value;
antalldogn=antalldognNs.value;
kulturpass=kulturpassChk.selected; debug();
antallpersoner = antallenkeltrom+2*antalldobbeltrom;
}//hentData()
// Regn ut totalprisen
function regnUtPris(): void {
var dognpris: int = priser[stedsindeks][hotellindeks][sesong];
pris = 0;
pris += antalldogn*
(dognpris*antalldobbeltrom +
(dognpris+ENKELTROM)*antallenkeltrom);
if(kulturpass) {
pris += antallpersoner*KULTURPASS;
}//if
}// regnUtPris()
// Lag oppdatering og vis i brukergrensesnitt
function oppdaterGui():void {
var rapport: String = "Velg hotell!";
if(hotellindeks>=0) {
rapport =
"Reisested: " + stedsnavn[stedsindeks] + "\n" +
"Hotell: " + hotellnavn[stedsindeks][hotellindeks] + "\n"+
"Enkeltrom: " + antallenkeltrom + "\n" +
"Dobbeltrom: " + antalldobbeltrom + "\n" +
"Antall døgn: " + antalldogn + "\n";
if(kulturpass) {
rapport += "Kulturpass: " + antallpersoner + "\n\n";
}//if
rapport += "Totalsum: " + pris;
}//if
rapportTa.text = rapport;
}// oppdaterGui()
// Oppdatering av hotellnavn i hotellnavn-komboboksen
function hotellNavnOppdatering(stedsindeks:int):void {
var navn: Array = hotellnavn[stedsindeks];
hotellCb.removeAll(); //Fjern alle items
for(var i:int=0;i<navn.length;i++){ //For hvert navn
var o: Object = {label: navn[i]}; //Legg inn nye items
hotellCb.addItemAt(o,i);
}//for
}//hotellNavnOppdatering()
// Nullstill alle valg når reisested er endret:
function nullstillAlleValg():void {
hotellCb.selectedIndex = -1; // -1 for å vise "hotell" som label
hotellindeks=-1;
sommerRb.selected = true; sesong="sommer";
enkeltromNs.value=0; antallenkeltrom=0;
dobbeltromNs.value=0; antalldobbeltrom=0;
antalldognNs.value=0; antalldogn=0;
kulturpassChk.selected=false; kulturpass=false;
}//nullstillAlleValg()
// Debug av GUI og valg
function debug():void {
trace("Stedsindeks: " + stedsindeks);
trace("Hotellindeks: " + hotellindeks);
trace("Sesong: " + sesong);
trace("Enkeltrom: " + antallenkeltrom);
trace("Dobbeltrom: " + antalldobbeltrom);
trace("Antall døgn: " + antalldogn);
trace("Kulturpass: " + kulturpass);
}//debug()
/// --- Hovedprogram ("Main") --- ///
nullstillAlleValg();
|