Lab 11-22-00

The following code requires two list boxes, two text boxes, and two command buttons.

Control names --> lstNames, lstScores, txtName, txtScore, command1, cmdSaveData

Option Explicit

Const MAX_NAMES As Integer = 10
Const MAX_TESTS As Integer = 10

Private names(MAX_NAMES) As String
Private scores(MAX_NAMES, MAX_TESTS) As Integer
Private nameCount As Integer
Private testCount As Integer


Private Sub cmdSaveData_Click()
    Dim colIndex As Integer
    Dim rowIndex As Integer
    
    Dim fileName As String
    fileName = App.Path & "\" & "grades.txt"
    
    Open fileName For Output As #1
    
    Write #1, testCount
        
    For rowIndex = 1 To nameCount
        Write #1, names(rowIndex)
        
        For colIndex = 1 To testCount
            Write #1, scores(rowIndex, colIndex)
        Next colIndex
        
    Next rowIndex
    
    Close #1
    
End Sub

Private Sub Command1_Click()
    Dim scoreIndex As Integer

    Dim fileName As String
    fileName = App.Path & "\" & "grades.txt"
    
    Open fileName For Input As #1
    
    Input #1, testCount
    
    nameCount = 0
    lstNames.Clear
    
   
    Do Until EOF(1)
        nameCount = nameCount + 1
        Input #1, names(nameCount)
        lstNames.AddItem names(nameCount)
        
        For scoreIndex = 1 To testCount
            Input #1, scores(nameCount, scoreIndex)
        Next scoreIndex
        
    Loop
    
    Close #1
    
    printData nameCount, testCount
    
End Sub

Private Sub printData(ByVal studentCount As Integer, _
                      ByVal numberOfTests As Integer)
                      
    Dim nameIndex As Integer
    Dim testIndex As Integer
    
    For nameIndex = 1 To studentCount
        Print names(nameIndex);
        
        For testIndex = 1 To numberOfTests
            Print scores(nameIndex, testIndex); " ";
        Next testIndex
        
        Print
    Next nameIndex
    
End Sub

Private Sub lstNames_Click()

    Dim selectedItem As Integer
    Dim testIndex As Integer
    
    If lstNames.ListIndex = -1 Then
        MsgBox "No name selected"
    Else
        selectedItem = lstNames.ListIndex
        txtName.Text = lstNames.List(selectedItem)
        
        lstScores.Clear
        For testIndex = 1 To testCount
            lstScores.AddItem Str(scores(selectedItem + 1, testIndex))
        Next testIndex
        
    End If
    
End Sub

Private Sub lstScores_Click()
    If lstScores.ListIndex = -1 Then
        MsgBox "No score selected"
    Else
        txtScore.Text = lstScores.List(lstScores.ListIndex)
    End If
End Sub

Private Sub txtScore_Change()
    lstScores.List(lstScores.ListIndex) = txtScore.Text
    scores(lstNames.ListIndex + 1, lstScores.ListIndex + 1) = _
                       Val(txtScore.Text)
End Sub