Menu
Coddy logo textTech

Alles zusammenfügen

Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy. Lektion 25 von 68.

challenge icon

Aufgabe

Einfach

Zeit, deine Aufgabenlisten-Anwendung fertigzustellen. In diesem letzten Schritt führst du alles aus den vorherigen Lektionen zusammen: die Task-Struktur, addTask, viewAllTasks, completeTask und removeTask, gesteuert durch eine Sitzung mit Menüaktionen.

Du erhältst drei Eingaben:

  • Eine Zeichenkette mit dem Anwendungsnamen und dem Benutzernamen, getrennt durch ein Komma (z. B. "MyTasks,Alice")
  • Eine Zeichenkette mit den Aufgaben, mit denen die Liste beginnt, im Format "name1:status1,name2:status2", wobei der Status "true" oder "false" ist (z. B. "Write report:false,Call dentist:true"). Diese Zeile ist leer, wenn die Liste anfangs leer ist.
  • Eine durch Kommas getrennte Zeichenkette mit den Aktionen der Sitzung. Eine Aktion besteht entweder nur aus ihrem Namen oder aus ihrem Namen und einem Parameter, verbunden durch | (z. B. "add|Buy groceries,view,complete|2,remove|0,exit"). Die Aktionsliste endet immer mit "exit".

Aufgabennamen können Leerzeichen enthalten. Lies daher alle drei Zeilen mit bufio.Scanner ein, wie in den vorherigen Lektionen.

Deine Aufgabe ist es:

  1. Dieselbe Task-Struktur mit den Feldern Name (string) und Completed (bool) zu definieren
  2. Die vier bereits geschriebenen Funktionen mit denselben Signaturen wieder einzufügen:
    • addTask(tasks []Task, taskName string) []Task
    • viewAllTasks(tasks []Task), die für eine abgeschlossene Aufgabe "[x] [task_name]" und für eine noch offene Aufgabe "[ ] [task_name]" ausgibt
    • completeTask(tasks *[]Task, index int)
    • removeTask(tasks []Task, index int) []Task
  3. Die Startliste aus der zweiten Eingabe aufzubauen und dabei zu berücksichtigen, dass eine leere Zeile eine leere Liste bedeutet
  4. Die Begrüßungsnachricht und das Menü genau wie im ersten Schritt des Projekts auszugeben:
    • "Welcome to [app_name], [user_name]!"
    • "1. Add Task"
    • "2. View Tasks"
    • "3. Complete Task"
    • "4. Remove Task"
    • "5. Exit"
    • "Current tasks: [count]"
  5. Die Aktionen in der angegebenen Reihenfolge auszuführen. Jede Aktion gibt zuerst ihre Überschrift aus:
    • "add": "--- ADD TASK ---" ausgeben, die durch den Parameter angegebene Aufgabe hinzufügen und anschließend "Task '[task_name]' added!" ausgeben
    • "view": "--- VIEW TASKS ---" ausgeben, jede Aufgabe mit viewAllTasks auflisten und anschließend die Zusammenfassungszeile ausgeben
    • "complete": "--- COMPLETE TASK ---" ausgeben, die Aufgabe an diesem Index als abgeschlossen markieren und anschließend "Task '[task_name]' marked as completed!" ausgeben
    • "remove": "--- REMOVE TASK ---" ausgeben, die Aufgabe an diesem Index entfernen und anschließend "Task '[task_name]' removed successfully!" ausgeben
    • "exit": "--- EXIT ---" ausgeben, anschließend "Final list:", dann die gesamte Liste, danach die Zusammenfassungszeile und schließlich "Goodbye, [user_name]!". Nach exit wird nichts mehr ausgeführt.
  6. Die Indizes beginnen bei 0, wie in den vorherigen Lektionen. Wenn ein "complete"- oder "remove"-Index außerhalb der Liste liegt, gib stattdessen "Invalid task number" aus und lasse die Liste unverändert.
  7. Die Zusammenfassungszeile ist die bereits bekannte: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Verwende das Paket strings, um die Eingabezeilen aufzuteilen, und das Paket strconv, um einen Index in eine Zahl umzuwandeln. Dieser letzte Schritt zeigt, wie die kleinen Funktionen, die du einzeln geschrieben hast, zusammen ein funktionierendes Programm ergeben.

Probier es selbst

package main

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

type Task struct {
	Name      string
	Completed bool
}

// TODO: Bring back addTask, viewAllTasks, completeTask and removeTask
// aus den vorherigen Lektionen dieses Projekts

func main() {
	// Scanner zum Lesen von Eingabezeilen erstellen
	scanner := bufio.NewScanner(os.Stdin)

	// Den Anwendungsnamen und den Benutzernamen lesen
	scanner.Scan()
	names := scanner.Text()

	// Die Aufgaben lesen, mit denen die Liste beginnt
	scanner.Scan()
	taskData := scanner.Text()

	// Die Aktionen der Sitzung lesen
	scanner.Scan()
	actionData := scanner.Text()

	// TODO: Die Implementierung vervollständigen
	// 1. names an "," aufteilen, um den App-Namen und den Benutzernamen zu erhalten
	// 2. Die anfängliche Slice von tasks aus taskData erstellen
	// 3. Die Willkommensnachricht, das Menü und die aktuelle Aufgabenanzahl ausgeben
	// 4. Jede Aktion in actionData der Reihe nach ausführen und zuerst ihren Header ausgeben
}

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-Go-Compiler