// ==UserScript== // @name NNNU加权平均成绩一键查询 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 一键计算令人伤心的加权平均成绩 // @author 卢本伟 // @match *://jw.nnnu.edu.cn/jsxsd/kscj/* // @grant none // ==/UserScript== (function() { 'use strict'; function addButton() { const searchForm = document.querySelector("#kscjQueryForm #search-form-content"); // const searchForm = document.getElementById("search-form-content") || document.body; if (!searchForm) return; // 创建按钮 const btn = document.createElement("button"); btn.textContent = "一键计算加权平均成绩"; btn.style.marginLeft = "10px"; btn.style.background = "#4CAF50"; btn.style.color = "white"; btn.style.padding = "6px 12px"; btn.style.border = "none"; btn.style.borderRadius = "5px"; btn.style.cursor = "pointer"; btn.onclick = async () => { const semesters = ["2024-2025-1", "2024-2025-2"]; const grades = []; for (const semester of semesters) { const formData = new FormData(); formData.append("kksj", semester); try { const res = await fetch("/jsxsd/kscj/cjcx_list", { method: "POST", body: formData, credentials: "include" }); const html = await res.text(); const parser = new DOMParser(); const doc = parser.parseFromString(html, "text/html"); const table = doc.querySelector("#dataList"); if (!table) continue; const rows = table.querySelectorAll("tr"); rows.forEach(row => { const cells = row.querySelectorAll("td"); if (cells.length < 10) return; if (cells[1].innerText.trim() !== semester) return; grades.push({ semester: semester, courseNum: cells[0].innerText.trim(), courseName: cells[3].innerText.trim(), score: cells[4].innerText.trim(), credit: cells[6].innerText.trim() }); }); } catch (err) { console.error(err); } } if (grades.length > 0) { // 先按学期分类 const semesterMap = {}; grades.forEach(g => { if (!semesterMap[g.semester]) semesterMap[g.semester] = []; semesterMap[g.semester].push(g); }); // 计算总绩点(优不参与) let totalScore = 0; let totalCredit = 0; grades.forEach(g => { const score = parseFloat(g.score); const credit = parseFloat(g.credit); if (!isNaN(score) && !isNaN(credit) && g.score !== "优") { totalScore += score * credit; totalCredit += credit; } }); const gpa = (totalCredit > 0 ? (totalScore / totalCredit).toFixed(3) : "0.00"); // 美化表格样式 let htmlTable = `
| 学期 | ID | 课程名称 | 成绩 | 学分 | 是否参与计算 |
|---|---|---|---|---|---|
| ${g.semester} | ${g.courseNum} | ${g.courseName} | ${g.score} | ${g.credit} | ${participate} |