WhuGPACalculator

try to take over the world!

  1. // ==UserScript==
  2. // @name WhuGPACalculator
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description try to take over the world!
  6. // @author You
  7. // @match http://bkjw.whu.edu.cn/stu/stu_index.jsp
  8. // @match http://bkjw.whu.edu.cn/stu/stu_score_parent.jsp
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12.  
  13. (function(){
  14.  
  15. //var btn3 = document.getElementById("btn3")
  16. var scoreTable;
  17. var digit = 4;
  18. var btn9 = document.getElementById("btn9");
  19.  
  20. var totalGpaBtn = document.createElement("button");
  21. var semeGpaBtn = document.createElement("button");
  22.  
  23. var courseList = [];
  24.  
  25. window.onload= function(){
  26. courseList = getCourseList();
  27.  
  28.  
  29. totalGpaBtn.textContent = "获取总绩点";
  30. semeGpaBtn.textContent = "获取学期绩点";
  31.  
  32.  
  33.  
  34. totalGpaBtn.addEventListener("click", dispTotalGPA);
  35. semeGpaBtn.addEventListener("click", dispSemeGPA);
  36.  
  37. btn9.insertAdjacentElement("afterend",semeGpaBtn);
  38. btn9.insertAdjacentElement("afterend",totalGpaBtn);
  39. }
  40.  
  41.  
  42.  
  43.  
  44. function getCourseList(){
  45. //获取成绩框架scoreTable
  46. var scoreIfram0 = document.getElementById("page_iframe").contentWindow;
  47. var scoreIfram = scoreIfram0.document.getElementById("iframe0").contentWindow;
  48.  
  49. //获取成绩框架中的成绩表scoreTable
  50. scoreTable = scoreIfram.document.getElementsByClassName("listTable");
  51. //var scoreTable = document.getElementsByClassName("listTable");
  52. //获取成绩表格中的每一列数据scoreLines
  53. var scoreLines = scoreTable[0].getElementsByTagName("tr");
  54. //在每一行中获取课程信息course
  55. var i = 0;
  56. var scoreInfo;
  57.  
  58. var courseList = [];
  59. for(i = 1; i < scoreLines.length; i++){
  60. scoreInfo = scoreLines[i].getElementsByTagName("td");;
  61. var course = {};
  62. var name = scoreInfo[0].innerHTML;
  63. var year = scoreInfo[8].innerHTML;
  64. var seme = scoreInfo[9].innerHTML;
  65. var credit = scoreInfo[4].innerHTML;
  66. var mark = parseFloat(scoreInfo[10].innerHTML);
  67. var gpa;
  68. if(mark >= 90){
  69. gpa = 4.0;
  70. }
  71. else if(mark >= 85){
  72. gpa = 3.7;
  73. }
  74. else if(mark >= 83){
  75. gpa = 3.3;
  76. }
  77. else if(mark >= 79){
  78. gpa = 3.0;
  79. }
  80. else if(mark >= 75){
  81. gpa = 2.7;
  82. }
  83. else if(mark >= 72){
  84. gpa = 2.3;
  85. }
  86. else if(mark >= 68){
  87. gpa = 2.0;
  88. }
  89. else if(mark >= 64){
  90. gpa = 1.5;
  91. }
  92. else if(mark >= 60){
  93. gpa = 1.0;
  94. }
  95. else{
  96. gpa = 0.0;
  97. }
  98. if(!isNaN(mark)){
  99. course.name = name;
  100. course.credit = credit;
  101. course.gpa = gpa;
  102. course.year = year;
  103. course.seme = seme;
  104. courseList.push(course);
  105. }
  106.  
  107. }
  108. return courseList;
  109.  
  110. }
  111. function dispTotalGPA(){
  112.  
  113. //var courseList = getCourseList();
  114. var results = calculateTotalGPA(courseList);
  115. // here is checked, run well
  116. //addElement(scoreTable, gpa);
  117. addElement(scoreTable, results);
  118.  
  119.  
  120. }
  121.  
  122. function dispSemeGPA(){
  123. //var courseList = getCourseList();
  124. //alert(courseList.length);
  125. var results = CalculateSemeGPA(courseList);
  126. addElement(scoreTable, results);
  127. }
  128.  
  129. function addElement(scoreTable, results){
  130. var i = 0;
  131. for(i = 0; i < results.length; i++){
  132. //alert("add a new line");
  133. if(isNaN(results[i].gpa)){
  134.  
  135. }
  136. else{
  137. //添加一行
  138.  
  139. var newLine = document.createElement('tr');
  140. var newItem0 = document.createElement('td');
  141. var newItem1 = document.createElement('td');
  142. newItem0.textContent = results[i].type;
  143. newItem1.textContent = results[i].gpa;
  144. newLine.appendChild(newItem0);
  145. newLine.appendChild(newItem1);
  146. scoreTable[0].insertAdjacentElement('afterbegin', newLine);
  147. }
  148. }
  149. }
  150.  
  151.  
  152. function calculateTotalGPA(courseList){
  153. var i = 0;
  154. var totalgpa = 0.0;
  155. var totalCredits = 0.0;
  156. var gpa = 0.0;
  157. for(i = 0; i < courseList.length; i++){
  158. totalCredits += parseFloat(courseList[i].credit);
  159. totalgpa += parseFloat(courseList[i].gpa * courseList[i].credit);
  160. }
  161. gpa = totalgpa / totalCredits;
  162. var result = {type:'总绩点', gpa: gpa.toPrecision(digit),};
  163. var results = [];
  164. results.push(result);
  165. return results;
  166.  
  167. }
  168.  
  169. function CalculateSemeGPA(courseList){
  170. var semes = [];
  171. var results = [];
  172.  
  173. var i = 0;
  174. for(i = 0; i < courseList.length; i++){
  175. var currentSeme = {};
  176. currentSeme.year = courseList[i].year;
  177. currentSeme.seme = courseList[i].seme;
  178. var j = 0;
  179.  
  180. //查看有多少学期
  181. if(semes.length == 0){
  182. semes.push(currentSeme);
  183. //alert("semes is only one");
  184. }
  185. else{
  186. //alert("semes is no longer one");
  187. for(j = 0; j < semes.length; j++){
  188. if(semes[j].year == currentSeme.year && semes[j].seme == currentSeme.seme){
  189. j = 9999;
  190. break;
  191. }
  192. }
  193. if(j != 9999){
  194. semes.push(currentSeme);
  195. }
  196.  
  197. }
  198. }
  199.  
  200. //对每个学期分别计算gpa,写入results中
  201. //alert("semes");
  202. //alert(semes.length);
  203. for(i = 0; i < semes.length; i++){
  204.  
  205. var totalCredits = 0.0;
  206. var totalgpa = 0.0;
  207. for(j = 0; j < courseList.length; j ++){
  208. //对每个学期计算gpa
  209.  
  210. if(courseList[j].year == semes[i].year && courseList[j].seme == semes[i].seme){
  211. totalCredits += parseFloat(courseList[j].credit);
  212. totalgpa += parseFloat(courseList[j].credit) * parseFloat(courseList[j].gpa);
  213. }
  214. }
  215.  
  216. var gpa = 0;
  217. gpa = totalgpa / totalCredits;
  218.  
  219. var result = {};
  220. result.gpa = gpa.toPrecision(digit);
  221. result.year = parseInt(semes[i].year);
  222. result.seme = parseInt(semes[i].seme);
  223.  
  224. result.type = semes[i].year + "年第" + semes[i].seme + "学期";
  225.  
  226. //alert(result.type);
  227. results.push(result);
  228. }
  229. results.sort(function(b, a){
  230. if(a.year == b.year){
  231. return a.seme - b.seme;
  232. }
  233. else{
  234. return a.year - b.year;
  235. }
  236. });
  237.  
  238. return results;
  239.  
  240.  
  241. }
  242.  
  243.  
  244.  
  245.  
  246. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址