Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Reparasjon, Bil og Bilregister
utgjør programmets datastruktur (programlogikken), mens vindusklassene
Kundemottak og Verksted utgjør brukergrensesnittene for
henholdsvis kundemottaket og verkstedet. Hovedprogrammet ligger i klassen Autoservice.
To av klassene, Kundemottak og Verksted, utgjør programmets hovedmoduler.
De kommuniserer begge med samme datastruktur, Bilregister. I
Kundemottak-vinduet skal oppdrag på reparasjoner registreres,
mens Verksted-vinduet er beregnet for verkstedpersonellet.
Se figurer på side 5 og 7 i oppgaven.
Av hensyn til oppgavens størrelse er programmet svært forenklet i forhold
til det som normalt ville kreves av et slikt program. Det er imidlertid bygget
opp slik at det er mulig å legge til ønsket funksjonalitet på et senere tidspunkt.
Det er et felles krav for alle klassene som inngår i oppgaven at alle
datafeltene skal ha privat aksess. Der det ikke er spesifikt angitt hva datatypen
skal være, må du selv velge en passende datatype.
NB! Noen av metodene som er beskrevet i oppgaveteksten er markert
med at du ikke skal programmere dem. Disse metodene kan du fritt gjøre
kall på der du måtte ha bruk for det. All kommunikasjon med brukeren av programmet skal
foregå via de vinduer som er nevnt ovenfor.
Reparasjon definerer reparasjonsoppdragene som verkstedet
kan utføre. Den skal ha datafelt for følgende:
Calender-objekt. Det kan opprettes og
skrives ut på følgende måte:
Calender oppdragsdato = Calendar.getInstance(); SimpleDateFormat df = new SimpleDateFormat( "dd.MM.yy"); String s = df.format(oppdragsdato.getTime());Klassen skal ha en konstruktør som utfører nødvendig initialisering. Konstruktøren skal ha to parametre, en som beskriver hva som skal repareres og en som indikerer om reperasjonen er et eu-krav eller ikke. Oppdragsnumre skal tildeles automatisk. Første oppdrag skal få nummer 1, deretter tildeles numre fortløpende i stigende rekkefølge. Datoen for oppdraget skal registreres automatisk. Klassen skal ha følgende metoder:
toString-metode. Teksten som den returnerer skal inneholde
all registrert informasjon om reparasjonen. Teksten skal være satt opp
på en lesbar og forståelig måte. Datoen for oppdraget kan skal formatteres
slik det er beskrevet ovenfor.get-metode for oppdragsnummer.set-metode som kan brukes til å registrere at reparasjonen
er ferdig utført.toString-metode.
c) Programmer resten av metodene i klassen
i samsvar med beskrivelsen ovenfor.
Bil. Den representerer
en enkelt bil som verkstedet har mottatt et oppdrag for. De to første
datafeltene skal initialiseres via konstruktørparametre.
public class Bil
{
private String kjennetegn;
private int registreringsår;
private Reparasjon[] reparasjoner;
private int antReparasjoner = 0; // antall registrerte reparasjoner
< Konstruktør med nødvendige parametre, se ovenfor. >
{
< Foretar nødvendig initialisering. Dersom registreringsåret er
tidligere enn 2000, skal det reserveres plass for 25 reparasjoner.
Er registreringsåret fra 2000 eller senere, men dog før 2010, skal
det reserveres plass for 15 reparasjoner. Er registreringsåret fra
2010 eller senere skal det reservertes plass til 10 reparasjoner.>
}
public ... getKjennetegn()
{
< get-metode for kjennetegn >
}
public boolean regReparasjon( Reparasjon rep )
{
< Registrerer et nytt oppdrag for reparasjon, forutsatt at det er
plass for dette. Returverdien indikerer utfallet. >
// Du kan anta at objektene ligger kontinuerlig etter hverandre og at
// ingen objekter blir slettet fra arrayen.
}
public Reparasjon finnReparasjon( int nummer )
{
< Leter etter og returnerer reparasjon som inneholder oppdragsnummer lik
parameterens verdi. Returnerer null i tilfelle denne ikke finnes. >
}
public boolean erEUgodkjent()
{
< Sjekker om bilen er EU-godkjent. Det er tilfelle dersom alle
registrerte reparasjoner som er EU-krav er ferdig utført. >
}
public String toString()
{
< Skal returnere informasjon om kjennetegn, registreringsår, all
registrert informasjon om eventuelle reparasjoner, samt informasjon om
bilen er EU-godkjent eller ikke. >
}
} // end of class Bil
a) Programmer klassens konstruktør, samt metodene
getKjennetegn og regReparasjon.
b) Programmer metodene finnReparasjon og
erEUgodkjent.
c) Programmer toString-metoden.
Bilregister.
public class Bilregister
{
private Bil[] bilregister; // NB! Arrayen kan inneholde null-pekere!
// Denne konstruktøren skal du ikke programmere.
public Bilregister( int kapasitet )
{
< Foretar nødvendig initialisering. Parameteren angir hvor mange
biler verkstedet skal ha kapasitet til å registrere for reparasjoner. >
}
private Bil finnBil( String kjennetegn )
{
< Returnerer bil med kjennetegn lik parameterens verdi dersom
denne finnes i registeret, returner null ellers. >
}
private Reparasjon finnReparasjon( int nummer )
{
< Finner og returnerer reparasjonen med det oppdragsnummer som
parameteren angir. Returnerer null i tilfelle den ikke finnes. >
}
public String registrerBil( Bil ny )
{
< Registrerer en ny bil i registeret, i tilfelle det er plass og
det ikke allerede er registrert en bil med samme kjennetegn.
Returverdien skal gi opplysninger om utfallet av registreringen. >
}
public String nyReparasjon( String kjennetegn, String beskrivelse, boolean erEUkrav )
{
< Finner bil med mottatt kjennetegn og registrerer oppdrag på en ny
reparasjon på denne. Returnerer passende tilbakemelding, også for det
tilfellet at bilen ikke finnes i registeret, eller det ikke er
kapasitet til å legge inn flere reparasjoner på den. >
}
public String sjekkEUgodkjenning( String kjennetegn )
{
< Sjekker om bilen med mottatt kjennetegn er EU-godkjent eller ikke
og returnerer opplysninger om dette. Hvis bilen ikke finnes
registrert i registeret skal det returneres opplysninger om det. >
}
public boolean settReparasjonUtført( int nummer )
{
< Registrerer at den reparasjon det mottas oppdragsnummer for er ferdig
utført. Returverdien indikerer om reparasjonen ble funnet i registeret. >
}
// Denne metoden skal du ikke programmere.
public String bilinfo( String kjennetegn )
{
< Returnerer informasjon om bil med kjennetegn lik parameterens verdi
dersom denne finnes i registeret, returnerer ellers informasjon
om at den ikke finnes. >
}
// Denne metoden skal du ikke programmere.
public String visReparasjon( int nummer )
{
< Returnerer alle registrerte opplysninger om reparasjonen med det
oppdragsnummer som parameteren angir. Returnerer null dersom den ikke
finnes. >
}
} // end of class Bilregister
a) Programmer metodene finnBil og finnReparasjon .
b) Programmer metoden registrerBil.
c) Programmer metoden nyReparasjon.
d) Programmer metodene sjekkEUgodkjenning
og settReparasjonUtført.
På neste side følger en skisse av klassen som definerer vinduet:
a) Programmer de to metodenepublic class Kundemottak extends JFrame implements ActionListener { private Bilregister registeret; private JTextField kjennetegnsfelt, årsfelt, datofelt, kravfelt; private JTextArea bilInfo, repInfo; private JButton registreringsknapp, infoknapp, reparasjonsknapp, kontrollknapp; public Kundemottak( Bilregister r ) { super( "Holbergs Auto Sevice - kundemottak" ); registeret = r; < Oppretter komponentene. > < Knytter knappene til lytteobjektet. > < Legger ut komponenter for å gi det vinduet som vises på bildet. > } // Kan brukes til å gi passende tilbakemeldinger til brukeren. private void visMelding( String melding ) { JOptionPane.showMessageDialog( this, melding ); } public void visBilinfo() { < Skriver ut i utskriftsområdet bilInfo all registrert informasjon for den bil det leses inn kjennetegn for. > } public void sjekkEUgodkjenning() { < Leser inn kjennetegn for en bil og skriver ut i utskriftsområdet informasjon om den er EU-godkjent eller ikke. > } public void registrerBil() { < Leser inn data for en ny bil og foretar registrering av den. Brukeren skal få passende tilbakemelding. > } public void bestillReparasjon() { < Leser inn data for registrering av et nytt oppdrag på en reparasjon av en bil og foretar registreringen. > } public void actionPerformed( ActionEvent e ) { < Foretar kall på riktig metode, avhengig av hvilken knapp det er klikket på. > } } // end of class Kundemottak
visBilinfo og
sjekkEUgodkjenning.
b) Programmer metoden registrerBil. Metoden skal gi
passende tilbakemelding til brukeren.
c) Programmer metoden bestillReparasjon. Metoden skal gi
passende tilbakemelding til brukeren.
d) Programmer metoden actionPerformed.
Nedenfor følger en skisse av klassen som definerer vinduet:
< import-setninger >
public class Verksted extends JFrame implements ActionListener
{
private Bilregister registeret;
private JTextField oppdragsfelt;
private JTextArea tekstområde;
private JButton infoknapp, ferdigknapp;
public Verksted( Bilregister v )
{
super( "Holbergs Auto Sevice - verksted" );
registeret = v;
< Oppretter komponentene. >
< Knytter knappene til lytteobjektet. >
< Legger ut komponenter for å gi det vinduet som vises på bildet. >
}
private void visMelding( String melding )
{
JOptionPane.showMessageDialog( this, melding );
}
public void ferdigstill()
{
< Leser inn oppdragsnummer for en reparasjon og registrerer at den
nå er utført. Skriver ut de opplysninger som er registrert på den
etter at dette er registrert. >
}
// Denne metoden skal du ikke programmere.
public void visReparasjon()
{
< Leser inn oppdragsnummer for en reparasjon og skriver ut alle
opplysninger som er registrert for den, i tilfelle den finnes. >
}
// Denne metoden skal du ikke programmere.
public void actionPerformed( ActionEvent e )
{
< Foretar kall på riktig metode, avhengig av hvilken knapp det
er klikket på. >
}
} // end of class Verksted
a) Programmer metoden ferdigstill.
Autoservice
som inneholder det som er nødvendig for at programmet
skal kunne kjøre.