Menu
Coddy logo textTech

מבני נתונים של ספרים ומשתמשים

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

challenge icon

אתגר

קל

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

תארגן את הקוד שלך בשלושה קבצים:

  • book.go: הגדר את המבנה Book עם השדות ID, Title, Author, ISBN ו-Available (בוליאני). צור פונקציית בנאי בשם NewBook שמקבלת את המזהה, הכותרת, המחבר וה-ISBN כפרמטרים ומחזירה מצביע ל-Book חדש. ספרים חדשים צריכים להתחיל תמיד כזמינים. הוסף מתודה Info() שמחזירה את פרטי הספר בפורמט: [ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]
  • user.go: הגדר את המבנה User עם השדות ID, Name, Email ו-BorrowedBooks (פרוסה של מחרוזות לאחסון מזהי ספרים). צור פונקציית בנאי בשם NewUser שמקבלת מזהה, שם ודוא"ל, ומחזירה מצביע ל-User חדש עם רשימת ספרים מושאלים ריקה. הוסף מתודה Info() שמחזירה: Member: [Name] ([Email]) - Books borrowed: [count]
  • main.go: חבר את המודלים שלך על ידי יצירת ספרים ומשתמשים מתוך הקלט, ואז הצגת המידע שלהם.

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

    הדפס את פרטי כל ספר בשורה נפרדת, ולאחר מכן את פרטי כל משתמש בשורה נפרדת.

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

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

לדוגמה, עבור הקלט:

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

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

[B001] "The Go Programming Language" by Alan Donovan (ISBN: 978-0134190440) - Available: true
[B002] "Clean Code" by Robert Martin (ISBN: 978-0132350884) - Available: true
Member: Alice Smith (alice@library.com) - Books borrowed: 0

ועבור הקלט:

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

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

[B100] "Design Patterns" by Gang of Four (ISBN: 978-0201633610) - Available: true
Member: Bob Jones (bob@email.com) - Books borrowed: 0
Member: Carol White (carol@email.com) - Books borrowed: 0

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

נסו בעצמכם

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 לאחסון הספרים

	// קרא את הפרטים של כל ספר
	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)
		isbn, _ := reader.ReadString('\n')
		isbn = strings.TrimSpace(isbn)

		// TODO: צור ספר חדש באמצעות הבנאי NewBook והוסף אותו ל-slice
	}

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

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

	// קרא את הפרטים של כל משתמש
	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: צור משתמש חדש באמצעות הבנאי NewUser והוסף אותו ל-slice
	}

	// TODO: הדפס את המידע על כל ספר באמצעות המתודה Info()

	// TODO: הדפס את המידע על כל משתמש באמצעות המתודה Info()

	fmt.Println() // מציין מקום - יש להסיר בעת המימוש
}

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

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