// ====================== AUFGABE 3: NOTENRECHNER DOM-VERSION ====================== /** * Berechnet die Note basierend auf der Prozentpunktzahl * @param {number} prozentsatz - Der Prozentsatz (0-100) * @returns {string} Die entsprechende Note als Text */ function berechneNoteDom(prozentsatz) { if (prozentsatz >= 90) { return "sehr gut"; } else if (prozentsatz >= 75) { return "gut"; } else if (prozentsatz >= 60) { return "befriedigend"; } else if (prozentsatz >= 50) { return "ausreichend"; } else { return "nicht bestanden"; } } /** * Gibt die Farbe basierend auf der Note zurück * @param {string} note - Die Note * @returns {string} Der CSS-Klassennamen für die Farbe */ function getFarbeKlasse(note) { switch (note) { case "sehr gut": case "gut": return ""; case "befriedigend": return "befriedigend"; case "ausreichend": return "ausreichend"; case "nicht bestanden": return "nicht-bestanden"; default: return ""; } } /** * Initialisiert den Notenrechner und registriert Event Listener */ document.addEventListener("DOMContentLoaded", () => { const form = document.getElementById("notenForm"); const calculateBtn = document.getElementById("calculateBtn"); const inputField = document.getElementById("punkte"); const errorMessage = document.getElementById("errorMessage"); const resultatDiv = document.getElementById("ergebnis"); const resultText = document.getElementById("resultText"); const progressBar = document.getElementById("progressBar"); const percentageText = document.getElementById("percentageText"); if (!form || !calculateBtn) { return; // Nur auf notenrechner-dom.html verfügbar } /** * Validiert die Eingabe * @returns {boolean} true wenn die Eingabe gültig ist, sonst false */ function validateInput() { const value = inputField.value.trim(); // Prüfung: Ist das Feld leer? if (value === "") { errorMessage.textContent = "Fehler: Bitte geben Sie eine Punktzahl ein."; inputField.classList.add("error"); inputField.style.borderColor = "red"; return false; } // Prüfung: Ist es eine Zahl? const punkte = parseFloat(value); if (isNaN(punkte)) { errorMessage.textContent = "Fehler: Bitte geben Sie eine gültige Zahl ein."; inputField.classList.add("error"); inputField.style.borderColor = "red"; return false; } // Prüfung: Ist die Zahl zwischen 0 und 100? if (punkte < 0 || punkte > 100) { errorMessage.textContent = "Fehler: Die Punktzahl muss zwischen 0 und 100 liegen."; inputField.classList.add("error"); inputField.style.borderColor = "red"; return false; } // Validierung erfolgreich errorMessage.textContent = ""; inputField.classList.remove("error"); inputField.style.borderColor = ""; return true; } /** * Berechnet die Note und zeigt das Ergebnis an */ function calculateGrade() { if (!validateInput()) { resultatDiv.style.display = "none"; return; } const punkte = parseFloat(inputField.value); const note = berechneNoteDom(punkte); const farbeKlasse = getFarbeKlasse(note); // Ergebnis anzeigen resultText.textContent = `${punkte} Punkte = ${note}`; // Progress Bar aktualisieren progressBar.style.width = `${punkte}%`; progressBar.textContent = `${punkte}%`; progressBar.className = `progress-bar ${farbeKlasse}`; // Prozentsatz-Text aktualisieren percentageText.textContent = `${punkte}% erreicht`; // Resultat-Container anzeigen resultatDiv.style.display = "block"; } // Event Listener: Button Click calculateBtn.addEventListener("click", (e) => { e.preventDefault(); calculateGrade(); }); // Event Listener: Enter-Taste inputField.addEventListener("keypress", (e) => { if (e.key === "Enter") { e.preventDefault(); calculateGrade(); } }); // Event Listener: Input ändern (Fehler löschen) inputField.addEventListener("input", () => { if (inputField.value.trim() !== "") { errorMessage.textContent = ""; inputField.classList.remove("error"); inputField.style.borderColor = ""; } }); });