Eksamen Våren 2010 - Flystevne

Kommentarer og løsningsskisser

© H-P Ulven 05.03.12

Oppgave 3:

Brukegrensesnitt:

Forenklet løsning uten egen klasse for Rutetid:

Kan legge fra- og tilnavnene direkte i komboboksene fraCb og tilCb.

(Men da må programmet endres hver gang vi endrer rutetabellen, så det er bedre å legge rutetabellen i en xml-fil,
og lage en egen klasse Rutetid som leser inn xml-filen og har metoder for å finne avstander.)

For å få gjort oppslagene må vi da lagre tabellen

  Gardermoen Flesland Værnes Bodø Evenes Tromsø
Gardermoen 0 40 60 100 150 200
Flesland 40 0 50 80 130 180

i en variabel på denne måten:

	var rutetabell: Object = {

				Gardermoen:{Gardermoen:   0, Flesland:  40},

				Flesland:  {Gardermoen:  40, Flesland:   0},

				Værnes:    {Gardermoen:  60, Flesland:  50},
				...
				Tromsø:    {Gardermoen: 200, Flesland: 180}

			};//rutetabell

Oppslag kan da gjøres med franavn og tilnavn som indeks:

var avstand:Number = rutetabell["Tromsø"]["Gardermoen"]);	//vil gi avstand lik 200

En slik assosiativ tabell (String istedenfor int som indeks), kan kanskje bedre illustreres slik:

Gardermoen Flesland Værnes Bodø Evenes Tromsø
Gardermoen:0
Flesland: 40
Gardermoen:40
Flesland: 0
Gardermoen:60
Flesland: 50
Gardermoen:100
Flesland: 80
Gardermoen:150
Flesland: 130
Gardermoen:200
Flesland: 180

Mer avansert løsning med egen klasse Rutetabell og rutetabellen i xml-fil:

Innhold i XML-fil:

Legg merke til attributtene til feltene! Merket rødt og blått!

<rutetabell>

	<avstand fra="Gardermoen">

		<verdi til="Gardermoen">

			0

		</verdi>

		<verdi til="Flesland">

			40

		</verdi>

	</avstand>



	<avstand fra="Flesland">

		<verdi til="Gardermoen">

			40

		</verdi>

		<verdi til="Flesland">

			0

		</verdi>

	</avstand>



	<avstand fra="Værnes">

		<verdi til="Gardermoen">

			60

		</verdi>

		<verdi til="Flesland">

			50

		</verdi>

	</avstand>



	<avstand fra="Bodø">

		<verdi til="Gardermoen">

			100

		</verdi>

		<verdi til="Flesland">

			80

		</verdi>

	</avstand>



	<avstand fra="Evenes">

		<verdi til="Gardermoen">

			150

		</verdi>

		<verdi til="Flesland">

			130

		</verdi>

	</avstand>



	<avstand fra="Tromsø">

		<verdi til="Gardermoen">

			200

		</verdi>

		<verdi til="Flesland">

			180

		</verdi>

	</avstand>

</rutetabell>

xml-variablene rutetabell kan da illustreres omtrent slik:

Pseudokode for metodene i klassen Rutetabell:

Rutetabell() {		//Konstruktør

   Last inn xml-fil på vanlig måte

   heng på rutetabellFerdig() som lytter på xmlLoader

}
//Oppslag av avstander:

getAvstand(fra,til):Number {

   return rutetabell.avstand.(@fra==fra).verdi.(@til==til);

}
//Navnetabell til tilCb:

getFraNavn(): Array {

   for i fra 0 til rutetabell.avstand.length()

      o=new Object()

      o.data=i

      o.label= rutetabell.avstand[i].@fra   //Henter attributtet @fra

      push inn i tabell

   }

   return tabell

}
//Navnetabell til fraCb:

getTilNavn(): Array {

   for i fra 0 til rutetabell.avstand[0].verdi.length()

      o=new Object()

      o.data=i

      o.label=rutetabell.avstand[0].verdi[i].@til	//Henter atrributtet @til

      push inn i tabell

   }

   return tabell

}

Kode for oppsett av komboboksen fraCb:

var data: Array = rutetabell.getFraNavn();	//Henter alle navnene fra Rutetabell-klassen

for(var i:int=0; i<data.length;i++) {

   fraCb.addItem(data[i]);		//addItem legger til objekter med feltene label og data

}//for