Programmering H2014 — uke 42:

Oppgave 1

Denne oppgaven baserer seg på stoff fra kapittel 8, som vi skal gjennomgå denne uken. Du kan imidlertid starte med å programmere brukergrensesnittet allerede på mandag, da dette baserer seg på kapittelet om vindusbaserte programmer som vi gjennomgikk i uke 41.

a) Definer en klasse Bok som skal representere en bok. Klassen skal ha datafelt for forfatter, tittel og ISBN-nr, alle av type String. Klassen skal ha en konstruktør som initialiserer datafeltene via parametre. Klassen skal dessuten ha get-metoder for å hente ut datafeltenes verdier og en toString-metode som returnerer datafeltenes verdier i ett String-objekt.

b) Definer en klasse Bokregister. Klassen skal inneholde en array med plass til kapasitet Bok-objekter, der kapasitet er et int-datafelt som får verdi via en konstruktørparameter. Klassen skal ha følgende metoder:

public boolean settInn( Bok b ) { ... }
Metoden skal sette inn b i klassens Bok-array i tilfelle det er ledig plass og returnere true. Den skal returnere false dersom arrayen allerede var full.

public String toString() { ... }
Metoden skal returnere alle registrerte opplysninger om alle bøker i klassens Bok-array. Bokopplysningene skal skilles med to linjeskift mellom hver bok.

private int indeks( String isbn ) { ... }
Hjelpemetode som skal returnere array-indeks for bok identifisert av parameteren isbn. Dersom denne ikke finnes, skal metoden returnere -1. I denne metoden får du bruk for å sammenlikne String-objekter for å sjekke om de har samme innhold. Til dette formål kan du (vanligvis) ikke bruke ==, men må isteden skrive slik, i tilfelle de to String-objektene heter streng1 og streng2:

  if ( streng1.equals( streng2 ) )
    ...    // strengene har samme innhold
***

public String bokdata( String isbn ) { ... }
Metoden skal returnere de opplysninger som er registrert for bok med ISBN-nr lik parameteren isbn i tilfelle denne finnes i klassens Bok-array. Dersom den ikke finnes, skal verdien null returneres.

public boolean slett( String isbn ) { ... }
Metoden skal fjerne fra Bok-arrayen den boka som har ISBN-nr lik parameteren isbn i tilfelle denne finnes, og returnere true. Finnes ikke boka, skal metoden returnere false.

c) Lag et hendelsesbasert program som tester ut klassene Bok og Bokregister . Programvinduet kan se ut omtrent som vist over. Programmet skal starte med å lese inn hvor mange bøker det skal være plass til i bokregisteret og opprette et Bokregister-objekt med den innleste kapasiteten. Denne innlesingen kan skje via et dialogvindu. Sett kapasiteten til 1 dersom det leses inn en negativ verdi. Programmet skal ved hjelp av knapper kunne ta imot kommandoer for å

Innlesing av bokdata skal skje fra tekstfelter i programvinduet. Utskrift av data om registrerte bøker skal gjøres i et skrollbart tekstområde i vinduet. Dersom en kommando ikke lar seg utføre pga. fullt register eller at bok ikke finnes i registeret, skal det skrives ut feilmeldinger. Dette kan gjøres via dialogvinduer.

Skriv i vindusklassen en metode for hver av de fire kommandoene som programmet skal kunne utføre. Disse må det gjøres kall på i vinduets actionPerformed-metode, bestemt av hvilken knapp det er klikket på. For å finne ut hvilken knapp det er klikket på, kan du gjøre tilsvarende som i programeksemplet for persondata i Introduksjon til programmering. Dette eksemplet finner du på adressen http://www.iu.hio.no/~evav/uvstoff/intro/kap8.html#Personeksempel. Hele det nevnte programeksemplet har for øvrig en struktur som er svært lik det programmet som du nå får i oppgave å lage. Hovedforskjellen er at det her skal lagres og administreres bokobjekter istedenfor personobjekter.

Løsningsforslag

Oppgave 1
Bok.java
Bokregister.java
Bokregister2.java
Bokvindu.java
Bibliotek.java