Skip to content

Instantly share code, notes, and snippets.

@jeremy5189
Last active January 4, 2016 08:39
Show Gist options
  • Save jeremy5189/8596557 to your computer and use it in GitHub Desktop.
Save jeremy5189/8596557 to your computer and use it in GitHub Desktop.
/* --------------------------------
* NTUST 學生資訊系統 平均 GPA 計算
*
* 作者:Eric Ping
* 更新:Jeremy Yen
*
* Change Log
* - 修正「二次退選」所造成之問題
* - 增加 B99 百分制成績支援
* - 使用正規表達式判斷中文與數字
* - 修正對 Firefox 的支援
*
* User Manual
* - 請開啟學生資訊系統內之檢視成績
* 頁面,並點選 「NTUST GPA」之
* 書籤即可使用 (使用下方版本)
* - 百分制成績所得結果為平均成績,
* 請自行查表換算 GPA 值
*
* Disclaimer
* - 本程式之計算結果僅供參考,實際
* 成績以學校公佈為準。
*
* --------------------------------
*/
var table = document.getElementById('Datagrid4');
var tbody = table.getElementsByTagName('tbody')[0];
var tr = tbody.getElementsByTagName('tr');
var A = ['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D', 'E', 'X'];
var B = [4.0, 4.0, 3.7, 3.3, 3.0, 2.7, 2.3, 2.0, 1.7, 1.0, 0.0, 0.0];
var sum = 0, credits = 0;
for(var i = 1; i < tr.length; i++)
{
var td = tr[i].getElementsByTagName('td');
for(var j = 3; j < td.length-1; j += 2 )
{
var score = td[j+1].textContent.trim() || td[j+1].innerText;
var credit = parseInt(td[j].textContent.trim() || td[j].innerText);
if( /[\u4e00-\u9fa5]/.test(score) ) // 跳過中文
continue;
else if( /^[0-9]*$/.test(score) ) // 百分制
sum += parseInt(score) *credit;
else // 等第制
sum += B[A.indexOf(score)] * credit;
credits += credit;
}
}
alert("平均分數或GPA: " + Math.round( sum / credits * 100 ) / 100);
// 使用方法:將下列程式碼貼入網址列或加入書籤內,即可使用
// Chrome 貼入網址列後,請手動在最前方加上「javascript:」(不含引號)
javascript:(function()%7Bvar table%3Ddocument.getElementById(%27Datagrid4%27)%3Bvar tbody%3Dtable.getElementsByTagName(%27tbody%27)%5B0%5D%3Bvar tr%3Dtbody.getElementsByTagName(%27tr%27)%3Bvar A%3D%5B%27A%2B%27,%27A%27,%27A-%27,%27B%2B%27,%27B%27,%27B-%27,%27C%2B%27,%27C%27,%27C-%27,%27D%27,%27E%27,%27X%27%5D%3Bvar B%3D%5B4.0,4.0,3.7,3.3,3.0,2.7,2.3,2.0,1.7,1.0,0.0,0.0%5D%3Bvar sum%3D0,credits%3D0%3Bfor(var i%3D1%3Bi<tr.length%3Bi%2B%2B)%7Bvar td%3Dtr%5Bi%5D.getElementsByTagName(%27td%27)%3Bfor(var j%3D3%3Bj<td.length-1%3Bj%2B%3D2)%7Bvar score%3Dtd%5Bj%2B1%5D.innerText%3Bif(/%5B%5Cu4e00-%5Cu9fa5%5D/.test(score))continue%3Belse if(/%5E%5B0-9%5D*%24/.test(score))sum%2B%3DparseInt(score)*parseInt(td%5Bj%5D.innerText)%3Belse sum%2B%3DB%5BA.indexOf(score)%5D*parseInt(td%5Bj%5D.innerText)%3Bcredits%2B%3DparseInt(td%5Bj%5D.innerText)%3B%7D%7Dalert("平均分數或GPA: "%2BMath.round(sum/credits*100)/100)%3B%7D)()%3B
// 令網頁內容可編輯
javascript:(function()%7Bdocument.body.contentEditable%3D'true'%3Bdocument.designMode%3D'on'%3Bvoid(0)%7D)()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment