Python :: Aufgabe #143

1 Lösung Lösung öffentlich

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.

Lösungen:

vote_ok
von 0 (0 Punkte) - 09.09.2017 um 22:21 Uhr
Quellcode ausblenden 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
1801193

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.