Menu
CoddyTech

Hoàn thiện công cụ

Thuộc phần Logic và luồng chương trình trong hành trình C++ của Coddy. Bài học 22 trên 56.

challenge icon

Thử thách

Dễ

Hoàn thiện công cụ danh sách công việc bằng cách triển khai vòng lặp chính của chương trình để kết nối mọi chức năng. Bài học cuối cùng này tạo ra một ứng dụng quản lý công việc hoàn chỉnh, liên tục hiển thị menu và xử lý lệnh của người dùng cho đến khi họ chọn thoát.

Các đầu vào sau sẽ được cung cấp:

  • Một loạt lựa chọn trong menu (số nguyên: 1 để thêm công việc, 2 để xem công việc, 3 để xóa công việc, 4 để thoát)
  • Với lựa chọn Thêm công việc (lựa chọn 1): một chuỗi mô tả công việc
  • Với lựa chọn Xóa công việc (lựa chọn 3): một số nguyên biểu thị số thứ tự công việc cần xóa (đánh số từ 1)

Chương trình của bạn cần:

  1. Bắt đầu với cùng phần thiết lập như các bài học trước (một std::vector<std::string> rỗng tên là tasks và lời chào mừng)
  2. Tạo vòng lặp chính tiếp tục cho đến khi người dùng chọn thoát
  3. Hiển thị menu và đọc lựa chọn của người dùng trong mỗi lần lặp
  4. Xử lý từng lựa chọn trong menu:
    • Lựa chọn 1: Đọc mô tả công việc và thêm công việc bằng push_back()
    • Lựa chọn 2: Hiển thị tất cả công việc theo thứ tự đánh số, hoặc hiển thị "No tasks available." nếu danh sách rỗng
    • Lựa chọn 3: Đọc số thứ tự công việc, kiểm tra tính hợp lệ và xóa công việc bằng .erase()
    • Lựa chọn 4: Thoát khỏi vòng lặp của chương trình
  5. Nếu lựa chọn trong menu không hợp lệ, hãy hiển thị thông báo lỗi rồi tiếp tục vòng lặp
  6. In lời tạm biệt khi người dùng thoát

Dùng định dạng đầu ra chính xác sau:

Thiết lập ban đầu và hiển thị menu:

Welcome to Task List Tool!

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

Task list system initialized and ready!

Trong mỗi lần lặp của menu, hiển thị:

Choose an option: 

Với lựa chọn Thêm công việc (lựa chọn 1):

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

Với lựa chọn Xem công việc (lựa chọn 2) khi có công việc:

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

Với lựa chọn Xem công việc (lựa chọn 2) khi danh sách rỗng:

No tasks available.

Với lựa chọn Xóa công việc (lựa chọn 3) khi số thứ tự công việc hợp lệ:

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

Với lựa chọn Xóa công việc (lựa chọn 3) khi số thứ tự công việc không hợp lệ:

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

Khi lựa chọn trong menu không hợp lệ:

Invalid choice. Please try again.

Khi người dùng thoát (lựa chọn 4):

Thank you for using Task List Tool!

Dùng vòng lặp while tiếp tục cho đến khi người dùng nhập 4. Với chức năng Xóa công việc, hãy nhớ kiểm tra số thứ tự công việc nằm trong khoảng từ 1 đến tasks.size() trước khi dùng tasks.erase(tasks.begin() + index). Nếu danh sách trở nên rỗng sau khi xóa, hãy in "No tasks remaining." thay vì danh sách công việc còn lại.

Tự làm thử

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

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch C++ online