Appearance
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-catchzur 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
