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

Sparprogramm_Prozedurales_Programmieren

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]