import java.util.HashMap; // Skrevet av Stein Gjessing, 19. februar 2023 class BrukBibliotek { public static void main(String[] args) { Bibliotek lilleBib = new Bibliotek(); lilleBib.leggTil(new Bok(123, "Ibsen"," Når vi døde vågner")); lilleBib.leggTil(new UtlånbarBok(234, "Nesbø", "Snømannen")); lilleBib.leggTil(new UtlånbartAlbum(345, "Neil Young", "Harvest")); // Legg inn flere dokumenter her om du vil System.out.println("Petter låner Snømannen"); TilUtlån låneDok = lilleBib.lån(234,"Petter"); if (låneDok != null) { System.out.println("Petter leser boken"); System.out.println("Ole prøver å låne samme bok"); TilUtlån låneDok2 = lilleBib.lån(234,"Ole"); lilleBib.lever(låneDok); System.out.println("Boken er lest og levert tilbake av Petter"); } System.out.println("Petter prøver å låne Ibsen"); låneDok = lilleBib.lån(123,"Petter"); System.out.println("Petter prøver å låne noe som ikke er i biblioteket"); låneDok = lilleBib.lån(456,"Petter"); System.out.println("Ole låner Harvest"); låneDok = lilleBib.lån(345,"Ole"); if (låneDok != null) { System.out.println("Ole spiller Harvest"); lilleBib.lever(låneDok); System.out.println("Albumet er spilt og levert tilbake av Ole"); } System.out.println(); System.out.println("Takk for at du brukte biblioteket"); } } class Bibliotek { private HashMap alleDok = new HashMap<>(); void leggTil(Dokument dok) { alleDok.put(String.valueOf(dok.dokNr), dok); } public TilUtlån lån(int nr, String navn) { Dokument dok = alleDok.get(String.valueOf(nr)); if (dok == null) System.out.println("Beklager, denne har vi ikke i biblioteket"); else if (! (dok instanceof TilUtlån)) System.out.println("Beklager, denne låner vi ikke ut"); else { TilUtlån lån = ((TilUtlån)dok).låne(navn); if (lån == null) System.out.println("Beklager, den er allerede utlånt"); else return lån; } return null; } public void lever(TilUtlån låneDok){ låneDok.leverTilbake(); } } class Dokument { public final int dokNr; Dokument(int dok) { dokNr = dok; } } class Bok extends Dokument { public final String forfatter; public final String tittel; Bok(int nr, String forfatter, String ttl){ super(nr); this.forfatter = forfatter; tittel = ttl; } } class Album extends Dokument { public final String artist; public final String tittel; Album(int nr, String artist, String ttl){ super(nr); this.artist = artist; tittel = ttl; } } interface TilUtlån { public TilUtlån låne(String låner); public void leverTilbake(); } class UtlånbartAlbum extends Album implements TilUtlån { private String låner = null; UtlånbartAlbum(int nr, String artist, String ttl){ super(nr,artist,ttl); } @Override public TilUtlån låne(String navn) { if(låner != null) return null; låner = navn; return this; } @Override public void leverTilbake() {låner = null;} } class UtlånbarBok extends Bok implements TilUtlån { private String låner = null; UtlånbarBok(int nr, String forfnavn, String tittel) { super(nr,forfnavn,tittel); } @Override public TilUtlån låne(String navn) { if(låner != null) return null; låner = navn; return this; } @Override public void leverTilbake() {låner = null;} }