Greasy Fork is available in English.
Update your GPA immediately!
// ==UserScript==
// @name ImmediateGPA of UCAS
// @namespace http://tampermonkey.net/
// @version 2.2
// @description Update your GPA immediately!
// @author Sunny Lin
// @match https://jwxk.ucas.ac.cn/score/bks/all
// @match https://xkcts.ucas.ac.cn/score/bks/all
// @grant none
// @license AGPL License
// ==/UserScript==
(function () {
'use strict';
//Get Elements of Table and Transform it into an Array 'grades'
var gradesTable = document.querySelector(".table");
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 < 85 && 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;
var semesters=[];
var partialCredit=0;
var partialWeightedScore=0;
var partialGradePoint=0;
var partialCreditForGPA=0;
//Calculate Average
var prevSemester = "";
for (var i = 1; i < grades.length; i++) {
var credit = Number(grades[i][3]);
if ((grades[i][6] != prevSemester & i != 1 )| i == grades.length - 1) {
partialCredit = totalCredit - partialCredit;
partialCreditForGPA = totalCreditForGPA - partialCreditForGPA;
partialWeightedScore = totalWeightedScore - partialWeightedScore;
partialGradePoint = totalGradePoint - partialGradePoint;
semesters.push(i);
grades[semesters[semesters.length - 1]].credit = partialCredit;
grades[semesters[semesters.length - 1]].scoreAverage =
partialWeightedScore / partialCreditForGPA;
grades[semesters[semesters.length - 1]].gradePointAverage =
partialGradePoint / partialCreditForGPA;
}
prevSemester = grades[i][6];
totalCredit += credit;
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;
console.log("gradePoint",gradePoint,i)
gradesTable.rows[i].cells[5].innerHTML = gradePoint.toFixed(1);
}
}
//Calculate Average
var scoreAverage=totalWeightedScore/totalCreditForGPA;
var gradePointAverage=totalGradePoint/totalCreditForGPA;
console.log("scoreAverage",scoreAverage)
console.log("gradePointAverage",gradePointAverage)
scoreAverage=scoreAverage.toFixed(4);
gradePointAverage=gradePointAverage.toFixed(4);
//Outputs
var headers = ["", "总体情况", "Total Level", totalCredit, scoreAverage, `GPA: ${gradePointAverage}`, "", "", ""];
var row = gradesTable.insertRow(0);
for (var i = 0; i < headers.length; i++) {
var cell = row.insertCell(i);
cell.innerHTML = headers[i];
}
gradesTable.rows[1].cells[5].innerHTML = "Grade Point";
for (var j = 0; j < semesters.length; j++) {
var insertPosition = semesters[j]+j+1;
if (semesters[j] == grades.length - 1) {
insertPosition++;
}
var row = gradesTable.insertRow(insertPosition);
var cells = ["", "学期情况", "Semester Level", grades[semesters[j]].credit, grades[semesters[j]].scoreAverage.toFixed(4), `GPAS: ${grades[semesters[j]].gradePointAverage.toFixed(4)}`, "", "", ""];
for (var i = 0; i < cells.length; i++) {
var cell = row.insertCell(i);
cell.innerHTML = cells[i];
}
}
console.log(semesters)
}) ()