仅限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())
})();