JS Lab 3 progress

This commit is contained in:
2026-02-24 18:02:01 -05:00
parent f186c94048
commit a7b70a2a55
6 changed files with 58 additions and 12 deletions
+11 -9
View File
@@ -1,7 +1,7 @@
import {students} from "./data.js"
let passingStudents = [];
function getPassingStudents(students, passMark = 70) {
export function getPassingStudents(students, passMark = 70) {
if (isNaN(passMark) || passMark < 0) {
return false;
}
@@ -9,13 +9,13 @@ function getPassingStudents(students, passMark = 70) {
let grade = parseInt(student.grade);
if (isNaN(grade)) return false;
return true;
return grade >= passMark;
});
return passingStudents;
}
function calculateCourseAverage(students) {
function calculateCourseAverages(students) {
}
function getTopPerCourse(students) {
@@ -23,9 +23,11 @@ function getTopPerCourse(students) {
}
function calculateOverallStatistics(students) {
}
function calculateAssignmentAvgerage(students) {
const summary = document.getElementById("summary");
summary.innerHTML += `<p>Total Students: ${students.length}</p><br>
<p>Average Grade: </p><br>
<p>Highest Grade: </p><br>
<p>Lowest Grade: </p><br>
<p>Average Attendance: %</p><br>
<p>Unique Courses: </p><br>`;
}
+10 -1
View File
@@ -3,10 +3,16 @@
<head>
<title>Levi McLean JS Lab 3</title>
<meta charset="utf-8">
<link rel="stylesheet" href="./style.css">
</head>
<body>
<h1>JS Lab 3</h1>
<h1>Student Performance Analytics Dashboard</h1>
<input type="text" placeholder="Search By Name" id="nameSearch">
<label for="minimumGrade">Minimum Grade:</label>
<input type="range" min="0" max="100" name="minimumGrade" id="minimumGrade">
<button type="button">Toggle Theme</button>
<table id="studentTable">
<thead>
<tr>
@@ -21,6 +27,9 @@
</thead>
<tbody id="studentTableBody"></tbody>
</table>
<div id="summary">
<h2>Summary</h2>
</div>
<script type="module" src="main.js"></script>
<script type="module" src="data.js"></script>
<script type="module" src="analytics.js"></script>
+22
View File
@@ -0,0 +1,22 @@
body {
font-family: Arial, Helvetica, sans-serif;
padding: 0;
margin: 0;
}
table {
border: 2px solid black;
background-color: white;
border-collapse: collapse;
width: 100%;
}
table td, table th {
border: 2px solid black;
padding: 6px 10px;
text-align: center;
}
table th {
background-color: #f0f0f0;
}
+8 -2
View File
@@ -1,6 +1,11 @@
import {students} from "./data.js"
import {calculateAssignmentAverage} from "./utils.js"
import {getPassingStudents} from "./analytics.js"
const passingStudents = getPassingStudents(students);
const passingIds = passingStudents.map(student => student.id);
const tableBody = document.getElementById("studentTableBody");
students.forEach(student => {
const row = document.createElement("tr");
const name = document.createElement("td");
@@ -12,8 +17,9 @@ students.forEach(student => {
const attendance = document.createElement("td");
attendance.textContent = student.attendance + "%" ?? "-";
const assignmentAvg = document.createElement("td");
// assignmentAvg.textContent = calculateAssignmentAvgerage(student); TODO
assignmentAvg.textContent = calculateAssignmentAverage(student);
const status = document.createElement("td");
status.textContent = passingIds.includes(student.id) ? "Pass" : "Fail";
const city = document.createElement("td");
city.textContent = student.address.city ?? "-";
row.append(name, course, grade, attendance, assignmentAvg, status, city);
+7
View File
@@ -0,0 +1,7 @@
export function calculateAssignmentAverage(student) {
if (!student.assignments || student.assignments.length === 0) {
return false;
}
const total = student.assignments.reduce((sum, score) => sum + score, 0);
return total / student.assignments.length;
}