|
||
|
Golf Handicap Index Calculator
This is a fairly simple script that will calculate your golf handicap index
according to the USGA's formula.
Each round of golf is first calculated with the USGA's formula of
Here is how the code works.
When the form is submitted there will be a comma delimited list for each of the form fields
and an array will be created for each of the neccesary values for the formula.
Each matching set of values will be calculated and the results will be stored into an array.
To accomodate the number of values that are dropped, the array will then be sorted according to value
and ran through a loop stopping at the appropriate number of values. During that loop, the
values will be added together.
The sum of the values will be then averages (divided by the number of values) and then
multiplied by .96 to get the resulting golf handicap index value.
Normally a minimum of five rounds of 18 holes of golf is required to get
an accurate handicap index, but for the sake of demonstration and
to give you a general idea of your handicap index, only one is
required.
Here is the ASP code and the JavaScript code for this process:
<% If Request("DoStuff") = "Calculate Handicap" Then Sub SortArray(TheArr,AscDesc) TempVal = "" For x = 0 to UBound(TheArr) For y = x+1 to UBound(TheArr) If AscDesc = "Desc" Then If Cdbl(TheArr(x)) < CDbl(TheArr(y)) then TempVal = TheArr(y) TheArr(y) = TheArr(x) TheArr(x) = TempVal End If Else If Cdbl(TheArr(x)) > Cdbl(TheArr(y)) then TempVal = TheArr(x) TheArr(x) = TheArr(y) TheArr(y) = TempVal End If End If Next Next End Sub dim DiffArr() RoundNumArr = Split(Request("RoundNum"),",") ScoreArr = Split(Request("Score"),",") RatingArr = Split(Request("Rating"),",") SlopeArr = Split(Request("Slope"),",") NumRounds = UBound(RoundNumArr) For x = 0 To UBound(RoundNumArr)-1 ReDim Preserve DiffArr(x) DiffArr(x) = CDbl((ScoreArr(x)-RatingArr(x))*113/SlopeArr(x)) & "," Next Call SortArray(DiffArr,"Desc") If NumRounds < 5 Then ElseIf NumRounds <= 6 Then NumRounds = NumRounds - 1 ElseIf NumRounds <= 8 Then NumRounds = NumRounds - 2 ElseIf NumRounds <= 10 Then NumRounds = NumRounds - 3 ElseIf NumRounds <= 12 Then NumRounds = NumRounds - 4 ElseIf NumRounds <= 14 Then NumRounds = NumRounds - 5 ElseIf NumRounds <= 16 Then NumRounds = NumRounds - 6 ElseIf NumRounds = 17 Then NumRounds = NumRounds - 7 ElseIf NumRounds = 18 Then NumRounds = NumRounds - 8 ElseIf NumRounds = 19 Then NumRounds = NumRounds - 9 ElseIf NumRounds = 20 Then NumRounds = NumRounds - 10 End If DiffTotal = 0 For x = 1 To NumRounds DiffTotal = DiffTotal + CDbl(DiffArr(x-1)) Next DiffAvg = DiffTotal/NumRounds HandicapTotal = FormatNumber(DiffAvg*.96,2) Response.Write "<div class=" & chr(34) & "breg" & chr(34) & " " & _ "style=" & chr(34) & "text-align:center;font-weight:bold;padding:3px;" & chr(34) & ">" & _ "Your Golf Handicap Index is " & HandicapTotal & _ "</div>" End If %> <form name="GolfInfoForm" method="post" action="GolfHandicap.asp" onsubmit="return ValidateForm();"> <table name="GolfInfoTbl" align="center" class="DataCell" cellspacing="0" style="background-color:#ffffff;"> <thead> <tr> <td class="DataCellHead" title="Round Number">Round</td> <td class="DataCellHead" title="Your Score For The Round">Score</td> <td class="DataCellHead" title="The Course Rating">Rating</td> <td class="DataCellHead" title="The Slope Rating">Slope</td> <td class="DataCellHead"> <input type="button" class="SubButton2" value="AddRow" onclick="moreFields();"> </td> </tr> </thead> <tbody id="InfoRow" style="display:none;"> <tr style="text-align:center;"> <td class="DataCell"><input type="text" name="RoundNum" value="0" size="1" class="breg"></td> <td class="DataCell"><input type="text" name="Score" value="0" size="3" class="breg"></td> <td class="DataCell"><input type="text" name="Rating" value="0" size="3" class="breg"></td> <td class="DataCell"><input type="text" name="Slope" value="0" size="3" class="breg"></td> <td class="SubButton" onclick="this.parentNode.parentNode.removeChild(this.parentNode);ReNumber();"> Remove </td> </tr> </tbody> <tfoot> <tr> <td colspan="5" class="DataCell" style="text-align:right;"> <input type="submit" name="DoStuff" class="SubButton" value="Calculate Handicap"> </tr> </tfoot> </table> </form> <script language="JavaScript"> var counter = 0; var TheForm = document.forms['GolfInfoForm']; function moreFields() { counter++; if(counter<20) { var newFields = document.getElementById("InfoRow").cloneNode(true); var insertHere = document.getElementById("InfoRow"); newFields.id = "InfoRow" + counter; newFields.style.display = "block"; var newField = newFields.childNodes; insertHere.parentNode.insertBefore(newFields,insertHere); TheForm.RoundNum[counter].value = counter; } ReNumber(); } function ReNumber() { for (var x=0;x<TheForm.RoundNum.length;x++) { TheForm.RoundNum[x].value = x; if(navigator.appName == "Microsoft Internet Explorer") { TheForm.RoundNum[x].value = x+1; } counter = x; } } <% If Request("DoStuff") = "Calculate Handicap" Then For x = 0 to UBound(RoundNumArr)-1 Response.Write "moreFields();" & chr(13) Response.Write "TheForm.RoundNum[" & x & "].value = " & x & ";" & chr(13) Response.Write "TheForm.Score[" & x & "].value = " & ScoreArr(x) & ";" & chr(13) Response.Write "TheForm.Rating[" & x & "].value = " & RatingArr(x) & ";" & chr(13) Response.Write "TheForm.Slope[" & x & "].value = " & SlopeArr(x) & ";" & chr(13) Next RoundNumArr = Split(Request("RoundNum"),",") ScoreArr = Split(Request("Score"),",") RatingArr = Split(Request("Rating"),",") SlopeArr = Split(Request("Slope"),",") NumRounds = UBound(RoundNumArr) Else Response.Write "moreFields();" & chr(13) End If %> function ValidateForm() { var IsErr = false; var TheErr = ""; var x = 1; var NumRows = TheForm.RoundNum.length; if(navigator.appName == "Microsoft Internet Explorer") { x = 0; NumRows = NumRows - 1 } for (x=x;x<NumRows;x++) { var TheRowNum = x; if(navigator.appName == "Microsoft Internet Explorer") { TheRowNum = x+1 } if (TheForm.Score[x].value.length == 0 || isNaN(TheForm.Score[x].value) == true) { IsErr = true; TheErr = TheErr + "\n\nPlease enter your score for round " + x; } else if (parseFloat(TheForm.Score[x].value) <= 0) { IsErr = true; TheErr = TheErr + "\n\nPlease enter your score for round " + x; } if (TheForm.Rating[x].value.length == 0 || isNaN(TheForm.Rating[x].value) == true) { IsErr = true; TheErr = TheErr + "\n\nPlease enter the course rating for round " + x; } else if (parseFloat(TheForm.Rating[x].value) <= 0) { IsErr = true; TheErr = TheErr + "\n\nPlease enter the course rating for round " + x; } if (TheForm.Slope[x].value.length == 0 || isNaN(TheForm.Slope[x].value) == true) { IsErr = true; TheErr = TheErr + "\n\nPlease enter the slope rating for round " + x; } else if (parseFloat(TheForm.Slope[x].value) <= 0) { IsErr = true; TheErr = TheErr + "\n\nPlease enter the slope rating for round " + x; } } if (IsErr == true) { alert(TheErr); return false; } else { TheForm.submit(); } } </script> |