Student Feedback Collection Tool

Student Feedback Collection Tool

Add courses, then collect and view student feedback.

Add a New Course

Existing Courses

Submit Student Feedback

View Collected Feedback

No courses added yet.

`; return; } courses.forEach(course => { const item = document.createElement('div'); item.className = 'bg-white p-4 rounded-md shadow-sm border flex items-center justify-between'; item.innerHTML = `

${course.name}

`; manageListContainer.appendChild(item); }); }; const renderFeedbackSelects = () => { const defaultOption = ''; const courseOptions = courses.map(c => ``).join(''); feedbackCourseSelect.innerHTML = defaultOption + courseOptions; viewFeedbackCourseSelect.innerHTML = defaultOption + courseOptions; }; const displayFeedbackForCourse = (courseId) => { feedbackDisplayContainer.innerHTML = ''; if (!courseId) { feedbackDisplayContainer.innerHTML = '

Select a course to see feedback.

'; return; } const courseFeedback = feedback.filter(f => f.courseId == courseId); if (courseFeedback.length === 0) { feedbackDisplayContainer.innerHTML = '

No feedback has been submitted for this course yet.

'; return; } courseFeedback.forEach(f => { const card = document.createElement('div'); card.className = 'bg-white p-4 rounded-lg shadow border'; card.innerHTML = `
${Array(5).fill(0).map((_, i) => ``).join('')}
${new Date(f.id).toLocaleDateString()}

What was liked:

${f.likes || 'N/A'}

Suggestions for improvement:

${f.improvements || 'N/A'}

`; feedbackDisplayContainer.appendChild(card); }); }; const handleAddCourse = (e) => { e.preventDefault(); const name = courseNameInput.value.trim(); if (name) { courses.push({ id: Date.now(), name }); saveData(); renderAll(); addCourseForm.reset(); showMessage('Course added successfully!'); } else { showMessage('Please provide a valid course name.', 'error'); } }; const handleManageListClick = (e) => { const target = e.target.closest('button'); if (!target || target.dataset.action !== 'delete') return; const id = parseInt(target.dataset.id, 10); // Directly delete without confirmation courses = courses.filter(c => c.id !== id); feedback = feedback.filter(f => f.courseId !== id); saveData(); renderAll(); showMessage('Course deleted.'); }; const handleFeedbackSubmit = (e) => { e.preventDefault(); const courseId = feedbackCourseSelect.value; const rating = feedbackForm.querySelector('input[name="rating"]:checked')?.value; if (!courseId || !rating) { showMessage('Please select a course and provide a rating.', 'error'); return; } const newFeedback = { id: Date.now(), courseId: parseInt(courseId, 10), rating: parseInt(rating, 10), likes: document.getElementById('feedbackLikes').value.trim(), improvements: document.getElementById('feedbackImprovements').value.trim() }; feedback.push(newFeedback); saveData(); showMessage('Thank you for your feedback!'); feedbackForm.reset(); renderAll(); }; // --- Event Listeners --- addCourseForm.addEventListener('submit', handleAddCourse); manageListContainer.addEventListener('click', handleManageListClick); feedbackForm.addEventListener('submit', handleFeedbackSubmit); viewFeedbackCourseSelect.addEventListener('change', (e) => displayFeedbackForCourse(e.target.value)); // --- Initial Load --- loadData(); renderAll(); });
Scroll to Top