Programutvikling V2015 Obligatorisk innleveringsoppgave

Innleveringsfrist: mandag 9. mars kl. 15:00 .

NB! Uke 8 er studieuke uten forelesninger, men datalaben går som normalt.

Oppgaven kan løses i grupper på 2 eller 3 studenter.

Innlevering av oppgaven:
Oppgaven sendes til programmeringhioa@gmail.com
Mailen skal inneholde følgende:
Emne på e-posten: Innlevering obligatorisk oppgave
Innhold i e-posten: Gruppemedlemmene med fullt navn, studentnummer og studieretning.
Vedlegg: Alle java-filene, samt en kjørbar jar-fil for hver oppgave/program.
Hvordan dette kan gjøres, er forklart i notatet Distribuering av javaprogrammer.

For å få godkjent innleveringen, må alle programmene fungere i henhold oppgavebeskrivelsene under.

Oppgaven må bestås (godkjennes) for at man skal få anledning til å delta på prosjektarbeidet som starter i uke 13.

Dersom det oppdages at en gruppe har kopiert løsningen til en annen gruppe, vil ingen av de to gruppene få godkjent innleveringen. (Dessverre oppdages dette hvert år, med lite hyggelige konsekvenser for de berørte studentene.)

Oppgavene baserer seg på alt vi har gjennomgått til og med uke 7. Det er viktig å kunne dette godt før dere går i gang. Dere må selv bestemme hvilke metoder og klasser programmene skal inneholde. Det er imidlertid store likheter mellom oppgavene her og de eksempler og ukeoppgaver vi har gjennomgått på forelesningene. Se forøvrig: Kompendium for kurset Programutvikling

Oppgavetekstene vil bli oppdatert med flere opplysninger hvis det viser seg å være behov for det.

Oppgave 1

Ukeoppgavene for uke 6 gikk ut på å lage et bokregister der man kunne lagre forskjellige bøker i en liste.
Denne oppgaven går ut på å utvide dette programmet slik at alle data leses inn i datastrukturen fra fil (ved hjelp av DataInputStream) ved oppstart av programmet, og innholdet i datastrukturen skrives til fil (ved hjelp av DataOutputStream) når programmet avsluttes. Du kan ta utgangspunkt i løsningsforslaget som du finner linker til nederst på ukeoppgavesiden.

Hint: Utvid den abstrakte superklassen Bok med metodene:

public boolean lesObjektFraFil( DataInputStream input )
{
  < Leser verdier fra fil og lagrer dem i de tilhørende datafeltene. >
}

public void skrivObjektTilFil( DataOutputStream output )
{
  < Skriver datafeltenes verdier til fil. >
}

Redefiner deretter disse metodene i alle subklassene i klassehierarkiet. ( NB! I de konkrete klassene må metodene redefineres slik at det første som skrives til fil er noe som kan identifisere hva slags type objekt det er , f.eks. teksten "SkoleBok". Denne informasjonen skal brukes til å opprette riktig type objekt ved lesing fra fil. )

De øvrige klassene i programmet må tilpasses, ved at du legger til nødvendige instruksjonen og metoder, samt gjør enkelte nødvendige forandringer. Blant annet trenger klassene som inngår i klassehierarkiet parameterløse konstruktører for å få lest inn fra fil. Det kan være lærerikt å se på ukeoppgave 2 uke 7, der det gjøres noe tilsvarende.

NB! Programmet skal ha tilstrekkelig data lagret på fil som blir lest inn i datastrukturen ved oppstart av programmet, slik at den som skal rette oppgaven slipper å skrive dem inn på nytt.

NB! I denne oppgaven SKAL du bruke DataInputStream og DataOutputStream!

Oppgave 2

Småbåtregisteret er et båtregister der norske fritids- og småbåter er registrert. Redningsselskapet (Norsk Selskab til Skibbrudnes Redning) drifter Småbåtregisteret, og de har gitt deg i oppgave å programmere en nytt småbåtregister i java.

a)

Det skal lages et hendelsesbasert program for registrering av båter og båteiere. For enkelhets skyld er det i denne minimumsversjonen av programmet bare mulig å registrere én båt for hver båteier.

Programmet skal kunne registrere båteiere med følgende data

For hver båt skal følgende data registreres:

Operasjoner som skal kunne utføres av programmet:

For hver av registreringsoperasjonene må relevante data leses inn fra bruker. Medlemsnummeret skal identifisere båteiere. Ved registrering av en ny båteier skal derfor programmet hindre at den nye eieren får samme medlemsnummer som en båteier som allerede er registrert av programmet. På tilsvarende måte skal registreringsnummeret for båter identifisere båter, slik at programmet må hindre dobbeltregistrering.

I tilfelle eierskifte, må det leses inn registreringsnummer for båten som skal skifte eier, samt medlemsnummer for ny eier. Dersom ny eier ikke er registrert tidligere, må denne registreres før eierskifte kan gjennomføres. All innlesing av data skal foretas på "sikker" måte, dvs. ved bruk av try-catch og/eller test på at tekstfelt for nødvendige data er fylt ut.

Hver gang programmet blir avsluttet, skal alle data som er lagret i programmets datastruktur skrives ut til en fil for lagring. Ved oppstart skal eventuell fil med lagrede data leses inn og plasseres i programmets datastruktur. (Bruk objektserialisering, samt henholdsvis ObjectOutputStream og ObjectInputStream ved utskrift til fil og innlesing fra fil.)

Det er et krav i denne oppgaven at det skal det lages en egen listeklasse som inneholder listen av båteiere og metoder som gjør de nødvendige operasjoner på denne listen.

b)

Dere skal nå lage en utvidet versjonen av programmet under punkt a). (NB! Behold en kjørbar kopi av programmet fra oppgave a!) I denne versjonen skal det være mulig for hver båteier å eie flere båter, uten begrensning på hvor mange dette er. For øvrig er det de samme data som skal registreres. Ved utskrift av båtregisteret skal det for hver båteier skrives ut data om alle båter som denne eier.

Løsningen er å lage en ny klasse Båtliste der nodene i lista er Båt-objekter. Hvis dere i Båteier-klassen har et datafelt typen Båt skal dette nå erstattes av et datafelt av typen Båtliste. Hvert Båteier-objekt skal altså ha sin egen båliste, dvs. sitt eget Båtliste-objekt. Dette inneholder båtene som eies av vedkommende båteier. (Listen vil være tom dersom vedkommende ikke eier noen båt for øyeblikket.)

Både Båteierliste- og Båtliste-klassene må etter behov suppleres med nye metoder. For de som trenger ytterligere utfordringer kan man lage et klassehierarki av båter, der man lar klassen Båt, være en abstrakt superklasse, og lager subklasser som Seilbåt, Motorbåt, osv, til denne. Objekter av de konkrete klassene i dette hierarkiet settes så inn i båtlistene til båteierene. For flere ideer, se Småbåtregisteret

NB! Programmet skal ha tilstrekkelig data lagret på fil som blir lest inn i datastrukturen ved oppstart av programmet, slik at den som skal rette oppgaven slipper å skrive dem inn på nytt.

Til slutt

Mange vil nok finne oppgaventeksten både mangelfull og mindre konkret enn dere er vant til. Det er imidlertid noe av utfordringen! Dere skal derfor gjøre deres egne forutsetninger der dere mener oppgaven ikke gir konkrete føringer på hvordan oppgaven skal løses.

Lykke til!