ツールの仕上げ
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 22/56。
チャレンジ
簡単すべての機能を結びつけるメインプログラムループを実装して、タスクリストツールを完成させましょう。この最後のレッスンでは、終了を選択するまでメニューを繰り返し表示し、ユーザーのコマンドを処理する、完全に機能するタスク管理アプリケーションを作成します。
以下の入力が提供されます:
- 一連のメニュー選択(整数:1は "Add Task"、2は "View Tasks"、3は "Remove Task"、4は "Quit")
- "Add Task"(選択肢 1)の場合:タスクの説明を表す文字列
- "Remove Task"(選択肢 3)の場合:削除するタスク番号を表す整数(1から始まるインデックス)
プログラムは以下のことを行う必要があります:
- 前のレッスンと同じセットアップ(
tasksという名前の空のstd::vector<std::string>とウェルカムメッセージ)から開始する - ユーザーが終了を選択するまで続くメインループを作成する
- 各反復でメニューを表示し、ユーザーの選択を読み取る
- 各メニューオプションを処理する:
- 選択肢 1:タスクの説明を読み取り、
push_back()を使用して追加する - 選択肢 2:すべてのタスクを番号付き形式で表示するか、空の場合は "No tasks available." と表示する
- 選択肢 3:タスク番号を読み取り、それを検証し、
.erase()を使用してタスクを削除する - 選択肢 4:プログラムループを終了する
- 選択肢 1:タスクの説明を読み取り、
- 無効なメニュー選択の場合、エラーメッセージを表示してループを継続する
- ユーザーが終了したときに別れのメッセージを表示する
以下の正確な出力形式を使用してください:
初期のセットアップとメニュー表示:
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;
}