PK1&PM1 HT-03: Laboration 6

Efter denna laboration ska du kunna...

  • Arbeta med konstruerade (taggade) datatyper

Före laborationen

  • Läs igenom hela uppgiften noga.
  • För programmeringsuppgifter, skriv funktionsspecifikationer enligt kodstandarden för alla funktioner du skriver. Gör detta innan du börjar skriva ML-koden!

Genomförande

  1. Se till att läsa igenom kodstandarden innan du börjar.
  2. Glöm inte att testa funktionerna. Exemplen i uppgifterna skall ingå bland dina testfall.
  3. Glöm inte att ange rekursionsvarianten i funktionsspecifikationen.
  4. Lämna in din lösning enligt anvisningarna senast den 18/11 klockan 08:00!

Se till att du gett ett svar på varje deluppgift!

Uppgiften

Problem 1

Du skall programmera ett katalogsystem för ett bibliotek. I bilioteket finns olika typer av litteratur: böcker, tidskrifter och artiklar. För var och en av dessa skall man lagra olika sorters information.

  • För böcker: Titel, författare, förlag, årtal och ISBN-nummer.
  • För tidskrifter: Titel, förlag, nummer, årgång och ISSN-nummer.
  • För artiklar: Titel, författare och årtal.

Dessutom skall man för bok, tidskrift eller artikel kunna hålla reda på dess status, alltså ifall den är:

  • Tillgänglig
  • Reserverad
  • Utlånad

Definiera en datatyp bibItem med tre varianter för var och en av de tre typerna litteratur. För de ingående komponenterna får du själv välja lämpliga datatyper, utom att du skall själv definiera en uppräkningsdatatyp för statusen.

(Tips: int är inte en lämplig typ för ISBN/ISSN-nummer. En anledning är att "numret" kan sluta med "X"! Det finns en anledning till. Vilken? Prova med att representera ett konkret ISBN-nummer - utan "X" - som int.)

Problem 2

a

Definiera en funktion bibSearch med två argument, dels en lista av kataloginformation (bibItem list), dels en titel. Funktionen skall söka efter en bok/tidskrift/artikel med denna titel i listan och returnera det bibItem som motsvarar denna titel, om sådan finns.

b

Definiera en egen exception som är lämplig att använda ifall sökningen i bibSearch misslyckas och skriv en variant av funktionen kallad {bibSearchB som använder denna exception.

Din exception skall utföras så att den har ett fält för dokumenttiteln så att ifall programkörningen avbryts kan man se vilket dokument som inte gick att finna.

c

Definiera en variant av bibSearch kallad bibSearchC som saknar precondition och istället returnerar värdet NONE ifall sökningen inte lyckas. Vilken måste värdetypen vara?

Problem 3

Skriv en funktion extractStatus med två argument, dels en lista av kataloginformation (bibItem list), dels en statuskod enligt uppgift 1. Funktionen skall returnera en lista med alla poster i listan som har den statuskod som anges av dess andra argument.