Menu
Coddy logo textTech

ツールの仕上げ

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 22/56。

challenge icon

チャレンジ

簡単

すべての機能を結びつけるメインプログラムループを実装して、タスクリストツールを完成させましょう。この最後のレッスンでは、終了を選択するまでメニューを繰り返し表示し、ユーザーのコマンドを処理する、完全に機能するタスク管理アプリケーションを作成します。

以下の入力が提供されます:

  • 一連のメニュー選択(整数:1は "Add Task"、2は "View Tasks"、3は "Remove Task"、4は "Quit")
  • "Add Task"(選択肢 1)の場合:タスクの説明を表す文字列
  • "Remove Task"(選択肢 3)の場合:削除するタスク番号を表す整数(1から始まるインデックス)

プログラムは以下のことを行う必要があります:

  1. 前のレッスンと同じセットアップ(tasks という名前の空の std::vector<std::string> とウェルカムメッセージ)から開始する
  2. ユーザーが終了を選択するまで続くメインループを作成する
  3. 各反復でメニューを表示し、ユーザーの選択を読み取る
  4. 各メニューオプションを処理する:
    • 選択肢 1:タスクの説明を読み取り、push_back() を使用して追加する
    • 選択肢 2:すべてのタスクを番号付き形式で表示するか、空の場合は "No tasks available." と表示する
    • 選択肢 3:タスク番号を読み取り、それを検証し、.erase() を使用してタスクを削除する
    • 選択肢 4:プログラムループを終了する
  5. 無効なメニュー選択の場合、エラーメッセージを表示してループを継続する
  6. ユーザーが終了したときに別れのメッセージを表示する

以下の正確な出力形式を使用してください:

初期のセットアップとメニュー表示:

Welcome to Task List Tool!

Menu Options:
1. Add Task
2. View Tasks
3. Remove Task
4. Quit

Task list system initialized and ready!

各メニューの反復ごとに表示:

Choose an option: 

"Add Task"(選択肢 1)の場合:

Task "[task description]" added successfully!
Total tasks: [number of tasks]

タスクがある場合の "View Tasks"(選択肢 2):

Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]

空の場合の "View Tasks"(選択肢 2):

No tasks available.

有効なタスク番号での "Remove Task"(選択肢 3):

Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
...
Total tasks: [updated number of tasks]

無効なタスク番号での "Remove Task"(選択肢 3):

Error: Invalid task number. Please enter a number between 1 and [total tasks].

無効なメニュー選択の場合:

Invalid choice. Please try again.

ユーザーが終了したとき(選択肢 4):

Thank you for using Task List Tool!

ユーザーが 4 を入力するまで続く while ループを使用してください。"Remove Task" 機能については、tasks.erase(tasks.begin() + index) を使用する前に、タスク番号が 1 と tasks.size() の間にあることを検証することを忘れないでください。削除後にリストが空になった場合は、残りのタスクリストの代わりに "No tasks remaining." を出力してください。

自分で試してみよう

#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> tasks;
    
    std::cout << "Welcome to Task List Tool!" << std::endl;
    std::cout << std::endl;
    std::cout << "Menu Options:" << std::endl;
    std::cout << "1. Add Task" << std::endl;
    std::cout << "2. View Tasks" << std::endl;
    std::cout << "3. Quit" << std::endl;
    std::cout << std::endl;
    std::cout << "Task list system initialized and ready!" << std::endl;
    
    int n;
    std::cin >> n;
    std::cin.ignore();
    
    for (int i = 0; i < n; i++) {
        std::string task;
        std::getline(std::cin, task);
        tasks.push_back(task);
    }
    
    int taskNumber;
    std::cin >> taskNumber;
    
    if (taskNumber < 1 || taskNumber > tasks.size()) {
        std::cout << "Error: Invalid task number. Please enter a number between 1 and " << tasks.size() << "." << std::endl;
    } else {
        std::string removedTask = tasks[taskNumber - 1];
        tasks.erase(tasks.begin() + (taskNumber - 1));
        
        std::cout << "Task \"" << removedTask << "\" removed successfully!" << std::endl;
        
        if (tasks.empty()) {
            std::cout << "No tasks remaining." << std::endl;
        } else {
            std::cout << "Remaining Tasks:" << std::endl;
            for (int i = 0; i < tasks.size(); i++) {
                std::cout << (i + 1) << ". " << tasks[i] << std::endl;
            }
        }
        
        std::cout << "Total tasks: " << tasks.size() << std::endl;
    }
    
    return 0;
}

論理と制御フローのすべてのレッスン