diff --git a/se3/G08_B09_Jim-2martens_Britta-2noack_Jan-Simon-0giesel.rkt b/se3/G08_B09_Jim-2martens_Britta-2noack_Jan-Simon-0giesel.rkt index cc605d4..b6532bf 100644 --- a/se3/G08_B09_Jim-2martens_Britta-2noack_Jan-Simon-0giesel.rkt +++ b/se3/G08_B09_Jim-2martens_Britta-2noack_Jan-Simon-0giesel.rkt @@ -1,4 +1,7 @@ -#lang racket +#lang swindle + +(require swindle/setf + swindle/misc) #| SE 3 Funktional Blatt 9 @@ -9,14 +12,259 @@ Abgebende: Jim 2martens, Britta 2noack, Jan-Simon 0giesel ; 1.1 +; allgemeine wissenschaftliche Publikation +(defclass* publikation () + (schlüssel + :reader publikation-schlüssel + :writer set-publikation-schlüssel! + :initvalue 0 + :initarg :pubSchlüssel + :documentation "Der Schlüssel der Publikation" + ) + (autoren + :reader publikation-autoren + :writer set-publikation-autoren! + :initvalue '() + :initarg :pubAutoren + :type + :documentation "Die Autoren der Publikation" + ) + (jahr + :reader publikation-jahr + :writer set-publikation-jahr! + :initvalue "0" + :initarg :pubJahr + :type + :documentation "Das Erscheinungsjahr" + ) + (titel + :reader publikation-titel + :writer set-publikation-titel! + :initvalue "" + :initarg :pubTitel + :type + :documentation "Der Titel" + ) + :autopred #t + :printer #t + :documentation "The top class of all publications" + ) + +; Buch erbt von Publikation +(defclass* buch (publikation) + (verlag + :reader buch-verlag + :writer set-buch-verlag! + :initvalue "" + :initarg :buchVerlag + :type + :documentation "Der Verlag des Buches" + ) + (verlagort + :reader buch-verlagort + :writer set-buch-verlagort! + :initvalue "" + :initarg :buchVerlagort + :type + :documentation "Der Ort des Verlages" + ) + (reihe + :reader buch-reihe + :writer set-buch-reihe! + :initvalue "" + :initarg :buchReihe + :type + :documentation "Die Reihe des Buches" + ) + (reihe-seriennummer + :reader buch-reihe-seriennummer + :writer set-buch-reihe-seriennummer! + :initvalue "0" + :initarg :buchSeriennummer + :type + :documentation "Die Seriennummer in der Reihe" + ) + (edition + :reader buch-edition + :writer set-buch-edition! + :initvalue "1" + :initarg :buchEdition + :type + :documentation "Die Edition des Buches" + ) + :autopred #t + :printer #t + :documentation "Ein Buch" + ) + +; Sammelbände erbt von Buch +(defclass* sammelband (buch) + (herausgeber + :reader sammelband-herausgeber + :writer set-sammelband-herausgeber! + :initvalue "" + :initarg :sammelbandHerausgeber + :type + :documentation "Herausgeber des Sammelbands" + ) + (seitenangabe + :reader sammelband-seitenangabe + :writer set-sammelband-seitenangabe! + :initvalue "" + :initarg :sammelbandSeitenangabe + :type + :documentation "Die Seiten des Artikels" + ) + (name + :reader sammelband-name + :writer set-sammelband-name! + :initvalue "" + :initarg :sammelbandName + :type + :documentation "Name des Sammelbandes" + ) + :autopred #t + :printer #t + :documentation "Ein Sammelband" + ) + +; Zeitschriftenartikel +(defclass* zeitschrift (publikation) + (name + :reader zeitschrift-name + :writer set-zeitschrift-name! + :initvalue "" + :initarg :zeitschriftName + :type + :documentation "Der Name der Zeitschrift" + ) + (band-nummer + :reader zeitschrift-band-nummer + :writer set-zeitschrift-band-nummer! + :initvalue "0" + :initarg :zeitschriftBandnummer + :type + :documentation "Die Bandnummer der Zeitschrift" + ) + (heft-nummer + :reader zeitschrift-heft-nummer + :writer set-zeitschrift-heft-nummer! + :initvalue "0" + :initarg :zeitschriftHeftnummer + :type + :documentation "Die Nummer des Heftes" + ) + (monat + :reader zeitschrift-monat + :writer set-zeitschrift-monat! + :initvalue 'Januar + :initarg :zeitschriftMonat + :type + :documentation "Der Erscheinungsmonat der Zeitschrift" + ) + :autopred #t + :printer #t + :documentation "Ein Zeitschriftenartikel" + ) + +; Nessie +(define nessie + (make buch :pubTitel "Mein Leben im Loch Ness: Verfolgt als Ungeheuer" + :pubJahr "1790" + :pubSchlüssel 'Nessie1790 + :pubAutoren '("Nessie") + :buchVerlag "Minority-Verlag" + :buchVerlagort "Inverness" + :buchReihe "Die besondere Biographie" + :buchSeriennummer "Band 1 der Reihe")) + +; Prefect, F. +(define prefect + (make sammelband + :pubTitel "Mostly harmless - some observations concerning the third planet of the solar system" + :pubJahr "1979" + :pubSchlüssel 'Prefect1979 + :pubAutoren '("Prefect, F.") + :buchVerlag "Galactic Press" + :buchVerlagort "Vega-System, 3rd planet" + :buchReihe "\"Travel in Style\"" + :buchSeriennummer "volume 5 of" + :buchEdition "1500 edition" + :sammelbandHerausgeber "Adams D., editor" + :sammelbandSeitenangabe "p. 500" + :sammelbandName "The Hitchhiker's Guide to the Galaxy" + )) + +; Wells +(define wells + (make zeitschrift + :pubSchlüssel 'Wells3200 + :pubTitel "Zeitmaschinen leicht gemacht" + :pubAutoren '("Wells, H. G.") + :pubJahr "3200" + :zeitschriftName "Heimwerkerpraxis für Anfänger" + :zeitschriftBandnummer "500" + :zeitschriftHeftnummer "3" + )) ; 1.2 +(defgeneric cite ((pub publikation))) +; cite Methode für Bücher +(defmethod cite ((pub buch)) + "Display the correct citation for given book" + (display (string-append + (car (publikation-autoren pub)) + " (" (publikation-jahr pub) "). " + (publikation-titel pub) ", " + (buch-reihe-seriennummer pub) ": " + (buch-reihe pub) ". " + (buch-verlag pub) ", " (buch-verlagort pub) + "."))) +; cite Methode für Sammelbände +(defmethod cite ((pub sammelband)) + "Display the correct citation for given collection" + (display (string-append + (car (publikation-autoren pub)) + " (" (publikation-jahr pub) "). " + (publikation-titel pub) ". In " + (sammelband-herausgeber pub) ", " + (sammelband-name pub) ", " + (buch-reihe-seriennummer pub)" " + (buch-reihe pub) ". " + (buch-verlag pub) ", " (buch-verlagort pub) + ", " (buch-edition pub) ", " + (sammelband-seitenangabe pub) "."))) + +; cite Methode für Zeitschriften +(defmethod cite ((pub zeitschrift)) + "Display the correct citation for given magazine article" + (display (string-append + (car (publikation-autoren pub)) + " (" (publikation-jahr pub) "). " + (publikation-titel pub) ". " + (zeitschrift-name pub) ", " + (zeitschrift-band-nummer pub) "(" + (zeitschrift-heft-nummer pub) ")."))) + ; 1.3 ; 2) ; 2.1 +(defclass fahrzeug ()) + +(defclass landfahrzeug (fahrzeug)) +(defclass schienenfahrzeug (landfahrzeug)) +(defclass straßenfahrzeug (landfahrzeug)) +(defclass wasserfahrzeug (fahrzeug)) +(defclass luftfahrzeug (fahrzeug)) + +(defclass amphibienfahrzeug (wasserfahrzeug landfahrzeug)) +(defclass amphibienflugzeug (wasserfahrzeug straßenfahrzeug luftfahrzeug)) +(defclass zweiwegefahrzeug (schienenfahrzeug straßenfahrzeug)) +(defclass zeitzug (schienenfahrzeug luftfahrzeug)) + ; 2.2 ; 2.3 \ No newline at end of file