Greasy Fork

ImmediateGPA of UCAS

Update your GPA immediately!

目前为 2023-07-25 提交的版本。查看 最新版本

// ==UserScript==
// @name         ImmediateGPA of UCAS
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Update your GPA immediately!
// @author       Sunny Lin
// @match        https://jwxk.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.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 = "";
}) ()