Die Aufgabenstellung
Das Bankhaus Gierig & Söhne hat beschlossen, die Verwaltung der Sparkonten zukünftig mittels EDV zu realisieren. Als unternehmensbekannter EDV-Guru werden Sie von Herrn Direktor Gierig mit folgender Aufgabe betraut:
Schreiben Sie ein BASIC-Programm, das es ermöglicht, eine Sparkontendatei mit den Feldern Sparkontonummer (sechsstellig), Name des Sparers, Vorname des Sparers, Ansparsumme des Sparers (siebenstellig + zwei Kommastellen), gewährter Zinssatz, (zweistellig + zwei Kommastellen) und Nachname des zuständigen Bankbeamten zu erzeugen und zu pflegen. Das Programm soll die Funktionen “Eintragen neuer Sparer”, “Löschen von Sparern”, “Einzahlungen auf Sparkonten” sowie “Auszahlungen von Sparkonten” umfassen.
Weiterhin sind folgende Regeln zu beachten:
(1) Die Sparkonten werden von den drei Bankbeamten Schlau, Raffke und Lieblich derart betreut, daß Schlau für Kunden, deren Nachnamen mit A-H beginnt, zuständig ist. Raffke den Kundenkreis I-P und Lieblich die restlichen Kunden. Beim Anlegen eines neuen Sparkontos soll automatisch der zuständige Bankbeamte in die Datei eingetragen werden.
(2) Ist die Ansparsumme kleiner als 10.000 DM, so wird diese Summe mit 4 % verzinst. Ab 10.000 DM Ansparsumme beträgt der Zinssatz 4,5 %, ab 50.000 DM 5,5 %. Abhängig von der Höhe der Ansparsumme soll das Programm den passenden Zinssatz ausweisen (Zinsberechnungen selbst sind nicht notwendig).
(3) Ein Sparer kann aus der Datei nur gelöscht werden, wenn sein Sparguthaben = 0 ist. Negative Sparguthaben gibt es nicht!
(4) Ihr BASIC-Programm trägt den Namen EDVPxxx.BAS. Die Sparkontendatei soll EDVPxxx.DAT heißen, wobei xxx jeweils den Zahlen Ihrer Benutzernummer entspricht. Zum Abgeben Ihrer Dateien bzw. Programme müssen sich die o.g. Dateien im Hauptverzeichnis Ihrer Kursdiskette befinden. Nach Einlegen der Diskette in das Laufwerk geben Sie bitte “ABGEBEN” ein. Beachten Sie die nun erscheinenden Hinweise.
Viel Spaß beim Programmieren.
Eine Originallösung
Appendix – Programmcode Sparprogramm
Bitte beachten: Dieses Programm benötigt (verwendet) die Klasse Logger.
Bitte den Haftungsausschluss im Impressum beachten.
Option Explicit
' 1 27-Apr-2024 Bernd Erste Version, eine Übung der Uni
' Bayreuth spaßeshalber mit aktuellem VBA.
Public Const AppVersion As String = "Sparprogramm_Version_1"
Public dBetrag As Double
Public lCount As Long
Public lEingabe As Long
Public sKonto As String
Public sMsg As String
Public sLine As String
Public oName As Object
Public oVorname As Object
Public oSaldo As Object
Public oZins As Object
Public oMitarbeiter As Object
Sub Sparprogramm()
'Sparprogramm
'Initialisierungsteil
Dim iFile As Integer
Dim v As Variant
If GLogger Is Nothing Then Start_Log
GLogger.SubName = "Sparprogramm"
GLogger.info "Start"
Set oName = CreateObject("Scripting.Dictionary")
Set oVorname = CreateObject("Scripting.Dictionary")
Set oSaldo = CreateObject("Scripting.Dictionary")
Set oZins = CreateObject("Scripting.Dictionary")
Set oMitarbeiter = CreateObject("Scripting.Dictionary")
iFile = FreeFile
On Error GoTo ErrHdl
Open ThisWorkbook.Path & "\EDVP007.DAT" For Input As #iFile
lCount = 0
Do While Not EOF(iFile)
Line Input #iFile, sLine
v = Split(sLine, "|")
lCount = lCount + 1
sKonto = v(0)
oName(sKonto) = v(1)
oVorname(sKonto) = v(2)
oSaldo(sKonto) = v(3)
oZins(sKonto) = v(4)
oMitarbeiter(sKonto) = v(5)
Loop
Close #iFile
NoData:
'Menu-Teil
sMsg = lCount & " Kont" & IIf(lCount = 1, "o", "en")
Do
lEingabe = InputBox(">>> " & sMsg & " <<<" & vbCrLf & _
"1 Konto eröffnen" & vbCrLf & _
"2 Konto auflösen" & vbCrLf & _
"3 Einzahlung" & vbCrLf & _
"4 Auszahlung" & vbCrLf & _
"5 (oder Abbrechen) Programmende", _
"Funktionen:")
Select Case lEingabe
Case 1
Call Konto_eroeffnen
Case 2
Call Konto_aufloesen
Case 3
Call Einzahlung
Case 4
Call Auszahlung
Case 5
Exit Do
Case Else
Call MsgBox("Fehlerhafte Eingabe '" & lEingabe & "'!", _
vbOKOnly, "Fehler")
End Select
GLogger.SubName = "Sparprogramm"
Loop While True
Programmende:
GLogger.SubName = "Sparprogramm"
iFile = FreeFile
Open ThisWorkbook.Path & "\EDVP007.DAT" For Output As #iFile
For Each v In oName.keys()
sLine = sKonto & "|" & oName(sKonto) & "|" & _
oVorname(sKonto) & "|" & _
oSaldo(sKonto) & "|" & oZins(sKonto) & "|" & _
oMitarbeiter(sKonto)
Print #iFile, sLine
GLogger.info sLine
Next v
Close #iFile
GLogger.info "Ende"
Exit Sub
ErrHdl:
GLogger.SubName = "Sparprogramm"
Select Case Err.Number
Case 13 'Benutzer brach Eingabe ab
GLogger.info Err.Number & " - Benutzer brach Eingabe ab"
Resume Programmende
Case 53 'Keine Datendatei
GLogger.info Err.Number & " - Keine Datendatei"
Resume NoData
Case Else
GLogger.info Err.Number & " - Unbekannter Fehler"
On Error GoTo 0
Resume 'Anderer Fehler - Abbruch
End Select
End Sub
Sub Kontonummer_eingeben()
GLogger.SubName = "Kontonummer_eingeben"
GLogger.info "Start"
On Error GoTo ErrHdl
sKonto = InputBox("Kontonummer", _
"Bitte sechsstellige Kontonummer eingaben:")
Do While Len(sKonto) <> 6
Call MsgBox("Fehlerhafte Kontonummer '" & _
sKonto & "'!", vbOKOnly, "Fehler")
sKonto = InputBox("Kontonummer", _
"Bitte sechsstellige Kontonummer eingaben:")
Loop
GLogger.info "Kontonummer: " & sKonto
Programmende:
GLogger.info "Ende"
Exit Sub
ErrHdl:
GLogger.SubName = "Kontonummer_eingeben"
Select Case Err.Number
Case 13 'Benutzer brach Eingabe ab
GLogger.info Err.Number & " - Benutzer brach Eingabe ab"
sMsg = "Eingabe abgebrochen. " & lCount & " Kont" & _
IIf(lCount = 1, "o", "en")
Resume Programmende
Case Else
GLogger.info Err.Number & " - Unbekannter Fehler"
On Error GoTo 0
Resume 'Anderer Fehler - Abbruch
End Select
End Sub
Sub Konto_eroeffnen()
Dim sMitarbeiter As String
Dim sName As String
Dim sVorname As String
Dim vZins As Variant
GLogger.SubName = "Konto_eroeffnen"
GLogger.info "Start"
On Error GoTo ErrHdl
Call Kontonummer_eingeben
GLogger.SubName = "Konto_eroeffnen"
If Len(sKonto) = 6 Then
Do While oName.exists(sKonto)
Call MsgBox("Kontonummer '" & sKonto & _
"' existiert bereits. Bitte neue Nummer wählen!", _
vbOKOnly, "Fehler")
Call Kontonummer_eingeben
GLogger.SubName = "Konto_eroeffnen"
Loop
sName = InputBox("Nachname des Kunden", "Konto: " & sKonto)
Do While Len(sName) = 0
Call MsgBox("Kein Nachname eingegeben!", vbOKOnly, "Fehler")
sName = InputBox("Nachname des Kunden", "Konto: " & sKonto)
Loop
sVorname = InputBox("Vorname des Kunden", "Konto: " & sKonto)
Do While Len(sVorname) = 0
Call MsgBox("Kein Vorname eingegeben!", vbOKOnly, "Fehler")
sVorname = InputBox("Vorname des Kunden", "Konto: " & sKonto)
Loop
vZins = 0#
Select Case Left(sName, 1)
Case "A" To "H"
sMitarbeiter = "Schlau"
Case "I" To "P"
sMitarbeiter = "Raffke"
Case Else
sMitarbeiter = "Lieblich"
End Select
oName(sKonto) = sName
oVorname(sKonto) = sVorname
oSaldo(sKonto) = 0#
oZins(sKonto) = 4#
oMitarbeiter(sKonto) = sMitarbeiter
lCount = lCount + 1
sLine = oName(sKonto) & "|" & oVorname(sKonto) & "|" & _
oSaldo(sKonto) & "|" & oZins(sKonto) & "|" & _
oMitarbeiter(sKonto)
GLogger.info sLine
sMsg = "Konto " & sKonto & " neu erstellt. " & _
lCount & " Kont" & IIf(lCount = 1, "o", "en")
Else
GLogger.warn "Fehlerhafte Kontonummer: " & sKonto
End If
Programmende:
GLogger.info "Ende"
Exit Sub
ErrHdl:
GLogger.SubName = "Konto_eroeffnen"
Select Case Err.Number
Case 13 'Benutzer brach Eingabe ab
GLogger.info Err.Number & " - Benutzer brach Eingabe ab"
sMsg = lCount & " Kont" & IIf(lCount = 1, "o", "en")
Resume Programmende
Case Else
GLogger.info Err.Number & " - Unbekannter Fehler"
On Error GoTo 0
Resume 'Anderer Fehler - Abbruch
End Select
End Sub
Sub Konto_aufloesen()
GLogger.SubName = "Konto_aufloesen"
GLogger.info "Start"
On Error GoTo ErrHdl
Call Kontonummer_eingeben
GLogger.SubName = "Konto_aufloesen"
Do While Not oName.exists(sKonto) Or oSaldo(sKonto) > 0#
Call MsgBox("Kontonummer '" & sKonto & _
"' existiert nicht oder weisst noch ein Guthaben auf. " & _
"Bitte bestehende Nummer mit Nullsaldo wählen!", _
vbOKOnly, "Fehler")
Call Kontonummer_eingeben
GLogger.SubName = "Konto_aufloesen"
Loop
If Len(sKonto) = 6 Then
oName.Remove sKonto
oVorname.Remove sKonto
oSaldo.Remove sKonto
oZins.Remove sKonto
oMitarbeiter.Remove sKonto
lCount = lCount - 1
GLogger.info "Auslösung von Konto " & sKonto
sMsg = "Konto " & sKonto & " aufgelöst. " & _
lCount & " Kont" & IIf(lCount = 1, "o", "en")
Else
GLogger.warn "Fehlerhafte Kontonummer: " & sKonto
End If
Programmende:
GLogger.info "Ende"
Exit Sub
ErrHdl:
GLogger.SubName = "Konto_aufloesen"
Select Case Err.Number
Case 13 'Benutzer brach Eingabe ab
GLogger.info Err.Number & " - Benutzer brach Eingabe ab"
sMsg = lCount & " Kont" & IIf(lCount = 1, "o", "en")
Resume Programmende
Case Else
GLogger.info Err.Number & " - Unbekannter Fehler"
On Error GoTo 0
Resume 'Anderer Fehler - Abbruch
End Select
End Sub
Sub Einzahlung()
GLogger.SubName = "Einzahlung"
GLogger.info "Start"
On Error GoTo ErrHdl
Call Kontonummer_eingeben
GLogger.SubName = "Einzahlung"
Do While Not oName.exists(sKonto)
Call MsgBox("Kontonummer '" & sKonto & _
"' existiert nicht. Bitte bestehende Nummer wählen!", _
vbOKOnly, "Fehler")
Call Kontonummer_eingeben
GLogger.SubName = "Einzahlung"
Loop
If Len(sKonto) = 6 Then
dBetrag = InputBox("Einzahlungsbetrag", "Konto: " & sKonto & _
", Guthaben: " & Format(oSaldo(sKonto), "#,##0.00"))
Do While dBetrag <> Application.Round(dBetrag, 2) Or dBetrag < 0#
Call MsgBox("Betrag darf nur 2 Nachkommastellen " & _
"haben und muss positiv sein!", _
vbOKOnly, "Fehler")
dBetrag = InputBox("Einzahlungsbetrag", "Konto: " & sKonto & _
", Guthaben: " & Format(oSaldo(sKonto), "#,##0.00"))
Loop
GLogger.info "Konto " & sKonto & ", Einzahlung von " & _
Format(dBetrag, "#,##0.00")
Else
GLogger.warn "Fehlerhafte Kontonummer: " & sKonto
End If
oSaldo(sKonto) = CDec(oSaldo(sKonto) + dBetrag)
sMsg = Format(dBetrag, "#,##0.00") & " auf Konto " & sKonto & _
" eingezahlt. Saldo nun " & Format(oSaldo(sKonto), "#,##0.00")
Programmende:
GLogger.info "Ende"
Exit Sub
ErrHdl:
GLogger.SubName = "Einzahlung"
Select Case Err.Number
Case 13 'Benutzer brach Eingabe ab
GLogger.info Err.Number & " - Benutzer brach Eingabe ab"
sMsg = lCount & " Kont" & IIf(lCount = 1, "o", "en")
Resume Programmende
Case Else
GLogger.info Err.Number & " - Unbekannter Fehler"
On Error GoTo 0
Resume 'Anderer Fehler - Abbruch
End Select
End Sub
Sub Auszahlung()
GLogger.SubName = "Auszahlung"
GLogger.info "Start"
On Error GoTo ErrHdl
Call Kontonummer_eingeben
Do While Not oName.exists(sKonto) Or oSaldo(sKonto) = 0#
Call MsgBox("Kontonummer '" & sKonto & _
"' existiert nicht. Bitte bestehende Nummer wählen!", _
vbOKOnly, "Fehler")
Call Kontonummer_eingeben
GLogger.SubName = "Auszahlung"
Loop
If Len(sKonto) = 6 Then
dBetrag = InputBox("Auszahlungsbetrag", "Konto: " & sKonto & _
", Guthaben: " & Format(oSaldo(sKonto), "#,##0.00"))
Do While dBetrag <> Application.Round(dBetrag, 2) Or _
dBetrag < 0# Or dBetrag > oSaldo(sKonto)
Call MsgBox("Betrag darf nur 2 Nachkommastellen haben und muss " & _
"positiv, aber kleiner oder gleich dem Guthaben sein!", _
vbOKOnly, "Fehler")
dBetrag = InputBox("Auszahlungsbetrag", "Konto: " & sKonto & _
", Guthaben: " & Format(oSaldo(sKonto), "#,##0.00"))
Loop
GLogger.info "Konto " & sKonto & ", Auszahlung von " & Format(dBetrag, "#,##0.00")
Else
GLogger.warn "Fehlerhafte Kontonummer: " & sKonto
End If
oSaldo(sKonto) = CDec(oSaldo(sKonto) - dBetrag)
sMsg = Format(dBetrag, "#,##0.00") & " von Konto " & sKonto & _
" ausgezahlt. Saldo nun " & Format(oSaldo(sKonto), "#,##0.00")
Programmende:
GLogger.info "Ende"
Exit Sub
ErrHdl:
GLogger.info Err.Number
GLogger.SubName = "Auszahlung"
Select Case Err.Number
Case 13 'Benutzer brach Eingabe ab
GLogger.info Err.Number & " - Benutzer brach Eingabe ab"
sMsg = lCount & " Kont" & IIf(lCount = 1, "o", "en")
Resume Programmende
Case Else
GLogger.info Err.Number & " - Unbekannter Fehler"
On Error GoTo 0
Resume 'Anderer Fehler - Abbruch
End Select
End Sub
Download
Bitte den Haftungsausschluss im Impressum beachten.
EDVP007.BAS.xlsm [62 KB Excel Datei, ohne jegliche Gewährleistung]