C# Bankkonto, Hilfe?

2 Antworten

1) Tipp: Vermeide Bezeichner mit gleichem Namen, um Verwechslungen zu vermeiden. Benenne deinen Namespace anders.

2) Dein erster Kommentar ist inhaltlich falsch. Ein Konstruktor erstellt eine Instanz einer Klasse. Er enthält sie nicht.

3) Wieso markierst du deine Konstruktoren mit private? Damit machst du sie für außen unsichtbar. Das heißt, du kannst keine Instanz von Konto erstellen. Setze beide Konstruktoren public.

public Konto(int nummer, double saldo, string passwort)
{
  // ...
}

4) Dein zweiter Konstruktor hat genau die selbe Signatur, wie der erste Konstruktor. Das geht aber nicht. Wie soll das Programm denn bei einem Aufruf entscheiden können, welcher Konstruktor aufgerufen wird?

Da dein zweiter Konstruktor den Feldern Standardwerte zuordnen soll, braucht er auch keinen Parameter.

public Konto()
{
  // ...
}

5) Die Variable passwort ist ein String. Sie erwartet bei einer Zuweisung also auch ein Stringliteral. Die beiden Klammern sind dies nicht.

passwort = (); // wrong
passwort = "()"; // correct

Da du dem Passwort aber einen Standardwert zuordnen möchtest, wäre wohl null oder ein leerer String passender:

passwort = null;
// or
passwort = "";

6) Dein zweiter Konstruktor lässt sich abkürzen, er kann den ersten Konstruktor aufrufen:

public Konto() : this(123456, 0, "")
{
}

Mit this() lässt sich der eigene Konstruktor aufrufen. Den Konstruktor, auf den die Signatur passt, wählt der Programmfluss bei Ausführung automatisch.

7) Halte dich an C#-Konventionen. Die Bezeichner für Methoden und Properties beginnen mit einem Großbuchstaben.

8) Du schließt die Klammer bei der Methode auszahlen nicht. Solche Fehler siehst du doch bereits in deinem Editor.

9) Auch deine Methoden sind allesamt mit private markiert, obwohl du sie außerhalb der Klasse ganz sicher einmal einsetzen möchtest. Oder nicht?

10) Wenn du eine Methode / einen Konstruktor aufrufst, dann muss die Signatur auch passen, die du angibst.

So gibt es keinen Konstruktor, der nur ein Argument entgegennimmt und dazu ein Objekt der Klasse Konto erzeugt.

Konto einzahlen = new Konto(234);

Möglich wären nach Korrektur der oberen Punkte nur diese Aufrufe:

Konto konto1 = new Konto();
Konto konto2 = new Konto(1, 2.0, "irgendein Passwort");

11) Setze hier:

Console.WriteLine("Sie haben" + einzahlungsbetrag + "EUR eingezahlt");

noch Leerzeichen, damit die Ausgabe später auch gut lesbar ist.

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

Ich habe auch einige Fehler drin, weiß aber nicht genau, wie ich diese verbessern kann.

Schau dir doch einfach einmal die Fehler an, die dir Visual Studio so um die Ohren haut. Die Fehler werden rot unterstrichen und mit einem Fehlertext (Popup) beschrieben.

Ich glaube, dass getter und setter benötigt werden (...)

Wieso?

Außerdem weiß ich leider nicht, wie ich in Main die Auszahlungen und Einzahlungen durchführen kann.

Eine Instanz der Klasse Konto reicht für dein Programm aus. Den Rest erledigen die Methoden zum ein- und auszahlen, die du über die Instanz aufrufen kannst.

Die Logik bezüglich des Passworts solltest du natürlich noch ändern. Du musst ein Passwort festlegen, welches als valides Passwort gilt und dieses dann auch mit dem gegebenen Passwort vergleichen. Wenn die gegebenen Daten vom Nutzer während des Programmverlaufs eingegeben können sollen, musst du dein Programm noch etwas ergänzen. Mit einer Instanz der Console-Klasse kannst du Eingaben von der Konsole auslesen.

PWolff  24.06.2018, 21:17

Hinzu kommt noch, dass sich in C# Strings und Zahlen nicht einfach so verketten lassen.

Entweder:

"string1" + zahl.ToString() + "string2"

oder

String.Format("zahl1 {0} zahl2", zahl)

Zuzüglich der inhaltlichen Fehler:

"bool passwort" tut geradezu weh; und

if (passwort == false && auszahlungsbetrag > saldo)

ist bestimmt ganz anders gedacht, zumindest ein || wäre sinnvoll, aber dann bleibt immer noch die missverständliche Fehlermeldung.

-----

P. S.: Ich hab's noch mal ausprobiert, string + double geht tatsächlich, zumindest in der neuesten Version von C#. Vor ein paar Versionen war das noch ein Fehler -- was ich auch für sinnvoller halte.

Ob man, da ist ziemlich viel Quatch im Code. Du solltest am besten Schritt für Schritt vorgehen und den Code immer neu compilieren lassen. Sonst sammeln sich die Fehler und du blickst nicht mehr durch.