Menu
Coddy logo textTech

סיכום – היררכיית עובדים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GO של Coddy. שיעור 40 מתוך 107.

challenge icon

אתגר

קל

בואו נבנה מערכת היררכיית עובדים עבור חברה, שתדגים כיצד הרכבה ממדלת באלגנטיות מבנים ארגוניים מהעולם האמיתי. תיצרו סוג עובד בסיסי שתפקידים ייעודיים יוכלו להרחיב באמצעות התנהגויות ייחודיות משלהם.

תארגנו את הקוד שלכם בשלושה קבצים:

  • employee.go: צרו את הבסיס באמצעות struct בשם Employee שמכיל את השדות ID, Name ו-BaseSalary (float64). הוסיפו לו שתי מתודות:
    • Info() string שמחזירה [ID] [Name]
    • CalculateBonus() float64 שמחזירה 10% משכר הבסיס
  • roles.go: צרו שני סוגי עובדים ייעודיים שמטמיעים את Employee:
    • Manager עם שדה TeamSize (int): מנהלים מקבלים בונוס גבוה יותר — 20% משכר הבסיס ועוד $100 לכל חבר צוות. הסוו את המתודה CalculateBonus כדי לממש זאת.
    • Developer עם שדה Language (string): מפתחים מקבלים את הבונוס הרגיל, אך מסווים את המתודה Info כדי להוסיף את שפת התכנות שלהם: [ID] [Name] ([Language])
  • main.go: קראו את פרטי העובדים מהקלט, צרו Manager אחד ו-Developer אחד, ואז הציגו את המידע והבונוס המחושב של כל עובד.

הקלט הבא יסופק:

  • שורה 1: מזהה המנהל
  • שורה 2: שם המנהל
  • שורה 3: שכר הבסיס של המנהל (float64)
  • שורה 4: גודל הצוות של המנהל (מספר שלם)
  • שורה 5: מזהה המפתח
  • שורה 6: שם המפתח
  • שורה 7: שכר הבסיס של המפתח (float64)
  • שורה 8: שפת התכנות של המפתח

עבור כל עובד, הדפיסו את המידע שלו ולאחריו את הבונוס בשורה הבאה. עצבו את הבונוסים עם שתי ספרות אחרי הנקודה העשרונית.

לדוגמה, עבור M001, Sarah Chen, 80000, 5, D001, Alex Rivera, 65000 ו-Go, הפלט שלכם אמור להיות:

M001 Sarah Chen
16500.00
D001 Alex Rivera (Go)
6500.00

שימו לב כיצד חישוב הבונוס של Manager (20% מ-80000 + 5×100 = 16500) שונה מהבונוס הרגיל של 10% של Developer, בעוד Developer מתאים אישית את אופן הצגת המידע שלו. לשני הסוגים עדיין יש גישה לשדות של Employee שהוטמע בהם, והם יכולים לקרוא למתודות המקוריות בעת הצורך.

נסו בעצמכם

package main

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

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

	// קראו את פרטי ה-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))

	// קראו את פרטי ה-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: צרו Manager באמצעות הערכים שנקראו
	// רמז: השתמשו בהרכבה - Manager מטמיע את Employee

	// TODO: צרו Developer באמצעות הערכים שנקראו
	// רמז: השתמשו בהרכבה - Developer מטמיע את Employee

	// TODO: הדפיסו את פרטי המנהל ואת הבונוס (הבונוס מעוצב עם 2 ספרות אחרי הנקודה העשרונית)
	// השתמשו ב-fmt.Printf עם "%.2f" לצורך העיצוב

	// TODO: הדפיסו את פרטי המפתח ואת הבונוס (הבונוס מעוצב עם 2 ספרות אחרי הנקודה העשרונית)
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Go אונליין