♦️
ICT-BZ: Modul 318 - Objektbasiert programmieren mit Komponenten
  • Intro
  • πŸ—“οΈKursplanung und Organisation
  • πŸ› οΈInfrastruktur und Tools
  • ❓FAQ
    • ❓.NET Desktop Development in Visual Studio nachinstallieren
    • ❓WinForms DataGridView
  • Tag 1
    • πŸ“–C# Grundlagen
    • πŸ’‘Γœbung C# Grundlagen
    • πŸ“–OOP Grundlagen
      • πŸ“–πŸ’‘ Exkurs: Objektdiagramm
    • πŸ’‘Methodik & Prozessmodelle
    • πŸ“–Vorgehensweisen
    • ❓Visual Studio & WinForms
    • πŸ’‘πŸ“– Aufgabensammlung
  • Tag 2
    • πŸ“–UI, UX, Usability
    • πŸ“–Analyse & Design
    • πŸ’‘Projektanforderungen analysieren
    • πŸ’‘Mockup Erstellen
  • Tag 3 - 4
    • πŸ“–Code QualitΓ€t
    • πŸ“–πŸ’‘ Coderichtlinien
    • πŸ“–Testing
      • ❓Testplan: Praxisbeispiel
      • ❓Testprotokoll: Praxisbeispiel
    • ❓Debugging
  • Projektarbeit
    • πŸ’‘Anforderungen und Dokumentation
      • SwissTransport API
    • πŸ› οΈProjektsetup
    • ❓Git Commit und Push in Visual Studio
    • πŸŽ“Bewertungsraster
    • 🚩Projektabgabe
      • πŸš©πŸ“– Binaries, Installer & GitHub Release
Powered by GitBook
On this page
  • Info
  • Aufgabe 1
  • Themen
  • Code-QualitΓ€t
  • Themen
  • Aufgabe 2
  • Themen
  • Aufgabe 3
  • Themen
  • Aufgabe 4
  • 4.1
  • 4.2
  • 4.3
  • 4.4
  • Aufgabe 5
  • Themen
  • Aufgabe 6
  • Themen
Export as PDF
  1. Tag 1

πŸ’‘πŸ“– Aufgabensammlung

PreviousVisual Studio & WinFormsNextUI, UX, Usability

Last updated 4 years ago

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: (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: _", ...).

  • Die Controls verwenden, welche bei Themen genannt werden.

  • "+"-Operator fΓΌr das VerknΓΌpfen von Strings verwenden (siehe Code unten)

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.

  • 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:

  • 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.

  • Korrekt ein- und ausschalten bedeutet, dass die Buttons nur dann eingeschaltet sein dΓΌrfen, wenn das dazugehΓΆrige Control ein Nahrungsmittel markiert hat. Beispiel: ">>" darf nur eingeschaltet sein, wenn in der ComboBox ein Nahrungsmittel markiert ist.

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.

  • Falls du nur einen RadioButton auf dem ganzen Form anwΓ€hlen kannst, liegt es wohl an der GroupBox

  • MessageBox.Show() oder MessageBox.ShowDialog() um eine solche anzuzeigen

  • FΓΌr schnelle:

    • Mit GroupBox.Controls kann man auf die Buttons und Boxes zugreifen

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.

  • Die DataGridView ist ein nΓΌtzliches Control

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%).

  • Baue diese Logik in die bei 4.3 erstellte Klasse ein

  • File.ReadAllText() um den ganzen Text einer Datei zu lesen

  • File.Exists() um zu ΓΌberprΓΌfen, ob eine Datei existiert

  • FΓΌr schnelle:

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:

  • Benenne die zwei Buttons mit einem sinnvollen Namen. Dies ist besonders wichtig, weil sich der Text Γ€ndern kann und die Buttons mehere Funktionen haben.

  • Schaue die Timer-Komponente (Toolbox > Timer, genannt System.Windows.Forms.Timer) an. Kann diese eine LΓΆsung sein?

  • System.TimeSpan kann fΓΌr Zeitdauern verwendet werden und DateTime.Now liefert das aktuelle Datum mit Uhrzeit

  • Beachte, dass Runden unterbrochen werden kΓΆnnen und noch immer die richtige Zeit haben mΓΌssen.

  • Schaue genau, ob deine Sekunde eine Sekunde lang ist. Es ist einfach, hier und da ein paar Millisekunden zu verlieren.

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.

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: .

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:

Mit kann man eine Liste nach Typ filtern

Streams sind eine robuste Alternative zur File-Klasse, die ihr wahrscheinlich noch antreffen werdet. Hier wΓ€re eine Gelegenheit, das einzubauen. Siehe .

Namespaces
https://deviq.com/magic-strings/
List<T>.OfType()
Siehe FAQ
Dokumentation dazu
❓FAQ
Beispiel Aufgabe 1
Beispiel Aufgabe 2
Beispiel Aufgabe 3
Beispiel Aufgabe 4.1
Beispiel Aufgabe 4.2
Ausgangslage
Stoppuhr lΓ€uft
Runden werden erfasst
Stoppuhr wird angehalten
Stoppuhr wird in die Ausgangslage zurΓΌck gesetzt