Menu
Coddy logo textTech

Assemblage final

Fait partie de la section Logique & Flux du Journey GO de Coddy. Leçon 25 sur 68.

challenge icon

Défi

Facile

Il est temps de terminer votre application de liste de tâches. Dans cette dernière étape, vous réunissez tout ce qui a été vu dans les leçons précédentes : la structure Task, addTask, viewAllTasks, completeTask et removeTask, pilotés par une session d’actions de menu.

Vous recevrez trois entrées :

  • Une chaîne contenant le nom de l’application et le nom de l’utilisateur, séparés par une virgule (par exemple, "MyTasks,Alice")
  • Une chaîne contenant les tâches avec lesquelles la liste commence, au format "name1:status1,name2:status2", où status vaut "true" ou "false" (par exemple, "Write report:false,Call dentist:true"). Cette ligne est vide lorsque la liste commence vide.
  • Une chaîne contenant les actions de la session, séparées par des virgules. Une action est soit son nom seul, soit son nom et un paramètre joints par | (par exemple, "add|Buy groceries,view,complete|2,remove|0,exit"). La liste des actions se termine toujours par "exit".

Les noms des tâches peuvent contenir des espaces ; lisez donc les trois lignes avec bufio.Scanner, comme dans les leçons précédentes.

Votre tâche consiste à :

  1. Définir la même structure Task avec les champs Name (string) et Completed (bool)
  2. Réutiliser les quatre fonctions que vous avez déjà écrites, avec les mêmes signatures :
    • addTask(tasks []Task, taskName string) []Task
    • viewAllTasks(tasks []Task), qui affiche "[x] [task_name]" pour une tâche terminée et "[ ] [task_name]" pour une tâche encore ouverte
    • completeTask(tasks *[]Task, index int)
    • removeTask(tasks []Task, index int) []Task
  3. Construire la liste initiale à partir de la deuxième entrée, en vous rappelant qu’une ligne vide signifie une liste vide
  4. Afficher le message de bienvenue et le menu, exactement comme dans la première étape du projet :
    • "Welcome to [app_name], [user_name]!"
    • "1. Add Task"
    • "2. View Tasks"
    • "3. Complete Task"
    • "4. Remove Task"
    • "5. Exit"
    • "Current tasks: [count]"
  5. Exécuter les actions dans l’ordre. Chaque action affiche d’abord son en-tête :
    • "add" : afficher "--- ADD TASK ---", ajouter la tâche indiquée par le paramètre, puis afficher "Task '[task_name]' added!"
    • "view" : afficher "--- VIEW TASKS ---", afficher chaque tâche avec viewAllTasks, puis afficher la ligne récapitulative
    • "complete" : afficher "--- COMPLETE TASK ---", marquer la tâche à cet index, puis afficher "Task '[task_name]' marked as completed!"
    • "remove" : afficher "--- REMOVE TASK ---", supprimer la tâche à cet index, puis afficher "Task '[task_name]' removed successfully!"
    • "exit" : afficher "--- EXIT ---", puis "Final list:", ensuite toute la liste, puis la ligne récapitulative, et enfin "Goodbye, [user_name]!". Rien ne s’exécute après exit.
  6. Les index commencent à 0, comme dans les leçons précédentes. Lorsqu’un index de "complete" ou de "remove" est en dehors de la liste, afficher "Invalid task number" à la place et laisser la liste inchangée.
  7. La ligne récapitulative est celle que vous connaissez déjà : "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Utilisez le package strings pour découper les lignes d’entrée et le package strconv pour convertir un index en nombre. Cette dernière étape montre comment les petites fonctions que vous avez écrites une par une s’assemblent pour former un programme fonctionnel.

Essayez vous-même

package main

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

type Task struct {
	Name      string
	Completed bool
}

// TODO: Bring back addTask, viewAllTasks, completeTask and removeTask
// des leçons précédentes de ce projet

func main() {
	// Créer un scanner pour lire les lignes d'entrée
	scanner := bufio.NewScanner(os.Stdin)

	// Lire le nom de l'application et le nom de l'utilisateur
	scanner.Scan()
	names := scanner.Text()

	// Lire les tâches avec lesquelles la liste commence
	scanner.Scan()
	taskData := scanner.Text()

	// Lire les actions de la session
	scanner.Scan()
	actionData := scanner.Text()

	// TODO: Compléter l'implémentation
	// 1. Diviser names sur "," pour obtenir le nom de l'app et le nom de l'utilisateur
	// 2. Construire la slice de départ des tâches à partir de taskData
	// 3. Afficher le message de bienvenue, le menu et le nombre actuel de tâches
	// 4. Exécuter chaque action dans actionData dans l'ordre, en affichant d'abord son en-tête
}

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur Go en ligne