|
|
- package main
-
- import "fmt"
-
- type Employee struct {
- Id int
- FirstName string
- LastName string
- }
-
- type Developer struct {
- Individual Employee
- HourlyRate int
- WorkWeek [7]int
- }
-
- type Weekday int
-
- const (
- Sunday Weekday = iota
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
- )
-
- func main() {
-
- d := Developer{Individual: Employee{Id: 1, FirstName: "Tony", LastName: "Stark"}, HourlyRate: 10}
-
- x := nonLoggedHours()
-
- fmt.Println("Tracking hours worked so far today:", x(2))
- fmt.Println("Tracking hours worked so far today:", x(3))
- fmt.Println("Tracking hours worked so far today:", x(5))
-
- d.LogHours(Monday, 8)
- d.LogHours(Tuesday, 10)
- d.LogHours(Wednesday, 10)
- d.LogHours(Thursday, 10)
- d.LogHours(Friday, 6)
- d.LogHours(Saturday, 8)
-
- d.PayDetails()
-
- }
-
- func (d *Developer) LogHours(day Weekday, hours int) {
-
- d.WorkWeek[day] = hours
-
- }
-
- func (d *Developer) HoursWorked() int {
-
- total := 0
- for _, v := range d.WorkWeek {
- total += v
- }
- return total
-
- }
-
- func (d *Developer) PayDay() (int, bool) {
-
- if d.HoursWorked() > 40 {
- hoursOver := d.HoursWorked() - 40
- overTime := hoursOver * 2 * d.HourlyRate
- regularPay := 40 * d.HourlyRate
- return regularPay + overTime, true
- }
-
- return d.HoursWorked() * d.HourlyRate, false
-
- }
-
- func nonLoggedHours() func(int) int {
-
- total := 0
-
- return func(i int) int {
- total += i
- return total
- }
-
- }
-
- func (d *Developer) PayDetails() {
-
- for i, v := range d.WorkWeek {
- switch i {
- case 0:
- fmt.Println("Sunday hours:", v)
- case 1:
- fmt.Println("Monday hours:", v)
- case 2:
- fmt.Println("Tuesday hours:", v)
- case 3:
- fmt.Println("Wednesday hours:", v)
- case 4:
- fmt.Println("Thursday hours:", v)
- case 5:
- fmt.Println("Friday hours:", v)
- case 6:
- fmt.Println("Saturday hours:", v)
- }
- }
-
- fmt.Println("Hours worked this week:", d.HoursWorked())
- pay, over := d.PayDay()
- fmt.Println("Pay for the week:", pay)
- fmt.Println("Is this overtime pay:", over)
-
- }
|