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() { 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) { 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")] } run() { $bname = Read-Host "Wähle einen Banknamen:" $this.bank = [bank]::new($bname) while ($this.state -ne -1) { 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 "0: Beenden" } } } #Tests $bank = [bank]::new("Benannte Bank") $kunde1 = $bank.neukunde("Kunde", "Kundengesicht") $konto1 = $bank.konto_erstellen($kunde1) $kunde2 = $bank.neukunde("Anderes", "Kundengesicht") $konto2 = $bank.konto_erstellen($kunde2) $bank.überweisen($konto1, $konto2, 150) $bank.übersicht() $cui = [cui]::new() $cui.bank = $bank $cui.select_konto("Test")