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