54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
|
package school
|
||
|
|
||
|
import "sort"
|
||
|
|
||
|
// A Grade is just the grade number and a list of students
|
||
|
type Grade struct {
|
||
|
Num int
|
||
|
Students []string
|
||
|
}
|
||
|
|
||
|
// AddStudent adds a student name to a grades roster
|
||
|
func (g *Grade) AddStudent(name string) {
|
||
|
g.Students = append(g.Students, name)
|
||
|
}
|
||
|
|
||
|
// School is just a collection of Grades
|
||
|
type School struct {
|
||
|
grades map[int]Grade
|
||
|
}
|
||
|
|
||
|
// New returns a new School object
|
||
|
func New() *School {
|
||
|
return &School{
|
||
|
grades: make(map[int]Grade),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Add add student 'name' to grade 'grade'
|
||
|
func (s *School) Add(name string, grade int) {
|
||
|
g := s.grades[grade]
|
||
|
g.Num = grade
|
||
|
g.AddStudent(name)
|
||
|
s.grades[grade] = g
|
||
|
}
|
||
|
|
||
|
// Grade returns a sorted list of all students in 'grade'
|
||
|
func (s *School) Grade(grade int) []string {
|
||
|
g := s.grades[grade]
|
||
|
sort.Strings(g.Students)
|
||
|
return g.Students
|
||
|
}
|
||
|
|
||
|
// Enrollment returns the full school's enrollment, sorted by grade then name
|
||
|
func (s *School) Enrollment() []Grade {
|
||
|
var ret []Grade
|
||
|
for k := 1; k <= 12; k++ {
|
||
|
grRoster := s.Grade(k)
|
||
|
if len(grRoster) > 0 {
|
||
|
ret = append(ret, Grade{Num: k, Students: grRoster})
|
||
|
}
|
||
|
}
|
||
|
return ret
|
||
|
}
|