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 KodeGenerator
a) 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 ParkeringsHus
a) 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øringsVindu
a) Programmer metoden public void visAntallLedige().
b) Programmer metoden public void innkjøring().
Her ser du en skisse av klassen 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øringsVindu
a) 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.