GradeBook Code from Lab

' Simple code to test various classes
'
Option Explicit
Private c As CCourse

Private Sub Command1_Click()
    
    Dim s As CStudent
    Set s = New CStudent
    
    s.theName = "Peter"
    MsgBox s.theName
    c.addStudent s
    
    Set s = New CStudent
    
    s.theName = "Paula"
    c.addStudent s

    MsgBox "Students in course " & c.studentCount
    MsgBox "Student names: " & c.studentNames
End Sub

Private Sub Command2_Click()
    Dim searchName As String
    Dim theStudent As CStudent
    
    searchName = InputBox("Search for which student?")
    
    Set theStudent = c.getStudent(searchName)
    
    If theStudent Is Nothing Then
        MsgBox "Student not found"
    Else
        MsgBox "Student found"
        
    End If
End Sub

Private Sub Command3_Click()
    Dim a As CAssignment
    
    Set a = New CAssignment
    a.theName = "One"
    a.maxPoints = 100
    
    c.addAssignment a
    
    Set a = New CAssignment
    a.theName = "Two"
    a.maxPoints = 50
    
    c.addAssignment a
    
    MsgBox c.assignmentCount
End Sub

Private Sub Command4_Click()
    Dim s As CStudent
    Dim a As CAssignment
    Dim score As Integer
    Dim g As CGrade
    
    Dim theName As String
    theName = InputBox("Student?")
    Set s = c.getStudent(theName)
    
    theName = InputBox("Assignment?")
    Set a = c.getAssignment(theName)
    
    score = Val(InputBox("Score?"))
    
    Set g = New CGrade
    Set g.assign = a
    g.score = score
    
    s.addGrade g
    
End Sub

Private Sub Command5_Click()
    Dim s As CStudent
    Set s = New CStudent
    
    Set s = c.getStudent("Peter")
    MsgBox s.getScores
    
End Sub

Private Sub Form_Load()
    Set c = New CCourse
End Sub

CGrade

Option Explicit

Private mScore As Integer
Private mAssignment As CAssignment

Public Property Get score() As Integer
    score = mScore
End Property

Public Property Let score(ByVal vNewValue As Integer)
    mScore = vNewValue
End Property

Public Property Get assign() As CAssignment
    Set assign = mAssignment
End Property

Public Property Set assign(ByVal vNewValue As CAssignment)
    Set mAssignment = vNewValue
End Property

CAssignment

Option Explicit

Private mName As String
Private mMaxPoints As Integer

Public Property Get maxPoints() As Integer
    maxPoints = mMaxPoints
End Property

Public Property Let maxPoints(ByVal vNewValue As Integer)
    mMaxPoints = vNewValue
End Property

Public Property Get theName() As String
    theName = mName
End Property

Public Property Let theName(ByVal vNewValue As String)
    mName = vNewValue
End Property

CStudent

Option Explicit

Private mName As String

Private mGrades() As CGrade
Private mGradeCount As Integer

Public Function getScores() As String
    Dim i As Integer
    Dim scores As String
    
    scores = ""
    
    For i = 0 To mGradeCount - 1
        scores = scores + mGrades(i).assign.theName & " " & _
                            mGrades(i).score & vbCrLf
    Next i
    
    getScores = scores

End Function

Public Property Get theName() As String
    theName = mName
End Property

Public Property Let theName(ByVal vNewValue As String)
    mName = vNewValue
End Property

Public Sub addGrade(ByVal s As CGrade)
    ReDim Preserve mGrades(mGradeCount)
    Set mGrades(mGradeCount) = s
    mGradeCount = mGradeCount + 1
End Sub

Private Sub Class_Initialize()
    mGradeCount = 0
End Sub

CCourse

Option Explicit

Private mName As String

Private mStudents() As CStudent
Private mStudentCount As Integer

Private mAssignments() As CAssignment
Private mAssignmentCount As Integer

Public Function getStudent(ByVal theName As String) As CStudent
    Dim i As Integer
    Dim found As Boolean
    
    i = 0
    found = False
    
    Do While (i < mStudentCount) And Not found
        If mStudents(i).theName = theName Then
            found = True
            Set getStudent = mStudents(i)
        Else
            i = i + 1
        End If
    Loop
    
    If Not found Then
        Set getStudent = Nothing
    End If
    
End Function

Public Function getAssignment(ByVal theName As String) As CAssignment
    Dim i As Integer
    Dim found As Boolean
    
    i = 0
    found = False
    
    Do While (i < mAssignmentCount) And Not found
        If mAssignments(i).theName = theName Then
            found = True
            Set getAssignment = mAssignments(i)
        Else
            i = i + 1
        End If
    Loop
    
    If Not found Then
        Set getAssignment = Nothing
    End If
    
End Function

Public Sub addStudent(ByVal s As CStudent)
    ReDim Preserve mStudents(mStudentCount)
    Set mStudents(mStudentCount) = s
    mStudentCount = mStudentCount + 1
End Sub

Public Sub addAssignment(ByVal s As CAssignment)
    ReDim Preserve mAssignments(mAssignmentCount)
    Set mAssignments(mAssignmentCount) = s
    mAssignmentCount = mAssignmentCount + 1
End Sub

Public Function studentNames() As String
    Dim names As String
    names = ""
    
    Dim i As Integer
    
    For i = 0 To mStudentCount - 1
        'MsgBox mStudents(i)
        names = names + mStudents(i).theName & vbCrLf
    Next i
    
    studentNames = names
    
End Function

Private Sub Class_Initialize()
    mStudentCount = 0
    mAssignmentCount = 0
End Sub

Public Property Get theName() As String
    theName = mName
End Property

Public Property Let theName(ByVal vNewValue As String)
    mName = vNewValue
End Property

Public Function studentCount() As Integer
    studentCount = mStudentCount
End Function

Public Function assignmentCount() As Integer
    assignmentCount = mAssignmentCount
End Function

CGB (GradeBook)

Option Explicit

Private mCourses() As CCourse
Private mCourseCount As Integer

Public Sub addCourse(ByVal c As CCourse)
    ReDim Preserve mCourses(mCourseCount)
    Set mCourses(mCourseCount) = c
    mCourseCount = mCourseCount + 1
End Sub

Public Function getCourseNames() As String()

    Dim names() As String
    ReDim names(mCourseCount - 1)
    Dim i As Integer
    
    For i = 0 To mCourseCount - 1
        names(i) = mCourses(i).theName
    Next i
    
End Function

Private Sub Class_Initialize()
    mCourseCount = 0
End Sub