Dim _numStudents As Integer
Dim _studentIds As String()
Dim _englishResults As Integer()
Dim _mathsResults As Integer()
Dim _scienceResults As Integer()
Public Sub Main(args As String())
Dim choice As String = Console.ReadLine()
Console.WriteLine("Invalid selection. Please try again.")
Console.WriteLine("Bye!")
Private Sub DisplayMenu()
Console.WriteLine("What would you like to do?")
Console.WriteLine("1: Enter results")
Console.WriteLine("2: Display results")
Console.WriteLine("3: Search for a student's results")
Console.WriteLine("q: Quit")
Private Sub EnterResults()
Console.Write("How many students are there? ")
Dim numStudentsText = Console.ReadLine()
If (numStudentsText = "")
Dim numStudents = Integer.Parse(numStudentsText)
_numStudents = numStudents
ReDim _studentIds(numStudents-1)
ReDim _englishResults(numStudents-1)
ReDim _mathsResults(numStudents-1)
ReDim _scienceResults(numStudents-1)
Console.WriteLine("Enter details for each student in the format: <ID>,<English Mark>,<Maths Mark>,<Science Mark>")
For i = 0 To numStudents-1
Dim englishMark As Integer
Dim scienceMark As Integer
Console.Write("Student {0} of {1}: ", i+1, numStudents)
line = Console.ReadLine()
If (parts.Length <> 4) Then
studentId = parts(0).Trim()
if (Not IsValidStudentId(studentId)) Then
englishMark = GetAdjustedMarkFromInputText(parts(1))
If (englishMark = -1) Then
mathsMark = GetAdjustedMarkFromInputText(parts(2))
scienceMark = GetAdjustedMarkFromInputText(parts(3))
If (scienceMark = -1) Then
Console.WriteLine("Invalid entry. Please try again.")
_studentIds(i) = studentId
_englishResults(i) = englishMark
_mathsResults(i) = mathsMark
_scienceResults(i) = scienceMark
Private Function IsValidStudentId(studentId As String) As Boolean
If (studentId.Length <> 5) then
For i = 0 To studentId.Length-1
If Not Char.IsDigit(studentId(i)) Then
Private Function GetAdjustedMarkFromInputText(text As String) As Integer
Dim isValidInteger = Integer.TryParse(text, mark)
If (isValidInteger AndAlso mark >=0 AndAlso mark <= 100)
Private Sub DisplayResults()
DisplayStudentTableHeader()
For i = 0 To _numStudents-1
DisplayTableRow("", "English", "Maths", "Science")
DisplayTableResultsRow("Average", Average(_englishResults), Average(_mathsResults), Average(_scienceResults))
DisplayTableResultsRow("Minimum", Minimum(_englishResults), Minimum(_mathsResults), Minimum(_scienceResults))
DisplayTableResultsRow("Maximum", Maximum(_englishResults), Maximum(_mathsResults), Maximum(_scienceResults))
Console.WriteLine("There are no student records to display.")
Private Sub DisplayStudentRow(studentIndex As Integer)
DisplayTableResultsRow(_studentIds(studentIndex), _englishResults(studentIndex), _mathsResults(studentIndex), _scienceResults(studentIndex))
Private Sub DisplayTableResultsRow(heading As String, englishResult As Integer, mathsResult As Integer, scienceResult As Integer)
Console.WriteLine("|{0,-8}|{1,-8}|{2,-8}|{3,-8}|", heading, englishResult, mathsResult, scienceResult)
Private Sub DisplayTableRow(heading As String, col1 As String, col2 As String, col3 As String)
Console.WriteLine("|{0,-8}|{1,-8}|{2,-8}|{3,-8}|", heading, col1, col2, col3)
Private Sub DisplayStudentTableHeader()
DisplayTableRow("Student", "English", "Maths", "Science")
Private Sub DisplayTableDivider()
Console.WriteLine("+--------+--------+--------+--------+")
Private Function Average(results As Integer()) As Integer
Dim numResults = results.Length
For i = 0 To numResults - 1
Return CInt(sum / numResults)
Private Function Minimum(results As Integer()) As Integer
Dim numResults = results.Length
For i = 0 To numResults - 1
Private Function Maximum(results As Integer()) As Integer
Dim numResults = results.Length
For i = 0 To numResults - 1
Private Sub StudentSearch()
Console.Write("Enter the student id: ")
Dim searchId = Console.ReadLine().Trim()
For i = 0 To _numStudents - 1
If _studentIds(i) = searchId Then
Console.WriteLine("Student not found.")
Console.WriteLine("There are no student records to search.")
Private Sub DisplayStudent(studentIndex As Integer)
results(0) = _englishResults(studentIndex)
results(1) = _mathsResults(studentIndex)
results(2) = _scienceResults(studentIndex)
Dim min = Minimum(results)
Dim minIndex = Array.IndexOf(results, min)
Dim max = Maximum(results)
Dim maxIndex = Array.IndexOf(results, max)
DisplayStudentTableHeader()
DisplayStudentRow(studentIndex)
Console.WriteLine("Average mark: {0}", Average(results))
Console.WriteLine("Lowest mark was in {0}: {1}", subjects(minIndex), min)
Console.WriteLine("Highest mark was in {0}: {1}", subjects(maxIndex), max)