قائمة جهات اتصال أساسية
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 66 من 68.
التحدي
سهلقم بإنشاء نظام لإدارة جهات الاتصال يوضح كيفية عمل الهياكل (structs)، والشرائح (slices)، والوظائف (functions) معاً لتنظيم وعرض معلومات الاتصال. سيختبر هذا التحدي قدرتك على تحديد هياكل بيانات مخصصة، وإدارة مجموعات من البيانات، وتنفيذ وظائف لمعالجة تلك البيانات.
ستتلقى مدخلين:
- سلسلة نصية تحتوي على معلومات جهات الاتصال بالتنسيق
"name1:phone1:email1,name2:phone2:email2,name3:phone3:email3"(على سبيل المثال،"Alice Johnson:555-0123:alice@email.com,Bob Smith:555-0456:bob@email.com,Carol Davis:555-0789:carol@email.com") - سلسلة نصية تحتوي على جهة اتصال جديدة لإضافتها بالتنسيق
"name:phone:email"(على سبيل المثال،"David Wilson:555-0321:david@email.com")
مهمتك هي:
- تحديد هيكل
Contactبثلاثة حقول نصية:Name، وPhone، وEmail - إنشاء وظيفة تسمى
addContactتأخذ شريحة من هياكلContactوجهة اتصالContactجديدة، ثم تعيد شريحة جديدة مع إضافة جهة الاتصال - إنشاء وظيفة تسمى
displayContactsتأخذ شريحة من هياكلContactوتطبع معلومات كل جهة اتصال - تحليل المدخل الأول عن طريق التقسيم عند الفواصل للحصول على إدخالات جهات الاتصال الفردية
- لكل إدخال جهة اتصال، قم بالتقسيم عند النقطتين الرأسيتين لاستخراج الاسم والهاتف والبريد الإلكتروني
- إنشاء هياكل
Contactمن البيانات التي تم تحليلها وتخزينها في شريحة - تحليل المدخل الثاني عن طريق التقسيم عند النقطتين الرأسيتين لإنشاء جهة اتصال جديدة
- عرض رأس التطبيق:
"=== CONTACT MANAGEMENT SYSTEM ===" - عرض جهات الاتصال الأولية باستخدام وظيفة
displayContactsالخاصة بك مع الرأس:"Initial contact list:" - عرض جهة الاتصال الجديدة التي يتم إضافتها:
"Adding new contact: [name] ([phone]) - [email]" - استخدم وظيفة
addContactلإضافة جهة الاتصال الجديدة إلى الشريحة - عرض جهات الاتصال المحدثة باستخدام وظيفة
displayContactsالخاصة بك مع الرأس:"Updated contact list:" - عرض إحصائيات جهات الاتصال:
"=== CONTACT STATISTICS ===""Total contacts: [number_of_contacts]""Contacts added this session: 1"
- عرض رسالة الإكمال:
"Contact management operations completed successfully"
يجب أن تقوم وظيفة displayContacts بطباعة كل جهة اتصال بالتنسيق: "[index]. [name] - Phone: [phone], Email: [email]" حيث يبدأ الفهرس (index) من 1.
استخدم حزمة strings لتقسيم سلاسل الإدخال وحزمة fmt للإخراج المنسق. يوضح هذا التحدي كيفية الجمع بين الهياكل لتنظيم البيانات، والشرائح للمجموعات، والوظائف لتنظيم الكود - وهي أنماط أساسية مستخدمة في برمجة Go.
جرّب بنفسك
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: قم بتعريف هيكل Contact الخاص بك هنا
// TODO: قم بتنفيذ دالة addContact هنا
// TODO: قم بتنفيذ دالة displayContacts هنا
func main() {
// قراءة المدخلات باستخدام bufio.Scanner للتعامل مع المسافات في الأسماء بشكل صحيح
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
contactsInput := scanner.Text()
scanner.Scan()
newContactInput := scanner.Text()
// TODO: اكتب الكود الخاص بك أدناه
// تحليل مدخلات جهات الاتصال وإنشاء هياكل Contact
// تذكر التحقق مما إذا كانت شريحة الأجزاء تحتوي على عناصر كافية قبل الوصول إليها
// تحليل مدخلات جهة الاتصال الجديدة
// عرض ترويسة التطبيق
// عرض جهات الاتصال الأولية
// إضافة جهة الاتصال الجديدة
// عرض جهات الاتصال المحدثة
// عرض الإحصائيات
// عرض رسالة الإكمال
}جميع دروس Logic & Flow
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكيات