Базовый список контактов
Часть раздела Логика и управление потоком путешествия по 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: Определите здесь вашу структуру 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Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение