lehrkraefte:blc:informatik:ffprg1-2020:oop

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:ffprg1-2020:oop [2021/03/18 10:07]
michael.greminger
lehrkraefte:blc:informatik:ffprg1-2020:oop [2021/03/26 18:02] (current)
michael.greminger
Line 4: Line 4:
  
 === Präsentation === === Präsentation ===
 +{{lehrkraefte:blc:informatik:ffprg1-2020:oop1.pdf}}
  
 === Aufgabe 1 === === Aufgabe 1 ===
Line 17: Line 18:
 "Verwenden" Sie diese Klasse, indem sie zwei Instanzen kreieren und benutzen. "Verwenden" Sie diese Klasse, indem sie zwei Instanzen kreieren und benutzen.
  
-<hidden Lösungsvorschläge+<hidden Lösungsvorschlag
-<code konto_p1.py>+<code python>
 class Konto: class Konto:
     def __init__(self, i, k):     def __init__(self, i, k):
Line 33: Line 34:
 k2 = Konto("Fritz", 12340)  k2 = Konto("Fritz", 12340) 
 print k1.kontostand()   print k1.kontostand()  
-print k2.inhaber()    +print k2.inhaber()  
-</code>+</code>   
 +</hidden>
  
 === Aufgabe 2 === === Aufgabe 2 ===
Line 47: Line 49:
  
 Testen Sie diese Klasse, indem sie eine Instanz kreieren und benutzen. Testen Sie diese Klasse, indem sie eine Instanz kreieren und benutzen.
 +
 +<hidden Lösungsvorschlag>
 +<code python>
 +from datetime import datetime
 +
 +class Konto:
 +    def __init__(self, i, k):
 +       self._inhaber = i 
 +       self._kontostand = k    
 +
 +    def inhaber(self):
 +       return self._inhaber 
 +       
 +    def kontostand(self):
 +        return self._kontostand   
 +    
 +class Buchung:
 +    def __init__(self, b, d):
 +       self._betrag = b 
 +       self._datum = datetime.strptime(d, "%d.%m.%Y"      
 +
 +    def betrag(self):
 +       return self._betrag 
 +       
 +    def datum(self):
 +        return self._datum                                           
 +
 +b1 = Buchung(456, "13.12.2021")
 +print b1.datum()
 +
 +k1 = Konto("Michael", 1234)
 +k2 = Konto("Fritz", 12340) 
 +print k1.kontostand()  
 +print k2.inhaber()   
 +</code>
 +</hidden>
  
 === Aufgabe 3 === === Aufgabe 3 ===
  
 Fügen Sie zur Klasse Konto eine neue Methode ein "addBuchung" mit zwei Argumenten, dem Betrag und dem Datum als String. Die Klasse Konto soll eine Liste von Buchungen haben. Der Kontostand soll mit dem Hinzufügen einer Buchung entsprechend angepasst werden. Fügen Sie zur Klasse Konto eine neue Methode ein "addBuchung" mit zwei Argumenten, dem Betrag und dem Datum als String. Die Klasse Konto soll eine Liste von Buchungen haben. Der Kontostand soll mit dem Hinzufügen einer Buchung entsprechend angepasst werden.
 +
 +<hidden Lösungsvorschlag>
 +<code python>
 +from datetime import datetime
 +
 +class Konto:
 +    def __init__(self, i, k):
 +        self._inhaber = i 
 +        self._kontostand = k 
 +        self._buchungen = []              
 +
 +    def inhaber(self):
 +       return self._inhaber 
 +       
 +    def kontostand(self):
 +        return self._kontostand   
 +    
 +    def addBuchung(self, betrag, datum):
 +        buchungInstanz = Buchung(betrag, datum)
 +        self._buchungen.append(buchungInstanz)
 +        self._kontostand += buchungInstanz.betrag()
 +    
 +class Buchung:
 +    def __init__(self, b, d):
 +       self._betrag = b 
 +       self._datum = datetime.strptime(d, "%d.%m.%Y"      
 +
 +    def betrag(self):
 +       return self._betrag 
 +       
 +    def datum(self):
 +        return self._datum                                           
 +
 +
 +k1 = Konto("Michael", 1234)
 +k1.addBuchung(100, "13.12.2021")
 +print k1.kontostand()  
 +</code>
 +</hidden>
  
 === Aufgabe 4 ===  === Aufgabe 4 === 
  
 Fügen Sie zur Klasse Konto eine Methode "kontostandDatum" mit einem Argument Datum (als String) ein. Diese Methode soll den Kontostand für ein Datum zurückgeben. Damit es einfacher wird, würde ich vorschlagen, die Buchungen chronologisch zu machen. Selbstverständlich kann man auch die Buchungsliste immer sortiert halten. Fügen Sie zur Klasse Konto eine Methode "kontostandDatum" mit einem Argument Datum (als String) ein. Diese Methode soll den Kontostand für ein Datum zurückgeben. Damit es einfacher wird, würde ich vorschlagen, die Buchungen chronologisch zu machen. Selbstverständlich kann man auch die Buchungsliste immer sortiert halten.
 +
 +<hidden Lösungsvorschlag>
 +<code python>
 +from datetime import datetime
 +
 +class Konto:
 +    def __init__(self, i, k):
 +        self._inhaber = i 
 +        self._kontostand = k 
 +        self._buchungen = []              
 +
 +    def inhaber(self):
 +       return self._inhaber 
 +       
 +    def kontostand(self):
 +        return self._kontostand  
 +    
 +    def kontostandDatum(self, dString):
 +        datum = datetime.strptime(dString, "%d.%m.%Y")
 +        index = len(self._buchungen) - 1
 +        betrag = self._kontostand
 +        while index >= 0 and datum < self._buchungen[index].datum():
 +            betrag = betrag - self._buchungen[index].betrag() 
 +            index = index - 1            
 +        return betrag       
 +    
 +    def addBuchung(self, b, d):
 +        b = Buchung(b, d)
 +        self._buchungen.append(b)
 +        self._kontostand += b.betrag()
 +    
 +class Buchung:
 +    def __init__(self, b, d):
 +       self._betrag = b 
 +       self._datum = datetime.strptime(d, "%d.%m.%Y"      
 +
 +    def betrag(self):
 +       return self._betrag 
 +       
 +    def datum(self):
 +        return self._datum                                           
 +
 +
 +k1 = Konto("Michael", 100)
 +k1.addBuchung(100, "13.12.2021")
 +k1.addBuchung(200, "15.12.2021")
 +k1.addBuchung(300, "17.12.2021")
 +print k1.kontostand()  
 +print k1.kontostandDatum("12.12.2021"
 +print k1.kontostandDatum("14.12.2021"
 +print k1.kontostandDatum("16.12.2021"
 +print k1.kontostandDatum("18.12.2021"
 +</code>   
 +</hidden>
  
 ===== Teil 2 ===== ===== Teil 2 =====
  
 === Präsentation === === Präsentation ===
 +{{lehrkraefte:blc:informatik:ffprg1-2020:oop2.pdf}}
  
 === Aufgabe 5 ===  === Aufgabe 5 === 
 +
 +Fügen Sie bei Konto eine neue Methode "zinssatz()" welche einen fixen Zinssatz zurückgibt (zum Beispiel 0.01). Fügen Sie eine neue Subklasse "Supersparkonto" ein. Diese Subklasse hat einen flexiblen Zinssatz. Wenn der Kunde weniger als dreimal Geld abgehoben hat (= Buchungen mit negativem Betrag), dann ist der Zinssatz 1% höher als derjenige des normalen Kontos.
 +
 +<hidden Lösungsvorschlag>
 +<code python>
 +from datetime import datetime
 +
 +class Konto:
 +    def __init__(self, i, k):
 +        self._inhaber = i 
 +        self._kontostand = k 
 +        self._buchungen = []              
 +
 +    def inhaber(self):
 +       return self._inhaber 
 +       
 +    def kontostand(self):
 +        return self._kontostand  
 +    
 +    def zinssatz(self):
 +        return 0.035  
 +    
 +    def kontostandDatum(self, dString):
 +        datum = datetime.strptime(dString, "%d.%m.%Y")
 +        index = len(self._buchungen) - 1
 +        betrag = self._kontostand
 +        while index >= 0 and datum < self._buchungen[index].datum():
 +            betrag = betrag - self._buchungen[index].betrag() 
 +            index = index - 1            
 +        return betrag       
 +    
 +    def addBuchung(self, b, d):
 +        b = Buchung(b, d)
 +        self._buchungen.append(b)
 +        self._kontostand += b.betrag()
 +        
 +class Supersparkonto (Konto): 
 +    def __init__(self, i, k):
 +        Konto.__init__(self, i, k)    
 +    
 +    def zinssatz(self):
 +        abgehoben = 0
 +        for b in self._buchungen:
 +            if b.betrag() < 0:
 +              abgehoben += 1
 +        zins = Konto.zinssatz(self)
 +        if abgehoben < 3:
 +            zins += 0.01 
 +        return zins             
 +    
 +class Buchung:
 +    def __init__(self, b, d):
 +       self._betrag = b 
 +       self._datum = datetime.strptime(d, "%d.%m.%Y"      
 +
 +    def betrag(self):
 +       return self._betrag 
 +       
 +    def datum(self):
 +        return self._datum                                           
 +
 +
 +k1 = Supersparkonto("Michael", 1000)
 +k1.addBuchung(-100, "13.12.2021")
 +k1.addBuchung(-200, "15.12.2021")
 +print k1.zinssatz()
 +k1.addBuchung(-300, "17.12.2021")
 +print k1.zinssatz()
 +   
 +</code>
 +</hidden>
 +
 +=== Aufgabe 6 === 
 +
 +Füge zur Klasse Konto eine Methode "jahresabschluss()". Diese berechnet aus dem aktuellen Kontostand und dem Zinssatz die Zinsgutschrift, welche als Buchung gutgeschrieben werden soll. Teste diese Methode sowohl für eine Instanz von von Konto als auch vom Supersparkonto.
 +
 +Zusatz: Natürlich ist es auch möglich, die korrekte Zinsgutschrift zu berechnen (wieviele Tage war welcher Betrag auf dem Konto). Wenn jemand mit allem fertig ist, kann das gerne versucht werden.
 +
 +<hidden Lösungsvorschlag>
 +<code python>
 +from datetime import datetime
 +
 +class Konto:
 +    def __init__(self, i, k):
 +        self._inhaber = i 
 +        self._kontostand = k 
 +        self._buchungen = []              
 +
 +    def inhaber(self):
 +       return self._inhaber 
 +       
 +    def kontostand(self):
 +        return self._kontostand  
 +    
 +    def zinssatz(self):
 +        return 0.035  
 +    
 +    def kontostandDatum(self, dString):
 +        datum = datetime.strptime(dString, "%d.%m.%Y")
 +        index = len(self._buchungen) - 1
 +        betrag = self._kontostand
 +        while index >= 0 and datum < self._buchungen[index].datum():
 +            betrag = betrag - self._buchungen[index].betrag() 
 +            index = index - 1            
 +        return betrag       
 +    
 +    def addBuchung(self, b, d):
 +        b = Buchung(b, d)
 +        self._buchungen.append(b)
 +        self._kontostand += b.betrag()
 +        
 +    def jahresAbschluss(self):
 +        self.addBuchung(self.kontostand() * self.zinssatz(), "31.12.2021"     
 +        
 +class Supersparkonto (Konto): 
 +    def __init__(self, i, k):
 +        Konto.__init__(self, i, k)    
 +    
 +    def zinssatz(self):
 +        abgehoben = 0
 +        for b in self._buchungen:
 +            if b.betrag() < 0:
 +              abgehoben += 1
 +        zins = Konto.zinssatz(self)
 +        if abgehoben < 3:
 +            zins += 0.01 
 +        return zins             
 +    
 +class Buchung:
 +    def __init__(self, b, d):
 +       self._betrag = b 
 +       self._datum = datetime.strptime(d, "%d.%m.%Y"      
 +
 +    def betrag(self):
 +       return self._betrag 
 +       
 +    def datum(self):
 +        return self._datum                                           
 +
 +
 +k1 = Supersparkonto("Michael", 1000)
 +k1.addBuchung(-100, "13.12.2021")
 +k1.addBuchung(-200, "15.12.2021")
 +k1.addBuchung(-300, "17.12.2021")
 +print k1.kontostand()
 +k1.jahresAbschluss()
 +print k1.kontostand()
 +</code>
 +</hidden>
 +
 +
  • lehrkraefte/blc/informatik/ffprg1-2020/oop.1616058438.txt.gz
  • Last modified: 2021/03/18 10:07
  • by michael.greminger