Initial commit

This commit is contained in:
2025-12-10 12:06:02 +01:00
commit ba74d0f28b
6 changed files with 769 additions and 0 deletions

134
app.js Normal file
View File

@@ -0,0 +1,134 @@
// ===== STRING-METHODEN BEISPIELE IN DIESER APP =====
//
// 1. trim() Whitespace entfernen (in parseAmount)
// 2. replace() Komma durch Punkt ersetzen (in parseAmount)
// 3. toLowerCase() String zu Kleinbuchstaben (in showMessage)
// 4. length Zeichenanzahl prüfen (in transferBtn.addEventListener)
// 5. concat() und toUpperCase() können Sie in der HTML erweitern
//
// ===== WEITERE STRING-METHODEN =====
// indexOf(), lastIndexOf() Position eines Substrings finden
// slice(), substring() Teile eines Strings extrahieren
// charAt() einzelnes Zeichen an Position
// search() mit Regex suchen
//
// Siehe: STRING_METHODS_NOTES.md für detaillierte Dokumentation
const STORAGE_KEY = 'konto_balance_v1';
const INITIAL_BALANCE = 1000.00; // Anfangswert beliebig
const balanceDisplay = document.getElementById('balanceDisplay');
const amountInput = document.getElementById('amountInput');
const transferBtn = document.getElementById('transferBtn');
const messageDiv = document.getElementById('message');
function readStoredBalance(){
const raw = localStorage.getItem(STORAGE_KEY);
if(raw === null){
localStorage.setItem(STORAGE_KEY, INITIAL_BALANCE.toString());
return INITIAL_BALANCE;
}
const n = parseFloat(raw);
return Number.isFinite(n) ? n : INITIAL_BALANCE;
}
function writeStoredBalance(value){
localStorage.setItem(STORAGE_KEY, value.toString());
}
function formatCurrency(num){
return num.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' });
}
function showMessage(text, type){
messageDiv.textContent = text || '';
// ===== STRING-METHODEN: toLowerCase() =====
// toLowerCase() wandelt String in Kleinbuchstaben um
// Praktisch: Konsistente Vergleiche unabhängig von Groß-/Kleinschreibung
// Beispiel: "ERROR".toLowerCase() → "error"
const normalizedType = (type || '').toLowerCase();
messageDiv.className = '';
if(normalizedType === 'error') messageDiv.classList.add('msg-error');
if(normalizedType === 'warning') messageDiv.classList.add('msg-warning');
if(normalizedType === 'success') messageDiv.classList.add('msg-success');
}
function updateDisplay(){
const bal = readStoredBalance();
balanceDisplay.textContent = formatCurrency(bal);
if(bal < 0){
balanceDisplay.classList.add('negative');
} else {
balanceDisplay.classList.remove('negative');
}
}
function parseAmount(input){
if(!input) return NaN;
// ===== STRING-METHODEN IN AKTION =====
// 1. trim() entfernt äußere Whitespaces (Leerzeichen, Tabs, etc.)
// Praktisch: Benutzereingaben bereinigen
// Beispiel: " 123.45 ".trim() → "123.45"
const trimmed = input.trim();
// 2. replace() ersetzt Zeichen oder Substring
// Akzeptiere sowohl Komma als auch Punkt als Dezimaltrenner
// replace(searchValue, replaceValue) ersetzt ERSTES Vorkommen
// Beispiel: "123,45".replace(',', '.') → "123.45"
const normalized = trimmed.replace(',', '.');
// Alternative: replace() mit Regex und "g" Flag für alle Vorkommen
// const normalized = trimmed.replace(/,/g, '.');
return parseFloat(normalized);
}
transferBtn.addEventListener('click', ()=>{
showMessage('', null);
const raw = amountInput.value;
// ===== STRING-METHODEN: length und indexOf() =====
// length gibt die Anzahl der Zeichen zurück (Eigenschaft, keine Methode!)
// Beispiel: "Hallo".length → 5
// Praktisch: Prüfe ob Eingabe nicht leer ist
if(raw.length === 0){
showMessage('Bitte geben Sie einen Betrag ein.', 'error');
return;
}
const amount = parseAmount(raw);
if(!Number.isFinite(amount) || amount <= 0){
showMessage('Bitte geben Sie einen gültigen Betrag größer als 0 ein.', 'error');
return;
}
if(amount > 2000){
showMessage('Über 2000 € können nicht überwiesen werden. Vorgang abgebrochen.', 'error');
return;
}
const current = readStoredBalance();
const newBalance = +(current - amount).toFixed(2);
if(newBalance < 0){
showMessage('Achtung Konto überzogen', 'warning');
} else {
showMessage('Überweisung erfolgreich.', 'success');
}
writeStoredBalance(newBalance);
updateDisplay();
// ===== STRING-METHODEN: Eingabefeld leeren =====
// Setze den Wert auf einen leeren String ''
// Beispiel: input.value = ''
amountInput.value = '';
amountInput.focus();
});
updateDisplay();