class kunde { [string]$name kunde([string]$name) { $this.name = $name } kunde([string]$vorname, [string]$nachname) { $this.name = $vorname + " " + $nachname } } class konto { [kunde]$kunde [double]$guthaben [datetime]$erstelldatum static überweisen([konto]$von, [konto]$nach, [double]$menge) { $stand_von = $von.guthaben $stand_nach = $nach.guthaben try { $von.auszahlen($menge) $nach.einzahlen($menge) } catch { $von.guthaben = $stand_von $nach.guthaben = $stand_nach throw $_ } } überweisen([konto]$nach, [double]$menge) { [konto]::überweisen($this, $nach, $menge) } konto([kunde]$kunde) { $this.guthaben = 0 $this.erstelldatum = Get-Date $this.kunde = $kunde } [double]einzahlen([double]$menge) { if ($menge -lt 0) { throw "Einzahlungsmenge muss positiv sein!" } $this.guthaben += $menge return $this.guthaben } [double]auszahlen([double]$menge) { if ($menge -lt 0) { throw "Auszahlungsmenge muss positiv sein!" } if (($this.guthaben - $menge) -gt (-1000)) { $this.guthaben -= $menge } else { throw "Konto überzogen!" } return $this.guthaben } } class bank { [string]$name [System.Collections.Generic.List[konto]]$konten = @() [System.Collections.Generic.List[kunde]]$kunden = @() bank([string]$name) { $this.name = $name } auszahlen([konto]$konto, [double]$menge) { $konto.auszahlen($menge) } einzahlen([konto]$konto, [double]$menge) { $konto.einzahlen($menge) } überweisen([konto]$von, [konto]$nach, [double]$menge) { $von.überweisen($nach, $menge) } [kunde]neukunde([string]$vorname, [string]$nachname) { $kunde = [kunde]::new($vorname, $nachname) $this.kunden.add($kunde) return $kunde } [konto]konto_erstellen([kunde]$kunde) { $konto = [konto]::new($kunde) $this.konten.add($konto) return $konto } [void]übersicht() { Write-Host "Übersicht" foreach ($kunde in $this.kunden) { Write-Host $kunde.name foreach ($konto in $this.konten) { if ($konto.kunde -eq $kunde) { Write-Host " " $konto.guthaben } } } } } class cui { [int]$state = 0 [bank]$bank cui() { $this.bank = [bank]::new("defaultbank") } [konto]select_konto([string]$use) { if ($this.bank.konten.count -eq 0) { Write-Host "Es sind keine Konten vorhanden!" return $null } Write-Host "Wähle ein Konto" $use for ($i = 0; $i -lt $this.bank.konten.count; $i += 1) { Write-Host "Konto" $i "("$this.bank.konten[$i].guthaben") von" $this.bank.konten[$i].kunde.name } return $this.bank.konten[$(Read-Host "Auswahl")] } [kunde]select_kunde([string]$use) { if ($this.bank.kunden.count -eq 0) { Write-Host "Es sind keine Kunden vorhanden!" return $null } Write-Host "Wähle einen Kunden" $use for ($i = 0; $i -lt $this.bank.kunden.count; $i += 1) { Write-Host "Kunde" $i ":" $this.bank.kunden[$i].name } return $this.bank.kunden[$(Read-Host "Auswahl")] } [int]run() { $bname = Read-Host "Wähle einen Banknamen" $this.bank = [bank]::new($bname) while ($true) { Write-Host "Wähle eine Aktion aus:" Write-Host "1: Kunde anlegen" Write-Host "2: Konto anlegen" Write-Host "3: Einzahlen" Write-Host "4: Auszahlen" Write-Host "5: Überweißen" Write-Host "6: Übersicht" Write-Host "0: Beenden" $cmd = Read-Host "Aktion" switch ($cmd) { 0 { return 0 } 1 { $this.bank.neukunde( $(Read-Host "Vorname"), $(Read-Host "Nachname") ) } 2 { $k = $this.select_kunde("als Kontobesitzer") if ($null -ne $k) { $this.bank.konto_erstellen($k) } } 3 { $k = $this.select_konto("für das Einzahlen") if ($null -ne $k) { $amount = Read-Host "Menge" $this.bank.einzahlen($k, $amount) } } 4 { $k = $this.select_konto("für das Auszahlen") if ($null -ne $k) { $amount = Read-Host "Menge" $this.bank.auszahlen($k, $amount) } } 5 { $von = $this.select_konto("als Quelle") if ($null -ne $von) { $nach = $this.select_konto("als Ziel") $amount = Read-Host "Menge" $this.bank.überweisen($von, $nach, $amount) } } 6 { $this.bank.übersicht() Read-Host "Press any key" } } } return -1 } } $cui = [cui]::new() $cui.run()