Menu
Coddy logo textTech

도구 완성하기

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 22번째.

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;
}

로직과 흐름의 모든 레슨