Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Calendar
, som ligger i pakken
java.util
. Instruksjonen
Calendar nå = Calendar.getInstance();oppretter et
Calendar
-objekt som representerer
tidspunktet for når instruksjonen blir utført. Dersom vi har to
Calendar
-objekter
tid1
og
tid2
, så vil instruksjonen
long avstand = Math.abs( tid1.getTime().getTime() - tid2.getTime().getTime() );gi tidsavstanden i antall millisekund mellom de to tidspunktene. (Det er 3 600 000 millisekund i en time.)
Klassen DateFormat
, som ligger i pakken
java.text
, kan brukes til
å formatere Calendar
-objekter for utskrift.
Dersom for eksempel Calendar
-objektet
tidspunkt
ble opprettet den 4. februar 2014
klokka 09.07, vil instruksjonene
DateFormat df = DateFormat.getInstance(); String utskrift = df.format( tidspunkt.getTime() );gi tekststrengen "04.02.14 09:07".
Hver parkering skal registreres som et objekt av en av klassene
KorttidsParkering
eller
LangtidsParkering
, avhengig av hvilken type
parkering det gjelder. Siden det er en del ting som er felles ved begge
parkeringstyper, skal du i denne oppgaven lage en abstrakt klasse
Parkering
som
samler de data og metoder som er felles for de to parkeringstypene.
Klassen skal ha følgende instansvariable (data-felter):
bilnr //bilens registreringsnummer
starttid //starttidspunkt for parkeringen
(Hint: Bruk Calendar
-klassen)
plass //nummeret for parkeringsplassen til bilen
KORTTID
og LANGTID
som skal tildeles heltallsverdiene 1 og 2.bilnr
, starttid
og plass
toString()
-metode om returnerer en tekst som inneholder bilens
nummer, hvilken plass den står parkert på og tidspunktet for når den ble parkert der.
(Formater tidspunktet som beskrevet i eksamensoppgavens innledning.)public abstract String kvittering( Calendar d );
public abstract double getPris();
public abstract double avgift( Calendar d );
Parkering
.
Som tidligere nevnt, kan det velges mellom korttidsparkering, som har timepris,
og langtidsparkering, som har døgnpris. Hver korttidsparkering skal
registreres som et objekt av klassen
KorttidsParkering
. Her er en skisse for denne
klassen:
public class KorttidsParkering extends Parkering { private static double timepris = 10; //Pris pr. påbegynt time private static double parkeringsbot = 500; //Skal betales dersom maksimal //parkeringstid overskrides public static final int MAXTID = 24; //Maksimal tillatte parkeringstid < Konstruktør med parametere som foretar nødvendig initialisering av datafeltene. > < get-metode for timepris > public int antallTimer(Calendar sluttTid) { < Metoden skal returnere antall påbegynte timer fra det tidspunktet bilen ble parkert til utkjøringstidspunktet angitt av parameteren sluttTid. (Hint! Se eksamensoppgavens innledning.) > } public double parkeringsBot(Calendar d) { < Metoden sjekker om parkering fram til det tidspunktet parameteren d angir overskrider maksimal parkeringstid. Den returnerer i så fall den parkeringsboten som dette medfører. I motsatt fall skal metoden returnere 0.0. > } public double avgift(Calendar d) {...} { < Metoden skal returnere den parkeringsavgift som skal betales fra parkeringen begynte til tidspunktet som parameteren d angir, inklusiv eventuell parkeringsbot. > } public String kvittering(Calendar sluttTid) {...} { < Metoden skal returnere en tekst som inneholder opplysninger om hvilken type parkering dette gjelder, bilens nummer, hvilken plass den står på, når den ble parkert, når bilen ble hentet (gitt ved parameteren sluttTid) og parkeringsavgiften som skal betales. > } } // end of class KorttidsParkeringa) Programmer klassens konstruktør og metodene
public int antallTimer(Calendar sluttTid) {...}
public double parkeringsBot(Calendar d) {...}
public double avgift(Calendar d) {...}
public String kvittering(Calendar sluttTid) {...}
LangtidsParkering
. Du skal IKKE
programmere denne klassen, men trenger å kjenne til den. Klassens metodene har samme
virkning som de tilsvarende metodene i oppgave 2.
public class LangtidsParkering extends Parkering { private static double døgnpris = 100; private static double parkerinsBot = 1000; private static final int MAXTID = -1; < konstruktør > < get-metoder > public int antallDager(Calendar sluttTid) { ... } public double parkeringsBot( Calendar d) { ... } public String kvittering(Calendar sluttTid) {...} } // end of class LangtidsParkering********************************************************************************
Klassen ParkeringsHus
som er skissert
på neste side representerer et parkeringshus med et gitt antall parkeringsplasser.
Arrayen plasser
representerer disse. Hvis
plasser[i] == null
betyr det at plassen er ledig.
I motsatt fall står det en bil på plassen, dvs.
plasser[i]
refererer da enten til
et objekt av klassen KorttidsParkering
eller til et objekt av klassen LangtidsParkering
.
NB! Parkeringsplassene er nummerert fra 1 og
oppover (til forskjell fra indeksene i arrayen).
public class ParkeringsHus { private Parkering [] plasser = new Parkering[MAX]; public static final int MAX = 200; private double inntjening; public Parkering parker(String bilnr, int type) { < Et kall på denne metoden registrerer en parkering. Parameteren bilnr inneholder registreringsnummeret til en bil, mens parameteren type angir hvilken type parkering det gjelder. (Hint! Se konstantene i klassen Parkering.) Hvis det er ledig plass skal metoden foreta parkering av den type som ønskes og returnere en referanse (peker) til objektet som inneholder data om parkeringen. Hvis ikke det er ledig plass skal metoden returnere null. > } public int plassnr( String bilnr ) { < Metoden skal returnere nummeret til parkeringsplassen som bil med registreringsnummer lik parameteren bilnr er parkert på. Metoden skal returnere 0 i tilfelle bilen ikke finnes i parkeringshuset. > } public String bilInfo( String bilnr ) { < Ut fra bilens bilnr, som parameteren angir, skal metoden returnere info om bilens nummer, hvilken plass den står på og når den ble parkert, under forutsetning av at den finnes i parkeringshuset. I motsatt fall skal metoden returnere null. > } public double avgift(String bilnr, Calendar d) { < Returverdien til metoden over skal fortelle hvor mye bilen med gitt registreringsnummer må betale i avgift fram til tidspunktet gitt ved parameteren d. Returverdi 0.0 skal indikere at bilen ikke finnes i parkeringshuset. > } public String hentBil(String bilnr, Calendar d ) { < Parameteren bilnr inneholder registreringsnummeret til en bil og parameteren d er tidspunktet for når denne blir hentet fra parkeringshuset. Metoden skal sørge for at plassen som bilen stod på nå blir ledig. Den skal også registrere at beløpet i parkeringsautomaten blir økt med den avgiften som blir betalt for denne parkeringen. Den returnerte teksten skal inneholde kvittering for parkeringen, dvs. type parkering, bilens nummer, plass, tidspunkter for inn- og utkjøring, samt parkeringsavgift. Dersom bilen ikke finnes i parkeringshuset, skal metoden isteden returnere melding om dette. > } public Parkering[] bortTauing( Calendar d ) { < Metoden skal returnere en array av Parkering-objekter tilsvarende de bilene som har overskredet maksimal parkeringstid på det tidspunkt parameteren d angir. NB! Denne metoden skal ikke slette objektene fra systemet. > } public void fjernBilene(Parkering[] fjernes) { < Metoden skal sørge for at bilene som rent fysisk er tauet bort også blir fjernet fra datasystemet. Arrayen som metoden mottar som parameter inneholder informasjon om disse og metoden skal frigjøre (stille ledig) de tilhørende parkeringsplassene. > } public double inntjeningsInfo() { < Metoden skal returnere inntjeningen, dvs. parkeringsinntektene. > } } // end of class ParkeringsHusa) Programmer metoden
public Parkering parker(String bilnr, int type) {...}
b) Programmere følgende tre metoder:
public int plassnr(String bilnr) {...}
public String bilInfo(String bilnr) {...}
public double avgift(String bilnr, Calendar d) {...}
public String hentBil(String bilnr, Calendar d) {...}
.
Biler som ikke hentes i tide vil med jevne mellomrom bli tauet bort.
Driftspersonalet trenger i denne forbindelse en oversikt over hvilke biler
dette gjelder:
d) Programmer metoden public Parkering[] bortTauing( Calendar d ) {...}
.public void fjernBilene(Parkering[] fjernes) {...}
public double inntjeningsInfo() {...}
ParkeringsAutomat
som
er skissert nedenfor og videre på neste side.
public class ParkeringsAutomat extends JFrame { private JTextField bil, betaling; private JButton lParkering,kParkering, utkjøring; private JTextArea display; private ParkeringsHus pHus; public ParkeringsAutomat(ParkeringsHus hus) { super("PARKERINGSAUTOMAT"); pHus = hus; < Oppretter lytteobjektet. > < Knytter knappene til lytteobjektet. > < Setter opp brukergrensesnittet. > } public void parkerBil(int type) { < Metoden skal lese inn den informasjon som er nødvendig for å registrere en parkering i parkeringshuset. Parameteren type angir hva slags parkering det dreier seg om (Hint! Se konstantene i klassen Parkering.) Dersom det er en ledig plass, skal det i displayet skrives ut opplysninger om hvilken plass det skal parkeres på (plassnummeret), hvor lenge bilen maksimalt kan stå der, samt pris pr. time eller døgn. I tilfelle parkeringshuset er fullt, skal det i displayet skrives ut melding om dette. > } public void hentBil() { < Metoden må registrere tidspunktet for når bilen blir hentet, samt lese inn annen nødvendig informasjon for å kunne registrere at bilen nå forlater parkeringshuset. I tekstfeltet for avgift skal det skrives ut hvor mye som skal betales i parkeringsavgift. I displayet skal det skrives ut en kvittering, dvs. opplysninger om type parkering, bilens nummer, plass, tidspunkter for inn- og utkjøring, samt parkeringsavgift. Dersom bilen mot formodning ikke finnes i parkeringshuset, skal det skrives en melding i displayet om dette. > } } // end of class ParkeringsAutomata) Programmer metoden
public void parkerBil(int type) {...}
.public void hentBil() {...}
Nedenfor ser du bilde av et vindu som er beregnet for parkeringshusets driftspersonale.
Vinduet er definert av klassen
ParkeringsDrift
.
NB! Legg merke til at konstruktøren mottar et objekt av typen
ParkeringsHus
.
Dette vil være det samme objektet som konstruktøren i klassen
ParkeringsAutomat
mottar i oppgave 5. Merk deg også arrayen
tilBortTauing
som skal holde rede på hvilke biler som skal taues bort.
public class ParkeringsDrift extends JFrame { private JTextField bil, saldo; private JButton inntjening, slett, finn, bort; private JTextArea display; private ParkeringsHus pHus; private Parkering[] tilBortTauing = null; //liste over biler som //skal taues bort pga. //overskredet parkeringstid. public ParkeringsDrift(ParkeringsHus hus) { super( "DRIFT AV P-HUS"); pHus = hus; < Oppretter lytteobjektet. > < Knytter knappene til lytteobjektet. > < Setter opp brukergrensesnittet. > } public void bortTauingsListe() { < Metoden skal skrive ut en liste i tekstområdet display over bilene som har stått for lenge på det tidspunktet denne metoden blir kalt. For hver bil skal det skrives ut bilnummer, plassen den står på og når den ble parkert der. Dersom ingen biler har stått for lenge, skrives melding om dette isteden. > } public void slettBiler() { < Metoden skal sørge for at parkeringsplassene for bilene i arrayen tilBortTauing nå blir ledige. Arrayen skal så settes til null. En passende melding skal skrives i displayet. > } < Metoder du IKKE skal programmere. > } // end of class ParkeringsDrifta) Programmer metoden
public void bortTauingsListe() { ... }.
public void slettBiler() {...}
.
***************************************************************************
Til orientering ser du klassen som inneholder main-metoden. (import-setningene er ikke tatt med.)
Du skal ikke svare på noen spørsmål i tilknytning til denne.
public class ParkeringsSystem { public static void main(String args[]) { ParkeringsHus hus = new ParkeringsHus(); ParkeringsAutomat pAutomat = new ParkeringsAutomat(hus); ParkeringsDrift pDrift = new ParkeringsDrift(hus); pDrift.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); pAutomat.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } }