Menu
CoddyTech

Danh sách liên hệ cơ bản

Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 66 trên 68.

challenge icon

Thử thách

Dễ

Tạo một hệ thống quản lý danh bạ để minh họa cách các struct, slice và hàm phối hợp với nhau nhằm sắp xếp và hiển thị thông tin liên hệ. Thử thách này sẽ kiểm tra khả năng định nghĩa cấu trúc dữ liệu tùy chỉnh, quản lý tập hợp dữ liệu và triển khai các hàm để thao tác với dữ liệu đó.

Bạn sẽ nhận được hai đầu vào:

  • Một chuỗi chứa thông tin liên hệ theo định dạng "name1:phone1:email1,name2:phone2:email2,name3:phone3:email3" (ví dụ: "Alice Johnson:555-0123:alice@email.com,Bob Smith:555-0456:bob@email.com,Carol Davis:555-0789:carol@email.com")
  • Một chuỗi chứa liên hệ mới cần thêm theo định dạng "name:phone:email" (ví dụ: "David Wilson:555-0321:david@email.com")

Nhiệm vụ của bạn:

  1. Định nghĩa một struct Contact với ba trường kiểu chuỗi: Name, Phone và Email
  2. Tạo một hàm có tên addContact nhận một slice gồm các struct Contact và một Contact mới, sau đó trả về một slice mới có thêm liên hệ đó
  3. Tạo một hàm có tên displayContacts nhận một slice gồm các struct Contact và in ra thông tin của từng liên hệ
  4. Phân tích đầu vào thứ nhất bằng cách tách theo dấu phẩy để lấy từng mục liên hệ
  5. Với mỗi mục liên hệ, tách theo dấu hai chấm để lấy tên, số điện thoại và email
  6. Tạo các struct Contact từ dữ liệu đã phân tích và lưu chúng trong một slice
  7. Phân tích đầu vào thứ hai bằng cách tách theo dấu hai chấm để tạo một liên hệ mới
  8. Hiển thị tiêu đề ứng dụng: "=== CONTACT MANAGEMENT SYSTEM ==="
  9. Hiển thị các liên hệ ban đầu bằng hàm displayContacts của bạn với tiêu đề: "Initial contact list:"
  10. Hiển thị liên hệ mới đang được thêm: "Adding new contact: [name] ([phone]) - [email]"
  11. Dùng hàm addContact của bạn để thêm liên hệ mới vào slice
  12. Hiển thị các liên hệ đã cập nhật bằng hàm displayContacts của bạn với tiêu đề: "Updated contact list:"
  13. Hiển thị thống kê liên hệ:
    • "=== CONTACT STATISTICS ==="
    • "Total contacts: [number_of_contacts]"
    • "Contacts added this session: 1"
  14. Hiển thị thông báo hoàn tất: "Contact management operations completed successfully"

Hàm displayContacts cần in ra từng liên hệ theo định dạng: "[index]. [name] - Phone: [phone], Email: [email]", trong đó chỉ số bắt đầu từ 1.

Dùng package strings để tách các chuỗi đầu vào và package fmt để định dạng đầu ra. Thử thách này minh họa cách kết hợp struct để tổ chức dữ liệu, slice để lưu tập hợp và hàm để tổ chức code. Đây là những mẫu cơ bản được dùng xuyên suốt trong lập trình Go.

Tự làm thử

package main

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

// TODO: Định nghĩa struct Contact tại đây

// TODO: Triển khai hàm (function) addContact tại đây

// TODO: Triển khai hàm displayContacts tại đây

func main() {
	// Đọc đầu vào bằng bufio.Scanner để xử lý đúng dấu cách trong tên
	scanner := bufio.NewScanner(os.Stdin)
	
	scanner.Scan()
	contactsInput := scanner.Text()
	
	scanner.Scan()
	newContactInput := scanner.Text()
	
	// TODO: Viết code bên dưới
	// Phân tích đầu vào danh bạ và tạo các struct Contact
	// Nhớ kiểm tra slice parts có đủ phần tử trước khi truy cập
	// Phân tích đầu vào của liên hệ mới
	// Hiển thị tiêu đề ứng dụng
	// Hiển thị danh bạ ban đầu
	// Thêm liên hệ mới
	// Hiển thị danh bạ sau khi cập nhật
	// Hiển thị số liệu thống kê
	// Hiển thị thông báo hoàn tất
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Go online