// ==UserScript== // @name ImmediateGPA of UCAS // @namespace http://tampermonkey.net/ // @version 1.1 // @description Update your GPA immediately! // @author Sunny Lin // @match https://jwxk.ucas.ac.cn/score/bks/all // @grant none // @license AGPL License // @downloadURL none // ==/UserScript== (function () { 'use strict'; //Get Elements of Table and Transform it into an Array 'grades' var gradesTable = document.getElementsByClassName("table")[0]; var rowCount = gradesTable.rows.length; var grades = []; for (var i = 0; i < rowCount; i++) { var cellCount = gradesTable.rows[i].cells.length; var row = []; for (var j = 0; j < cellCount; j++) { var cell = gradesTable.rows[i].cells[j].innerHTML; row.push(cell); } grades.push(row); } //Transform Scores into Grade Points function calculateGradePoint(scoreText) { if (scoreText == '补考及格'){ return 1.0; } else { var score = Number(scoreText); if (score >= 90) { return 4.0; } else if (score < 90 && score >= 87) { return 3.9; } else if (score < 87 && score >= 85) { return 3.8; } else if (score < 84 && score >= 83) { return 3.7; } else if (score < 83 && score >= 82) { return 3.6; } else if (score < 82 && score >= 80) { return 3.5; } else if (score < 80 && score >= 78) { return 3.4; } else if (score < 78 && score >= 76) { return 3.3; } else if (score < 76 && score >= 75) { return 3.2; } else if (score < 75 && score >= 74) { return 3.1; } else if (score < 74 && score >= 73) { return 3.0; } else if (score < 73 && score >= 72) { return 2.9; } else if (score < 72 && score >= 71) { return 2.8; } else if (score < 71 && score >= 69) { return 2.7; } else if (score < 69 && score >= 68) { return 2.6; } else if (score < 68 && score >= 67) { return 2.5; } else if (score < 67 && score >= 66) { return 2.4; } else if (score < 66 && score >= 64) { return 2.3; } else if (score < 64 && score >= 63) { return 2.2; } else if (score < 63 && score >= 62) { return 2.1; } else if (score < 62 && score >= 61) { return 1.8; } else if (score < 61 && score >= 60) { return 1.6; } } } //Calculate Total var totalWeightedScore = 0; var totalCredit = 0; var totalGradePoint = 0; var totalCreditForGPA = 0; for (var i = 1; i < grades.length; i++) { var credit = Number(grades[i][3]); if (grades[i][4] != "合格") { var gradePoint = calculateGradePoint(grades[i][4]); var score = Number(grades[i][4]); var weightedScore = credit * score; var weightedGradePoint = credit * gradePoint; totalWeightedScore += weightedScore; totalGradePoint += weightedGradePoint; totalCreditForGPA += credit } totalCredit += credit; } //Calculate Average var scoreAverage = totalWeightedScore / totalCreditForGPA; var gradePointAverage = totalGradePoint / totalCreditForGPA; scoreAverage = scoreAverage.toFixed(4); gradePointAverage = gradePointAverage.toFixed(4); //Outputs var row = gradesTable.insertRow(0); var cell0 = row.insertCell(0); var cell1 = row.insertCell(1); var cell2 = row.insertCell(2); var cell3 = row.insertCell(3); var cell4 = row.insertCell(4); var cell5 = row.insertCell(5); var cell6 = row.insertCell(6); var cell7 = row.insertCell(7); var cell8 = row.insertCell(8); cell0.innerHTML = ""; cell1.innerHTML = "总体情况" cell2.innerHTML = "Total Level"; cell3.innerHTML = totalCredit; cell4.innerHTML = scoreAverage; cell5.innerHTML =`GPA: ${gradePointAverage}`; cell6.innerHTML = ""; cell7.innerHTML = ""; cell8.innerHTML = ""; var headerRow = gradesTable.rows[0]; var headerCell = headerRow.insertCell(6); headerCell.innerHTML = "Grade Point"; for (var i = 1; i < grades.length; i++) { var gradePoint = calculateGradePoint(grades[i][4]); var gradeRow = gradesTable.rows[i]; var gradeCell = gradeRow.insertCell(6); gradeCell.innerHTML = gradePoint; } }) ()