|
|||
|
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>
|
||