Menu
Coddy logo textTech

Lista de Contatos Básica

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 66 de 68.

challenge icon

Desafio

Fácil

Crie um sistema de gerenciamento de contatos que demonstre como structs, slices e funções trabalham juntos para organizar e exibir informações de contato. Este desafio testará sua habilidade de definir estruturas de dados personalizadas, gerenciar coleções de dados e implementar funções para manipular esses dados.

Você receberá duas entradas:

  • Uma string contendo informações de contato no formato "name1:phone1:email1,name2:phone2:email2,name3:phone3:email3" (ex: "Alice Johnson:555-0123:alice@email.com,Bob Smith:555-0456:bob@email.com,Carol Davis:555-0789:carol@email.com")
  • Uma string contendo um novo contato para adicionar no formato "name:phone:email" (ex: "David Wilson:555-0321:david@email.com")

Sua tarefa é:

  1. Definir uma struct Contact com três campos do tipo string: Name, Phone e Email
  2. Criar uma função chamada addContact que recebe um slice de structs Contact e um novo Contact, e então retorna um novo slice com o contato adicionado
  3. Criar uma função chamada displayContacts que recebe um slice de structs Contact e imprime as informações de cada contato
  4. Analisar a primeira entrada dividindo-a por vírgulas para obter as entradas de contato individuais
  5. Para cada entrada de contato, dividir por dois-pontos para extrair nome, telefone e e-mail
  6. Criar structs Contact a partir dos dados analisados e armazená-los em um slice
  7. Analisar a segunda entrada dividindo-a por dois-pontos para criar um novo contato
  8. Exibir o cabeçalho da aplicação: "=== CONTACT MANAGEMENT SYSTEM ==="
  9. Exibir os contatos iniciais usando sua função displayContacts com o cabeçalho: "Initial contact list:"
  10. Exibir o novo contato que está sendo adicionado: "Adding new contact: [name] ([phone]) - [email]"
  11. Usar sua função addContact para adicionar o novo contato ao slice
  12. Exibir os contatos atualizados usando sua função displayContacts com o cabeçalho: "Updated contact list:"
  13. Exibir estatísticas de contato:
    • "=== CONTACT STATISTICS ==="
    • "Total contacts: [number_of_contacts]"
    • "Contacts added this session: 1"
  14. Exibir a mensagem de conclusão: "Contact management operations completed successfully"

A função displayContacts deve imprimir cada contato no formato: "[index]. [name] - Phone: [phone], Email: [email]" onde o índice começa em 1.

Use o pacote strings para dividir as strings de entrada e o pacote fmt para saída formatada. Este desafio demonstra como combinar structs para organização de dados, slices para coleções e funções para organização de código - padrões fundamentais usados em toda a programação Go.

Experimente você mesmo

package main

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

// TODO: Defina sua struct Contact aqui

// TODO: Implemente a função addContact aqui

// TODO: Implemente a função displayContacts aqui

func main() {
	// Lê a entrada usando bufio.Scanner para lidar corretamente com espaços em nomes
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	contactsInput := scanner.Text()
	
	scanner.Scan()
	newContactInput := scanner.Text()
	
	// TODO: Escreva seu código abaixo
	// Analise a entrada de contatos e crie as structs Contact
	// Lembre-se de verificar se o slice de partes tem elementos suficientes antes de acessar
	// Analise a entrada do novo contato
	// Exiba o cabeçalho da aplicação
	// Exiba os contatos iniciais
	// Adicione o novo contato
	// Exiba os contatos atualizados
	// Exiba as estatísticas
	// Exiba a mensagem de conclusão
}

Todas as lições de Lógica & Fluxo