Sykkel,
Stativ, Utleiested, Person, PersonRegister,
SykkelByen, og BySykkelSystem.
Det er et felles krav for alle klassene som inngår i oppgaven at alle
datafelter skal ha privat 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 DateFormat, som ligger i pakken
java.text, kan brukes til
å formatere Date-objekter for utskrift.
Dersom for eksempel Date-objektet
tidspunkt ble opprettet den 14. desember 2007
klokka 09.18, vil instruksjonene
DateFormat df = DateFormat.getInstance();
String utskrift = df.format( tidspunkt );
gi tekststrengen "14.12.07 09:18".Sykkel skal representere en sykkel i programmet.
Klassen skal ha en konstant MAXTID som representerer maksimalt antall
timer sykkelen kan leies og som skal settes til 3 timer.
Hver sykkel skal ha et unikt heltallig id-nummer. Dette skal genereres automatisk
hver gang et sykkel-objekt opprettes.
Foruten nødvendige datafelt skal klassen ha en konstruktør og en get-metode for id-nummeret.
a) Programmer klassen Sykkel.
Person skal representere syklistene i programmet.
Klassen Person skal ha følgende datafelt:
navn idNr sykkel null.merknadnull.startTid null.nesteNr
import java.util.Date;
import java.text.DateFormat;
public class Person
{
< datafelt >
< konstruktør >
< get-metoder for sykkel og idNr >
public boolean godkjent()
{
< Metoden skal returnere true hvis personen ikke allerede leier
en sykkel og ikke har noen merknader. Ellers false. >
}
public void setMerknad(Date t, String m)
{
< Metoden skal ut fra parametrene t og m lagre en tekst i datafeltet for
merknader. I teksten skal tidspunktet formateres slik det er beskrevet
i oppgavens innledning. >
}
public boolean leiSykkel(Sykkel s)
{
< Hvis personen er godkjent, jfr. metoden godkjent(), skal metoden
registrere at personen leier sykkelen s. Starttidspunktet for leietiden
skal også registreres og skal være det samme som tidspunktet for når
denne metoden blir kalt. Metoden skal så returnere true.
Hvis personen ikke er godkjent, får vedkommende ikke leie sykkelen s
og metoden skal returnere false. >
}
public int leietid(Date sluttTid)
{
< Metoden skal returnere antall påbegynte timer fra starttidspunktet for
leien til sluttidspunktet angitt av parameteren sluttTid. >
}
public void leverInn()
{
< Metoden skal registrere innleveringstidpunktet (som vil være det samme
som tidspunktet for når denne metoden blir kalt). Videre skal leietiden
beregnes. Hvis den lovlige leietiden er overskredet, skal det settes en
merknad på personen. Denne skal inneholde innleveringstidspunktet og det
antall timer leietiden er overskredet med. Uansett skal det registreres
at personen ikke lenger leier sykkelen. >
}
public String toString()
{
< Metoden skal returnere en tekst som inneholder personens navn og idNr.
Hvis personen leier en sykkel, skal sykkelens idNr tas med i teksten.
Hvis personen har en merknad, skal denne også tas med i teksten. >
}
} // end of class Person
a)
Bestem riktig aksessform og datatype for klassens datafelt.sykkel og idNr. godkjent() og set-metoden for merknad.
c) Programmer metodene leiSykkel(Sykkel s) og leietid(Date sluttTid).
d) Programmer metoden leverInn().
e) Programmer metoden toString().
public class PersonRegister
{
private Person[] personer;
public PersonRegister(int antall)
{
personer = new Person[antall];
opprettPersonregister();
}
public void opprettPersonregister()
{
< Legger inn person-objekter i arrayen personer. >
}
public Person finnPerson(int personId)
{
< Metoden skal lete etter en person (et person-objekt) med idNr lik
parameteren personId. Hvis personen finnes i registeret, skal person-
objektet returneres fra metoden. I motsatt fall skal metoden returnere
null. NB! Vi kjenner ikke til antall person-objekter i arrayen og vet
heller ikke om disse ligger etter hverandre. >
}
public Person finnSykkelBruker(int sykkelId)
{
< Metoden skal lete etter en person (et person-objekt) som leier en sykkel
med idNr lik parameteren sykkelId. Hvis en slik person finnes i registeret,
skal person-objektet returneres fra metoden. I motsatt fall skal metoden
returnere null. NB! Vi kjenner ikke til antall person-objekter i arrayen
og heller ikke om disse ligger etter hverandre. >
}
} // end of class PersonRegister
a) Programmer metoden finnPerson(int personId).
b) Programmer metoden finnSykkelBruker(int sykkelId).
Stativ som du ser en
skisse av under:
public class Stativ
{
private Sykkel[] stativ;
public Stativ(int antallSykler)
{
stativ = new Sykkel[antallSykler];
fyllStativet();
}
public void fyllStativet()
{
< Fyller stativet med et passende antall sykler. >
}
public String leiUt(Person s)
{
< Metoden skal registrere at personen representert ved parameteren s
leier en sykkel under følgende tre forutsetninger:
- Personen har ingen merknader.
- Personen leier ingen sykkel fra før.
- Det er en ledig sykkel i stativet.
Hvis alle betingelsene er oppfylt, skal sykkelen fjernes fra stativet og
leie av sykkelen skal registreres på personen. Metoden skal så returnere
en tekst med informasjon om hvilken sykkel som skal brukes, for eksempel:
"Ta sykkel på plass 1". Husk at plassene går fra 1 og oppover. Hvis leie
av sykkel ikke lar seg gjøre skal metoden returnere en tekst med
informasjon om hva det skyldes. >
}
public String leverInn(Person s )
{
< Metoden skal sørge for at sykkelen som personen, representert ved
parameteren s,leier blir "satt tilbake i stativet", under forutsetning
av at det er plass i stativet. Videre må det registreres at personen nå
ikke lenger leier sykkelen. Hvis det er plass skal metoden returnere en
tekst som angir hvor sykkelen skal plasseres, for eksempel:
"Sett sykkelen på plass 12".I motsatt fall skal det returneres en tekst
som ber syklisten levere sykkelen et annet sted. >
}
}// end of class Sykkel
a)
Programmer metoden leiUt(Person s).
b)
Programmer metoden leverInn(Person s ).
Over ser du eksempler på displayer som finnes på sykkelstativene på de forskjellige
utleiestedene i byen. Hvert diplay er av et objekt av klassen Utleiested
som du ser en skisse av under:
< import-setninger >
public class Utleiested extends JFrame
{
private Stativ stativet;
private JTextField personIdFelt, sykkelIdFelt;
private JTextArea display;
private JButton ut, inn ;
private PersonRegister personer;
public Utleiested(String navn, int antall, PersonRegister p)
{
super("BYSYKKEL " + navn);
personer = p;
stativet = new Stativ(antall);
Lytter lytter = new Lytter();
< Oppretter skjermkomponentene >
< Knytter skjermkomponentene til lytteobjektet >
Container c = getContentPane();
setLayout(new FlowLayout());
< Legger skjermkomponentene ut på vinduet >
setSize(200, 200);
setVisible(true);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
public void leiUt()
{
< Metoden skal leie ut en sykkel til personen med det id-nummer som er
skrevet inn i tekstfeltet for dette. Hvis personen er registrert og er
godkjent for utleie, skal det skrives ut i tekstområdet hvilken sykkel
vedkommende skal ta. I motsatt fall skal det skrives ut en passende
feilmelding. Denne skal inneholde årsaken til at peronen ikke fikk leie
sykkelen. >
}
public void leverInn()
{
< Metoden skal registrere at en sykkel leveres inn. Hvis sykkelen er
registrert utleid skal innleveringen registreres på personen som har
leid sykkelen og det må registreres at sykkelen settes tilbake i stativet.
I tekstområdet skal det skrives hvor sykkelen skal plasseres. Hvis
sykkelens id-nummer er ukjent, skal det gis beskjed om det. >
}
private class Lytter ...
{
< klassens innhold >
}
}// end of class Utleiested
a) Programmer metoden leiUt().
b) Programmer metoden leverInn().
c) Programmer Lytteklassen Lytter.
SykkelByen som har som datafelt
utleiesteder som kan referere til objekter av typen Utleiested
register av typen PersonRegister
Klassen skal ha en konstruktør som har et objekt av typen PersonRegister og
en heltallsvariabel som bestemmer lengden på arrayen utleiesteder som parametre.BySykkelSystem som innholder main-metoden som initialiserer hele systemet.