إنهاء الأداة
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 22 من 56.
التحدي
سهلأكمل أداة قائمة المهام الخاصة بك عن طريق تنفيذ حلقة البرنامج الرئيسية التي تربط جميع الوظائف معاً. ينشئ هذا الدرس الأخير تطبيقاً كاملاً لإدارة المهام يعرض القائمة بشكل متكرر ويعالج أوامر المستخدم حتى يختار الخروج.
سيتم توفير المدخلات التالية:
- سلسلة من خيارات القائمة (أعداد صحيحة: 1 لـ "Add Task"، و 2 لـ "View Tasks"، و 3 لـ "Remove Task"، و 4 لـ "Quit")
- لإضافة مهمة (الخيار 1): سلسلة نصية تمثل وصف المهمة
- لإزالة مهمة (الخيار 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: لإضافة مهمة (الخيار 1):
Task "[task description]" added successfully!
Total tasks: [number of tasks]لعرض المهام (الخيار 2) مع وجود مهام:
Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]لعرض المهام (الخيار 2) عندما تكون القائمة فارغة:
No tasks available.لإزالة مهمة (الخيار 3) مع رقم مهمة صالح:
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
...
Total tasks: [updated number of tasks]لإزالة مهمة (الخيار 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. بالنسبة لوظيفة إزالة المهمة، تذكر التحقق من أن رقم المهمة يقع بين 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;
}جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector