Menu
Coddy logo textTech

Lista de contactos básica

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 66 de 68.

challenge icon

Desafío

Fácil

Crea un sistema de gestión de contactos que demuestre cómo los structs, los slices y las funciones trabajan juntos para organizar y mostrar información de contacto. Este desafío pondrá a prueba tu capacidad para definir estructuras de datos personalizadas, gestionar colecciones de datos e implementar funciones para manipular esos datos.

Recibirás dos entradas:

  • Una cadena que contiene información de contacto en el formato "name1:phone1:email1,name2:phone2:email2,name3:phone3:email3" (por ejemplo, "Alice Johnson:555-0123:alice@email.com,Bob Smith:555-0456:bob@email.com,Carol Davis:555-0789:carol@email.com")
  • Una cadena que contiene un nuevo contacto para agregar en el formato "name:phone:email" (por ejemplo, "David Wilson:555-0321:david@email.com")

Tu tarea es:

  1. Definir un struct Contact con tres campos de tipo string: Name, Phone y Email
  2. Crear una función llamada addContact que reciba un slice de structs Contact y un nuevo Contact, y luego devuelva un nuevo slice con el contacto agregado
  3. Crear una función llamada displayContacts que reciba un slice de structs Contact e imprima la información de cada contacto
  4. Analizar la primera entrada dividiéndola por comas para obtener las entradas de contacto individuales
  5. Para cada entrada de contacto, dividir por dos puntos para extraer el nombre, el teléfono y el correo electrónico
  6. Crear structs Contact a partir de los datos analizados y almacenarlos en un slice
  7. Analizar la segunda entrada dividiéndola por dos puntos para crear un nuevo contacto
  8. Mostrar el encabezado de la aplicación: "=== CONTACT MANAGEMENT SYSTEM ==="
  9. Mostrar los contactos iniciales usando tu función displayContacts con el encabezado: "Initial contact list:"
  10. Mostrar el nuevo contacto que se está agregando: "Adding new contact: [name] ([phone]) - [email]"
  11. Usar tu función addContact para agregar el nuevo contacto al slice
  12. Mostrar los contactos actualizados usando tu función displayContacts con el encabezado: "Updated contact list:"
  13. Mostrar estadísticas de contactos:
    • "=== CONTACT STATISTICS ==="
    • "Total contacts: [number_of_contacts]"
    • "Contacts added this session: 1"
  14. Mostrar el mensaje de finalización: "Contact management operations completed successfully"

La función displayContacts debe imprimir cada contacto en el formato: "[index]. [name] - Phone: [phone], Email: [email]" donde el índice comienza desde 1.

Usa el paquete strings para dividir las cadenas de entrada y el paquete fmt para la salida formateada. Este desafío demuestra cómo combinar structs para la organización de datos, slices para colecciones y funciones para la organización del código, patrones fundamentales utilizados en toda la programación con Go.

Pruébalo tú mismo

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

// TODO: Define tu estructura Contact aquí

// TODO: Implementa la función addContact aquí

// TODO: Implementa la función displayContacts aquí

func main() {
	// Leer la entrada usando bufio.Scanner para manejar correctamente los espacios en los nombres
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	contactsInput := scanner.Text()
	
	scanner.Scan()
	newContactInput := scanner.Text()
	
	// TODO: Escribe tu código a continuación
	// Analizar la entrada de contactos y crear estructuras Contact
	// Recuerda verificar si el slice de partes tiene suficientes elementos antes de acceder
	// Analizar la entrada del nuevo contacto
	// Mostrar el encabezado de la aplicación
	// Mostrar los contactos iniciales
	// Añadir el nuevo contacto
	// Mostrar los contactos actualizados
	// Mostrar estadísticas
	// Mostrar mensaje de finalización
}

Todas las lecciones de Lógica y Flujo