Skip to content
Snippets Groups Projects
Commit aef8cd1f authored by Martin Schmollinger's avatar Martin Schmollinger
Browse files

Initial solution to exercise gouni

parent 84860936
No related branches found
No related tags found
No related merge requests found
module github.com/turngeek/examples-go/src/gouni
go 1.16
package main
import (
"fmt"
"github.com/turngeek/examples-go/src/gouni/model"
)
func main() {
home := model.Address{}
home.SetStreet("Burgstr. 39")
home.SetCity("Reutlingen")
s1 := model.CreateStudent("Schiesser", home)
s1.AddGrade("ESD", 1.0)
s1.AddGrade("BPT", 2.0)
fmt.Printf("Student %s has an overall average grade of %.1f\n", s1.GetName(), s1.GetOverallAverageGrade())
flat := model.CreateSharedFlat(model.CreateAddress("Pestalozzistr. 120", "Reutlingen"))
flat.AddStudent(s1)
fmt.Println(flat.String())
}
package model
type Address struct {
street string
city string
}
func (adr *Address) String() string {
return adr.street + ", " + adr.city
}
func (adr *Address) SetStreet(street string) {
adr.street = street
}
func (adr *Address) GetStreet() string {
return adr.street
}
func (adr *Address) SetCity(city string) {
adr.city = city
}
func (adr *Address) GetCity() string {
return adr.city
}
func CreateAddress(street string, city string) Address {
return Address{street, city}
}
package model
import (
"fmt"
"strings"
)
type SharedFlat struct {
address Address
students []Student
}
func (flat *SharedFlat) GetAddress() Address {
return flat.address
}
func (flat *SharedFlat) SetAddress(address Address) {
flat.address = address
}
func (flat *SharedFlat) AddStudent(student Student) {
flat.students = append(flat.students, student)
}
func (flat *SharedFlat) GetNames() []string {
names := []string{}
for _, student := range flat.students {
names = append(names, student.GetName())
}
return names
}
func (flat *SharedFlat) String() string {
return fmt.Sprintf("Flat -> Address: %s, Students living in flat: %s", flat.address.String(), strings.Join(flat.GetNames(), ", "))
}
func CreateSharedFlat(address Address) SharedFlat {
return SharedFlat{address, make([]Student, 0)}
}
package model
type Student struct {
name string
address Address
grades map[string]float32
}
func (student *Student) String() string {
return student.name + " " + student.address.String()
}
func (student *Student) GetName() string {
return student.name
}
func (student *Student) SetName(name string) {
student.name = name
}
func (student *Student) GetAddress() Address {
return student.address
}
func (student *Student) SetAddress(address Address) {
student.address = address
}
func (student *Student) AddGrade(lecture string, grade float32) {
student.grades[lecture] = grade
}
func (student *Student) GetOverallAverageGrade() float32 {
var sum float32
for _, grade := range student.grades {
sum += grade
}
if sum == 0 {
return 0.0
} else {
return sum / float32(len(student.grades))
}
}
func CreateStudent(name string, address Address) Student {
return Student{name, address, make(map[string]float32)}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment