Menu
Coddy logo textTech

סקירה כללית ומבנה הפרויקט

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

challenge icon

אתגר

קל

בואו נתחיל את פרויקט מערכת ניהול הספרייה בהקמת המבנה הבסיסי! בשלב הראשון הזה תיצרו את התשתית שתתמוך בכל התכונות שנבנה בשיעורים הבאים.

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

  • book.go: הגדירו מבנה Book שמייצג ספר בספרייה. לכל ספר צריכים להיות ID, Title, Author וסטטוס Available (בוליאני). צרו פונקציית בנאי NewBook שמקבלת את המזהה, הכותרת והמחבר כפרמטרים ומחזירה מצביע ל-Book חדש, כאשר Available מוגדר כברירת מחדל ל-true. הוסיפו גם מתודת String() שמחזירה את פרטי הספר בפורמט: [ID] Title by Author
  • user.go: הגדירו מבנה User שמייצג חבר בספרייה, עם השדות ID, Name ו-Email. צרו פונקציית בנאי NewUser שמקבלת את שלושת הערכים ומחזירה מצביע ל-User חדש. הוסיפו מתודת String() שמחזירה: User: Name (Email)
  • main.go: חברו את כל החלקים באמצעות קריאת קלט ליצירת ספרים ומשתמשים, ולאחר מכן הציגו את פרטיהם.

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

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

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

  • מספר הספרים
  • עבור כל ספר: מזהה, כותרת ומחבר (כל אחד בשורה נפרדת)
  • מספר המשתמשים
  • עבור כל משתמש: מזהה, שם וכתובת אימייל (כל אחד בשורה נפרדת)

לדוגמה, בהינתן:

2
B001
The Go Programming Language
Alan Donovan
B002
Clean Code
Robert Martin
1
U001
Alice Smith
alice@library.com

הפלט שלכם צריך להיות:

[B001] The Go Programming Language by Alan Donovan
[B002] Clean Code by Robert Martin
User: Alice Smith (alice@library.com)

ובהינתן:

1
B100
Design Patterns
Gang of Four
2
U001
Bob Jones
bob@email.com
U002
Carol White
carol@email.com

הפלט שלכם צריך להיות:

[B100] Design Patterns by Gang of Four
User: Bob Jones (bob@email.com)
User: Carol White (carol@email.com)

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

נסו בעצמכם

package main

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

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

	// קרא את מספר הספרים
	numBooksStr, _ := reader.ReadString('\n')
	numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))

	// TODO: צור slice לאחסון הספרים

	// TODO: קרא את פרטי כל ספר (ID, כותרת, מחבר בשורות נפרדות)
	// וצור אובייקטים מסוג Book באמצעות NewBook
	for i := 0; i < numBooks; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		title, _ := reader.ReadString('\n')
		title = strings.TrimSpace(title)
		author, _ := reader.ReadString('\n')
		author = strings.TrimSpace(author)

		// TODO: צור ספר חדש והוסף אותו ל-slice שלך
	}

	// קרא את מספר המשתמשים
	numUsersStr, _ := reader.ReadString('\n')
	numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))

	// TODO: צור slice לאחסון המשתמשים

	// TODO: קרא את פרטי כל משתמש (ID, שם, דוא״ל בשורות נפרדות)
	// וצור אובייקטים מסוג User באמצעות NewUser
	for i := 0; i < numUsers; i++ {
		id, _ := reader.ReadString('\n')
		id = strings.TrimSpace(id)
		name, _ := reader.ReadString('\n')
		name = strings.TrimSpace(name)
		email, _ := reader.ReadString('\n')
		email = strings.TrimSpace(email)

		// TODO: צור משתמש חדש והוסף אותו ל-slice שלך
	}

	// TODO: הדפס את ייצוג המחרוזת של כל ספר

	// TODO: הדפס את ייצוג המחרוזת של כל משתמש
	fmt.Println("TODO: Print output here")
}

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

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