Emne: PROGRAMMERING |
Emnekode: LO 127 A |
Faglig veileder: Eva H.Vihovde Kjetil Grønning | |
Grupper: 1AA, 1AB, 1AC, 1IA |
Dato: 14.12.2007 |
Eksamenstid: 09.00 - 14.00 | |
Eksamensoppgaven består av: | Antall sider (inkl. forsiden): 7 | Antall oppgaver: 6 | Antall vedlegg: 0 |
Tillatte hjelpemidler: | Alle trykte og håndskrevne | ||
Kandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger til grunn for løsningen. |
Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.
Utarbeidet av (faglærer): | Kontrollert av (en av disse): | Studieleders/ Fagkoordinators underskrift: | ||
Annen lærer | Sensor | Studieleder/ Fagkoordinator | ||
|
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
.merknad
null
.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 Persona) 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 PersonRegistera) 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 Sykkela) Programmer metoden
leiUt(Person s)
.
b)
Programmer metoden leverInn(Person s )
.
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 Utleiesteda) 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.