Løsningsforslag til kontinuasjonseksamen i programmering mars 2010 Oppgave 1 a ***************************************************** public class Kunde { private String navn; private int plassnr; private int antDager; private int startdag; //dagens nr. i året, 0 - 364 public Kunde( String n, int ant, int start, int plnr ) { navn = n; antDager = ant; startdag = start; plassnr = plnr; } public int getAntDager() { return antDager; } public int getStartdag() { return startdag; } public String getNavn() { return navn; } public int getNr() { return plassnr; } } Oppgave 2 a ************************************************************* public Plass( double pris ) { døgnpris = pris; nr = nestenr++; } // fortsetter neste side public int getNr() { return nr; } public double getPris() { return døgnpris; } Oppgave 2 b ****************************************************** public boolean ledig( int startdag, int antDager ) { for ( int i = startdag; i < startdag + antDager; i++ ) if ( gjest[ i ] != null ) return false; return true; } Oppgave 2 c ****************************************************** public boolean reserver( Kunde k ) { int antDager = k.getAntDager(); int startdag = k.getStartdag(); if ( !ledig( startdag, antDager ) ) return false; else { for ( int i = startdag; i < startdag + antDager; i++ ) gjest[ i ] = k; return true; } } Oppgave 2 d ********************************************************** public double sjekkUt( Kunde k ) { int antall = k.getAntDager(); int startdag = k.getStartdag(); for ( int i = startdag; i < startdag + antall; i++ ) gjest[ i ] = null; return døgnpris * antall; } Oppgave 2 e *********************************************************** public Kunde utleidTil( String navn ) { for ( int i = 0; i < ÅRSLENGDE; i++ ) // evt. gjest.length istedenfor ÅRSLENGDE if ( gjest[ i ] != null && gjest[ i ].getNavn().equals( navn ) ) return gjest[ i ]; return null; } Oppgave 3 a ********************************************************** class Teltplass extends Plass { public Teltplass( double pris ) { super( pris ); } public String toString() { return "Teltplass nr. " + nr + ", døgnpris: kr. " + døgnpris; } } Oppgave 3 b *********************************************************** class Campinghytte extends Plass { private int antSenger; public Campinghytte( double p, int s ) { super( p ); antSenger = s; } public String toString() { String info = "Hytte nr. " + nr + ". " + antSenger + " senger. "; info += døgnpris + " kr. pr. døgn."; return info; } } Oppgave 4 a ********************************************************** public void nyPlass( Plass objekt ) { if ( antPlasser == plasser.length ) { Plass[] utvidet = new Plass[ antPlasser + UTVIDELSE ]; for ( int i = 0; i < antPlasser; i++ ) utvidet[ i ] = plasser[ i ]; plasser = utvidet; } plasser[ antPlasser++ ] = objekt; } Oppgave 4 b ********************************************************** private int objekttype( Plass objekt ) { if ( objekt instanceof Teltplass ) return TELTPLASS; else if ( objekt instanceof Campinghytte ) return CAMPINGHYTTE; else return -1; } Oppgave 4 c *********************************************************** public String visLedige( int type, int startdag, int antDager ) { String ledig = ""; for ( int i = 0; i < antPlasser; i++ ) { if ( type == objekttype( plasser[ i ] ) && plasser[ i ].ledig( startdag, antDager ) ) ledig += plasser[ i ].toString() + "\n"; } if ( ledig.equals( "" ) ) ledig = "Ingen ledig."; return ledig; } Oppgave 4 d *********************************************************** private int finnPlass( int plassnr ) { for ( int i = 0; i < antPlasser; i++ ) if ( plasser[ i ].getNr() == plassnr ) return i; return -1; } Oppgave 4 e ************************************************************* public boolean reserverPlass( Kunde k ) { int i = finnPlass( k.getNr() ); if ( i >= 0 ) return plasser[ i ].reserver( k ); else return false; } Oppgave 4 f ********************************************************** public double sjekkUt( String navn ) { for ( int i = 0; i < antPlasser; i++ ) { Kunde k = plasser[ i ].utleidTil( navn ); if ( k != null ) return plasser[ i ].sjekkUt( k ); } return 0.0; } Oppgave 5 a ************************************************************ public void registrerNyPlass() { int type = Integer.parseInt( typefelt.getText() ); double pris = Double.parseDouble( prisfelt.getText() ); Plass ny = null; switch( type ) // kan like gjerne bruke if { case 1: ny = new Teltplass( pris ); break; case 2: int antSenger = Integer.parseInt( sengefelt.getText() ); ny = new Campinghytte( pris, antSenger ); break; default: melding( "Ukjent plasstype." ); return; } plassen.nyPlass( ny ); melding( "Ny plass registrert." ); } Oppgave 6 a ********************************************************** /* Har i oppgave 5 og 6 gjort bruk av hjelpemetoden public void melding( String info ) { JOptionPane.showMessageDialog( this, info ); } for utskrift av meldinger til brukeren. Det er fritt opp til kandidatene hvordan de velger å skrive ut meldinger til brukeren. */ public void visLedige() { int type = Integer.parseInt( typefelt.getText() ); int ant = Integer.parseInt( antdgfelt.getText() ); int startdag = finnDagnr(); ledigliste.setText( plassen.visLedige( type, startdag, ant ) ); } Oppgave 6 b ************************************************************* public void reserver() { String navn = navnefelt.getText(); int startdag = finnDagnr(); int antdg = Integer.parseInt( antdgfelt.getText() ); int plassnr = Integer.parseInt( nrfelt.getText() ); Kunde k = new Kunde( navn, antdg, startdag, plassnr ); boolean ok = plassen.reserverPlass( k ); if ( ok ) melding( "Reservasjon i orden." ); else melding( "Plassen var opptatt eller finnes ikke." ); } Oppgave 6 c ************************************************************* public void sjekkUt() { String navn = navnefelt.getText(); double skyldig = plassen.sjekkUt( navn ); if ( skyldig < 1 ) melding( "Fant ikke " + navn + " i registeret." ); else { DecimalFormat todes = new DecimalFormat( "0.00" ); melding( "Utsjekking registrert. Skyldig leie kr. " + todes.format( skyldig ) ); } }