Eksamen i Programmering 18. februar 2002 Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.. Hold deg til de identifikator-navnene som er brukt i oppgaveteksten, dog med unntak av metodenes parameternavn som kan velges fritt.. Dersom det er en deloppgave du ikke får til, bør du g~ videre til den neste. F~r du bruk for en metode fra en deloppgave du ikke har gjort, kan du gjøre kall p~ metoden selv om du ikke har programmert den. Du forutsetter da at den utfører det den er tiltenkt ~ gjøre. Det er viktig at du svarer (i alle fall litt) p~ alle deloppgavene.. Merk deg at svært mye av programmeringen g~r ut p~ ~ gjøre kall på passende metoder av dem som er omtalt i oppgaven. Merk deg derfor hva de omtalte metodene utfører. Pass p~ ved metodekall at argumenter er av riktig type og sørg for å gjøre bruk av dataene som metodene returnerer.. Svar nøyaktig p~ det du blir spurt om. Dersom du mener at oppgaveteksten ikke gir deg tilstrekkelig informasjon eller er uklar, kan du gjøre dine egne forutsetninger. Gjør i s~ fall rede for disse.. Ved sensur vil alle bokstaverte deloppgaver (a, b, c,...) telle like mye.
Eksamen i Programmering 18. februar 2002 Side 2 av 7 CAMPINGPLASS I denne eksamensoppgaven skal du lage deler av et java-program for administrasjon aven campingplass. Av hensyn til oppgavens størrelse har vi utelatt en del funksjonalitet som det ellers ville vært ønskelig å hatt med i et slikt program. I oppgave 5 og 6 er det vist bilder av programmets brukergrensesnitt. De enkelte oppgavene inneholder nærmere informasjon. Oppgave 1 I denne oppgaven skal du programmere informasjon om kunden, herunder klassen Kunde. Klassen skal samle nødvendig. kundens navn. startdagen leien (dagens nummer (0..364) innenfor året). leiens varighet i antall dager. plassens/hyttas nummer (jfr. oppgave 2 Klassen skal ha en konstruktør som mottar startverdier for alle datafeltene, samt aksessmetoder (get-metoder) for disse. Oppgave 2 I denne oppgaven skal du programmere en abstrakt klasse som samler alle dataene som skal registreres for de forskjellige plassene man kan leie, enten det dreier seg om en enkelt teltplass, en campingvognplass eller en campinghytte. Nedenfor finner du en skisse av klassen: public abstr.ct class Plass public static final int ARSLENGDE = 365; liser bort fra skuddar protected Kund.[] gjest. new Kunde[ ARSLENGDE ]; protect8d int nr; Ilskal genereres auto..tisk private static int n8stenu...r = 1; Ilfor auto.atisk generering av nr protected double døgnpris; ]. <konstruktør> <..tod.r> abstract public String tostring( Klassen er såpass omfattende at vi har valgt å dele oppgaven Inn i flere deloppgaver, Programmer klassens konstruktør for initialisering av instansvariablene (datafeltene), og aksess-metoder (get-metoder) for henholdsvis nr og pris. nr skal genereres slik at alle plasser f~ret unikt nr. For ~ kunne leie en plass, m~ programmet først sjekke om plassen er ledig. Indeksene i arrayen Kunde[] gjest tilsvarer dagene i ~ret minus 1 (dvs. indeks O tilsvarer 1. januar, indeks 1 tilsvarer 2. januar, indeks 364 tilsvarer 31. desember osv.), og gjest[i] refererer til det kundeobjektet som har bestilt plassen for den tilsvarende dagen. p~ ledige dager er gjest[i] == null. public boolean ledig( int startdag, int antdager)
Eksamen i Programmering 18. februar 2002 Side 3 av 7 Metoden skal undersøke om plassen er ledig fra og med startdagen i det antallet dager som parameteren Ant Dager angir. Hvis plassen er ledig, skal metoden returnere true, hvis ikke skal den returnere false. Campingplassen er kun åpen i sommerhalvåret. Du kan derfor forutsette at utleie-tidsrommet ikke passerer et årsskifte. public boolean reserver( Kunde k ) Metoden reserverer plassen for kunden k, under forutsetning av at plassen er ledig i tidsperioden som er registrert for k. Hvis reservasjonen g~r greit, skal metoden returnere true i motsatt fall skal den returnere false. d) public double sjekkut Kunde k ) Metoden frigjør plassen som var reservert for k og returnerer skyldig beløp. e) public Kunde utleidtil String navn) Metoden returnerer en referanse til det Kunde-objektet som inneholder parameteren navn, eventuelt null dersom dette ikke finnes. (Du kan anta at alle kunder har forskjellige navn og at hver kunde har leid/reservert plassen for bare en tidsperiode.) Oppgave 3 Du skal nå programmere tre konkrete subklasser til den abstrakte klassen Plass. Hver av de tre klassene skal ha en konstruktør for nødvendig initialisering, samt en tostring-metode som returnerer relevante opplysninger om plassen, herunder hva slags plass det dreier seg om. Programmer subklassen Teltplass til Plass. For teltplasser skal det ikke registreres andre data enn de som skal registreres for alle typer plasser. Programmer subklassen Campingvognplass til Plass. Noen campingvognplasser er utstyrt med en terrasse. Det skal registreres om plassen har dette eller ikke. Programmer subklassen Campinghytte til Plass. For campinghytter skal det registreres hvor mange sengeplasser den har.
Eksamen i Programmering 18. februar 2002 Side 4 av 7 Oppgave 4 Klassen Campingplass representerer campingplassen med alle utleie-enhetene (plassene). Nedenfor finner du en skisse av klassen. public class Ca.pingplass public static final int SIlE. 100; private static final int UTVIDELSE. 10; private Plass[] plasser. new Plass[ SIlE ]; private int antplasser 8 O; public static final int TELTPLASS. O; public static final int CAMPINGVOGNPLASS 8 1; public static final int CAMPINGHYTTE 8 2; <konstruktør> f <metoder> public void nyplass( Plass objekt) Metoden kalles n~r det skal legges inn en ny plass i programmet. Den mottar en referanse til den nye plassen, og skal sette denne inn i arrayen. Hvis arrayen er full, skal den utvides med s~ mange elementer som konstanten UTVIDELSE angir. private int objekttypec Plass objekt) Metoden skal avgjøre om den innkomne parameteren objekt refererer til en Teltplass, Campingvognplass eller en Campinghytte, og skal returnere den tilhørende int-konstanten. public String visledige( int type, int startdag, int antdager) Metoden skal returnere en tekst som inneholder informasjon om alle plasser av angitt type som er ledig i den tidsperioden som parametrene angir. Hvis ingen slike plasser er ledige, skal metoden returnere informasjon om dette. d). private int finnplass( int plassnr) Metoden skal undersøke om det finnes en plass med det plassn,. som parameteren angir, og s~ fall returnere arrayindeksen til plassen. I motsatt fall skal metoden returnere -l.
Eksamen i Programmering 18. februar 2002 Side 5 av i e) public boolean reserverplass( Kunde k Metoden skal reservere plass for kunden som parameteren k angir. Hvis plassen finnes og er ledig i den aktuelle tidsperioden, skal den reserveres for kunden, og metoden skal returnere true. Hvis ikke, skal metoden returnere false. f public double sjekkut String navn Metoden kalles når personen med navnet som parameteren angir forlater campingplassen. Den skal returnere det beløp som personen skal betale, og sørge at plassen blir ledig igjen. Hvis derimot den navngitte personen ikke er registrert, skal metoden returnere O. Oppgave 5 Nedenfor ser du et bilde av brukergrensesnittet for reservasjon av de forskjellige plassene og hyttene. Bru kerg rensesnittet er definert av klassen Reservasjon. Følgende skisse gjengir en del av denne klassen. Legg spesielt merke til hjelpemetoden finndagnr() som du vil f~ bruk for i andre metoder i klassen.
Ilen i Programmering 18. februar 2002 Side 6 av 7 public class Reservasjon extends Jframe private JTextfi typefelt, navnefelt, dagfelt,.ndfelt, Irsfelt antdg t, nrfelt; private JButton digknapp, resknapp, utknapp; private JTextAr ledigliste; private Ca8ping ss plassen; private Knappel er lytter; public Reservasjon( Campingplass p ) super( "Reservasjon av plasser og hytter" ); plassen = p; <Oppretter komponenter, lager layout og foretar nødvendig initialisering. IIHjelpe.etode som leser inn dato og Ilreturnerer datoens dagnu.mer innenfor Ar.t (fra O til 364). private int finndagnr() int dag. Integer.parseInt( dagfelt.gettext() ); int.nd = Integer.parseInt(.ndfelt.getText() ); int Ar = Integer.parseInt( Arsfelt.getText() ); Calendar start. new GregorianCalendar( Ar,.nd - 1, dag ); r.turn start.get( Calendar.DAY_OF_YEAR ) - 1;. <..tad.r> ). private class Knappelytter imple.ents Actionlistener public void actionperfor.ed( ActionEvent e ) it ( e.getsource().. ledigknapp) visledige(); else it ( e.getsource().. resknapp) reserver(); else it ( e.getsource().. utknapp ) sjekkut();. public void visledige() Metoden skal skrive ut i tekstomrsdet ledigliste en oversikt over plasser/hytter av valgt type som er ledig i det tidsrom som er angitt. public void reserver() Metoden skal foreta reservasjon av plass/hytte av valgt type i det angitte tidsrom for kunden det er angitt navn for. Den skal skrive ut melding om utfallet av reservasjonen.. public void sjekkut() Metoden skal registrere at kunden med angitt navn sjekker ut (forlater campingplassen). Den skal skrive ut skyldig beløp.
Eksamen i Programmering 18. februar 2002 Side 7 av 7 Oppgave 6 Nedenfor kan du se et bilde av brukergrensesnittet for registrering av campingplassens plasser og hytter. - Fyll ut med relevante data om plassen.l1lytta scxn skal registreres. Typenr (O=teltplass, 1=campingvognplass, 2=hytte) D Døgnpris L==~~ CampIngvognplass med terrasse? (J,IN) D AntaU senger i hytte D I Registrer plassjhytte I Klassen som definerer dette er skissert nedenfor. public class Plassregistrering extends JFrame ( private JTextfield typefelt, sengefelt, prisfelt, terrassefelt; private JButton regknapp; private Ca.pingplass plassen; private Knappelytter lytter; public Plassregistrering( Ca.pingplass p super( "Oppdat.ring av plassregister" ); plassen = p; <Oppretter ko.pon.nter, lager layout og foretar nødvendig initialisering.>. public void registrernyplass() 000. private class Knappelytter i.ple8ents Actionlistener public vold actionperfor.ed( ActionEvent e if ( 8.g8tSourCe() == regknapp r8gistr8rnyplass(); public void registrernyplass( Metoden skal lese inn fra vinduet relevante data for en ny plass/hytte legge disse inn i programmets register over plasser/hytter. av den angitte type og OBSI Klassene som er beskrevet i eksamensoppgaven vil til sammen ikke utgjøre et fullstendig program, da det bl.a. mangler en main-metode. Du skal Imidlertid ikke programmere annet enn det som det er spørsm~1 om i oppgavene.