Python :: Aufgabe #143
1 Lösung
Programmiere ein kleines Banksystem
Anfänger - Python
von Allocortex
- 17.02.2017 um 11:01 Uhr
Programmiere ein kleines Banksystem!
GUI nicht notwendig. Aber:
Biete mehrere Auswahlmöglichkeiten bezüglich der Erstellung eines neuen Kontos, dem bearbeiten eines existierenden Kontos, dem Löschens eines bestehenden Kontos und dem Ausgeben aller Konten in sortierter Reihenfolge (nach Realgeld, siehe weiter unten)
Konten sollen einen Inhaber samt Namen (ggf. Alter) , einen Kontostand, einen Möglichen Kreditrahmen, eine laufende Kreditsumme und das Realgeld besitzen (Realgeld entspricht Kontostand abzüglich des durch Kredit vorhandenen Geldes).
Verwende Private Variablen, Getter und Setter
Nicht alle Konten dürfen einen Kredit besitzen (erst ab 18!)
Bezüglich der Auswahlmöglichkeiten: Diese sollen per Texteingabe oder Button auswählbar sein, und bei Auswahl vertiefende Fragen stellen (vertierendere Auswahlmöglichkeiten bieten) .. z.B. bei bearbeiten eines Kontos "Welches Konto", dann noch tiefer "Welche Eigenschaft", "Welcher Wert".
Das ganze soll dann wieder zum Ursprung springen und die selben Möglichkeiten bieten --> Solange, bis der Benutzer das Programm durch einen bestimmten Text, ein Zeichen, oder einen Button im GUI beendet.
GUI nicht notwendig. Aber:
Biete mehrere Auswahlmöglichkeiten bezüglich der Erstellung eines neuen Kontos, dem bearbeiten eines existierenden Kontos, dem Löschens eines bestehenden Kontos und dem Ausgeben aller Konten in sortierter Reihenfolge (nach Realgeld, siehe weiter unten)
Konten sollen einen Inhaber samt Namen (ggf. Alter) , einen Kontostand, einen Möglichen Kreditrahmen, eine laufende Kreditsumme und das Realgeld besitzen (Realgeld entspricht Kontostand abzüglich des durch Kredit vorhandenen Geldes).
Verwende Private Variablen, Getter und Setter
Nicht alle Konten dürfen einen Kredit besitzen (erst ab 18!)
Bezüglich der Auswahlmöglichkeiten: Diese sollen per Texteingabe oder Button auswählbar sein, und bei Auswahl vertiefende Fragen stellen (vertierendere Auswahlmöglichkeiten bieten) .. z.B. bei bearbeiten eines Kontos "Welches Konto", dann noch tiefer "Welche Eigenschaft", "Welcher Wert".
Das ganze soll dann wieder zum Ursprung springen und die selben Möglichkeiten bieten --> Solange, bis der Benutzer das Programm durch einen bestimmten Text, ein Zeichen, oder einen Button im GUI beendet.
Lösungen:
Python-Code
#Klassen.py class Inhaber(): '''Instanzen dieser Klasse stellen Personen dar. Jede Person besitzt ein Alter sowie einen Namen. Über getName() und get Alter() können Name und Alter der Person abgefragt werden''' def __init__(self, name, alter): self.__name=name self.__alter=alter def getAlter(self): return self.__alter def getName(self): return self.__name def __str__(self): beschreibung='Inhaber: '+self.__name+', '+str(self.__alter)+' Jahre alt' return beschreibung class Konto(): '''Instanzen dieser Klasse stellen Bankkonten dar. Jedes Konto besitzt eine Nummer, einen Inhaber, einen Kreditrahmen von 500€ für volljährige, eine Kreditsumme, einen Kontostand sowie ein Realgeld. Über getInhaber() wird eine Beschreibung des Inhabers zurückgegeben. Über getKreditsumme(), getKontostand(), getRealgeld() die jeweilige Summe. Über auszahlung() bzw. einzahlung() wird der Kontostand verringert bzw erhöht. Über krediterhoehung bzw. kredittilgung die kreditsumme erhöht bzw. verringert. Über setKreditrahmen() kann der Kreditrahmen angepasst werden. ''' def __init__(self,nr,inhaber,kontostand=0.0,kreditsumme=0.0,kreditrahmen=500.0): self.__nr=nr self.__inhaber=inhaber self.__kontostand=(kontostand) self.__kreditsumme=(kreditsumme) self.__kreditrahmen=kreditrahmen if inhaber.getAlter()<18: self.__kreditrahmen=0.0 def getnr(self): return int(self.__nr) def getInhaber(self): beschreibung=str(self.__nr)+' '+ str(self.__inhaber) return beschreibung def getAlter(self): return self.__inhaber.getAlter() def getKontostand(self): return self.__kontostand def getKreditsumme(self): return self.__kreditsumme def getRealgeld(self): return self.__kontostand-self.__kreditsumme def einzahlung(self,betrag): self.__kontostand+=betrag Hinweis='gebucht, neuer Kontostand: '+str(self.__kontostand) return Hinweis def auszahlung(self,betrag): if betrag>self.__kontostand: if self.__kreditsumme+betrag>self.__kreditrahmen: return 'Konto nicht ausreichend gedeckt' betrag=betrag-self.__kontostand self.__kontostand=0.0 return self.krediterhoehung(betrag) self.__kontostand=self.__kontostand-betrag Hinweis='gebucht, neuer Kontostand: '+str(self.__kontostand) return Hinweis def krediterhoehung(self,betrag): if (self.__kreditsumme+betrag)>self.__kreditrahmen: return 'Konto nicht ausreichend gedeckt' self.__kreditsumme+=betrag Hinweis='gebucht, aktueller Kredit: '+str(self.__kreditsumme) return Hinweis def kredittilgung(self,betrag): self.__kreditsumme=self.__kreditsumme-betrag Hinweis='gebucht, aktueller Kredit: '+str(self.__kreditsumme) return Hinweis def setKreditrahmen(self,rahmen): if self.__inhaber.getAlter()<18: return 'Kredite können nur an Volljährige vergeben werden!' self.__kreditrahmen=rahmen Hinweis='Kreditrahmen auf '+str(self.__kreditrahmen)+' angepasst' return Hinweis #main.py #from Klassen import * from random import randint L=[] def neuesKonto(): global L name=input('Bitte geben Sie den Namen des Inhabers ein: ') alter=int(input('Bitte geben Sie das Alter des Inhabers ein: ')) inhaber=Inhaber(name,alter) nr=randint(10000,99999) nr=Konto(nr, inhaber) L+=[nr] return nr.getInhaber() def loescheKonto(): global L nr=int(input("Welches Konto soll gelöscht werden?")) for i in L: if i.getnr()==nr: L.remove(i) return 'Konto gelöscht' return 'Konto nicht vorhanden' def printL(): global L #L.sort(key=getRealgeld) funktioniert nicht? M=[] print('Kontenliste:') x=1 for i in L: sortierbar=(i.getRealgeld(),x,i) x+=1 M+=[sortierbar] M.sort() for i in M: beschreibung='Realgeld: '+str(i[0])+' '+ i[2].getInhaber() print(beschreibung) return def bearbeiteKonto(i): menuetext=''' Bitte wählen Sie: (a)uszahlung (e)inzahlung (S)tand des Kontos ohne Kredit (K)reditsumme (R)ealgeld (z)urück Kredite ab 18 Jahre (T)ilgung (M)aximale Kreditsumme (n)euer Kredit ''' wahl='x' while wahl not in ['z','Z']: print(menuetext) wahl=input("Ihre Wahl:") if wahl in ['a','A']: betrag=float(input("Bitte geben Sie den auszuzahlenden Betrag ein:")) print(i.auszahlung(betrag)) elif wahl in ['e','E']: betrag=float(input("Bitte geben Sie den einzuzahlenden Betrag ein:")) print(i.einzahlung(betrag)) elif wahl in ['s','S']: print(i.getKontostand()) elif wahl in ['k','K']: print(i.getKreditsumme()) elif wahl in ['r','R']: print(i.getRealgeld()) elif wahl in ['t','T','m','M','n','N']: if i.getAlter()<18: print("Kredite erst ab 18 Jahren!") wahl='x' if wahl in ['t','T']: betrag=float(input("Bitte geben Sie den einzuzahlenden Betrag ein:")) print(i.kredittilgung(betrag)) elif wahl in ['m','M']: rahmen=float(input("Bitte den Kreditrahmen eingeben:")) print(i.setKreditrahmen(rahmen)) elif wahl in ['n','N']: betrag=float(input("Bitte geben Sie den als Kredit aufzunehmenden Betrag ein:")) print(i.krediterhoehung(betrag)) return #Hier geht das eigentliche Programm los print("Willkommen beim Banksystem.") menuetext=''' Bitte wählen Sie: (n)eues Konto (l)ösche Konto (b)earbeite Konto (z)eige alle Konten (e)nde ''' wahl='x' while wahl not in ['e','E']: print(menuetext) wahl=input("Ihre Wahl: ") if wahl in ['n','N']: print(neuesKonto()) elif wahl in ['l','L']: print(loescheKonto()) elif wahl in ['b','B']: nr=int(input("Bitte geben Sie die Kontonummer an:")) for i in L: if i.getnr()==nr: bearbeiteKonto(i) print('Kontonummer nicht bekannt') elif wahl in ['z','Z']: printL() print("Danke für die Benutzung des Banksystems") #Eigentlich würde zu Beginn die Kontoliste L über pickle geladen und am ende die Kontoliste L über pickle gespeichert