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.
- Video introduktion til opgaven (15:35)
- Et lille funfact: her kan I se Top-10 over forfattere, som har fået mest udbetalt de seneste 10 år
Byg et system der kan håndtere udregning af bibliotekspenge ved at:
- Implementere klasserne fra klassediagrammet (se Design)
- Følge beregningsreglerne beskrevet herunder (se Beregning)
- Teste systemet med en test-klasse (se Test af Systemet)
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.
Først skal der udregnes nogle point, og fra dem kan beregnes bibliotekspenge.
Hvad forfatteren tjener på en titel, afhænger af titlens “point”. Point beregnes ud fra antallet af sider/varighed, titlens litteraturtype og antal eksemplarer.
Når du implementerer klasserne, skal du bruge følgende engelske navne:
- sider:
pages - minutter:
durationInMinutes - litteraturtype:
literatureType - eksemplarer:
copies
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:
| Litteraturtype | Væ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 |
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
Ved den printede bog ser beregningen således ud:
Sider × litteraturtype × eksemplarer
166 × 1.7 × 140 = 39508 point
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
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)
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:
- Opretter mindst 1 forfatter
- Tilføjer mindst 3 bøger af forskellig slags til forfatteren (herunder mindst 1 lydbog) ved hjælp af
AuthorklassensaddTitlemetode - Kalder forfatterens
calculateRoyalties()der beregner bibliotekspenge på hver af forfatterens titler, lægger det sammen og returnerer beløbet med 2 decimaler - Skriver resultatet pænt ud med forfatterens navn og det beløb der skal udbetales
Olga Ravn: 4213.64kr
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).
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
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.
Ved netbaserede lydbøger bruges samme formel, bortset fra at ‘beregnede sider’ erstattes med varighed / 2 (varighed i minutter).
Tip: Husk at teste din implementation grundigt med forskellige typer af bøger og kontroller at beregningerne stemmer overens med eksemplerne i opgaven.