Greasy Fork

Greasy Fork is available in English.

万方教务网查看学分和平均绩点

万方教务网查看单个学期的学分和平均绩点

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name 万方教务网查看学分和平均绩点
// @namespace http://tampermonkey.net/
// @version 2.0
// @description 万方教务网查看单个学期的学分和平均绩点
// @compatible chrome
// @include *.edu.cn/kbcx/xskbqr_cxXskbqrIndex.html*
// @include *.edu.cn/cjcx/cjcx_cxDgXscj.html*
// @include *.edu.cn/js/plugins/pdfjs/generic/web/viewer.htm*
// @license MIT
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// ==/UserScript==

(function () {
    $(document).keydown(function (event) {
            if (event.keyCode == 13) {
                console.clear();
                let url = window.location.href;

                if(url.indexOf("js/plugins/pdfjs/generic/web/viewer") != -1){
                    let $td = $(".textLayer").children();
                    let XueQi = [];
                    let n = 1;
                    let text = null;
                    let XueFen = 0;
                    let ChengJi = 0;
                    let JiDian = 0;
                    let sumXF;
                    let sumXFJD;
                    let AllXF = 0;
                    let AllXFJD = 0;
                    let XnXf=0;
                    let XnXfJd=0;
                    for (let i = 0; i < $td.length; i++) {
                        text = $td.eq(i).text().trim();
                        if (text.indexOf("学期") !== -1 || text.indexOf("白") !== -1) {
                            XueQi[n] = i;
                            n++;
                        }
                    }
                    for (let i = 1; i < n-1; i++) {
                        console.log("\n-----" + $td.eq(XueQi[i]).text().trim() + "-----");
                        sumXF = 0;
                        sumXFJD = 0;
                        for (let j = XueQi[i] + 2; j < XueQi[i + 1]; j += 4) {
                            XueFen = parseFloat($td.eq(j).text().trim());
                            if (isNaN(XueFen)) {
                                j += 6;
                                XueFen = parseFloat($td.eq(j).text());
                            }
                            ChengJi = $td.eq(j + 1).text().trim();
                            JiDian = GetJiDian(ChengJi);
                            sumXF += XueFen;
                            sumXFJD += XueFen * JiDian;
                        }
                        console.log("总学分:" + sumXF + "\t总学分绩点" + decimal(sumXFJD,2) + "\t平均学分绩点:" + decimal((sumXFJD / sumXF),2));
                        AllXF += sumXF;
                        AllXFJD += sumXFJD;

                        XnXf += sumXF;
                        XnXfJd += sumXFJD;
                        if(i%2==0){
                            console.log("\n-----大"+(i/2)+ "   平均学分绩点:" + decimal((XnXfJd / XnXf),2)+"-----");
                            console.log("\n");
                            XnXf=0;
                            XnXfJd=0;
                        }
                    }

                    console.log("\n")
                    console.log(n - 2 + "个学期\t总学分:" + AllXF + "\t平均学分绩点:" + decimal((AllXFJD / AllXF),2));

                }else{
                    if($("#sp_1_pager").text()!=1){
                        alert("当前表格为"+$("#sp_1_pager").text()+"页,请增加列数,使表格只有一页");
                        console.log("当前表格为"+$("#sp_1_pager").text()+"页,请增加列数,使表格只有一页");
                    }else{
                        let text="";
                        let xn=$("#xnm_chosen").find("span").text();
                        let xq=$("#xqm_chosen").find("span").text();
                        text+="第" + xn+"学年 第"+xq+"学期\n";
                        console.log("第" + xn+"学年 第"+xq+"学期");
                        if(url.indexOf("kbcx/xskbqr_cxXskbqrIndex") != -1){
                            let $td_xf = $("td[aria-describedby='tabGrid_xf']");
                            let sum = 0;
                            for (let i = 0; i < $td_xf.length; i++) {
                                let xf = $td_xf.eq(i).attr("title");
                                sum += parseFloat(xf);
                            }
                            alert(text+"总学分:" + sum);
                            console.log("总学分:" + sum);
                        }else{
                            let $td_XF = $("td[aria-describedby='tabGrid_xf']");
                            let $td_JD = $("td[aria-describedby='tabGrid_jd']");
                            let Sum_XF = 0;
                            let Sum_XFJD = 0;
                            for (let i = 0; i < $td_XF.length; i++) {
                                Sum_XF+=parseFloat($td_XF.eq(i).text());
                                Sum_XFJD+=parseFloat($td_XF.eq(i).text())*parseFloat($td_JD.eq(i).text());
                            }
                            alert(text+"平均学分绩点:"+decimal((Sum_XFJD/Sum_XF),2));
                            console.log("平均学分绩点:"+decimal((Sum_XFJD/Sum_XF),2));
                        }
                    }
                }
            }

        });

    function GetJiDian(CJ) {
                        let grade;
                        let JD = 0;
                        switch (CJ) {
                            case "优秀":
                                grade = 95;
                                break;
                            case "良好":
                                grade = 85;
                                break;
                            case "中等":
                                grade = 75;
                                break;
                            case "及格":
                                grade = 65;
                                break;
                            default:
                                grade = decimal(CJ,0);
                        }
                        JD += (grade % 10) / 10;
                        grade /= 10;
                        switch (parseInt(grade)) {
                            case 10:
                                JD = 5;
                                break;
                            case 9:
                                JD += 4;
                                break;
                            case 8:
                                JD += 3;
                                break;
                            case 7:
                                JD += 2;
                                break;
                            case 6:
                                JD += 1;
                                break;
                            default:
                                JD = 0;
                        }
                        return JD;
                    }
    function decimal(num,v){
        let vv = Math.pow(10,v);
        return Math.round(num*vv)/vv;
    }
})();