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:17]
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 18: Line 19:
  
 <hidden Lösungsvorschlag> <hidden Lösungsvorschlag>
-<code python 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> </hidden>
  
Line 50: Line 51:
  
 <hidden Lösungsvorschlag> <hidden Lösungsvorschlag>
-<code python konto_p2.py>+<code python>
 from datetime import datetime from datetime import datetime
  
Line 81: Line 82:
 k2 = Konto("Fritz", 12340)  k2 = Konto("Fritz", 12340) 
 print k1.kontostand()   print k1.kontostand()  
-print k2.inhaber()    +print k2.inhaber()   
 </code> </code>
 </hidden> </hidden>
Line 90: Line 91:
  
 <hidden Lösungsvorschlag> <hidden Lösungsvorschlag>
-<code python konto_p3.py>+<code python>
 from datetime import datetime from datetime import datetime
  
Line 105: Line 106:
         return self._kontostand            return self._kontostand   
          
-    def addBuchung(self, bd): +    def addBuchung(self, betragdatum): 
-        = Buchung(bd+        buchungInstanz = Buchung(betragdatum
-        self._buchungen.append(b+        self._buchungen.append(buchungInstanz
-        self._kontostand += b.betrag()+        self._kontostand += buchungInstanz.betrag()
          
 class Buchung: class Buchung:
Line 124: Line 125:
 k1 = Konto("Michael", 1234) k1 = Konto("Michael", 1234)
 k1.addBuchung(100, "13.12.2021") k1.addBuchung(100, "13.12.2021")
-print k1.kontostand() +print k1.kontostand()  
 </code> </code>
 </hidden> </hidden>
Line 133: Line 134:
  
 <hidden Lösungsvorschlag> <hidden Lösungsvorschlag>
-<code python konto_p4.py>+<code python>
 from datetime import datetime from datetime import datetime
  
Line 183: Line 184:
 print k1.kontostandDatum("16.12.2021" print k1.kontostandDatum("16.12.2021"
 print k1.kontostandDatum("18.12.2021" print k1.kontostandDatum("18.12.2021"
-</code>+</code>   
 </hidden> </hidden>
  
Line 189: Line 190:
  
 === 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.1616059027.txt.gz
  • Last modified: 2021/03/18 10:17
  • by michael.greminger