From dfd064ba39a1e71d339506ffe46382647638c5f1 Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Sun, 7 Nov 2021 16:41:41 +0100 Subject: [PATCH] Add UE4 --- code/Angabe4.lhs | 112 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 code/Angabe4.lhs diff --git a/code/Angabe4.lhs b/code/Angabe4.lhs new file mode 100644 index 0000000..ff332dc --- /dev/null +++ b/code/Angabe4.lhs @@ -0,0 +1,112 @@ +> module Angabe4 where + +1. Vervollstaendigen Sie gemaess Angabentext! +2. Vervollständigen Sie auch die vorgegebenen Kommentaranfänge! +3. Loeschen Sie keine Deklarationen aus diesem Rahmenprogramm, auch nicht die Modulanweisug! +4. Achten Sie darauf, dass `Gruppe' Leserechte fuer Ihre Abgabedatei hat! + + +Datenstrukturen fuer eine einfache Buchhaltung: + +> type Nat1 = Int +> type Name = String +> newtype Cent = C { cents :: Nat1 +> } deriving (Eq,Ord,Show) +> type Brutto = Cent +> type Netto = Cent +> data Skonto = KeinSkonto | DreiProzent +> | FuenfProzent | ZehnProzent deriving (Eq,Ord,Show) +> data Tag = I | II | III | IV | V | VI | VII | VIII | IX | X +> | XI | XII | XIII | XIV | XV | XVI | XVII | XVIII +> | XIX | XX | XXI | XXII | XXIII | XXIV | XXV +> | XXVI | XXVII | XXVIII | XXIX | XXX +> | XXXI deriving (Eq,Ord,Show) +> data Monat = Jan | Feb | Mar | Apr | Mai | Jun | Jul | Aug +> | Sep | Okt | Nov | Dez deriving (Eq,Ord,Show) +> type Jahr = Nat1 +> data Datum = D { tag :: Tag, +> monat :: Monat, +> jahr :: Jahr +> } deriving (Eq,Show) + +> newtype Geschaeftspartner = GP { partner :: Name, +> seit :: Datum +> } deriving (Eq,Show) +> data Geschaeftsvorfall = Zahlung { brutto :: Brutto, +> skonto :: Skonto, +> zahlung_vom :: Datum +> } +> | Gutschrift { gutschrift :: Cent, +> gutschrift_vom :: Datum +> } +> deriving (Eq,Show) +> type Kassabucheintrag = (Geschaeftspartner,Geschaeftsvorfall) +> newtype Kassabuch = KB [Kassabucheintrag] deriving (Eq,Show) + + +Aufgabe A.1 + +> type P_Geschaeftspartner = Geschaeftspartner +> data AP_Geschaeftsvorfall +> = AP_Zahlung { netto :: Netto, +> zahlungsdatum :: Datum +> } +> | P_Gutschrift { gutschrift :: Cent, +> gutschriftsdatum :: Datum +> } deriving (Eq,Show) +> type AP_Kassabucheintrag = (P_Geschaeftspartner,AP_Geschaeftsvorfall) + +> waup :: Kassabucheintrag -> AP_Kassabucheintrag + +Knapp, aber gut nachvollziehbar geht waup folgendermassen vor: +... + + +Aufgabe A.2 + +> data EuroCent = EC { euro :: Nat1, +> cent :: Nat1 + + Nur Werte zwischen 0 und 99 für cent! + +> } deriving (Eq,Ord,Show) + +> data K_Geschaeftsvorfall = K_Zahlung { ec_netto :: EuroCent, +> zahlungsdatum' :: Datum +> } +> | K_Gutschrift { ec_gutschrift :: EuroCent, +> gutschriftsdatum' :: Datum +> } deriving (Eq,Show) + +> newtype KonsolidiertesKassabuch +> = KKB [(P_Geschaeftspartner,K_Geschaeftsvorfall)] +> deriving (Eq,Show) + +> konsolidiere :: Kassabuch -> KonsolidiertesKassabuch + +Knapp, aber gut nachvollziehbar geht konsolidiere folgendermassen vor: + ... + + +Aufgabe A.3 + +> data Saldo = Forderungssaldo { fs :: EuroCent } +> | Zahlungssaldo { zs :: EuroCent } +> | Ausgeglichen +> | Keine_Geschaeftsbeziehung deriving (Eq,Show) + +> saldo :: P_Geschaeftspartner -> KonsolidiertesKassabuch -> Saldo + +Knapp, aber gut nachvollziehbar geht saldo folgendermassen vor: +... + + +Aufgabe A.4 + +> newtype SaldiertesKassabuch = SKB [(Geschaeftspartner,Saldo)] + +> saldiere :: Kassabuch -> SaldiertesKassabuch + +Knapp, aber gut nachvollziehbar geht saldiere folgendermassen vor: +... +