Add initial helper functions

This commit is contained in:
Ivaylo Ivanov 2021-11-08 15:48:13 +01:00
parent dfd064ba39
commit 90edf3d242

View File

@ -1,9 +1,9 @@
> module Angabe4 where > module Angabe4 where
1. Vervollstaendigen Sie gemaess Angabentext! 1. Vervollstaendigen Sie gemaess Angabentext!
2. Vervollständigen Sie auch die vorgegebenen Kommentaranfänge! 2. Vervollst<EFBFBD>ndigen Sie auch die vorgegebenen Kommentaranf<6E>nge!
3. Loeschen Sie keine Deklarationen aus diesem Rahmenprogramm, auch nicht die Modulanweisug! 3. Loeschen Sie keine Deklarationen aus diesem Rahmenprogramm, auch nicht die Modulanweisug!
4. Achten Sie darauf, dass `Gruppe' Leserechte fuer Ihre Abgabedatei hat! 4. Achten Sie darauf, dass `Gruppe' Leserechte fuer Ihre Abgabedatei hat!
Datenstrukturen fuer eine einfache Buchhaltung: Datenstrukturen fuer eine einfache Buchhaltung:
@ -14,60 +14,108 @@ Datenstrukturen fuer eine einfache Buchhaltung:
> } deriving (Eq,Ord,Show) > } deriving (Eq,Ord,Show)
> type Brutto = Cent > type Brutto = Cent
> type Netto = Cent > type Netto = Cent
> data Skonto = KeinSkonto | DreiProzent > data Skonto = KeinSkonto | DreiProzent
> | FuenfProzent | ZehnProzent deriving (Eq,Ord,Show) > | FuenfProzent | ZehnProzent deriving (Eq,Ord,Show)
> data Tag = I | II | III | IV | V | VI | VII | VIII | IX | X > data Tag = I | II | III | IV | V | VI | VII | VIII | IX | X
> | XI | XII | XIII | XIV | XV | XVI | XVII | XVIII > | XI | XII | XIII | XIV | XV | XVI | XVII | XVIII
> | XIX | XX | XXI | XXII | XXIII | XXIV | XXV > | XIX | XX | XXI | XXII | XXIII | XXIV | XXV
> | XXVI | XXVII | XXVIII | XXIX | XXX > | XXVI | XXVII | XXVIII | XXIX | XXX
> | XXXI deriving (Eq,Ord,Show) > | XXXI deriving (Eq,Ord,Show)
> data Monat = Jan | Feb | Mar | Apr | Mai | Jun | Jul | Aug > data Monat = Jan | Feb | Mar | Apr | Mai | Jun | Jul | Aug
> | Sep | Okt | Nov | Dez deriving (Eq,Ord,Show) > | Sep | Okt | Nov | Dez deriving (Eq,Ord,Show)
> type Jahr = Nat1 > type Jahr = Nat1
> data Datum = D { tag :: Tag, > data Datum = D { tag :: Tag,
> monat :: Monat, > monat :: Monat,
> jahr :: Jahr > jahr :: Jahr
> } deriving (Eq,Show) > } deriving (Eq,Show)
> newtype Geschaeftspartner = GP { partner :: Name, > data Geschaeftspartner = GP { partner :: Name,
> seit :: Datum > seit :: Datum
> } deriving (Eq,Show) > } deriving (Eq,Show)
> data Geschaeftsvorfall = Zahlung { brutto :: Brutto, > data Geschaeftsvorfall = Zahlung { brutto :: Brutto,
> skonto :: Skonto, > skonto :: Skonto,
> zahlung_vom :: Datum > zahlung_vom :: Datum
> } > }
> | Gutschrift { gutschrift :: Cent, > | Gutschrift { gutschriftsbetrag :: Cent,
> gutschrift_vom :: Datum > gutschrift_vom :: Datum
> } > }
> deriving (Eq,Show) > deriving (Eq,Show)
> type Kassabucheintrag = (Geschaeftspartner,Geschaeftsvorfall) > type Kassabucheintrag = (Geschaeftspartner,Geschaeftsvorfall)
> newtype Kassabuch = KB [Kassabucheintrag] deriving (Eq,Show) > newtype Kassabuch = KB [Kassabucheintrag] deriving (Eq,Show)
Helper functions:
> day_to_str :: Tag -> String
> day_to_str I = "01"
> day_to_str II = "02"
> day_to_str III = "03"
> day_to_str IV = "04"
> day_to_str V = "05"
> day_to_str VI = "06"
> day_to_str VII = "07"
> day_to_str VIII = "08"
> day_to_str IX = "09"
> day_to_str X = "10"
> day_to_str XI = "11"
> day_to_str XII = "12"
> day_to_str XIII = "13"
> day_to_str XIV = "14"
> day_to_str XV = "15"
> day_to_str XVI = "16"
> day_to_str XVII = "17"
> day_to_str XVIII = "18"
> day_to_str XIX = "19"
> day_to_str XX = "20"
> day_to_str XXI = "21"
> day_to_str XXII = "22"
> day_to_str XXIII = "23"
> day_to_str XXIV = "24"
> day_to_str XXV = "25"
> day_to_str XXVI = "26"
> day_to_str XXVII = "27"
> day_to_str XXVIII = "28"
> day_to_str XXIX = "29"
> day_to_str XXX = "30"
> day_to_str XXXI = "31"
> month_to_str :: Monat -> String
> month_to_str Jan = "01"
> month_to_str Feb = "02"
> month_to_str Mar = "03"
> month_to_str Apr = "04"
> month_to_str Mai = "05"
> month_to_str Jun = "06"
> month_to_str Jul = "07"
> month_to_str Aug = "08"
> month_to_str Sep = "09"
> month_to_str Okt = "10"
> month_to_str Nov = "11"
> month_to_str Dez = "12"
Aufgabe A.1 Aufgabe A.1
> type P_Geschaeftspartner = Geschaeftspartner > type P_Geschaeftspartner = Geschaeftspartner
> data AP_Geschaeftsvorfall > data AP_Geschaeftsvorfall
> = AP_Zahlung { netto :: Netto, > = AP_Zahlung { netto :: Netto,
> zahlungsdatum :: Datum > zahlungsdatum :: Datum
> } > }
> | P_Gutschrift { gutschrift :: Cent, > | P_Gutschrift { gutschrift :: Cent,
> gutschriftsdatum :: Datum > gutschriftsdatum :: Datum
> } deriving (Eq,Show) > } deriving (Eq,Show)
> type AP_Kassabucheintrag = (P_Geschaeftspartner,AP_Geschaeftsvorfall) > type AP_Kassabucheintrag = (P_Geschaeftspartner,AP_Geschaeftsvorfall)
> waup :: Kassabucheintrag -> AP_Kassabucheintrag > waup :: Kassabucheintrag -> AP_Kassabucheintrag
Knapp, aber gut nachvollziehbar geht waup folgendermassen vor: Knapp, aber gut nachvollziehbar geht waup folgendermassen vor:
... ...
Aufgabe A.2 Aufgabe A.2
> data EuroCent = EC { euro :: Nat1, > data EuroCent = EC { euro :: Nat1,
> cent :: Nat1 > cent :: Nat1
Nur Werte zwischen 0 und 99 für cent! Nur Werte zwischen 0 und 99 fuer cent!
> } deriving (Eq,Ord,Show) > } deriving (Eq,Ord,Show)
@ -75,12 +123,12 @@ Aufgabe A.2
> zahlungsdatum' :: Datum > zahlungsdatum' :: Datum
> } > }
> | K_Gutschrift { ec_gutschrift :: EuroCent, > | K_Gutschrift { ec_gutschrift :: EuroCent,
> gutschriftsdatum' :: Datum > gutschriftsdatum' :: Datum
> } deriving (Eq,Show) > } deriving (Eq,Show)
> newtype KonsolidiertesKassabuch > newtype KonsolidiertesKassabuch
> = KKB [(P_Geschaeftspartner,K_Geschaeftsvorfall)] > = KKB [(P_Geschaeftspartner,K_Geschaeftsvorfall)]
> deriving (Eq,Show) > deriving (Eq,Show)
> konsolidiere :: Kassabuch -> KonsolidiertesKassabuch > konsolidiere :: Kassabuch -> KonsolidiertesKassabuch
@ -94,10 +142,10 @@ Aufgabe A.3
> | Zahlungssaldo { zs :: EuroCent } > | Zahlungssaldo { zs :: EuroCent }
> | Ausgeglichen > | Ausgeglichen
> | Keine_Geschaeftsbeziehung deriving (Eq,Show) > | Keine_Geschaeftsbeziehung deriving (Eq,Show)
> saldo :: P_Geschaeftspartner -> KonsolidiertesKassabuch -> Saldo > saldo :: P_Geschaeftspartner -> KonsolidiertesKassabuch -> Saldo
Knapp, aber gut nachvollziehbar geht saldo folgendermassen vor: Knapp, aber gut nachvollziehbar geht saldo folgendermassen vor:
... ...
@ -107,6 +155,5 @@ Aufgabe A.4
> saldiere :: Kassabuch -> SaldiertesKassabuch > saldiere :: Kassabuch -> SaldiertesKassabuch
Knapp, aber gut nachvollziehbar geht saldiere folgendermassen vor: Knapp, aber gut nachvollziehbar geht saldiere folgendermassen vor:
... ...