Menu
Coddy logo textTech

Podsumowanie — hierarchia pracowników

Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 40 z 107.

challenge icon

Wyzwanie

Łatwy

Stwórzmy system hierarchii pracowników firmy, który pokazuje, jak kompozycja elegancko odwzorowuje rzeczywiste struktury organizacyjne. Utworzysz bazowy typ pracownika, który wyspecjalizowane role będą mogły rozszerzać o własne, unikalne zachowania.

Rozmieścisz kod w trzech plikach:

  • employee.go: Utwórz podstawę w postaci struktury Employee zawierającej pola ID, Name i BaseSalary (float64). Dodaj do niej dwie metody:
    • Info() string, która zwraca [ID] [Name]
    • CalculateBonus() float64, która zwraca 10% wynagrodzenia podstawowego
  • roles.go: Utwórz dwa wyspecjalizowane typy pracowników, które osadzają Employee:
    • Manager z polem TeamSize (int): menedżerowie otrzymują wyższą premię: 20% wynagrodzenia podstawowego plus 100 $ za każdego członka zespołu. Przesłoń metodę CalculateBonus, aby to zaimplementować.
    • Developer z polem Language (string): programiści otrzymują standardową premię, ale przesłaniają metodę Info, aby dodać używany język programowania: [ID] [Name] ([Language])
  • main.go: Wczytaj dane pracowników z wejścia, utwórz jednego menedżera i jednego programistę, a następnie wyświetl informacje o każdym pracowniku i obliczoną premię.

Zostaną podane następujące dane wejściowe:

  • Wiersz 1: ID menedżera
  • Wiersz 2: Imię i nazwisko menedżera
  • Wiersz 3: Wynagrodzenie podstawowe menedżera (float64)
  • Wiersz 4: Wielkość zespołu menedżera (liczba całkowita)
  • Wiersz 5: ID programisty
  • Wiersz 6: Imię i nazwisko programisty
  • Wiersz 7: Wynagrodzenie podstawowe programisty (float64)
  • Wiersz 8: Język programowania programisty

Dla każdego pracownika wypisz jego informacje, a w następnym wierszu premię. Formatuj premie z dokładnością do dwóch miejsc po przecinku.

Na przykład dla danych M001, Sarah Chen, 80000, 5, D001, Alex Rivera, 65000 i Go wynik powinien wyglądać następująco:

M001 Sarah Chen
16500.00
D001 Alex Rivera (Go)
6500.00

Zauważ, że sposób obliczania premii menedżera (20% z 80000 + 5×100 = 16500) różni się od standardowej premii programisty wynoszącej 10%, a programista dostosowuje sposób wyświetlania swoich informacji. Oba typy nadal mają dostęp do osadzonych pól Employee i mogą w razie potrzeby wywoływać oryginalne metody.

Spróbuj swoich sił

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Wczytaj dane Manager
	managerID, _ := reader.ReadString('\n')
	managerID = strings.TrimSpace(managerID)

	managerName, _ := reader.ReadString('\n')
	managerName = strings.TrimSpace(managerName)

	managerSalaryStr, _ := reader.ReadString('\n')
	managerSalary, _ := strconv.ParseFloat(strings.TrimSpace(managerSalaryStr), 64)

	teamSizeStr, _ := reader.ReadString('\n')
	teamSize, _ := strconv.Atoi(strings.TrimSpace(teamSizeStr))

	// Wczytaj dane Developer
	devID, _ := reader.ReadString('\n')
	devID = strings.TrimSpace(devID)

	devName, _ := reader.ReadString('\n')
	devName = strings.TrimSpace(devName)

	devSalaryStr, _ := reader.ReadString('\n')
	devSalary, _ := strconv.ParseFloat(strings.TrimSpace(devSalaryStr), 64)

	devLanguage, _ := reader.ReadString('\n')
	devLanguage = strings.TrimSpace(devLanguage)

	// TODO: Utwórz Manager na podstawie wczytanych wartości
	// Wskazówka: Użyj kompozycji — Manager osadza Employee

	// TODO: Utwórz Developer na podstawie wczytanych wartości
	// Wskazówka: Użyj kompozycji — Developer osadza Employee

	// TODO: Wyświetl informacje o menedżerze i premię (premia sformatowana do 2 miejsc po przecinku)
	// Użyj fmt.Printf z "%.2f" do formatowania

	// TODO: Wyświetl informacje o programiście i premię (premia sformatowana do 2 miejsc po przecinku)
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Go online