// ==UserScript== // @name CSU GPA Conversion // @namespace http://tampermonkey.net/ // @version 1.0.0 // @description 计算中南大学总学分、加权平均分和GPA // @author LMMIKE // @match *://csujwc.its.csu.edu.cn/jsxsd/kscj/cjcx_list // @license MIT Apache 2.0 // @grant none // @downloadURL https://update.greasyfork.cloud/scripts/527187/CSU%20GPA%20Conversion.user.js // @updateURL https://update.greasyfork.cloud/scripts/527187/CSU%20GPA%20Conversion.meta.js // ==/UserScript== (function() { 'use strict'; // 等级成绩转换为百分制 function convertLevelToScore(score) { if (typeof score === 'string') { switch(score.trim()) { case '优': return 95; case '良': return 85; case '中': return 75; case '及格': return 65; case '不及格': return 0; default: { const num = parseFloat(score); return isNaN(num) ? 0 : num; } } } return 0; } // 百分制转GPA (4.0制) function convertToGPA(score) { if (score >= 90) return 4.0; if (score >= 85) return 3.7; if (score >= 82) return 3.3; if (score >= 78) return 3.0; if (score >= 75) return 2.7; if (score >= 72) return 2.3; if (score >= 68) return 2.0; if (score >= 64) return 1.5; if (score >= 60) return 1.0; return 0.0; } // 创建悬浮窗 function createFloatingWindow() { const floatDiv = document.createElement('div'); floatDiv.style.cssText = ` position: fixed; top: 20px; right: 20px; background: white; border: 1px solid #ccc; padding: 15px; border-radius: 5px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); z-index: 9999; min-width: 200px; `; return floatDiv; } // 计算成绩 function calculateGrades() { let totalCredit = 0; let weightedScore = 0; let weightedGPA = 0; // 获取成绩表格 const table = document.getElementById('dataList'); if (!table) return null; // 遍历所有成绩行 const rows = table.getElementsByTagName('tr'); for (let i = 1; i < rows.length; i += 2) { // 跳过标题行和详情行 const row = rows[i]; const cells = row.getElementsByTagName('td'); if (cells.length >= 7) { // 获取成绩和学分 const scoreText = cells[5].textContent.trim(); const creditText = cells[6].textContent.trim(); const score = convertLevelToScore(scoreText); const credit = parseFloat(creditText); if (!isNaN(credit) && !isNaN(score)) { totalCredit += credit; weightedScore += score * credit; weightedGPA += convertToGPA(score) * credit; } } } return { totalCredit: totalCredit, averageScore: weightedScore / totalCredit, GPA: weightedGPA / totalCredit }; } // 主函数 function main() { const results = calculateGrades(); if (!results) return; const floatDiv = createFloatingWindow(); floatDiv.innerHTML = `
总学分:${results.totalCredit.toFixed(2)}
加权平均分:${results.averageScore.toFixed(2)}
GPA:${results.GPA.toFixed(2)}