רשימת אנשי קשר בסיסית
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 66 מתוך 68.
אתגר
קלצרו מערכת לניהול אנשי קשר שמדגימה כיצד מבנים, פרוסות ופונקציות פועלים יחד כדי לארגן ולהציג פרטי אנשי קשר. אתגר זה יבחן את יכולתכם להגדיר מבני נתונים מותאמים אישית, לנהל אוספי נתונים ולממש פונקציות לשינוי הנתונים האלה.
תקבלו שתי קלטים:
- מחרוזת המכילה פרטי אנשי קשר בפורמט
"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]", כאשר האינדקס מתחיל ב-1.
השתמשו בחבילה strings כדי לפצל מחרוזות קלט ובחבילה fmt להפקת פלט מעוצב. אתגר זה מדגים כיצד לשלב מבנים לארגון נתונים, פרוסות לאוספים ופונקציות לארגון הקוד — דפוסים בסיסיים הנמצאים בשימוש לאורך תכנות ב-Go.
נסו בעצמכם
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: הגדירו כאן את ה-struct של 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
// זכרו לבדוק אם בפרוסה parts יש מספיק איברים לפני שניגשים אליהם
// נתחו את הקלט של איש הקשר החדש
// הציגו את כותרת היישום
// הציגו את אנשי הקשר הראשוניים
// הוסיפו את איש הקשר החדש
// הציגו את אנשי הקשר המעודכנים
// הצג נתונים סטטיסטיים
// הצג הודעת סיום
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאיתרגלו בעצמכם: קומפיילר Go אונליין