Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
KodeGenerator
, Parkering
,
BeboerParkering
, KundeParkering
, ParkeringsHus
,
InnkjøringsVindu
, UtkjøringsVindu
og ParkeringsSystem
.
Ta en titt på vinduene for innkjøring og utkjøring i oppgave 4 og 5 før du går i gang.
De enkelte oppgavene inneholder nærmere informasjon.
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.
I oppgave 1 b) skal du generere tilfeldige tall. Der kan du bruke klassenRandom
som ligger i pakken java.util
.
Ved å skrive
Random generator = new Random(); int slumpverdi = 1 + generator.nextInt( 100);
vil slumpverdi
bli tilordnet en verdi fra intervallet fra og med 1 til og med 100, dvs. fra
1, 2, 3,...,99, 100. ( NB! I oppgaven skal du trekke tall fra et annet intervall! )
KodeGenerator
.
Gyldige koder, som beboerne kan bruke ved innkjøring i parkeringshuset,
vil ligge lagret i arrayen kodeArray
.
import java.util.Random; public class KodeGenerator { private int[] kodeArray; private Random r = new Random(); public KodeGenerator(int antall) { kodeArray = new int[antall]; genererKoder(); } // Klassen KodeGenerator fortsetter på neste side. private boolean finnes(int n, int antall) { < Hvis parameteren n finnes i arrayen kodeArray skal metoden returnere true. I motsatt fall skal den returnere false. Søkingen skal imidlertid begrenses av parameteren antall, dvs det er KUN elementene i arrayen fra om med indeks 0 opp til indeks antall som skal undersøkes. > } private void genererKoder() { < Metoden kan fylle arrayen med tilfeldige tall fra intervallet fra og med 1000 til og med 9999. Alle tallene skal være forskjellige. > } public boolean gyldig(int n) { < Hvis parameteren n finnes i arrayen kodeArray skal metoden returnere true. I motsatt fall skal den returnere false. > } < Andre metoder som du IKKE skal programmere. > } // end of class KodeGeneratora) Programmer metoden
private boolean finnes(int n, int antall)
.
b) Programmer metoden private void genererKoder()
.
c) Programmer metoden public boolean gyldig(int n)
.
*********************************************************************************************
Parkering
. Som du ser er den ferdig programmert.
Klassen vil fungere som en direkte superklasse til subklassene
BeboerParkering
og KundeParkering
.
Du bør merke deg hva den inneholder da du vil få bruk for den i de senere oppgavene.
import java.util.Date; import java.text.DateFormat; public abstract class Parkering { private Date startTid; public Parkering() { startTid = new Date(); } public Date getStartTid() { return startTid; } public String toString() { DateFormat df = DateFormat.getInstance(); return "Inn: " + df.format(startTid); } public abstract boolean kontroll(); public abstract String kvittering(Date d); } // end of class Parkering
Parkering
har to subklasser, BeboerParkering
og KundeParkering
.
I denne oppgaven skal du programmere klassen BeboerParkering
. Klassen skal
være en subklasse til Parkering
og skal ha to datafelt, i tillegg til
det som er arvet fra Parkering
.
kode
som skal lagre beboerens unike 4-sifrede kode.generator
av type KodeGenerator
. {
. String
-objekt, og et KodeGenerator
-objekt.
b)
Her skal du gjøre to ting:kode
. public boolean kontroll()
. Metoden skal returnere true, hvis datafeltet
kode
representerer en gyldig kode. I motsatt fall skal den returnere false.
c) Programmer metoden public String kvittering(Date sluttTid)
.sluttTid
) skal metoden skal returnere følgende tekst:
Beboerparkering: Inn: 27.11.09 20:02 Ut: 27.11.09 22:02 Avgift: 0,00
*********************************************************************************************Nedenfor ser du en skisse av klassen
KundeParkering
.
Du skal IKKE programmere denne klassen, men du trenger å kjenne til noen av dens
datafelt og metoder.
public class KundeParkering < arver Parkering >
{
public static final int TIMEPRIS = 15;
private long kontoNr;
< Konstruktør. >
< get-metode for kontoNr. >
public boolean kontroll()
{
< Metoden sjekker om kontoNr er et gyldig kontonummer, at kontoen er ikke er sperret,
og om det er god nok dekning på kontoen. NB! Metoden skal IKKE programmeres! >
}
public String kvittering(Date sluttTid)
{
< Metoden returnerer en kvittering i form av en tekst. Hvis kunden, med kontoNr
67401234567, kjørte inn 27.11.09 klokken 20:02 og ut 27.11.09 klokken 22:02
(dette tidspunket har vi fra parameteren sluttTid
) returnerer metoden
følgende tekst:
Kundeparkering:
Inn: 27.11.09 20:02 Ut: 27.11.09 22:02
kr. 15,00 belastes kontonr. 67401234567
NB! Metoden skal IKKE programmeres! >
}
< Andre metoder du ikke trenger å kjenne til. >
} // end of class Parkering
ParkeringsHus
. Denne klassen
representerer datastrukturen i programmet. Når en bil står parkert i parkeringshuset vil det være et
tilsvarende Parkerings
-objekt i arrayen plasser
(som er et datafelt i klassen ParkeringsHus
nedenfor).
import java.util.Date; public class ParkeringsHus { private Parkering[] plasser; < Konstruktør. Den skal motta arrayens lengde som parameter, og opprette arrayen. > public boolean innkjøring(Parkering p) { < Metoden skal sette Parkeringsobjektet p inn i arrayen, under forutsetning av at det er plass. Hvis så er tilfelle skal metoden returnere true. I mottsatt fall skal den returnere false. > } public int antallLedigePlasser() { < Metoden skal beregne og returnere hvor mange ledige plasser det er i parkeringshuset(arrayen). > } public boolean fullt() { < Hvis parkeringshuset er fullt, dvs. arrayen er full, skal metoden returnere true. I motsatt fall skal den returnere false. > } public int arrayIndeks(String nr) { < Metoden mottar som parameter et nr i form av et String-objekt. Den skal så returnere arrayindeksen til det Parkeringsobjektet som har en tilsvarende kode ELLER et tilsvarende kontoNr. Hvis det ikke finnes et slikt objekt i arrayen skal metoden returnere -1. > } public String utkjøring(String nr) { < Metoden skal registrere at en bil forlater parkeringshuset (og derved arrayen). Den skal returnere en tekst (kvittering) med informasjon om hva slags type parkering som har funnet sted, tidspunktene for inn- og utkjøring, samt avgifts- beløpet. > } } // end of class ParkeringsHusa) Programmer klassens konstruktør og metoden
public boolean innkjøring(Parkering p)
.
b) Programmer metodene public int antallLedigePlasser()
og public boolean fullt()
.
c) Programmer metoden public int arrayIndeks(String nr)
.
d) Programmer metoden public String utkjøring(String nr)
.
InnkjøringsVindu
:
< import-setninger > public class InnkjøringsVindu extends JFrame { private JTextField nrFelt, ledigePlasser, adgangsFelt; private JButton inn; private ParkeringsHus pHus; private KodeGenerator koder; public InnkjøringsVindu(ParkeringsHus hus, KodeGenerator kg ) { super( "HOLBERGS P-HUS INNKJØRING" ); pHus = hus; koder = kg; ledigePlasser = new JTextField(20); nrFelt = new JTextField(10); inn = new JButton("Innkjøring"); KnappeLytter knappelytter = new KnappeLytter(); inn.addActionListener(knappelytter); adgangsFelt = new JTextField(25); < Nødvendige instruksjoner for å sette opp brukergrensesnittet. > setSize(350, 190); setVisible(true); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } public void melding(JTextField tf, Color c, int str, String tekst) { tf.setFont(new Font("Times", Font.BOLD, str)); tf.setBackground( c ); tf.setHorizontalAlignment(SwingConstants.CENTER); tf.setText(tekst); } public void visAntallLedige() { < Metoden skal sørge for at antallet ledige plasser i parkeringshuset blir skrevet ut i tekstfeltet ledigePlasser. Hvis det ikke er noen ledige plasser skal det i tekstfeltet skrives FULLT. > } public void innkjøring() { < Metoden skal lese inn det nummeret bilisten har skrevet inn i tekstfeltet nrFelt. Lengden på teksten som er skrevet inn avgjør hva slags type parkering det dreier seg om. (En kode har 4 siffer, et kontonummer har 11 siffer.) Riktig type Parkeingsobjekt skal opprettes. Etter at koden eller kontonummeret er kontrollert og funnet gyldig, skal parkeringen registreres, under forutsetning av at det er plass i parkeringshuset. I tekstfeltet adgangsFelt skal det skrives en kort melding om utfallet: Hvis nummeret har feil antall siffer skal det skrives UGYLDIG NR, på rød bakgrunn. Hvis kontrollen ikke passeres skal det skrives INGEN ADGANG, på rød bakgrunn. Hvis parkeringshuset er fullt skal det skrives FULLT, på rød bakgrunn. Hvis imidlerid alt er i orden skal det skrives KJØR INN, på grønn bakgrunn. I tillegg skal tekstfeltet ledigePlasser oppdateres. > } < Andre metoder og lytteklasser som du IKKE skal programmere. > } // end of class InnkjøringsVindua) Programmer metoden
public void visAntallLedige()
.
b) Programmer metoden public void innkjøring()
.
UtkjøringsVindu
:
< import-setninger > public class UtkjøringsVindu extends JFrame { private JTextField nrFelt, utgangsFelt; private JTextArea display; private JButton ut; private ParkeringsHus pHus; private InnkjøringsVindu innkjøringsVindu; public UtkjøringsVindu(ParkeringsHus hus, InnkjøringsVindu v) { super( "HOLBERGS P-HUS UTKJØRING" ); pHus = hus; innkjøringsVindu = v; nrFelt = new JTextField(10); ut = new JButton("Utkjøring"); KnappeLytter knappelytter = new KnappeLytter(); ut.addActionListener(knappelytter); display = new JTextArea(3,30); utgangsFelt = new JTextField(25); < Nødvendige instruksjoner for å sette opp brukergrensesnittet. > setSize(350, 200); setVisible(true); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } public void melding(JTextField tf, Color c, int str, String tekst) { tf.setFont(new Font("Times", Font.BOLD, str)); tf.setBackground( c ); tf.setHorizontalAlignment(SwingConstants.CENTER); tf.setText(tekst); } // Klassen UtkjøringsVindu fortsetter på neste side. public void utkjøring() { < Metoden skal lese inn det nummeret bilisten har skrevet inn i tekstfeltet nrFelt. Under forutsetning av at dette er et gyldig nummer, skal det skrives ut en kvittering i tekstområdet display, samtidig som det i tekstfeltet utgangsFelt skal skrivet KJØR UT, på grønn bakgrunn. Det kan imidlertid hende at det ikke finnes noe parkeringsobjekt i systemet med det nummeret bilisten har skrevet inn, og i så fall skal det i tekstfeltet utgangsFelt skrives UGYLDIG NR, på rød bakgrunn. I tillegg skal metoden sørge for at antall ledige plasser i innkjøringsvinduet oppdateres.(Se oppgave 4) > } private class KnappeLytter < ... > { < Klassen må implementere riktig interface og sørge for at metoden utkjøring() blir kalt opp når bilisten trykker på knappen i vinduet. > } < Andre metoder og lytteklasser som du IKKE skal programmere. > } // end of class UtkjøringsVindua) Programmer metoden
public void utkjøring()
.
b) Programmer den private lytteklassen KnappeLytter
.
ParkeringsSystem
. Denne skal inneholde
main-metoden som skal starte applikasjonen på en slik måte at alle modulene i programmet
fungerer sammen. Antall parkeringsplasser skal være 100, og antall koder skal være 50.