This commit is contained in:
Ivaylo Ivanov 2021-11-07 16:41:41 +01:00
parent 226d053dca
commit dfd064ba39

112
code/Angabe4.lhs Normal file
View File

@ -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:
...