s n h m r u
i

Einstieg - Verwaltung von Bankkonten

Grafische Benutzeroberfläche zur Bankwelt

Das bisher entwickelte Programm zur Verwaltung von Bankkonten soll um eine grafische Benutzeroberfläche erweitert werden.

Grafische Benutzeroberfläche

Der Benutzer soll - wie ein Bankangestellter - die Möglichkeit haben, Konten zu erzeugen und anzuzeigen sowie einfache Kontotransaktionen durchzuführen.

Vorausgesetzt wird eine Implementierung des folgenden objektorientierten Datenmodells.

Klassendiagramm

Eine Implementierung findet man in der Datei bank.txt (die man in bank.py umbenennen sollte).

GUI-Objekte und Datenmodellobjekte

Der Quelltext in der Datei gui_bank_unvollstaendig.txt (die man in gui_bank_unvollstaendig.py umbenennen sollte) zeigt, wie man eine grafische Benutzeroberfläche zu einem bereits implementierten Datenmodell erstellt.

#-----------------------------------------------------------
# Datenmodell
#-----------------------------------------------------------
<p>from bank import *<br />
bank = Bank()</p>
<h1>-----------------------------------------------------------</h1>
<h1>GUI</h1>
<h1>-----------------------------------------------------------</h1>
<p>from tkinter import *</p>
<p>def Button_Erzeugen_Click():<br />
name = entryName.get()<br />
vorname = entryVorname.get()<br />
bank.kontoEroeffnen(name, vorname)<br />
entryName.delete(0, END)<br />
entryVorname.delete(0, END)<br />
labelKontonummer.config(text=str(bank.naechsteKontoNr))<br />
labelKontostandErzeugen.config(text=str(0.0))</p>
<p>def Button_Anzeigen_Click():<br />
kontonummer = int(entryKontonummerAnzeigen.get())<br />
konto = bank.getKonto(kontonummer)<br />
if konto != None:<br />
labelNameAnzeigen.config(text=str(konto.inhaber.name))<br />
labelVornameAnzeigen.config(text=str(konto.inhaber.vorname))<br />
labelKontostand.config(text=str(konto.stand))<br />
else:<br />
labelNameAnzeigen.config(text='')<br />
labelVornameAnzeigen.config(text='')<br />
labelKontostand.config(text='')</p>
<h1>...</h1>
<h1>Erzeugung des Fensters</h1>
<p>fenster = Tk()<br />
fenster.title("Bank")<br />
fenster.geometry('455x275')</p>
<h1>Rahmen Kontoerzeugung</h1>
<p>rahmenErzeugen = Frame(master=fenster, background="#FFCFC9")<br />
rahmenErzeugen.place(x=5, y=5, width=220, height=130)</p>
<h1>Button Erzeugen</h1>
<p>buttonErzeugen = Button(master=rahmenErzeugen, text="erzeugen",<br />
command=Button_Erzeugen_Click)<br />
buttonErzeugen.place(x=5, y=5, width=145, height=20)</p>
<h1>Label mit Aufschrift Name</h1>
<p>labelName = Label(master=rahmenErzeugen, background="white", text="Name")<br />
labelName.place(x=5, y=30, width=145, height=20)</p>
<h1>Entry für den Namen</h1>
<p>entryName = Entry(master=rahmenErzeugen)<br />
entryName.place(x=155, y=30, width=60, height=20)</p>
<h1>...</h1>
<h1>Aktivierung des Fensters</h1>
<p>fenster.mainloop()<br />

Aufgabe 1

Das Programm enthält noch Implementierungslücken, ist aber nichtsdestotrotz lauffähig. Teste zunächst das Programm. Mache dich auch mit dem Quelltext vertraut. Analysiere insbesondere die schon implementierten Ereignisverarbeitungsprozeduren. Implementiere die noch fehlenden Prozeduren.

Ein Objekt zur Verwaltung der GUI-Objekte

Der folgende Quelltextauszug aus der Datei guibank.txt (die man in guibank.py umbenennen sollte) zeigt eine andere Implementierung der grafischen Benutzeroberfläche. Hier wird ein zusätzliches Objekt benutzt, um sämtliche GUI-Objekte zu verwalten.

from tkinter import *
<p>class GUIBank():<br />
def <strong>init</strong>(self, bank):</p>
<h1>Referenzattribute zum Datenmodell</h1>
<pre><code>    self.bank = bank
    # Erzeugung des Fensters
    self.fenster = Tk()
    self.fenster.title("Bank")
    self.fenster.geometry("455x275")

    # Rahmen Kontoerzeugung
    self.rahmenErzeugen = Frame(master=self.fenster, background="#FFCFC9")
    self.rahmenErzeugen.place(x=5, y=5, width=220, height=130)
    # Button Erzeugen
    self.buttonErzeugen = Button(master=self.rahmenErzeugen, text="erzeugen", 
                            command=self.Button_Erzeugen_Click)
    self.buttonErzeugen.place(x=5, y=5, width=145, height=20)
    # Label mit Aufschrift Name
    self.labelName = Label(master=self.rahmenErzeugen, background="white", text="Name")
    self.labelName.place(x=5, y=30, width=145, height=20)
    # Entry f&uuml;r den Namen
    self.entryName = Entry(master=self.rahmenErzeugen)
    self.entryName.place(x=155, y=30, width=60, height=20)

    # ...

def Button_Erzeugen_Click(self):
    name = self.entryName.get()
    vorname = self.entryVorname.get()
    self.bank.kontoEroeffnen(name, vorname)
    self.entryName.delete(0, END)
    self.entryVorname.delete(0, END)
    self.labelKontonummer.config(text=str(self.bank.naechsteKontoNr))
    self.labelKontostandErzeugen.config(text=str(0.0))

def Button_Anzeigen_Click(self):
    # ...

def Button_Einzahlen_Click(self):
    # ...

def Button_Auszahlen_Click(self):
    # ...

def Button_Ueberweisen_Click(self):
    # ...

-----------------------------------------------------------

Datenmodellobjekte

-----------------------------------------------------------

from bank import *
bank = Bank()

-----------------------------------------------------------

GUI-Objekte

-----------------------------------------------------------

from guibank import *
guibank = GUIBank(bank)
guibank.fenster.mainloop()

Aufgabe 2

(a) Teste das Programm.

(b) Welche Beziehungen bestehen zwischen den Objekten? Verdeutliche dies mit einem Objekt- und Klassendiagramm.

Suche

v
7.2.3.7.2 Einstieg - Verwaltung von Bankkonten
Kopieren durch Anklicken

Rückmeldung geben