Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

نظرة عامة وهيكل المشروع

جزء من قسم Object Oriented Programming في رحلة GO على Coddy — الدرس 98 من 107.

challenge icon

التحدي

سهل

لنبدأ مشروع نظام إدارة المكتبة من خلال إعداد الهيكل التأسيسي! في هذه الخطوة الأولى، ستقوم بإنشاء الهيكل الأساسي الذي سيدعم جميع الميزات التي سنبنيها في الدروس القادمة.

ستقوم بتنظيم الكود الخاص بك عبر ثلاثة ملفات لإنشاء فصل واضح للمسؤوليات:

  • book.go: قم بتعريف هيكل Book الذي يمثل كتاباً في المكتبة. يجب أن يحتوي كل كتاب على ID، و Title، و Author، وحالة Available (boolean). قم بإنشاء دالة منشئة NewBook تأخذ المعرف (ID) والعنوان والمؤلف كمعاملات وتعيد مؤشراً (pointer) إلى كتاب جديد مع ضبط Available على true بشكل افتراضي. أضف أيضاً طريقة String() تعيد معلومات الكتاب بالتنسيق التالي: [ID] Title by Author
  • user.go: قم بتعريف هيكل User يمثل عضواً في المكتبة مع حقول ID، و Name، و Email. قم بإنشاء دالة منشئة NewUser تأخذ القيم الثلاث وتعيد مؤشراً إلى مستخدم جديد. أضف طريقة String() تعيد: User: Name (Email)
  • main.go: اجمع كل شيء معاً من خلال قراءة المدخلات لإنشاء الكتب والمستخدمين، ثم عرض معلوماتهم.

    اقرأ عدد الكتب المراد إنشاؤها. لكل كتاب، اقرأ المعرف (ID) والعنوان والمؤلف في أسطر منفصلة. ثم اقرأ عدد المستخدمين، ولكل مستخدم اقرأ المعرف (ID) والاسم والبريد الإلكتروني في أسطر منفصلة.

    بعد إنشاء جميع العناصر، اطبع التمثيل النصي لكل كتاب في سطر مستقل، يليه التمثيل النصي لكل مستخدم في سطر مستقل.

سيتم توفير المدخلات التالية:

  • عدد الكتب
  • لكل كتاب: المعرف (ID)، والعنوان، والمؤلف (كل منها في سطر منفصل)
  • عدد المستخدمين
  • لكل مستخدم: المعرف (ID)، والاسم، والبريد الإلكتروني (كل منها في سطر منفصل)

على سبيل المثال، إذا كان المدخل:

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: طباعة التمثيل النصي (string representation) لكل كتاب

	// TODO: طباعة التمثيل النصي (string representation) لكل مستخدم
	fmt.Println("TODO: Print output here")
}

جميع دروس Object Oriented Programming