Menu
Coddy logo textTech

Łączenie wszystkiego w całość

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 25 z 68.

challenge icon

Wyzwanie

Łatwy

Czas dokończyć aplikację do tworzenia listy zadań. W tym ostatnim kroku połączysz wszystko z poprzednich lekcji: strukturę Task, funkcje addTask, viewAllTasks, completeTask i removeTask, obsługiwane przez sesję działań w menu.

Otrzymasz trzy dane wejściowe:

  • Ciąg znaków z nazwą aplikacji i nazwą użytkownika, rozdzielonymi przecinkiem (np. "MyTasks,Alice")
  • Ciąg znaków z zadaniami, które znajdują się na liście na początku, w formacie "name1:status1,name2:status2", gdzie status to "true" lub "false" (np. "Write report:false,Call dentist:true"). Ten wiersz jest pusty, jeśli lista na początku nie zawiera żadnych zadań.
  • Ciąg znaków z działaniami w sesji, rozdzielonymi przecinkami. Działanie to sama jego nazwa albo jego nazwa i jeden parametr połączone znakiem | (np. "add|Buy groceries,view,complete|2,remove|0,exit"). Lista działań zawsze kończy się na "exit".

Nazwy zadań mogą zawierać spacje, dlatego odczytaj wszystkie trzy wiersze za pomocą bufio.Scanner, tak jak w poprzednich lekcjach.

Twoje zadanie:

  1. Zdefiniuj tę samą strukturę Task z polami Name (string) i Completed (bool)
  2. Przywróć cztery napisane wcześniej funkcje o tych samych sygnaturach:
    • addTask(tasks []Task, taskName string) []Task
    • viewAllTasks(tasks []Task), która wyświetla "[x] [task_name]" dla ukończonego zadania i "[ ] [task_name]" dla zadania, które wciąż jest otwarte
    • completeTask(tasks *[]Task, index int)
    • removeTask(tasks []Task, index int) []Task
  3. Utwórz początkową listę na podstawie drugiego wejścia, pamiętając, że pusty wiersz oznacza pustą listę
  4. Wyświetl wiadomość powitalną i menu, dokładnie tak jak w pierwszym kroku projektu:
    • "Welcome to [app_name], [user_name]!"
    • "1. Add Task"
    • "2. View Tasks"
    • "3. Complete Task"
    • "4. Remove Task"
    • "5. Exit"
    • "Current tasks: [count]"
  5. Wykonuj działania po kolei. Każde działanie najpierw wyświetla swój nagłówek:
    • "add": wyświetl "--- ADD TASK ---", dodaj zadanie o nazwie podanej jako parametr, a następnie wyświetl "Task '[task_name]' added!"
    • "view": wyświetl "--- VIEW TASKS ---", wyświetl każde zadanie za pomocą viewAllTasks, a następnie wyświetl wiersz podsumowania
    • "complete": wyświetl "--- COMPLETE TASK ---", oznacz zadanie o podanym indeksie jako ukończone, a następnie wyświetl "Task '[task_name]' marked as completed!"
    • "remove": wyświetl "--- REMOVE TASK ---", usuń zadanie o podanym indeksie, a następnie wyświetl "Task '[task_name]' removed successfully!"
    • "exit": wyświetl "--- EXIT ---", następnie "Final list:", potem całą listę, następnie wiersz podsumowania, a na końcu "Goodbye, [user_name]!". Po wyjściu nic więcej się nie wykonuje.
  6. Indeksy zaczynają się od 0, tak jak w poprzednich lekcjach. Jeśli indeks w działaniu "complete" lub "remove" znajduje się poza listą, wyświetl "Invalid task number" i pozostaw listę bez zmian.
  7. Wiersz podsumowania jest taki, jaki już znasz: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Użyj pakietu strings, aby podzielić wiersze wejściowe, oraz pakietu strconv, aby zamienić indeks na liczbę. Ten ostatni krok pokazuje, jak małe funkcje, które pisałeś po kolei, składają się na działający program.

Spróbuj swoich sił

package main

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

type Task struct {
	Name      string
	Completed bool
}

// TODO: Przywróć addTask, viewAllTasks, completeTask i removeTask
// z poprzednich lekcji tego projektu

func main() {
	// Utwórz scanner do odczytywania wierszy wejścia
	scanner := bufio.NewScanner(os.Stdin)

	// Odczytaj nazwę aplikacji i nazwę użytkownika
	scanner.Scan()
	names := scanner.Text()

	// Odczytaj zadania początkowo znajdujące się na liście
	scanner.Scan()
	taskData := scanner.Text()

	// Odczytaj działania wykonywane podczas sesji
	scanner.Scan()
	actionData := scanner.Text()

	// TODO: Dokończ implementację
	// 1. Podziel names według "," na nazwę aplikacji i nazwę użytkownika
	// 2. Utwórz początkowy wycinek zadań na podstawie taskData
	// 3. Wyświetl powitanie, menu i bieżącą liczbę zadań
	// 4. Wykonaj kolejno wszystkie działania z actionData, wyświetlając najpierw nagłówek każdego z nich
}

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online