💡📖 Aufgabensammlung
Info
Unten stehen sechs Aufgaben. Es ist empfohlen, dass alle Aufgaben in der selben Projektmappe (Solution) gelöst werden. In der Projektmappe soll pro Aufgabe ein Projekt angelegt werden. Du kannst wählen, welches Projekt ausgeführt wird, indem du folgenden Anweisungen folgst: ❓FAQ (Wie kann ich wählen, welches meiner Projekte ausgeführt wird?).
Aufgabe 1
Themen
TextBox Control
Button Control
ListBox Control

Es soll ein Text eingegeben werden können. Dieser Text wird der Liste hinzugefügt, sobald die Eingabe bestätigt wird. Die Listeneinträge sollen nummeriert werden ("1: _", "2: _", ...).
var name = "Bob";
var text = "Name: " + name;
// => text == "Name: Bob"Code-Qualität
Themen
Namensgebung
Angenehme Benutzeroberfläche gestalten
Folgendes soll bei der generellen Namensgebung beachtet werden:
Priorisiere Lesbarkeit über Kürze (CanScrollHorizontally anstatt ScrollableX)
Auch keine Abkürzungen, ausser in Ausnahmefällen mit allgemein bekannten Abkürzungen
Wähle eine einfache Reihenfolge (CanScrollHorizontally anstatt HorizontalCanScroll)
Gestalte den Namen einfach
Keine _ und andere Sonderzeichen
Keine Typ-Prefixe (name anstatt sName) (Ausnahme siehe Controls)
Keine Umlaute
Folgendes soll bei der Namensgebung für WinForms beachtet werden:
Projektmappen sollen sinnvolle Namen haben (z.B. "M318Exercises" anstatt "MySolution")
Projekte sollen sinnvolle Namen haben (z.B. "M318Exercise1" anstatt "MyFormsProject")
Der Name kann auf Deutsch oder Englisch sein, solange alle Namen in derselben Sprache sind.
Optional: Der Name kann Punkte enthalten. Wenn er Punkte enthält, soll der Namen der Projektmappe am Anfang des Namens des Projekts stehen (z.B. "M318.Exercises" & "M318.Exercises.Nr1") Stichwort: Namespaces.
Die Controls (z.B. Label, TextBox, ListBox) sollen sinnvolle Namen haben
Beispiel 1: titleLabel anstatt label1
Beispiel 2: connectionsGrid anstatt dataGridView1 oder connectionsDataGridView
Wichtig: Alle Controls sollen gute Namen haben, nicht nur die, welche im Code verwendet werden.
Die Events sollen sinnvolle Namen haben
Option 1: Korrekte Namensgebung verwenden
_ entferenen
Umformulierung
Beispiel: ConnectionsSelectedIndexChanged
Option 2: Generierte Namen verwenden
Achtung: Wenn ein Control umbenennt wird, müssen auch die dazugehörigen Events umbenennt werden.
Beispiel: connectionsGrid_SelectedIndexChanged
Folgendes soll Für die Benutzerfreundlichkeit beachtet werden:
Die Tab-Reihenfolge soll sinnvoll sein
TabIndex-Eigenschaft
Zusammengehörige Controls nacheinander
Etwa in der Reihenfolge, wie man liest
Bestätigungsfunktion (AcceptButton-Eigenschaft von Form)
Stellt ein, was passiert, wenn man Enter drückt
Sollte beinahe immer gesetzt sein
Abbrechenfunktion (CancelButton-Eigenschaft von Form)
Stellt ein, was passiert, wenn man Escape drückt
Soll bei Dialogen gesetzt sein
Anchoring korrekt gesetzt
Wenn man bei einem Form die Grösse verändern kann, muss die Anchor-Eigenschaft der Controls gesetzt werden. So werden die Controls sauber angezeigt.
Tipp: Controls, welche den Anchor links haben, sollen nur links von Controls sein, welche den Anchor rechts haben. Controls, welche den Anchor sowohl links als auch rechts haben, soll rechts nur rechts-Anchored und links nur links-Anchored Controls haben.
Folgendes sollte zur allgemeinen Codequalität beachtet werden:
Magic Strings: Strings, welche direkt in einer Statement hart kodiert sind und das Verhalten der Anwendung steuern. Diese sollen via Konstanten oder Variablen abgebildet werden. Mehr, siehe: https://deviq.com/magic-strings/
Redundante Strings: Wenn ein String doppelt in der Anwendung vorkommt soll er via Konstanten oder Variablen ausgelagert und nur einmalig deklariert werden. Dies gilt doppelt für Magic Strings.
Die Einrückung soll immer gleich sein (Standard im Visual Studio: 4 Tabs pro geschachteltem Codeblock)
Diese Grundsätze sollen ab jetzt immer umgesetzt werden. Bei der Projektarbeit zählt das zu Benutzerfreundlichkeit und Code-Qualität!
Aufgabe 2
Themen
ComboBox Control
Buttons korrekt einschalten oder ausschalten
Doppelklick

Erstelle eine Anwendung, in welcher du auswählen kannst, was du frühstücken möchtest. Diese Anwendung soll aus folgenden Teilen bestehen:
Combobox, welche alle nicht gewählten Nahrungsmittel enthält
Listbox, welche die gewählten Nahrungsmittel enthält
Ein Button ">>", welcher das in der Combobox markierte Nahrungsmittel wählt
Ein Button "<<", welcher das in der Listbox markierte Nahrungsmittel entwählt
Ein Doppelklick auf ein Nahrungsmittel in der Listbox hat dieselbe Funktionalität wie der Button "<<", das Nahrungsmittel soll also entwählt werden.
Ein wichtiges Feature ist, dass die Buttons korrekt ein- und ausgeschalten werden. Wichtig zu beachten ist, dass jedes Nahrungsmittel entweder in der Combobox oder in der Listbox ist, aber nicht an beiden Orten zugleich.
Aufgabe 3
Themen
RadioButton Control
CheckBox Control
GroupBox Control

Erstelle eine Anwendung mit drei Gruppen (GroupBox). In der ersten zwei Gruppen sollen je drei RadioButton-Controls sein. In der dritten Gruppe sollen drei CheckBox-Controls sein. Beim Klick auf einen Button soll eine MessageBox gezeigt werden, welche ausgibt, was ausgewählt wurde.
Aufgabe 4
4.1
Themen
Eingabevalidierung
Status der Anwendung merken

Erstelle ein Form, welches ein Eingabefeld, einen Einzahlen-Button, einen Abheben-Button und ein Label mit dem aktuellen Kontostand hat. Man darf nur positive Zahlen eingeben. Das Abheben soll nur dann passieren, wenn man auch genügend Geld auf dem Konto hat. Ansonsten soll eine Fehlermeldung gezeigt werden. Die Anzeige soll immer den aktuellen Kontostand anzeigen.
4.2
Themen
DataGridView Control

Neu soll ein Protokoll erstellt werden. Verwende dafür eine DataGridView mit drei Spalten: Uhrzeit, Änderung des Kontostands und neuer Kontostand.
4.3
Themen
Logik in eine Klasse auslagern
Erstelle eine Klasse, welche die Logik für dein Bankkonto enthält. Sie soll folgende Methoden enthalten:
public class BankAccount // Oder ‘Bankkonto’, je nach gewählter Sprache
{
public decimal Balance { get; private set; }
public bool Deposit(decimal amount) {...}
public bool Withdraw(decimal amount) {...}
}Lagere nun alle Logik in diese Klasse aus. Beachte, dass du keine redundante Logik hast. Die Klasse soll für alle möglichen Eingaben korrekt reagieren, sprich negative Eingaben ablehnen.
4.4
Themen
Datei-Interaktionen
Der aktuelle Kontostand soll nun nicht nur angezeigt, sondern auch in einer Datei gespeichert werden. Wenn die Anwendung gestartet wird soll der Kontostand aus der Datei geladen werden. Diese Datei soll im Ordner der Temporären App-Daten sein (Umgebungsvariable %TEMP%).
Aufgabe 5
Themen
Timer
Anwendung mit mehreren möglichen Zuständen abbilden
Entwickle eine Stoppuhr. Sie soll aus einer Zeitanzeige (hh:mm:ss), zwei Buttons und einer ListBox bestehen. Sie soll den folgenden Ablauf abbilden können:





Aufgabe 6
Themen
Komplexere Anwendung realisieren
Erstelle eine Adressverwaltung. Die wichtigsten Funktionen sind:
Erfassen, Löschen und Bearbeiten von Adressen
Speichern und Laden der Adressen in/aus einer Datei
Suchen von Adressen
Anforderungen:
Klasse, z.B. Address, welche die Daten einer Adresse enthält. Sie soll folgende Eigenschaften haben:
Vorname
Nachname
Strasse
Postleitzahl
Ort
UI
Suchfeld
DataGridView mit der Liste der Adressen
Eingabefelder für die Eigenschaften der neuen oder zu bearbeitenden Adresse
Toolbar mit einer Option "Datei" mit den Optionen "Speichern" und "Laden"
Die Suche soll alle Eigenschaften der Adresse beinhalten.
Das Speichern und Laden der Adressen in einer Datei soll nur via Optionen in der Toolbar passieren, nicht beim Start der Anwendung.
Das Datei für das Speichern und Laden soll mit einem Datei-Dialog gewählt werden können.
Last updated