2014-02-06 36 views
0

有一些問題做一個非常簡單的包含JavaScript項目。加權平均GPA::試圖小時乘以級點中的術語的每個過程,然後分整數正在追加而不是被添加(Javascript)

WeightedGPA使用+ =

Caluclation我試圖做的是當具有附加到其上,而不是添加它的值總嘗試時間

任何幫助表示讚賞。 Full code is attached

<html> 
<head> 
</head> 
<body> 

<script type="text/javascript"> 
var courseValues = new Array(); 
var x = 0; 
var debug = true; 

function courseObjCreate() 
{ 
var courseData = ""; 
courseData += document.getElementById("name").value; 
courseData += "," 
courseData += document.getElementById("number").value; 
courseData += "," 
courseData += document.getElementById("mark").value; 
courseData += "," 
courseData += document.getElementById("hours").value; 
courseData += "," 
courseData += document.getElementById("credits").value; 
courseValues[x] = courseData; 

alert("Course added!"); 

var elemName = document.getElementById("name"); 
elemName.value = ""; 
var elemNumber = document.getElementById("number"); 
elemNumber.value = ""; 
var elemMark = document.getElementById("mark"); 
elemMark.value = ""; 
var elemHours = document.getElementById("hours"); 
elemHours.value = ""; 
var elemCredits = document.getElementById("credits"); 
elemCredits.value = ""; 

x++; 


} 

</script> 
<center> 
<h1> Student transcript</h1> 
<br> 
<h2> Enter course details</h2> 
<form> 
    Course name:  <input id="name" type="text" /><br> 
    Course number: <input id="number" type="text" /><br> 
    Course mark:  <input id="mark" type="text" /><br> 
    Course hours:  <input id="hours" type="text" /><br> 
    Course credits: <input id="credits" type="text" /><br> 
    <input type="button" value="Submit" onClick ="courseObjCreate()"> Click me to add another course 
<br> 
    <input type="button" value="Generate" onClick ="tblCall()"> Click me to generate the course table 
    <br> 
</form> 
<br> 
<br> 


<script type="text/javascript"> 
function createTable() 
{ 

    if(debug) console.log("Create Table Start"); 
    var gpaSum = (0.0); 
    var hoursSum = 0; 
    var credits = 0; 
    var creditsSum = 0; 
    var gpaSum = (0.0) 
    var prnStrF = ""; 
    var weightedGpa = (0.0) 


    if(debug) console.log("weightedGpa: " + weightedGpa); 

    prnStrF += '<table border="1" cellspacing="1" cellpadding="5">'; 
    prnStrF += '<tr><td>Course name</td><td>Couse number</td><td>Course mark(percentage)</td><td>Course letter grade</td><td>Course Grade Point</td><td>Course hours</td><td>Course credits</td>'; 

    for (var i = 0; i < courseValues.length; i++) 
    { 

     courseLetter =''; 
     courseGPA= (0.0).toFixed(2); 

     var coursePrintStr = courseValues[i].toString(); 
     var prn = coursePrintStr.split(",") 

     if(debug) console.log("prn[2]: " + prn[2]); 
     var markNum = parseInt(prn[2]); 
     if(debug) console.log("MarkNum: " + markNum); 

     switch(true) 
     { 
      case (markNum < 50): 
       if(debug) console.log("less than 50"); 
       courseLetter = 'F'; 
       courseGPA = 0.0; 
       credits = 0; 
       weightedGpa += 0; 
       break; 

      case (markNum > 49 && markNum < 55): 
       if(debug) console.log("more than 49 less than 55"); 
       courseLetter = 'D'; 
       courseGPA = 1.0; 
       credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
       break; 

      case (markNum > 54 && markNum < 60): 
      courseLetter = 'D+'; 
      courseGPA = 1.3; 
      credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
      break; 

      case (markNum > 59 && markNum < 63): 
      courseLetter = 'C-'; 
      courseGPA = 1.7; 
      credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
      break; 

      case (markNum > 62 && markNum < 67): 
      courseLetter = 'C'; 
      courseGPA = 2.0; 
      credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
      break; 

      case (markNum > 66 && markNum < 70): 
      courseLetter = 'C+'; 
      courseGPA = 2.3; 
      credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
      break; 

      case (markNum > 69 && markNum < 73): 
      courseLetter = 'B-'; 
      courseGPA = 2.7; 
      credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
      break; 

      case (markNum > 72 && markNum < 77): 
      courseLetter = 'B'; 
      courseGPA = 3.0; 
      credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
      break; 

      case (markNum > 76 && markNum < 80): 
      courseLetter = 'B+'; 
      courseGPA = 3.3; 
      credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
      break; 

      case (markNum > 79 && markNum < 85): 
      if(debug) console.log("MarkNumInCase: " + markNum); 
      courseLetter = 'A-'; 
      courseGPA = 3.7; 
      credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
      break; 

      case (markNum > 84): 
       courseLetter = 'A'; 
       courseGPA = 4.0; 
       credits = parseInt(prn[4]); 
      weightedGpa += parseInt(courseGPA * parseInt(prn[3])); 
       break; 

      default: 
       alert("Something broke in the switch case. Probably a String input instead of an int"); 

     } 
    courseGPA = courseGPA.toFixed(2); 
    if(debug) console.log("gpaSum: " + gpaSum); 
    creditsSum += credits; 
    if(debug) console.log("creditsSum: " + creditsSum); 
    hoursSum += parseInt(prn[3]); 
    if(debug) console.log("hoursSum: " + hoursSum); 
    if(debug) console.log("weightedGpa: " + weightedGpa); 
    weightedGpa = (weightedGpa/hoursSum).toFixed(2); 
    if(debug) console.log(prnStrF); 
    prnStrF +='<tr>'; 
    prnStrF += '<td>' + String(prn[0]) + '</td>' + '<td>' + String(prn[1]) + '</td>' + '<td>' + String(prn[2]) + "%" + '</td>'+ '<td>'+ String(courseLetter) + '</td>' + '<td>' + String(courseGPA) +'</td>' +'<td>' + String(prn[3]) + '</td>' +'<td>' + String(prn[4]) + '</td>'; 

    prnStrF += '</tr>'; 

    } 

    prnStrF += '</table>'; 
    if(debug) console.log("hoursSum: " + hoursSum); 
    if(debug) console.log("creditsSum: " + creditsSum); 
    if(debug) console.log("weightedGpa: " + weightedGpa); 


    prnStrF += '<br><br>'; 
    prnStrF +='<table border="1" cellspacing="1" cellpadding="5">'; 
    prnStrF += '<tr><td><b>Report</td><td></td><td>Attemped hours</td><td>Earned credits </td><td>Weighted Average GPA</td></b></tr>'; 
    prnStrF += '<tr><td><b>Report</td><td></td><td>'+ String(hoursSum) + '</td><td>' + String(creditsSum) +' </td><td>'+ String(weightedGpa)+'</b></td></tr>'; 
    prnStrF += '</table>'; 
    if(debug) console.log(prnStrF); 
    return prnStrF; 
} 

</script> 

<script type="text/javascript"> 
function tblCall() 
{ 

    document.getElementById('generateHere').innerHTML = createTable(); 

} 
</script> 
<br> 
<br> 

<div id='generateHere'></div> 
</center> 
</body> 
</html> 

回答

1

你要強制所有內容通過使用parseintparsefloat功能被認爲是一個數字 - 因爲它是,當下JS懷疑的東西是一個字符串,該+將意味着串聯。

在我看來,你正在做一個奇怪的總和 - 你「添加」的第一件事是名字,它可能是一個字符串。你爲什麼要形成這個總和(而不是兩個單獨變量中的等級和信用時間總和,因此你可以計算加權平均值,這就是你聲稱你想要做的)。也許你應該考慮把不同的字段集成到一個數組集合中 - 並且當你組裝好所有數據後,計算小時數組和總和(小時*等級),這樣你就可以得到加權平均。

你需要比這更重要嗎?

+0

我將再給出單獨的數組,並將計算拆分並讓你知道 – Gfraser

+1

適用於我需要做什麼,因爲我擴大了計算並使用另一個陣列作爲每個球場的加權GPA,它像黃油一樣運行。 – Gfraser

0

你在聲明weightedGpa後缺少一個分號,那只是一個錯字嗎?這可能會弄亂聲明。

+0

只是一個錯字,結果是一樣的:( – Gfraser

+0

,因爲你將int到雙您應該使用,而不是parseInt函數parseFloat。 – ltalhouarne

0

更改你的行'var courseData =「」;'到'var courseData = 0;'而且應該這樣做。

聲明使用「」告訴javascript,courseData是一個字符串,所以你的+ =操作將被視爲連接而不是數學函數。

+0

他將名字courseData,因此,我認爲所提到的聲明打算。 – ltalhouarne

+0

的課程數據被設置爲一個字符串對象並添加到courseObjCreate函數中的一個數組中,然後在createTable函數中取出,並且因爲它是一個CSV文件而進行分割。在事實之後將值解析爲整數,然後循環開始。 0代表構建表中的程序名稱字符串,前面加上0表示 – Gfraser

+0

是的,我的錯誤,我誤解了這個問題。 –