From a97a937c272a524e2eeaa8d1b1b4a51976ffcc97 Mon Sep 17 00:00:00 2001 From: Daniel Fast Date: Wed, 7 May 2025 09:08:09 +0200 Subject: [PATCH] =?UTF-8?q?Codeerkl=C3=A4rung.md=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit erklärung des codes --- Codeerklärung.md | 186 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 Codeerklärung.md diff --git a/Codeerklärung.md b/Codeerklärung.md new file mode 100644 index 0000000..3a9e165 --- /dev/null +++ b/Codeerklärung.md @@ -0,0 +1,186 @@ +## MainWindow.xaml.cs – Erklärung Zeile für Zeile + +using-Anweisungen: +Diese laden verschiedene Bibliotheken, die für die Funktionen des Programms benötigt werden – z. B. für GUI (WPF), Netzwerk, JSON-Verarbeitung, Textverarbeitung, usw. +```csharp + +System.Text – Für z. B. StringBuilder oder Kodierungen. + +System.Windows.* – Alles was WPF betrifft: Fenster, Controls, Styles etc. + +System.Net.Http – Für HTTP-Anfragen, hier verwendet für Wetter-API. + +System.Text.Json – Zum Lesen/Verarbeiten von JSON-Daten. + +System.Threading.Tasks – Für async/await, also asynchrone Methoden. + +System.IO – Für Dateioperationen wie Speichern des Chatverlaufs. +``` + +```csharp +namespace Chatbot_WPF_Projekt +{ + public partial class MainWindow : Window +``` + +- namespace: Projektname. + +- MainWindow: Hauptfenster des Programms. + +- : Window: Erbt von WPF-Fensterklasse. + +```csharp +private string currentLocation = ""; +public MainWindow() +{ + InitializeComponent(); +} +``` +- currentLocation: Speicherort für die aktuelle Stadt. + +- InitializeComponent(): Verbindet XAML und C#-Code. + +```csharp +private async void SendButton_Click(object sender, RoutedEventArgs e) + +``` +- private → Die Methode gehört nur zu dieser Klasse, andere Klassen sehen sie nicht. + +- async → Die Methode kann auf Dinge warten, wie z. B. eine Antwort vom Wetterdienst. + +- void → Die Methode gibt nichts zurück. + +- SendButton_Click → So heißt die Methode, typisch für Button-Klicks. + +- (object sender, RoutedEventArgs e) → Das sind Infos über das Klick-Ereignis. Wird von WPF automatisch mitgegeben. + +```csharp +string userInput = InputTextBox.Text.Trim(); + +``` +- Holt Nutzereingabe, entfernt Leerzeichen. + +```csharp +if (string.IsNullOrEmpty(userInput)) ... + +``` +- Wenn Eingabe leer → Hinweis. + +```csharp +ChatOutput.Text += $"Du: {userInput}\n"; + +``` +- Gibt Nutzereingabe im Chatverlauf aus. + +```csharp +string botResponse = ""; + +``` +- Legt Bot-Antwortvariable an. + +```csharp +botResponse = "Liste aller Befehle: !hilfe, !joke, !standort , !zeit, !wetter"; + +``` +- Listet alle befehle auf bei schreiben des !hilfe commands + +```csharp +string[] witze = new string[10]; ... +Random zufall = new Random(); ... + +``` +- Zufälliger Witz aus Liste. + +```csharp +string[] parts = userInput.Split(' ', 2); +currentLocation = parts[1]; + +``` +- Stadt speichern. + +```csharp +botResponse = $"Aktuelle Uhrzeit in {currentLocation}: {DateTime.Now.ToShortTimeString()}"; + +``` +- Gibt lokale Uhrzeit aus + +```csharp +botResponse = await GetWeatherAsync(currentLocation); + +``` +- Ruft Wetterdaten über API ab. + +```csharp +botResponse = "Befehl nicht erkannt."; + +``` +- befehl falsch oder garnicht geschrieben + +```csharp +private void InputTextBox_KeyDown(object sender, KeyEventArgs e) +{ + if (e.Key == Key.Enter) + SendButton_Click(sender, e); +} + +``` +- Drücken von Enter löst SendButton aus. + +```csharp +private void ClearButton_Click(object sender, RoutedEventArgs e) +{ + ChatOutput.Text = string.Empty; +} + +``` +- löscht den verlauf wenn man auf den clearbutton drückt + +```csharp +private void Color_theme_Checked ... +private void Color_theme_Unchecked ... + +``` +- Checked: Dunkler Hintergrund, helle Schrift. + +- Unchecked: Heller Hintergrund, dunkle Schrift. + +```csharp +private void SaveButton_Click(object sender, RoutedEventArgs e) +{ + string fileName = $"Chat_{DateTime.Now:yyyy-MM-dd_HHmm}.txt"; + ... +} + +``` +- Speichert Chat als .txt mit Datum/Uhrzeit im Namen. + +```csharp +private async Task GetWeatherAsync(string city) + +string url = $"https://api.openweathermap.org/data/2.5/weather?..."; + +``` +- URL zusammenbauen: +- HTTP-Anfrage senden mit HttpClient + +```csharp +double temp = root.GetProperty("main").GetProperty("temp").GetDouble(); +string description = root.GetProperty("weather")[0].GetProperty("description").GetString(); + +``` +- JSON-Daten parsen: + +```csharp +return $"Aktuelles Wetter in {city}: {temp}°C, {description}"; + +``` +- atntwort erzeugen + +```csharp +catch (Exception ex) +{ + return "Fehler beim Abrufen der Wetterdaten."; +} + +``` +- fehler behandlung \ No newline at end of file