The table below contains some lengths in terms of feet.
| 1 inch = .0833 foot | 1 rod = 16.5 feet |
| 1 yard = 3 feet | 1 furlong = 660 feet |
| 1 meter = 3.28155 feet | 1 kilometer = 3281.5 feet |
| 1 fathom = 6 feet | 1 mile = 5280 feet |
Write a program that displays the nine different units of measure; requests the unit to convert from, the unit to convert to, and the quantity to be converted; and then displays the converted quantity. A typical outcome is shown in the figure below.

Suggested Control Names and Attributes:
| Name Property | Text Property | Control Type | Notes |
| frmConvert | Conversion | Form | Holds Controls |
| lstUnits | ListBox | Displays line number and associated unit of measurement from units.txt | |
| txtLength | TextBox | Captures desired length to convert | |
| mtbFrom | MaskedTextBox | Captures original units (1-9) | |
| mtbTo | MaskedTextBox | Captures desired units (1-9) | |
| btnConvert | Convert | Button | Triggers event to compute and display desired length |
| txtOutput | Text Box | Display desired length. ReadOnly property should be set to true. |
Hints:
- Create a text file named units.txt using Notepad which contains the following text
- Place the text file in the bin/Debug folder of your visual basic solution.
- Use the ReadAllLines method to populate an array with each line of the text file. Then use the Split method to separate the name from the value.
- The lengths must be converted to their equivalent in feet first, and then converted to their final unit of length.
Write the Code:
' Project: Unit Conversion
' Description: This is a program to convert measurement units. The user enters the
' unit to convert from, the unit to convert to, and the quantity of units to be converted.
' The program then performs calculations and displays the converted quantity.
Public Class frmUnitConversion
' declare global variables
Dim units() As String = IO.File.ReadAllLines("Units.txt")
Dim conversionRates(10) As Double
Dim query() As String
Dim counter As Integer = -1
Dim length As Double = 0
Dim fromUnit As Integer = 0
Dim toUnit As Integer = 0
Dim desiredUnits As Double
Dim valid As Boolean = True ' variable for input validation
Private Sub frmUnitConversion_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' loads info from text file into array
Dim query = From line In units
Let data = line.Split(","c)
Let unitName = data(0)
Let conversionRate = data(1)
Select unitName, conversionRate
For Each unit In query
' displays each item in the list box
counter += 1
lstUnits.Items.Add(CStr(counter + 1) & ". " & unit.unitName)
Next
counter = 0
For Each unit In query
' assigns conversion rates to an array
conversionRates(counter) = CDbl(unit.conversionRate)
counter += 1
Next
End Sub
Private Sub btnConvert_Click(sender As Object, e As EventArgs) Handles btnConvert.Click
' get input
txtOutput.Clear()
InputData()
' validate input values are within the correct range
If length < 0 Or fromUnit < 1 Or fromUnit > 9 Or toUnit < 1 Or toUnit > 9 Then
valid = False
MessageBox.Show("Length must be positive and units must be between 1 and 9", "Error")
End If
' complete calculations
If valid = True Then
ConvertUnits()
txtOutput.Text = ((desiredUnits).ToString("N2"))
End If
End Sub
Sub InputData()
' Gets input from user and assigns to variables
valid = True ' Initialize to true in case of prior invalid input
Try
length = CDbl(txtLength.Text)
fromUnit = CInt(mtbFrom.Text)
toUnit = CInt(mtbTo.Text)
Catch ex As Exception
MessageBox.Show("Either an entry is blank or the input is not valid", "Error")
valid = False
End Try
End Sub
Sub ConvertUnits()
desiredUnits = conversionRates(fromUnit - 1) / conversionRates(toUnit - 1) * length
End Sub
End Class
