From aef8cd1f105ec4e6bfc37d553dfcc4091fdcff99 Mon Sep 17 00:00:00 2001 From: Martin Schmollinger <martin.schmollinger@gmail.com> Date: Wed, 12 May 2021 11:09:09 +0200 Subject: [PATCH] Initial solution to exercise gouni --- src/gouni/go.mod | 3 +++ src/gouni/main.go | 23 +++++++++++++++++ src/gouni/model/address.go | 30 ++++++++++++++++++++++ src/gouni/model/shared_flat.go | 39 ++++++++++++++++++++++++++++ src/gouni/model/student.go | 47 ++++++++++++++++++++++++++++++++++ 5 files changed, 142 insertions(+) create mode 100644 src/gouni/go.mod create mode 100644 src/gouni/main.go create mode 100644 src/gouni/model/address.go create mode 100644 src/gouni/model/shared_flat.go create mode 100644 src/gouni/model/student.go diff --git a/src/gouni/go.mod b/src/gouni/go.mod new file mode 100644 index 0000000..9e6a1cb --- /dev/null +++ b/src/gouni/go.mod @@ -0,0 +1,3 @@ +module github.com/turngeek/examples-go/src/gouni + +go 1.16 diff --git a/src/gouni/main.go b/src/gouni/main.go new file mode 100644 index 0000000..96a647f --- /dev/null +++ b/src/gouni/main.go @@ -0,0 +1,23 @@ +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()) +} diff --git a/src/gouni/model/address.go b/src/gouni/model/address.go new file mode 100644 index 0000000..d8ba271 --- /dev/null +++ b/src/gouni/model/address.go @@ -0,0 +1,30 @@ +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} +} diff --git a/src/gouni/model/shared_flat.go b/src/gouni/model/shared_flat.go new file mode 100644 index 0000000..a46dba0 --- /dev/null +++ b/src/gouni/model/shared_flat.go @@ -0,0 +1,39 @@ +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)} +} diff --git a/src/gouni/model/student.go b/src/gouni/model/student.go new file mode 100644 index 0000000..87d5230 --- /dev/null +++ b/src/gouni/model/student.go @@ -0,0 +1,47 @@ +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)} +} -- GitLab