Skip to content

Kapitel 14: Basis-Praxis

Praxis 1: Einfacher Taschenrechner

14.1 Anforderungsanalyse

Realisiere Grundrechenarten (Addition, Subtraktion, Multiplikation, Division, Modulo), unterstütze Benutzereingabe und zeige das Berechnungsergebnis an.

14.2 Kernimplementierung

dart
import 'dart:io';

void main() {
  print('=== Einfacher Taschenrechner ===');
  
  // Erste Zahl abfragen
  stdout.write('Gib die erste Zahl ein: ');
  double zahl1 = double.parse(stdin.readLineSync()!);
  
  // Operator abfragen
  stdout.write('Gib den Operator ein (+, -, *, /, %): ');
  String operator = stdin.readLineSync()!;
  
  // Zweite Zahl abfragen
  stdout.write('Gib die zweite Zahl ein: ');
  double zahl2 = double.parse(stdin.readLineSync()!);
  
  // Berechnung durchführen
  double ergebnis;
  
  try {
    switch (operator) {
      case '+':
        ergebnis = zahl1 + zahl2;
        break;
      case '-':
        ergebnis = zahl1 - zahl2;
        break;
      case '*':
        ergebnis = zahl1 * zahl2;
        break;
      case '/':
        if (zahl2 == 0) {
          throw 'Division durch Null ist nicht erlaubt';
        }
        ergebnis = zahl1 / zahl2;
        break;
      case '%':
        ergebnis = zahl1 % zahl2;
        break;
      default:
        throw 'Unbekannter Operator';
    }
    
    print('Ergebnis: ' + ergebnis.toString());
  } catch (e) {
    print('Fehler: ' + e.toString());
  }
}

14.3 Code-Erklärung und Optimierung

  • Verwende try-catch zur Fehlerbehandlung
  • Überprüfe auf Division durch Null
  • Füge Schleife hinzu, um mehrere Berechnungen durchzuführen

Praxis 2: Studenten-Informationsverwaltungssystem

14.4 Anforderungsanalyse

Füge Studenteninformationen hinzu, lösche sie, frage sie ab, ändere sie und zeige die gesamte Studentenliste an.

14.5 Kernimplementierung

dart
import 'dart:io';

class Student {
  String name;
  int alter;
  int note;
  
  Student(this.name, this.alter, this.note);
  
  void informationenAnzeigen() {
    print('Name: ' + name + ', Alter: ' + alter.toString() + ', Note: ' + note.toString());
  }
}

List<Student> studentenListe = [];

void hinzufügen() {
  stdout.write('Name: ');
  String name = stdin.readLineSync()!;
  
  stdout.write('Alter: ');
  int alter = int.parse(stdin.readLineSync()!);
  
  stdout.write('Note: ');
  int note = int.parse(stdin.readLineSync()!);
  
  studentenListe.add(Student(name, alter, note));
  print('Student hinzugefügt!');
}

void anzeigen() {
  if (studentenListe.isEmpty) {
    print('Keine Studenten vorhanden');
  } else {
    for (Student s in studentenListe) {
      s.informationenAnzeigen();
    }
  }
}

void main() {
  while (true) {
    print('\n=== Studentenverwaltung ===');
    print('1. Hinzufügen');
    print('2. Anzeigen');
    print('3. Beenden');
    stdout.write('Wähle: ');
    
    String wahl = stdin.readLineSync()!;
    
    switch (wahl) {
      case '1':
        hinzufügen();
        break;
      case '2':
        anzeigen();
        break;
      case '3':
        print('Beende...');
        return;
      default:
        print('Ungültige Auswahl');
    }
  }
}

14.6 Optimierung und Datenvalidierung

  • Füge Lösch- und Änderungsfunktionen hinzu
  • Validiere Eingabedaten
  • Speichere Daten in Dateien

Praxis 3: Simulation asynchroner Datnanfrage

14.7 Anforderungsanalyse

Simuliere Netzwerkanfragen, rufe Daten ab, verarbeite Erfolgs- und Fehlerszenarien und zeige Daten an.

14.8 Kernimplementierung

dart
import 'dart:async';

// Simuliere Netzwerkanfrage
Future<Map<String, dynamic>> holeDaten(bool erfolg) {
  return Future.delayed(Duration(seconds: 2), () {
    if (erfolg) {
      return {
        'status': 'erfolg',
        'daten': [1, 2, 3, 4, 5]
      };
    } else {
      throw 'Netzwerkfehler';
    }
  });
}

Future<void> appStarten() async {
  print('App startet...');
  
  try {
    print('Sende Anfrage...');
    Map<String, dynamic> antwort = await holeDaten(true);
    print('Antwort erhalten: ' + antwort.toString());
    
    // Daten verarbeiten
    List<dynamic> daten = antwort['daten'];
    print('Daten: ' + daten.toString());
  } catch (fehler) {
    print('Fehler: ' + fehler.toString());
  } finally {
    print('Anfrage abgeschlossen');
  }
}

void main() async {
  await appStarten();
  print('Andere Aufgaben werden ausgeführt...');
}

14.9 Simulation der Datnanzeige und Fehleranzeige

  • Füge Ladeanimation hinzu
  • Verarbeite verschiedene Fehlertypen
  • Implementiere Wiederholungsversuch bei Fehlern

Frei für alle Anfänger