Menu
CoddyTech

Menggabungkan Semuanya

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 25 dari 68.

challenge icon

Tantangan

Mudah

Saatnya menyelesaikan aplikasi daftar tugasmu. Pada langkah terakhir ini, kamu akan menggabungkan semua hal dari pelajaran sebelumnya: struct Task, addTask, viewAllTasks, completeTask, dan removeTask, yang dijalankan melalui serangkaian tindakan menu.

Kamu akan menerima tiga input:

  • String berisi nama aplikasi dan nama pengguna yang dipisahkan dengan koma (misalnya, "MyTasks,Alice")
  • String berisi tugas yang ada dalam daftar sejak awal, dengan format "name1:status1,name2:status2", dengan status berupa "true" atau "false" (misalnya, "Write report:false,Call dentist:true"). Baris ini kosong jika daftar dimulai tanpa tugas.
  • String berisi tindakan dalam sesi, yang dipisahkan dengan koma. Tindakan bisa berupa namanya saja atau namanya beserta satu parameter yang digabungkan dengan | (misalnya, "add|Buy groceries,view,complete|2,remove|0,exit"). Daftar tindakan selalu diakhiri dengan "exit".

Nama tugas dapat berisi spasi, jadi baca ketiga baris dengan bufio.Scanner, seperti dalam pelajaran sebelumnya.

Tugasmu adalah:

  1. Definisikan struct Task yang sama dengan field Name (string) dan Completed (bool)
  2. Gunakan kembali empat fungsi yang sudah kamu tulis, dengan signature yang sama:
    • addTask(tasks []Task, taskName string) []Task
    • viewAllTasks(tasks []Task), yang mencetak "[x] [task_name]" untuk tugas yang selesai dan "[ ] [task_name]" untuk tugas yang masih terbuka
    • completeTask(tasks *[]Task, index int)
    • removeTask(tasks []Task, index int) []Task
  3. Buat daftar awal dari input kedua, ingat bahwa baris kosong berarti daftar kosong
  4. Cetak pesan sambutan dan menu, persis seperti pada langkah pertama proyek:
    • "Welcome to [app_name], [user_name]!"
    • "1. Add Task"
    • "2. View Tasks"
    • "3. Complete Task"
    • "4. Remove Task"
    • "5. Exit"
    • "Current tasks: [count]"
  5. Jalankan tindakan secara berurutan. Setiap tindakan mencetak header terlebih dahulu:
    • "add": cetak "--- ADD TASK ---", tambahkan tugas dengan nama yang ditentukan oleh parameter, lalu cetak "Task '[task_name]' added!"
    • "view": cetak "--- VIEW TASKS ---", tampilkan setiap tugas dengan viewAllTasks, lalu cetak baris ringkasan
    • "complete": cetak "--- COMPLETE TASK ---", tandai tugas pada indeks tersebut sebagai selesai, lalu cetak "Task '[task_name]' marked as completed!"
    • "remove": cetak "--- REMOVE TASK ---", hapus tugas pada indeks tersebut, lalu cetak "Task '[task_name]' removed successfully!"
    • "exit": cetak "--- EXIT ---", lalu "Final list:", kemudian seluruh daftar, lalu baris ringkasan, dan terakhir "Goodbye, [user_name]!". Tidak ada yang dijalankan setelah exit.
  6. Indeks dimulai dari 0, seperti dalam pelajaran sebelumnya. Jika indeks "complete" atau "remove" berada di luar daftar, cetak "Invalid task number" sebagai gantinya dan biarkan daftar tetap tidak berubah.
  7. Baris ringkasan adalah baris yang sudah kamu ketahui: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"

Gunakan package strings untuk memisahkan baris input dan package strconv untuk mengubah indeks menjadi angka. Langkah terakhir ini menunjukkan bagaimana fungsi-fungsi kecil yang kamu tulis satu per satu dapat membentuk program yang berfungsi.

Coba sendiri

package main

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

type Task struct {
	Name      string
	Completed bool
}

// TODO: Hadirkan kembali addTask, viewAllTasks, completeTask, dan removeTask
// dari pelajaran sebelumnya dalam proyek ini

func main() {
	// Buat scanner untuk membaca baris input
	scanner := bufio.NewScanner(os.Stdin)

	// Baca nama aplikasi dan nama pengguna
	scanner.Scan()
	names := scanner.Text()

	// Baca tugas awal dalam list
	scanner.Scan()
	taskData := scanner.Text()

	// Baca tindakan dalam sesi
	scanner.Scan()
	actionData := scanner.Text()

	// TODO: Selesaikan implementasinya
	// 1. Pisahkan names berdasarkan "," untuk mendapatkan nama aplikasi dan nama pengguna
	// 2. Buat slice tugas awal dari taskData
	// 3. Cetak pesan selamat datang, menu, dan jumlah tugas saat ini
	// 4. Jalankan setiap tindakan dalam actionData secara berurutan, cetak judulnya terlebih dahulu
}

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online