Skip to main content
Dat 1. Sem Efterår 2025
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

SP2 - Bibliotekspenge

En forfatter modtager en gang om året bibliotekspenge for at have sine bøger (titler) stående på de danske biblioteker. Byg et system der kan håndtere udregning af bibliotekspenge.

Opgaven

Byg et system der kan håndtere udregning af bibliotekspenge ved at:

  1. Implementere klasserne fra klassediagrammet (se Design)
  2. Følge beregningsreglerne beskrevet herunder (se Beregning)
  3. Teste systemet med en test-klasse (se Test af Systemet)

Design

Systemet består af en Author klasse der kan have flere titler (Title). En titel kan enten være en printet bog (PrintedBook) eller en lydbog (AudioBook). Hver titel-type beregner sine point forskelligt baseret på sider eller varighed.

I klassediagrammet herunder ses at metoden til at beregne bibliotekspenge calculateRoyalties() og convertLiteratureType(String literatureType), ligger i superklassen (Title), mens metoden calculatePoints() er en abstract metode og derfor skal implementeres forskelligt i de to subklasser.

Klassediagram

Beregning

Først skal der udregnes nogle point, og fra dem kan beregnes bibliotekspenge.

Beregning af Point

Hvad forfatteren tjener på en titel, afhænger af titlens “point”. Point beregnes ud fra antallet af sider/varighed, titlens litteraturtype og antal eksemplarer.

Variabelnavne oversættelse

Når du implementerer klasserne, skal du bruge følgende engelske navne:

  • sider: pages
  • minutter: durationInMinutes
  • litteraturtype: literatureType
  • eksemplarer: copies

Litteraturtyper

Litteraturtypen kan være en af følgende: “BI”, “TE”, “LYRIK”, “SKØN”, “FAG” og konverteres af metoden convertLiteratureType(String literatureType) til en talværdi efter følgende skema:

LitteraturtypeVærdi
Billedbøger (for børn) (BI)3.0
Tegneserier (TE)3.0
Lyriksamlinger (LYRIK)6.0
Skønlitterære bøger (SKØN)1.7
Fagbøger (FAG)1.0

Eksempel: Olga Ravn

Forfatteren Olga Ravn har bogen “Celestine” både som print og som lydbog.

  • Den printede bog findes i 140 eksemplarer og er på 166 sider
  • Lydbogen findes i 140 eksemplarer med en varighed på 3 timer og 12 minutter
Printet bog

Ved den printede bog ser beregningen således ud:

Sider × litteraturtype × eksemplarer
166 × 1.7 × 140 = 39508 point

Lydbog (AudioBook)

Er der tale om en lydbog ser beregningen lidt anderledes ud:

(varighed i minutter × 0.5) × litteraturtype × eksemplarer
(192 × 0.5) × 1.7 × 140 = 22848 point

Beregning af bibliotekspenge

Det tal man får når man udregner titlens point, skal ganges med den aktuelle rate for biblioteksbøger.

Formel: point × rate

Raten for en titel ligger i 2025 på 0.067574 kr.

Resultatet af det bliver forfatterens udbetaling. For Olga Ravns to titler:

39508 × 0.067574 + 22848 × 0.067574 = 4213.64 kr (afrundet med 2 decimaler)

Test af systemet

For at teste at dit system virker, skal du lave en klasse kaldet LibraryRoyaltyCalculator som ikke er med i klassediagrammet. Den har en main metode, hvori I:

  1. Opretter mindst 1 forfatter
  2. Tilføjer mindst 3 bøger af forskellig slags til forfatteren (herunder mindst 1 lydbog) ved hjælp af Author klassens addTitle metode
  3. Kalder forfatterens calculateRoyalties() der beregner bibliotekspenge på hver af forfatterens titler, lægger det sammen og returnerer beløbet med 2 decimaler
  4. Skriver resultatet pænt ud med forfatterens navn og det beløb der skal udbetales

Eksempel på output

Olga Ravn: 4213.64kr

Frivillig fortsættelse: Udvid med netbaserede bøger

I biblioteksverdenen findes to yderligere kategorier af titler: fysiske titler (printede bøger og lydbøger) og netbaserede titler (e-bøger og e-lydbøger).

Forskellen på fysiske og netbaserede titler

Netbaserede titler har ikke eksemplarer men opererer i stedet med:

  • Udbredelse (reach): antal kommuner, der har udlånt bogen
  • Tilgængelighed (availability): antal kommuner, der har bogen til udlån
  • Anvendelsesfaktor (use): antal udlån

Beregning af point for netbaserede bøger

Eksempel: E-bog (EBook)

En forfatter til en ikke-illustreret fagbog med 360.000 karakterer stiller bogen til rådighed på eReolen (EBook). Den kan lånes i alle 97 kommuner (tilgængelighed), men er kun blevet udlånt i 50 af kommunerne (udbredelse), og har en anvendelsesfaktor på 205.

Forfatteren vil få følgende antal point for værket:

Beregnede sider × litteraturtype × ((udbredelse × 5) + (tilgængelighed × 0,5) + anvendelsesfaktor)
220 sider × 1 × ((50 × 5) + (97 × 0.5) + 205) = 110770 point

Beregning af sider: Karakterer / 1800 + 20

Hvis bogen er illustreret lægges der 10% til dette tal.

E-lydbog (EAudioBook)

Ved netbaserede lydbøger bruges samme formel, bortset fra at ‘beregnede sider’ erstattes med varighed / 2 (varighed i minutter).

Udvidet klassediagram


Tip: Husk at teste din implementation grundigt med forskellige typer af bøger og kontroller at beregningerne stemmer overens med eksemplerne i opgaven.