Menu
Coddy logo textTech

Hepsini Bir Araya Getirme

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 25 / 68.

challenge icon

Görev

Kolay

Görev listesi uygulamanızı tamamlama zamanı. Bu son adımda önceki derslerdeki her şeyi bir araya getiriyorsunuz: Task yapısı, addTask, viewAllTasks, completeTask ve removeTask; bunların tümü bir menü eylemleri oturumu tarafından yönetiliyor.

Üç girdi alacaksınız:

  • Uygulama adı ile kullanıcı adını virgülle ayıran bir dize (ör. "MyTasks,Alice")
  • Listenin başlangıçta içerdiği görevleri içeren bir dize; biçimi "name1:status1,name2:status2" şeklindedir ve status değeri "true" veya "false" olur (ör. "Write report:false,Call dentist:true"). Liste başlangıçta boşsa bu satır boştur.
  • Virgüllerle ayrılmış oturum eylemlerini içeren bir dize. Bir eylem yalnızca kendi adından veya | ile birleştirilmiş adı ve bir parametresinden oluşur (ör. "add|Buy groceries,view,complete|2,remove|0,exit"). Eylem listesi her zaman "exit" ile biter.

Görev adları boşluk içerir; bu nedenle önceki derslerde olduğu gibi üç satırın tamamını bufio.Scanner ile okuyun.

Göreviniz:

  1. Name (string) ve Completed (bool) alanlarına sahip aynı Task yapısını tanımlamak
  2. Daha önce yazdığınız dört işlevi aynı imzalarla geri getirmek:
    • addTask(tasks []Task, taskName string) []Task
    • Tamamlanmış bir görev için "[x] [task_name]", hâlâ açık olan bir görev için "[ ] [task_name]" yazdıran viewAllTasks(tasks []Task)
    • completeTask(tasks *[]Task, index int)
    • removeTask(tasks []Task, index int) []Task
  3. Boş bir satırın boş bir liste anlamına geldiğini unutmadan başlangıç listesini ikinci girdiden oluşturmak
  4. Karşılama mesajını ve menüyü projenin ilk adımındakiyle tamamen aynı şekilde yazdırmak:
    • "Welcome to [app_name], [user_name]!"
    • "1. Add Task"
    • "2. View Tasks"
    • "3. Complete Task"
    • "4. Remove Task"
    • "5. Exit"
    • "Current tasks: [count]"
  5. Eylemleri sırayla çalıştırmak. Her eylem önce kendi başlığını yazdırır:
    • "add": "--- ADD TASK ---" yazdırın, parametrede belirtilen görevi ekleyin, ardından "Task '[task_name]' added!" yazdırın
    • "view": "--- VIEW TASKS ---" yazdırın, viewAllTasks ile her görevi listeleyin, ardından özet satırını yazdırın
    • "complete": "--- COMPLETE TASK ---" yazdırın, ilgili dizindeki görevi tamamlandı olarak işaretleyin, ardından "Task '[task_name]' marked as completed!" yazdırın
    • "remove": "--- REMOVE TASK ---" yazdırın, ilgili dizindeki görevi kaldırın, ardından "Task '[task_name]' removed successfully!" yazdırın
    • "exit": "--- EXIT ---" yazdırın, ardından "Final list:", sonra listenin tamamını, ardından özet satırını ve son olarak "Goodbye, [user_name]!" yazdırın. exit işleminden sonra hiçbir şey çalışmaz.
  6. Dizinler, önceki derslerde olduğu gibi 0 tabanlıdır. Bir "complete" veya "remove" dizini listenin dışındaysa bunun yerine "Invalid task number" yazdırın ve listeyi değiştirmeyin.
  7. Özet satırı zaten bildiğiniz satırdır: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Girdi satırlarını bölmek için strings paketini, bir dizini sayıya dönüştürmek için strconv paketini kullanın. Bu son adım, teker teker yazdığınız küçük işlevlerin bir araya gelerek çalışan bir programı nasıl oluşturduğunu gösterir.

Kendin dene

package main

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

type Task struct {
	Name      string
	Completed bool
}

// TODO: Bring back addTask, viewAllTasks, completeTask and removeTask
// bu projenin önceki derslerinden

func main() {
	// Giriş satırlarını okumak için tarayıcı oluştur
	scanner := bufio.NewScanner(os.Stdin)

	// Uygulama adını ve kullanıcı adını oku
	scanner.Scan()
	names := scanner.Text()

	// Listenin başlangıç görevlerini oku
	scanner.Scan()
	taskData := scanner.Text()

	// Oturumun eylemlerini oku
	scanner.Scan()
	actionData := scanner.Text()

	// TODO: Uygulamayı tamamla
	// 1. Uygulama adını ve kullanıcı adını almak için names'i "," üzerinde böl
	// 2. taskData'dan başlangıç görev dilimini oluştur
	// 3. Hoş geldin mesajını, menüyü ve mevcut görev sayısını yazdır
	// 4. actionData'daki her eylemi sırayla çalıştır, önce başlığını yazdırarak
}

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi