إنهاء الأداة
جزء من قسم المنطق وتدفق التنفيذ في رحلة C++ على Coddy. الدرس 22 من 56.
التحدي
سهلأكمل أداة قائمة المهام الخاصة بك من خلال تنفيذ الحلقة الرئيسية للبرنامج التي تربط جميع الوظائف معًا. ينشئ هذا الدرس النهائي تطبيقًا كامل الوظائف لإدارة المهام، حيث يعرض القائمة بشكل متكرر ويعالج أوامر المستخدم حتى يختار الخروج.
سيتم توفير المدخلات التالية:
- سلسلة من اختيارات القائمة (أعداد صحيحة: 1 من أجل Add Task، و2 من أجل View Tasks، و3 من أجل Remove Task، و4 من أجل Quit)
- من أجل Add Task (الاختيار 1): سلسلة نصية تمثل وصف المهمة
- من أجل Remove Task (الاختيار 3): عدد صحيح يمثل رقم المهمة المراد إزالتها (الفهرسة التي تبدأ من 1)
يجب أن يقوم برنامجك بما يلي:
- البدء بالإعداد نفسه من الدروس السابقة (
std::vector<std::string>فارغ باسمtasksورسالة ترحيب) - إنشاء حلقة رئيسية تستمر حتى يختار المستخدم الخروج
- عرض القائمة وقراءة اختيار المستخدم في كل تكرار
- معالجة كل خيار من خيارات القائمة:
- الاختيار 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!استخدم حلقة while تستمر حتى يُدخل المستخدم الرقم 4. بالنسبة إلى وظيفة Remove Task، تذكّر التحقق من أن رقم المهمة يقع بين 1 وtasks.size() قبل استخدام tasks.erase(tasks.begin() + index). إذا أصبحت القائمة فارغة بعد الإزالة، اطبع "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;
}جميع دروس المنطق وتدفق التنفيذ
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vectorتدرّب بنفسك: مترجم C++ عبر الإنترنت