Greasy Fork 支持简体中文。

UESTC 18级研究生成绩计算

仅限2018级研究生使用,仅计算2018-2019学年成绩

// ==UserScript==
// @name         UESTC 18级研究生成绩计算
// @namespace    http://tampermonkey.net/
// @version      0.16
// @description  仅限2018级研究生使用,仅计算2018-2019学年成绩
// @author       github.com/yidadaa
// @match        http://yjsjy.uestc.edu.cn/pyxx/pygl/cjcx
// @grant        none
// ==/UserScript==

(function() {
    const rawText = `2018-2019春	0100025001	专利挖掘与文件撰写	92
2018-2019春	0108106003	现代数字信号处理理论与算法	74.05
2018-2019春	0108106006	信息论	76.98
2018-2019春	0108106008	数字通信	74.19
2018-2019春	0108106009	图像与视频处理	77.94
2018-2019春	0108106010	通信网络算法思维	89.36
2018-2019春	0108106011	现代信号处理方法	87.05
2018-2019春	0108107001	无线传感器网络及信号处理	73.56
2018-2019春	0108107008	雷达成像理论与实现	87.67
2018-2019春	0108107010	机器学习	81.52
2018-2019春	0108107013	模糊逻辑	88.93
2018-2019春	0108107020	光纤传感网络	81.05
2018-2019春	0108107021	高维空间信号处理基础理论与方法	91.27
2018-2019春	0152086010	电子系统仿真理论与技术	68.9
2018-2019春	0152087004	数字集成电路与系统设计	60.32
2018-2019春	0208096001	近代天线理论	84.54
2018-2019春	0208096004	计算电磁学	76.97
2018-2019春	0208096005	导波场论	79.29
2018-2019春	0208096006	射频集成电路	83.07
2018-2019春	0208096008	集成电子学	77.76
2018-2019春	0208096009	薄膜材料及技术	79.19
2018-2019春	0208096012	纳米电子学与自旋电子学	81.92
2018-2019春	0208096017	微波电子学	80.75
2018-2019春	0208096020	等离子体物理与等离子体电子学	84.46
2018-2019春	0208096021	强流电子光学	88.51
2018-2019春	0208096026	铁磁物理与器件	77.32
2018-2019春	0208096027	固体微观理论	83.82
2018-2019春	0208097001	近代微波测量	85.01
2018-2019春	0208097002	非均匀介质中的场与波	86.08
2018-2019春	0208097004	电磁兼容原理与应用	82.44
2018-2019春	0208097006	毫米波与太赫兹电路理论与技术	80.57
2018-2019春	0208097010	柔性MEMS系统与集成(全英文)	90.65
2018-2019春	0208097013	半导体功率器件与智能功率IC	85.05
2018-2019春	0208097015	VHDL语言与数字集成电路设计	71.4
2018-2019春	0208097016	微细加工与MEMS技术	86.67
2018-2019春	0208097023	纳米材料及纳米结构	70.3
2018-2019春	0208097025	微纳光学材料与器件	76.2
2018-2019春	0208097028	电磁场有限元方法	84.45
2018-2019春	0208097031	电子回旋脉塞理论与技术	81.4
2018-2019春	0208097039	微波磁性器件	81.25
2018-2019春	0208097042	磁性功能材料及应用	86
2018-2019春	0208097043	电子陶瓷与器件	91
2018-2019春	0208097045	无源集成技术	84.59
2018-2019春	0308056002	固体微观理论	87.89
2018-2019春	0308056005	电子陶瓷物理	82.2
2018-2019春	0308057001	纳米电子学与自旋电子学	79.57
2018-2019春	0308057005	磁性功能材料及应用	73.1
2018-2019春	0308176003	电化学原理和应用	83.17
2018-2019春	0308176004	纳米材料及纳米结构	93.99
2018-2019春	0408026003	最优化设计方法	84.27
2018-2019春	0408026004	机械动力学	63.16
2018-2019春	0408026005	机电系统智能控制	91.44
2018-2019春	0408026007	现代设计理论与方法	91.75
2018-2019春	0408026008	现代测试导论	79.03
2018-2019春	0408027009	电子设备热设计	89.45
2018-2019春	0408027010	可靠性设计	88
2018-2019春	0408027011	现代传感技术	84.64
2018-2019春	0408086005	电力系统运行与控制	70.98
2018-2019春	0408086006	现代电力电子技术	80.05
2018-2019春	0452016001	机电测控技术	79.83
2018-2019春	0508036003	半导体光电子学	69.38
2018-2019春	0508036004	光波导理论与技术	83.66
2018-2019春	0508036006	量子光学	78.9
2018-2019春	0508036010	光电信息检测	82.65
2018-2019春	0508037002	光电成像导论	86.16
2018-2019春	0508037003	非线性光学	75.98
2018-2019春	0552026029	光电探测技术	78.16
2018-2019春	0552026030	激光技术及应用	80.25
2018-2019春	0608046001	信号处理方法及应用	74.3
2018-2019春	0608046002	现代信号处理	76.47
2018-2019春	0608046003	计量方法与误差理论	76.6
2018-2019春	0608047004	电子系统故障诊断与测试性技术	94.5
2018-2019春	0608047006	射频电路设计	85.27
2018-2019春	0608047007	微波电路的设计、优化及测试技术	89
2018-2019春	0608116003	自适应控制	79.01
2018-2019春	0608116004	模式识别	81.18
2018-2019春	0608116005	先进控制技术	81.26
2018-2019春	0608117003	复杂系统性能评价和优化	发布
2018-2019春	0608117004	计算智能理论与方法	80.75
2018-2019春	0608117006	智能控制理论及应用	88.7
2018-2019春	0608117009	数字图象处理	86.51
2018-2019春	0608117010	机器学习	83.34
2018-2019春	0608117011	电气传动与自动控制	88
2018-2019春	0708166006	专业英语	80.67
2018-2019春	0766667002	Remote sensing of vegetation	89.27
2018-2019春	0808126006	机器学习	84.83
2018-2019春	0808126007	大数据分析与挖掘	85.61
2018-2019春	0808126008	嵌入式系统设计	80.92
2018-2019春	0808126011	计算复杂性	88.74
2018-2019春	0808126012	高级计算机视觉	81.54
2018-2019春	0808126013	组合设计与组合优化理论	78.64
2018-2019春	0808127012	GPU并行编程	76.5
2018-2019春	0808396002	软件安全性分析	69.12
2018-2019春	0808396003	网络安全技术	84.04
2018-2019春	0808396004	现代密码理论	75.15
2018-2019春	0908356003	网络计算模式	86.91
2018-2019春	0908356004	软件架构模型与设计	85.37
2018-2019春	0908356005	高级计算机结构	72.4
2018-2019春	0908357004	UNIX/Linux操作系统内核结构	80.84
2018-2019春	0908357005	数据分析与数据挖掘	97.8
2018-2019春	1008116003	现代测控通信技术	88.13
2018-2019春	1008116004	系统工程理论与方法	87.15
2018-2019春	1008116005	现代飞行器GNC理论	87.07
2018-2019春	1008117002	空间探测及其天线技术	80
2018-2019春	1008117008	系统可测性设计技术	72
2018-2019春	1100016002	应用数学理论与方法	86.71
2018-2019春	1100016003	图论及应用	80.12
2018-2019春	1100025001	数学建模	88.75
2018-2019春	11005001	工程伦理与学术道德	82.78
2018-2019春	1107016005	数值分析	87.56
2018-2019春	1107016007	数值代数	80.84
2018-2019春	1107016008	偏微分方程数值解法	72.97
2018-2019春	1107016009	近世代数	69.32
2018-2019春	1107017006	复杂网络基础选讲	82
2018-2019春	1107017007	不确定性的数学理论	85.8
2018-2019春	1107017009	泛函微分方程及定性理论	94
2018-2019春	1107146003	数理统计学	74.46
2018-2019春	1107146004	数理经济学	81.69
2018-2019春	1107146006	现代回归分析	91.98
2018-2019春	1207026006	高等量子力学	84.95
2018-2019春	1207026007	固体波谱学	79.7
2018-2019春	1207026012	计算电磁学	80.66
2018-2019春	1207026018	高等光学	76.94
2018-2019春	1207027004	高等固体理论	81.49
2018-2019春	1207027006	亚波长光学	84.4
2018-2019春	1207027007	光学系统设计	87.15
2018-2019春	1207027010	瞬态电磁学	80
2018-2019春	1207027017	弦理论	87.5
2018-2019春	1207027018	导波场论与器件原理	91.42
2018-2019春	1207027020	电磁学中的格林函数	64.95
2018-2019春	1207028001	学科前沿知识专题讲座	80
2018-2019春	13005001	硕士生英语阅读与翻译	60
2018-2019春	13005002	硕士生英语听说与写作	85
2018-2019春	13005014	硕士研究生学位英语	60.36
2018-2019春	13006001	博士生英语阅读	81.08
2018-2019春	13006008	直博生英语阅读与翻译	56.5
2018-2019春	1310026004	临床科研设计	76.5
2018-2019春	1310556004	临床药物治疗学	80.88
2018-2019春	1310556005	临床药学实践	89.64
2018-2019春	1310556006	个体化药物治疗	81.85
2018-2019春	1310556007	药学监护实践与方法	76.77
2018-2019春	1310726001	生物医学工程导论	81.33
2018-2019春	1310726002	分子免疫学	72.46
2018-2019春	1310726005	疾病基因研究进展	91.78
2018-2019春	1404026003	异常心理学	88.25
2018-2019春	1404026005	心理生理测量	91.17
2018-2019春	1404027001	注意和记忆专题	85.6
2018-2019春	1407106001	高级生物化学	80.11
2018-2019春	1407106002	高级细胞生物学	84.08
2018-2019春	1407106003	神经免疫学	81.78
2018-2019春	1407106005	生物力学与组织工程学	85.28
2018-2019春	1407106008	神经生物学	82.99
2018-2019春	1408316002	生物医学信号处理	83.56
2018-2019春	1408316003	神经网络方法	84.91
2018-2019春	1408316004	脑科学基础	76.72
2018-2019春	1408317001	统计检验方法	56.8
2018-2019春	1452306002	计算机辅助药物设计综合实验	89
2018-2019春	1500005001	工程伦理与学术道德	86.67
2018-2019春	1500005002	知识产权与信息检索	91.93
2018-2019春	1502026001	高级计量经济学	85.55
2018-2019春	1502026003	高级宏观经济学	84.22
2018-2019春	1502026007	应用随机过程	70.18
2018-2019春	1502516002	金融衍生工具	86.5
2018-2019春	1512016002	数据分析与决策	69.97
2018-2019春	1512016003	信息经济学与博弈论	79.75
2018-2019春	1512026002	战略管理研究	81.25
2018-2019春	1512026005	营销管理研究	86.21
2018-2019春	1512026006	创新管理研究	86.24
2018-2019春	1512026008	现代管理理论	89.31
2018-2019春	16005011	自然辩证法概论	75.2
2018-2019春	1605036003	新媒体研究	83.24
2018-2019春	1605036004	新闻传播学研究方法	86.21
2018-2019春	1605036005	中外新闻传播学史	85.24
2018-2019春	1605526001	媒介经营与管理	84.09
2018-2019春	1605526002	传播法规与媒介伦理	84.92
2018-2019春	1612046004	公共经济与公共政策	86.52
2018-2019春	1612046005	电子政务	86.43
2018-2019春	1700005001	硕士研究生学位英语	69.44
2018-2019春	1700005002	博士研究生英语	79.2
2018-2019春	1700005003	直博生英语	81.33
2018-2019春	1705025001	高级日语	83.6
2018-2019春	1705025002	高级德语	93.75
2018-2019春	1705025003	高级法语	83.54
2018-2019春	1705026002	文献学与社会科学研究方法	85.74
2018-2019春	1705026004	文学批评与文学理论	83.32
2018-2019春	1705027008	外国文学经典阅读与批评(II)	87.77
2018-2019春	1705516002	文学翻译	81.31
2018-2019春	1705516003	非文学翻译	83.83
2018-2019春	1705516004	电子信息类科技笔译	83.09
2018-2019春	1705516005	电子信息类科技口译	85.39
2018-2019春	1705517004	计算机辅助翻译	83.7
2018-2019春	1766666002	翻译技术与项目管理	83.15
2018-2019春	1803056004	马克思主义政治经济学专题研究	85.41
2018-2019春	1803056006	当代中国社会思潮研究	83.6
2018-2019春	1803057004	中国共产党治国理政理论与实践专题研究	85.48
2018-2019春	2000025002	体育俱乐部	95.54
2018-2019春	2208106001	现代无线与移动通信系统	77.97
2018-2019春	2208106002	纠错编码	82.03
2018-2019春	2208106003	安全通信	74.53
2018-2019秋	0108106001	最优化理论与应用	76.60
2018-2019秋	0108106002	信号理论与分析应用	79.85
2018-2019秋	0108106003	现代数字信号处理理论与算法	78.50
2018-2019秋	0108106004	通信网络系统基础	74.54
2018-2019秋	0108106005	光纤通信系统和网络	67.18
2018-2019秋	0108106006	信息论	80.91
2018-2019秋	0108106007	信号检测与估计	74.92
2018-2019秋	0108106011	现代信号处理方法	92.50
2018-2019秋	0108106012	随机过程及应用	75.87
2018-2019秋	0108107006	ASIC设计	85.04
2018-2019秋	0208096001	近代天线理论	86.82
2018-2019秋	0208096002	非线性微波电路与系统	79.30
2018-2019秋	0208096003	高等电磁场理论	77.79
2018-2019秋	0208096004	计算电磁学	88.70
2018-2019秋	0208096005	导波场论	78.33
2018-2019秋	0208096007	现代网络理论与综合	82.73
2018-2019秋	0208096008	集成电子学	86.60
2018-2019秋	0208096010	VLSI电路和系统设计	82.32
2018-2019秋	0208096011	半导体器件物理	75.20
2018-2019秋	0208096013	模拟集成电路分析与设计	76.44
2018-2019秋	0208096014	信息材料基础	86.20
2018-2019秋	0208096015	材料物理学	81.11
2018-2019秋	0208096016	纳电子学与微真空电子学	85.00
2018-2019秋	0208096017	微波电子学	90.23
2018-2019秋	0208096018	相对论电动力学	80.52
2018-2019秋	0208096019	带电粒子的电磁辐射及应用	67.94
2018-2019秋	0208096030	模拟集成电路基础	84.17
2018-2019秋	0208096051	嵌入式系统	93.33
2018-2019秋	0208096053	HDL数字电路设计	74.17
2018-2019秋	0208096054	基于传感器的系统	72.00
2018-2019秋	0208096055	ASIC和FPGA嵌入式硬件设计	76.25
2018-2019秋	0208096105	模拟集成电路设计	88.50
2018-2019秋	0208096202	模拟集成电路分析与设计	77.80
2018-2019秋	0208096203	半导体器件物理	78.55
2018-2019秋	0208096204	信息材料基础	79.00
2018-2019秋	0208097041	材料表面与界面物理	80.22
2018-2019秋	0308056001	材料物理学	80.41
2018-2019秋	0308056006	铁磁学	86.48
2018-2019秋	0308056007	材料表面与界面物理	82.30
2018-2019秋	0308056018	物理与化学电源基础	81.50
2018-2019秋	0308057018	材料分析理论与方法	81.30
2018-2019秋	0308176001	高等无机化学	81.48
2018-2019秋	0308176002	高等有机化学	82.75
2018-2019秋	0408026001	现代控制理论	76.62
2018-2019秋	0408026002	有限元理论与建模方法	85.21
2018-2019秋	0408026003	最优化设计方法	89.00
2018-2019秋	0408086001	高等电力系统分析	80.81
2018-2019秋	0408086002	非线性系统理论	88.50
2018-2019秋	0408086003	最优化理论与应用	70.86
2018-2019秋	0408086004	现代控制理论	90.34
2018-2019秋	0508036002	光学原理	70.75
2018-2019秋	0508036003	半导体光电子学	82.34
2018-2019秋	0508036005	敏感材料与传感器	82.58
2018-2019秋	0508036007	激光物理	85.43
2018-2019秋	0508036012	光电薄膜材料与技术	78.52
2018-2019秋	0508037017	光电探测原理与技术	76.43
2018-2019秋	0608046002	现代信号处理	81.10
2018-2019秋	0608046004	信号检测与估计	76.33
2018-2019秋	0608046005	现代检测技术	72.07
2018-2019秋	0608046006	微波测量	80.33
2018-2019秋	0608046008	集成电路诊断测试与可测性设计技术	80.00
2018-2019秋	0608116001	最优化理论与应用	78.95
2018-2019秋	0608116002	线性系统理论	81.51
2018-2019秋	0608116003	自适应控制	86.00
2018-2019秋	0608116004	模式识别	84.70
2018-2019秋	0608117002	非线性系统理论	93.54
2018-2019秋	0608117008	计算机视觉	84.50
2018-2019秋	0708166002	新型遥感信息处理与应用技术	80.41
2018-2019秋	0708166003	地理信息理论与技术	80.13
2018-2019秋	0708166004	定量遥感	79.40
2018-2019秋	0708166005	导航与位置服务技术	89.95
2018-2019秋	0808126001	组合数学	73.26
2018-2019秋	0808126002	算法设计与分析	72.03
2018-2019秋	0808126003	高级计算机系统结构	69.41
2018-2019秋	0808126004	高级网络计算	77.48
2018-2019秋	0808126005	计算机高级图形学	77.59
2018-2019秋	0808126006	机器学习	86.80
2018-2019秋	0808126009	有限自动机理论	83.32
2018-2019秋	0808126010	分布式系统	72.87
2018-2019秋	0808126014	统计学习理论及应用	82.02
2018-2019秋	0808126015	形式化方法	79.52
2018-2019秋	0808126016	网络安全	78.91
2018-2019秋	0808396001	信息保护理论与技术	84.72
2018-2019秋	0808396003	网络安全技术	88.60
2018-2019秋	0808396005	近世代数	81.10
2018-2019秋	0908356001	随机过程与排队论	73.73
2018-2019秋	0908356002	组合优化理论	85.26
2018-2019秋	0908356004	软件架构模型与设计	85.20
2018-2019秋	0908356006	网络安全理论与技术	81.40
2018-2019秋	0908357002	算法设计与分析	84.07
2018-2019秋	1008116002	现代导航与制导技术	79.07
2018-2019秋	1100016001	随机过程及应用	79.13
2018-2019秋	1100016002	应用数学理论与方法	86.38
2018-2019秋	1100016003	图论及应用	84.82
2018-2019秋	1100016004	矩阵理论	74.59
2018-2019秋	1100016005	数学物理方程与特殊函数	73.21
2018-2019秋	1100016006	应用泛函分析	73.22
2018-2019秋	1100016007	数论	76.58
2018-2019秋	1107016001	泛函分析	77.07
2018-2019秋	1107016002	偏微分方程	87.23
2018-2019秋	1107016003	动力系统稳定性理论及应用	92.77
2018-2019秋	1107016004	最优化理论与应用	80.84
2018-2019秋	1107016005	数值分析	77.92
2018-2019秋	1107016006	矩阵分析	76.48
2018-2019秋	1107016010	模糊数学基础	93.54
2018-2019秋	1107146001	高等概率论	84.91
2018-2019秋	1107146002	随机过程	76.20
2018-2019秋	1107146005	抽样技术	92.00
2018-2019秋	1207026002	量子场论(一)	60.00
2018-2019秋	1207026004	高等电磁场理论	69.89
2018-2019秋	1207026006	高等量子力学	88.77
2018-2019秋	1207026009	现代光学	75.78
2018-2019秋	1207026014	高等统计物理	89.39
2018-2019秋	1207026019	量子信息导论	92.18
2018-2019秋	1207027001	聚变等离子体物理	89.87
2018-2019秋	1207027004	高等固体理论	89.20
2018-2019秋	1207027011	量子压电电子学	90.10
2018-2019秋	1310026001	专业课	71.55
2018-2019秋	1310026002	专业英语	78.04
2018-2019秋	1310026003	医学文献检索	88.33
2018-2019秋	1310026005	医学统计学	77.93
2018-2019秋	1310026006	分子生物学与生物化学	77.87
2018-2019秋	1310556001	临床药理学	86.70
2018-2019秋	1310556002	临床药学	81.31
2018-2019秋	1310556003	药物政策与药事管理学方法论	86.55
2018-2019秋	1310556008	药物现代评价方法	86.59
2018-2019秋	1310556009	药理研究技术与方法	85.32
2018-2019秋	1310556010	药物合成与制剂研究	82.41
2018-2019秋	1310556011	应用分子药理学	78.44
2018-2019秋	1310726003	实验动物学	88.91
2018-2019秋	1310726004	医学遗传学	85.83
2018-2019秋	1404026001	心理学史	85.53
2018-2019秋	1404026002	心理学研究方法与实验设计	87.40
2018-2019秋	1404026004	认知神经科学	78.27
2018-2019秋	1407106001	高级生物化学	78.75
2018-2019秋	1407106002	高级细胞生物学	82.17
2018-2019秋	1407106004	高级分子生物学	78.57
2018-2019秋	1407106006	生物物理学	85.50
2018-2019秋	1407106007	发育遗传学	83.30
2018-2019秋	1407106008	神经生物学	81.00
2018-2019秋	1408316001	医学成像原理	82.55
2018-2019秋	1500005001	工程伦理与学术道德	82.32
2018-2019秋	1502026002	高级微观经济学	76.84
2018-2019秋	1502026005	区域经济分析	89.00
2018-2019秋	1502026006	产业组织理论	79.67
2018-2019秋	1502026008	公司金融	74.99
2018-2019秋	1502026010	金融经济学	86.28
2018-2019秋	1502516001	投资学	90.67
2018-2019秋	1512016001	运筹学(II)	80.39
2018-2019秋	1512016004	管理科学研究方法	89.13
2018-2019秋	1512016005	博弈论与合约	68.17
2018-2019秋	1512016006	现代优化理论	84.50
2018-2019秋	1512026001	管理研究方法	79.58
2018-2019秋	1512026003	公司财务研究	77.13
2018-2019秋	1512026004	组织管理研究	87.35
2018-2019秋	1605036001	新闻学理论	87.72
2018-2019秋	1605036002	传播学理论及应用	85.99
2018-2019秋	1605036006	新闻传播实务	83.00
2018-2019秋	1612046001	公共管理学	78.66
2018-2019秋	1612046002	政治学	84.63
2018-2019秋	1612046003	社会科学研究方法	79.62
2018-2019秋	1700005001	硕士研究生学位英语	70.00
2018-2019秋	1705026001	汉语经典阅读与批评	88.33
2018-2019秋	1705026003	语言学通论	82.19
2018-2019秋	1705026005	翻译学理论	81.65
2018-2019秋	1705026007	国别与区域研究概论	90.94
2018-2019秋	1705515001	中国语言文化	86.88
2018-2019秋	1705516001	翻译概论	81.29
2018-2019秋	1800005001	中国特色社会主义理论与实践	85.81
2018-2019秋	1800005004	中国马克思主义与当代	81.91
2018-2019秋	1803056001	马克思主义经典文献研究	83.47
2018-2019秋	1803056002	马克思主义基本原理研究	79.49
2018-2019秋	1803056003	马克思主义发展史研究	84.52
2018-2019秋	1803056005	中国近现代史专题研究	87.33
2018-2019秋	1803057005	思想政治教育学前沿问题研究	86.98
`
    const $ = s => document.querySelector(s)

    let gradeTable = {}

    // 处理成绩数据库
    rawText.split('\n').forEach(v => {
        let line = v.split('\t')
        if (line.length !== 4) return
        let code = +line[1]
        if (!gradeTable[code]) {
            gradeTable[code] = []
        }
        gradeTable[code].push({
            sem: line[0],
            code: line[1],
            name: line[2],
            value: line[3]
        })
    })
    console.log(gradeTable)

    // 构造dom的函数
    const buildAvg = (code, sem, grade, weight) => {
        if (!gradeTable[code]) return '无平均分信息'

        let index = gradeTable[code].findIndex(v => v.sem === sem)
        index = index < 0 ? 0 : index
        let avgGrade = +gradeTable[code][index].value
        let diff = grade - avgGrade
        return `<span>${avgGrade},</span><span style="color: ${diff >= 0 ? 'green' : 'red'}"> ${diff.toFixed(2)}, ${(diff * weight).toFixed(2)}</span>`
    }

    const buildSelector = (values, course) => {
        // 如果只有一个学期,则返回学期说明
        if (values.length < 2) {
            let text = document.createElement('span')
            text.innerText = values.map(v => v.sem).join('\n')
            return text
        }
        // 如果有两个学期,增加下拉框
        const dom = document.createElement('select')
        dom.onchange = e => {
            const pnode = course.node
            const offset = pnode.children.length - 10
            pnode.children[6 + offset].innerHTML = buildAvg(course.code, getSem(course.node), course.grade, course.weight)
            render()
        }
        const defaultSem = parseSemFromExam(course.node)
        const content = values.map((v, i) => {
            return `<option value=${v.sem} ${i == defaultSem ? 'selected' : ''}>${v.sem}</option>`
        }).join('\n')
        dom.innerHTML = content
        return dom
    }

    const buildQRCode = () => {
        const dom = document.createElement('div')
        dom.style = 'width: 100%; display: flex; justify-content: center; flex-wrap: wrap; margin-bottom: 100px;'
        dom.innerHTML = `<div style="width: 100%; text-align: center; font-weight: bold; line-height: 1.2; padding-bottom: 20px;">
            <h3>使用说明</h3>
            <p>
                <div>本插件在计算成绩时默认将低于60分的科目剔除,你可以手动点击每行行首将其添加上;</div>
                <div>有的课程在上下两个学期都有开设,所以会有两个平均分,如果计算错误,可以手动在右侧下拉框选择学期。</div>
            </p>
            <div>如果这个脚本帮到了你,可以<a href="https://blog.simplenaive.cn/qrcode.png">请作者喝瓶阔乐</a>;<br>如果遇到了BUG,请发邮件至 [email protected] 反馈。</div>
        </div>`
        return dom
    }

    // 获取学期信息
    const getSem = (node) => {
        return (node.children[node.children.length - 1].children[0] || {}).value
    }
    // 从考试时间中解析学期信息
    const parseSemFromExam = (node) => {
        const examText = node.children[node.children.length - 3].innerText
        let time = examText.split(/\s/)
        if (time.length < 2) return 0
        time = new Date(time[0])
        return time > new Date("2019-03-15") ? 1 : 0
    }

    // 处理学生成绩
    let stuGradeTable = {}
    let groupName = ''
    // 设置表头
    const head = $('#tbl > thead').children[0]
    head.children[1].innerText = '选中'
    head.children[8].innerText = '平均, 差值, 加权差值'
    head.children[head.children.length - 1].innerText = '学期'
    // 渲染数据
    Array.from($('#tbl > tbody').children).forEach(v => {
        // 设置索引
        const len = v.children.length
        let offset = 0
        if (len == 11) {
            groupName = v.children[1].innerText
            offset = 1
        }
        // 准备加入索引
        if (!stuGradeTable[groupName]) stuGradeTable[groupName] = []
        const course = {
            node: v,
            grade: parseFloat(v.children[3 + offset].innerText),
            weight: +v.children[4 + offset].innerText,
            code: +v.children[1 + offset].innerText
        }
        // 添加交互按钮
        const selected = course.grade >= 60 && groupName.indexOf('基础') > -1
        v.children[0].innerHTML = '<span style="color: white; pointer-events: none">√</span>'
        v.children[0].style = selected ? 'background: #82af6f!important; cursor: pointer' : 'cursor: pointer'
        v.children[0].dataset.selected = +selected
        v.children[0].onclick = e => {
            const selected = 1 - e.target.dataset.selected
            e.target.dataset.selected = selected
            e.target.style = selected ? 'background: #82af6f!important; cursor: pointer' : 'cursor: pointer'
            render()
        }
        // 添加学期下拉框
        if (gradeTable[course.code]) {
            v.children[v.children.length - 1].appendChild(buildSelector(gradeTable[course.code], course))
        }

        // 添加平均分信息
        v.children[6 + offset].innerHTML = buildAvg(course.code, getSem(course.node), course.grade, course.weight)
        stuGradeTable[groupName].push(course)
    })

    console.log(stuGradeTable)

    const computeSummary = () => {
        let ret = 0
        Object.keys(stuGradeTable).forEach(v => {
            // 统计平均分
            ret += stuGradeTable[v].reduce((p, c) => {
                if (c.node.children[0].dataset.selected < 1) return p
                const sem = getSem(c.node)
                let index = gradeTable[c.code].findIndex(v => v.sem === sem)
                index = index < 0 ? 0 : index
                const avgGrade = +gradeTable[c.code][index].value
                let grade = (c.grade - avgGrade) * c.weight
                return grade + p
            }, 0)
        })
        return ret
    }

    function render() {
        const line = document.createElement('tr')
        const sum = computeSummary().toFixed(2)
        const content = `<tr>
            <td align="center" class="tdContent">加权总分</td>
            <td align="center" class="tdContent" colspan="8"><strong id="summary">${sum}</strong></td>
         </tr>`
        line.innerHTML = content
        if (!$('#summary')) $('#objTablesxf > tbody').appendChild(line)
        else $('#summary').innerText = sum
    }

    render()
    document.body.appendChild(buildQRCode())
})();