Emne: PROGRAMMERING |
Emnekode: LO 127 A |
Faglig veileder: Eva H.Vihovde Kjetil Grønning | |
Grupper: 1AA, 1AB, 1AC, 1IA |
Dato: 16.12.2008 |
Eksamenstid: 09.00 - 14.00 | |
Eksamensoppgaven består av: | Antall sider (inkl. forsiden): 7 | Antall oppgaver: 4 | Antall vedlegg: Ingen |
Tillatte hjelpemidler: Ingen | |||
Kandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger til grunn for løsningen. |
Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Utarbeidet av (faglærer): | Kontrollert av (en av disse): | Studieleders/ Fagkoordinators underskrift: | ||
Annen lærer | Sensor | Studieleder/ Fagkoordinator | ||
|
private
aksess, med unntak av konstanter som bør være public
og static
. Der det ikke er spesifikt angitt hva datatypen skal være, må du selv velge en passende datatype.
Tidspunkter kan i oppgaven representeres som objekter av typen Date, som ligger i pakken java.util. Instruksjonen
Date nå = new Date();oppretter et Date-objekt som representerer tidspunktet for når instruksjonen blir utført. Dersom vi har to Date-objekter tid1 og tid2, så vil instruksjonen
long varighet = tid2.getTime() - tid1.getTime();gi tidsavstanden i antall millisekund mellom de to tidspunktene. (Det er 3 600 000 millisekund i en time.) Klassen SimpleDateFormat, som ligger i pakken java.text, kan brukes til å formatere Date-objekter for utskrift. Dersom for eksempel Date-objektet dato ble opprettet den 16. desember 2008 klokka 09.18, vil instruksjonene
SimpleDateFormat df = new SimpleDateFormat("dd.MM.yy"); String utskrift = df.format( dato );gi tekststrengen "16.12.08".
Bok
, Cd
og Dvd
.
Det som er felles for de tre datatypene er representert av den abstrakte super-klassen Utlånsobjekt
som er gjengitt nedenfor.
import java.text.DateFormat; import java.util.Date; abstract class Utlånsobjekt { private String tittel; private Date utlånsdato = null; private int antallUtlånsdager; private Låner låner = null; // Referanse til personen som låner objektet public static final double GEBYR = 50.0; < Konstruktør som mottar låneobjektets tittel og antall utlånsdager via konstruktørens parametre. > < get-metoder > public boolean utlånt() { < Metoden skal avgjøre om objektet er utlånt eller ikke. > } public Date innleveringsdato() { long innlevering = utlånsdato.getTime() + (long)antallUtlånsdager*3600000*24; return new Date(innlevering); } public String toString() { < Hvis objektet er utlånt skal metoden returnere informasjon om hvem det er utlånt til og dagen det forventes innlevert. I motsatt fall skal metoden returnere en tom tekststreng. > } public boolean lånUt( Låner l ) { < Hvis objektet ikke allerede er utlånt, skal metoden registrere personen, som parameteren angir, som låner av objektet, samt registrere utlånsdatoen. Returverdien skal angi om utlånet lar seg utføre eller ikke. > } public double innlevering() { < Metoden skal registrere at objektet ikke lenger er utlånt. Hvis innleveringen har funnet sted etter at innleveringsdatoen er passert, skal metoden returnere gebyret fastsatt av konstanten GEBYR. I morsatt fall skal metoden returnere 0.0 > } } // end of class Utlånsobjekta) Programmer klassens konstruktør, get-metoder for
tittel
og låner
,
samt metoden public boolean utlånt()
.
b) Programmer metoden public String toString()
.
c) Programmer metoden public boolean lånUt( Låner l )
.
d) Programmer metoden public double innlevering()
.
Bok
er en direkte subklasse til Utlånsobjekt
.
Foruten alle datafelt og metoder klassen arver fra Utlånsobjekt
skal klassen
ha følgende datafelt:
toString()
-metode som returnerer all
informasjon som er lagret om utlånsobjektet, dvs. bokas tittel, forfatter, sjanger og språk,
om den er utlånt og i så fall til hvem, samt når den eventuelt forventes innlevert.
a)Programmer klassen Bok
.
Låner
skal brukes til å lagre opplysninger om vedkommende. Nedenfor ser du en skisse av klassen:
public class Låner { private String navn; private String[] låneobjekter; //Arrayen skal inneholde titlene til utlånsobjektene private double skyldigBeløp; //Summen av eventuelle pålagte gebyrer < Konstruktør som skal motta lånerens navn og lengden på arrayena) Programmer klassens konstruktør og get-metoden forlåneobjekter
som parametre. Nødvendig initialisering skal utføres. > < get-metode for navn > public double betaling(double b) { < Metoden skal øke beløpet låneren skylder med den verdi parameteren angir, og deretter returnere skyldig beløp fra metoden. > } public int finnLåneobjekt(String tittel) { < Metoden skal undersøke om personen (låneren) låner objektet som parameterentittel
angir. Hvis så er tilfelle skal metoden returnere indeksen til der dette ligger lagret i arrayen. Hvis ikke skal den returnere -1. > } public String registrerUtlån(String tittel) { < Metoden skal, om mulig, registrere at låneren nå låner objektet som parameterentittel
angir. Returverdien skal gi informasjon om dette lar seg gjøre eller ikke. > } public String innlevering(String tittel, double b ) { < Metoden skal registrere at objektet som parameterentittel
angir ikke lenger lånes av personen (låneren) og øke vedkommendes skyldige beløp med det parameterenb
angir. Returverdien skal gi informasjon om at objektet er innlevert og om hvor mye personen nå skylder. > } public String toString() { < Metoden skal returnere en tekst som inneholder all informasjon som er lagret om personen (låneren). > } }// end of class Låner
navn
.
b) Programmer metoden public int finnLåneobjekt(String tittel)
.
c) Programmer metoden public String registrerUtlån(String tittel)
.
d) Programmer metoden public String innlevering(String tittel, double b )
.
e) Programmer metoden public String toString()
.
Utlånsobjektene og lånerne skal lagres i to registere. På neste side ser du skisser av de to klassene som
implementerer Utlånsregister
og Personregister
. Du skal IKKE programmere noen
av dem, men du vil i oppgave 4 få bruk for å kalle opp metodene som de inneholder.
Merk deg derfor hva de omtalte metodene utfører, hvilke parametere de har og hva de returnerer.
(Du trenger ikke kjenne til hvordan de er implementert for å bruke dem.)
public class Utlånsregister { public final static int MAX = 100; public final static int UTLÅNSTID = 30; private Utlånsobjekt[] låneobjekter; private int antall; public Utlånsregister() { < Oppretter et register medUtlånsobjekt
-objekter. > } public Utlånsobjekt finnLåneobjekt(String tittel) { < Metoden returnerer, om mulig, det objektet som har samme tittel som parameterentittel
angir. Hvis et slikt objekt ikke finnes i registeret returnerer metodennull
. > } public String cdListe() { < Metoden returnerer en liste over alle cd'
er som ikke er utlånt. > } public String dvdListe() { < Metoden returnerer en liste over alle dvd'
er som ikke er utlånt. > } public String bokListe() { < Metoden returnerer en liste over alle bøker som ikke er utlånt. > } public String utlånteObjekter() { < Metoden returnerer en liste over alle utlånte objekter. > } } // end of class Utlånsregister public class Personregister { private Låner[] lånere; private int antall; public final static int MAX_UTLÅN = 5; public Personregister() { < Oppretter et register medLåner
-objekter. > } public Låner finnLåner(String navn) { < Metoden returnerer, om mulig, det objektet som har samme navn som parameterennavn
angir. Hvis et slikt objekt ikke finnes i registeret returnerer metodennull
. > } public String lånerInformasjon(String navn) { < Metoden returnerer, om mulig, all informasjon som er lagret om personen som parameterennavn
angir. Hvis personen ikke finnes i registeret skal metoden returnere"\nIngen informasjon om " + navn;
> } }// end of class Personregister
MediatekVindu
.
< import-setninger > public class MediatekVindu extends JFrame { private Personregister pReg; private Utlånsregister uReg; private JTextField navnefelt, tittelfelt; private JButton utlån, innlevering, dvdListe, cdListe, bokListe, utlånsliste,lånerInfo; private JTextArea display; public MediatekVindu() { super("MEDIATEK"); pReg = new Personregister(); uReg = new Utlånsregister(); Lytter lytter = new Lytter(); < Oppretter brukergrensesnittet og knytter knappene til lytteklassen. > } public void lånUt() { < Metoden skal registrere et utlån av et objekt under forutsetning av at både låneren og objektet finnes i mediatekets registere, at objektet ikke er utlånt fra før, og at låneren ikke allerede har lånt det maksimale antallet objekter. Utfallet av låneforsøket skal skrives i tekstområdeta) Programmer metodendisplay
. > } public void leverInn() { < Metoden skal registrere at et utlånsobjekt blir innlevert under forutsetning av at både låneren og objektet finnes i mediateket.Hvis innleveringen gikk bra skal det i tekstområdetdisplay
skrives informasjon om det og hva låneren eventuelt skylder. I motsatt fall skal det skrives informasjon om hvorfor innleveringen ikke lot seg utføre. > } public void cdListe() { < Metoden skal i tekstområdet display skrive en liste over alle cd'
er som ikke er utlånt. > } public void dvdListe() { < Metoden skal i tekstområdet display skrive en liste over alle dvd'
er som ikke er utlånt. > } public void bokListe() { < Metoden skal i tekstområdet display skrive en liste over alle bøker som ikke er utlånt. > } public void lånerInfo() { < Metoden skal i tekstområdet display skrive informasjon om ønsket låner. > } public void utlånsliste() { < Metoden skal i tekstområdet display skrive en liste over alle låneobjekter som er utlånt. > } private class Lytter .... { < Implementasjon av lytteklassen. > } // end of class Lytter }// end of class MediatekVindu
public void lånUt()
.
b)
Programmer metoden public void leverInn()
.
c)
Programmer metodene public void cdListe()
, public void lånerInfo()
og public void utlånsliste()
.
d)
Programmer den private indre lytteklassen Lytter
.