Gradebook version 2
Form

' Simple code to test various classes
'
Option Explicit
Private c As CCourse
Private Sub cmdSave_Click()
c.saveData App.Path & "\" & "courseData.dta"
End Sub
Private Sub cmdShowAssignments_Click()
Dim assignments As String
Dim assignmentList() As String
Dim i As Integer
assignments = c.assignmentNames()
assignmentList = Split(assignments, vbCrLf)
For i = 0 To UBound(assignmentList)
lstAssignments.AddItem assignmentList(i)
Next i
End Sub
Private Sub cmdShowStudents_Click()
Dim students As String
Dim studentList() As String
Dim i As Integer
'students = c.studentNames()
'studentList = Split(students, vbCrLf)
studentList = c.studentNameArray()
For i = 0 To UBound(studentList)
lstStudents.AddItem studentList(i)
Next i
End Sub
Private Sub Command1_Click()
Dim s As CStudent
Set s = New CStudent
Dim sName As String
sName = InputBox("Student Name: ")
s.theName = sName
'MsgBox s.theName
c.addStudent s
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
Dim aName As String
Dim aPoints As Integer
aName = InputBox("Assignment name: ")
aPoints = Val(InputBox("Max Points: "))
a.theName = aName
a.maxPoints = aPoints
c.addAssignment a
End Sub
Private Sub Command4_Click() 'ADD GRADE
Dim s As CStudent
Dim a As CAssignment
Dim score As Integer
Dim g As CGrade
Dim assignmentInfo() As String
Dim theName As String
If lstStudents.ListIndex = -1 Then
theName = InputBox("Student?")
Else
theName = lstStudents.List(lstStudents.ListIndex)
End If
Set s = c.getStudent(theName)
If lstAssignments.ListIndex = -1 Then
theName = InputBox("Assignment?")
Else
theName = lstAssignments.List(lstAssignments.ListIndex)
assignmentInfo = Split(theName)
theName = assignmentInfo(0)
End If
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 theName As String
Dim s As CStudent
If lstStudents.ListIndex = -1 Then
theName = InputBox("Student?")
Else
theName = lstStudents.List(lstStudents.ListIndex)
End If
Set s = c.getStudent(theName)
If s Is Nothing Then
MsgBox "Bad student name: not found"
Else
MsgBox theName & "'s Scores: " & vbCrLf & vbCrLf _
& s.getScores
End If
End Sub
Private Sub Form_Load()
Set c = New CCourse
c.theName = "Math"
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 Sub saveData(ByVal filePath As String)
Dim fileRef As Integer
fileRef = FreeFile
Open filePath For Output As #fileRef
Write #fileRef, mName
Write #fileRef, mStudentCount
Write #fileRef, mAssignmentCount
writeAssignments (fileRef)
writeStudents (fileRef)
Close fileRef
End Sub
Private Sub writeAssignments(ByVal fileNum As Integer)
Dim i As Integer
For i = 0 To mAssignmentCount - 1
mAssignments(i).save fileNum
Next i
End Sub
Private Sub writeStudents(ByVal fileNum As Integer)
Dim i As Integer
For i = 0 To mStudentCount - 1
mStudents(i).save fileNum
Next i
End Sub
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
Public Function studentNameArray() As String()
ReDim names(mStudentCount - 1) As String
Dim i As Integer
For i = 0 To mStudentCount - 1
'MsgBox mStudents(i)
names(i) = mStudents(i).theName
Next i
studentNameArray = names
End Function
Public Function assignmentNames() As String
Dim names As String
names = ""
Dim i As Integer
For i = 0 To mAssignmentCount - 1
'MsgBox mStudents(i)
names = names + mAssignments(i).theName & _
Str(mAssignments(i).maxPoints) & vbCrLf
Next i
assignmentNames = 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
CAssignment
Option Explicit
Private mName As String
Private mMaxPoints As Integer
Public Sub save(ByVal fileNum As Integer)
'save assignements
Write #fileNum, mName, mMaxPoints
End Sub
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 Sub save(ByVal fileNum As Integer)
'save student
Write #fileNum, mName
writeGrades (fileNum)
End Sub
Private Sub writeGrades(ByVal fileNum As Integer)
Dim i As Integer
For i = 0 To mGradeCount - 1
Next i
End Sub
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
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
CGB
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