Greasy Fork

Greasy Fork is available in English.

ImmediateGPA of UCAS

Update your GPA immediately!

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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)
}) ()