Eksamensoppgave Høst 2010 Ordinær Bokmål Fag: INF106 Objektorientert programmering Eksamensdato: 13.12.2010 Studium/klasse: 1. klasse Emnekode: INF106 Eksamensform: Skriftlig Antall sider: 5 (inkludert denne) Antall vedlegg: 0 Eksamenstid: 09:00-13:00 Fagansvarlig: Hjelpemidler: Rune Bostad, Owe Johansen Lærebok Programmering i Java av Else Lervik, Vegard B. Havdal Sensurfrist: 03.01.2011
Generell informasjon: Les gjennom oppgavesettet før du begynner med programmeringen. Pass på at du gjør det oppgavene etterspør (verken mer eller mindre). Men dersom du trenger flere metoder/konstruktører for å lage metodene oppgavene spør etter, skal du programmere disse. Dersom du mener det mangler opplysninger i oppgaveteksten skal du sette dine egne forutsetninger (skriv da opp forutsetningene i besvarelsen).
Oppgave 1 (20%) Følgende Bil-klasse er definert public class Bil { private String private int navn_ = null, regnr_ = null; motoreffektkw_; public Bil ( String navn, String regnr, int motoreffektkw ) { navn_ = navn; regnr_ = regnr; motoreffektkw_ = motoreffektkw; public int getmotoreffektkw() { return motoreffektkw_; public String getregnr() { return regnr_; public String getnavn() { return navn_; @Override public String tostring() { return navn_ + "\nregistreringsnummer:\n\t " + regnr_ + "\nmotor effekt (KW):\n\t" + motoreffektkw_; Skriv kode for en main metode som oppnår følgende: a) Oppretter en liste som inneholder 3 bil-objekter b) Skriver ut informasjon for alle biler i listen c) Skriver ut informasjon om navn og motoreffekt i hestekrefter for alle biler i listen Motoreffekt i klassen er gitt i enheten KW. 1 HK er definer som ca. 0.7355 KW, altså har vi: KW 0.7355 HK HK KW / 0.7355 d) Hvordan blir utskriften fra deloppgave c) presentert i en terminal/ledetekst?
Oppgave 2 (ca 80%) Politikerne i en by har vedtatt nye regler for bomringen rundt byen. Hensikten er todelt: På den ene siden ønsker man å redusere luftforurensningen og på den andre siden å bedre folks helse ved å premiere de som sykler/går. Premieringen skjer ved at de får utbetalt en del av pengene som er kommet inn på bomstasjonene (fra de som kjører bil eller tar buss). Innbyggerne betaler pr. passering gjennom bomringen. De kan inngå én av følgende tre avtaler med bompengeselskapet: 1. Avtale Bilist Her betales en fast pris pr. passering uavhengig av antall passeringer i måneden. Prisen er 20 kr for hver passering. 2. Avtale Kollektivist I denne avtalen inngår svært billig månedskort for byens kollektivtrafikk. (Vi fokuserer ikke på månedskortene i denne oppgaven.) Dersom en person med denne avtalen likevel må kjøre bil en dag, skal han betale etter følgende regler: Han får et visst antall passeringer pr måned til en fast, relativt høy, pris. Deretter øker prisen med 20 prosent for hver passering. Eksempel: De fem første passeringene koster 20 kr hver. Passering nr 6 koster kr 20,00 * 1,20 = kr. 24,00. Passering nr 7 koster kr 20,00 * 1,40 = kr. 28,00. Passering nr 8 koster kr 20,00 * 1,60 = kr. 32,00... osv... 3. Avtale Syklist Disse personene forplikter seg til å sykle eller gå. De tjener opp såkalte miljøpoeng avhengig av antall ganger de sykler/går til byen. (Vi ser bort fra at noen jukser). Hver gang de passerer en bomstasjon får de 2 miljøpoeng. Hver gang systemet foretar avregning, får disse personene en viss prosentdel av bompengene som er betalt inn (men vi skal ikke regne ut dette i denne oppgaven). Disse pengene fordeles etter antall miljøpoeng den enkelte har opptjent. Hvis en person i denne kategorien kjører bil, må han/hun betale dobbelt så mye som en Kollektivist.
Figuren viser et klassetre som modellerer de ulike avtalene. Hver avtale har et entydig nummer. Dette skal være en static variabel som økes med 1 hver gang et nytt objekt blir laget. (Dette gir entydighet, men ingen garanti for at alle nummer er i bruk.) I tillegg til nummeret skal vi lagre kun epostadressen til kunden. Epostadressen vil selvfølgelig være entydig. (Vi lagrer altså verken andre personopplysninger for enkelhets skyld). Klassen Avtale skal ha følgende datamedlemmer: int avtalenr; // entydig String epost; // entydig double saldo; // skyldig beløp int antpasseringer; // økes med 1 for hver passering Om du finner det hensiktsmessig for å løse oppgavene, kan du utvide denne listen. Programmer de fire klassene etter følgende spesifikasjoner: Alle klassene skal ha konstruktører som tar epost-adressen som argument. En klient skal kunne hente ut verdiene til alle datamedlemmene, men bare saldo og antpasseringer skal kunne forandres etter at et objekt er opprettet. Det må være mulig å registrere en passering gjennom bomringen. Da skal saldoen økes i henhold til reglene gitt foran. Klassen Syklist skal vedlikeholde antall miljøpoeng for avtaler av denne typen. Dette skal være et datamedlem med sett- og finn-funksjoner. a) Programmer klassen Avtale b) Programmer klassen Billist c) Programmer klassen Kollektivist d) Programmer klassen Syklist Alle avtalene skal samles i en ArrayList i klassen Avtaler: ArrayList <Avtale> avtaler; e) Programmer klassen Avtaler som inneholder disse metodene: Programmer en metode som registrerer en ny avtale (i klassen Avtaler). Avtaleobjektet, skal være argument til metoden. Metoden skal returnere false dersom avtale med denne epostadressen og/eller nummer er registrert fra før. Programmer en metode som registrerer en passering for en avtale (i klassen Avtaler). Avtalenummeret skal være argument til metoden. Programmer en metode som lister all tilgjengelig informasjon for en avtale (alle offentlige finn-funksjoner). E-post adresse skal være argument for metoden