📋 مشروع: قائمة مهام CLI
ما الذي سنبنيه؟
تطبيق سطر أوامر بسيط لإدارة قائمة المهام:
╔══════════════════════════════╗
║ 📋 قائمة مهامي ║
╠══════════════════════════════╣
║ 1. إضافة مهمة ║
║ 2. عرض المهام ║
║ 3. إتمام مهمة ║
║ 4. حذف مهمة ║
║ 5. حفظ وخروج ║
╚══════════════════════════════╝
اختر: _ما ستتعلمه
- ✅ التعامل مع إدخال المستخدم
اقرأ() - ✅ استخدام المصفوفات والحلقات
- ✅ قراءة وكتابة الملفات
- ✅ بناء واجهة نصية (menu)
- ✅ تنظيم الكود في دوال واضحة
الخطوة 1: الهيكل الأساسي
لنبدأ بإنشاء الهيكل الأساسي للبرنامج:
sad
# ═══════════════════════════════════════
# مشروع: قائمة مهام CLI
# ═══════════════════════════════════════
# المصفوفة التي ستحفظ المهام
متغير المهام = []
# === الدالة الرئيسية ===
دالة رئيسية()
اطبع_سطر("مرحباً بك في قائمة المهام!")
# حلقة البرنامج الرئيسية
متغير يعمل = صحيح
بينما (يعمل)
عرض_القائمة()
متغير اختيار = اقرأ()
# معالجة الاختيار
إذا (اختيار == "5")
يعمل = خطأ
نهاية
نهاية
اطبع_سطر("إلى اللقاء! 👋")
نهاية
# تشغيل البرنامج
رئيسية()جرّب الآن: انسخ الكود وشغّله — سترى الرسالة تظهر.
الخطوة 2: عرض القائمة
نُنشئ دالة لعرض القائمة الجميلة:
sad
# === دالة عرض القائمة ===
دالة عرض_القائمة()
اطبع_سطر("")
اطبع_سطر("╔══════════════════════════════╗")
اطبع_سطر("║ 📋 قائمة مهامي ║")
اطبع_سطر("╠══════════════════════════════╣")
اطبع_سطر("║ 1. إضافة مهمة ║")
اطبع_سطر("║ 2. عرض المهام ║")
اطبع_سطر("║ 3. إتمام مهمة ║")
اطبع_سطر("║ 4. حذف مهمة ║")
اطبع_سطر("║ 5. حفظ وخروج ║")
اطبع_سطر("╚══════════════════════════════╝")
اطبع("اختر: ")
نهايةالخطوة 3: إضافة مهمة
الآن نُضيف إمكانية إضافة مهمة جديدة:
sad
# === هيكل المهمة ===
بنية مهمة
نص العنوان
منطقي مكتملة
نهاية
# === إضافة مهمة جديدة ===
دالة إضافة_مهمة()
اطبع("أدخل المهمة: ")
متغير العنوان = اقرأ()
إذا (طول(العنوان) == 0)
اطبع_سطر("❌ لا يمكن إضافة مهمة فارغة!")
ارجع
نهاية
# إنشاء مهمة جديدة
متغير م = مهمة()
م.العنوان = العنوان
م.مكتملة = خطأ
المهام.أضف(م)
اطبع_سطر("✅ تمت إضافة: " + العنوان)
نهايةالخطوة 4: عرض المهام
نعرض المهام مع حالتها:
sad
# === عرض جميع المهام ===
دالة عرض_المهام()
إذا (طول(المهام) == 0)
اطبع_سطر("📭 لا توجد مهام بعد!")
ارجع
نهاية
اطبع_سطر("")
اطبع_سطر("═══ مهامك ═══")
لكل ي في 0..طول(المهام)
متغير م = المهام[ي]
متغير حالة = "⬜"
إذا (م.مكتملة)
حالة = "✅"
نهاية
اطبع_سطر(م"{ي + 1}. {حالة} {م.العنوان}")
نهاية
اطبع_سطر("═══════════════")
نهايةالخطوة 5: إتمام وحذف مهمة
sad
# === إتمام مهمة ===
دالة إتمام_مهمة()
عرض_المهام()
إذا (طول(المهام) == 0)
ارجع
نهاية
اطبع("رقم المهمة المكتملة: ")
متغير رقم = رقم(اقرأ()) - 1
إذا (رقم >= 0 و رقم < طول(المهام))
المهام[رقم].مكتملة = صحيح
اطبع_سطر("✅ تم إتمام: " + المهام[رقم].العنوان)
وإلا
اطبع_سطر("❌ رقم غير صحيح!")
نهاية
نهاية
# === حذف مهمة ===
دالة حذف_مهمة()
عرض_المهام()
إذا (طول(المهام) == 0)
ارجع
نهاية
اطبع("رقم المهمة للحذف: ")
متغير رقم = رقم(اقرأ()) - 1
إذا (رقم >= 0 و رقم < طول(المهام))
متغير محذوفة = المهام[رقم].العنوان
المهام.احذف(رقم)
اطبع_سطر("🗑️ تم حذف: " + محذوفة)
وإلا
اطبع_سطر("❌ رقم غير صحيح!")
نهاية
نهايةالخطوة 6: حفظ وتحميل من ملف
sad
من أساسيات استورد اكتب_ملف، اقرأ_ملف، ملف_موجود
ثابت اسم_الملف = "مهامي.txt"
# === حفظ المهام في ملف ===
دالة حفظ_المهام()
متغير محتوى = ""
لكل م في المهام
متغير حالة = "0"
إذا (م.مكتملة)
حالة = "1"
نهاية
محتوى = محتوى + حالة + "|" + م.العنوان + "\n"
نهاية
اكتب_ملف(اسم_الملف، محتوى)
اطبع_سطر("💾 تم الحفظ في " + اسم_الملف)
نهاية
# === تحميل المهام من ملف ===
دالة تحميل_المهام()
إذا (ليس ملف_موجود(اسم_الملف))
ارجع
نهاية
متغير محتوى = اقرأ_ملف(اسم_الملف)
متغير أسطر = محتوى.تقسيم("\n")
لكل سطر في أسطر
إذا (طول(سطر) > 2)
متغير أجزاء = سطر.تقسيم("|")
متغير م = مهمة()
م.مكتملة = (أجزاء[0] == "1")
م.العنوان = أجزاء[1]
المهام.أضف(م)
نهاية
نهاية
اطبع_سطر("📂 تم تحميل " + طول(المهام) + " مهمة")
نهايةالكود الكامل
📄 انقر لعرض الكود الكامل
sad
# ═══════════════════════════════════════════════════════════════
# مشروع: قائمة مهام CLI
# الوصف: تطبيق سطر أوامر لإدارة المهام اليومية
# ═══════════════════════════════════════════════════════════════
من أساسيات استورد اكتب_ملف، اقرأ_ملف، ملف_موجود
# === الثوابت ===
ثابت اسم_الملف = "مهامي.txt"
# === هيكل المهمة ===
بنية مهمة
نص العنوان
منطقي مكتملة
نهاية
# === المتغيرات العامة ===
متغير المهام = []
# ═══════════════════════════════════════
# دوال العرض
# ═══════════════════════════════════════
دالة عرض_القائمة()
اطبع_سطر("")
اطبع_سطر("╔══════════════════════════════╗")
اطبع_سطر("║ 📋 قائمة مهامي ║")
اطبع_سطر("╠══════════════════════════════╣")
اطبع_سطر("║ 1. إضافة مهمة ║")
اطبع_سطر("║ 2. عرض المهام ║")
اطبع_سطر("║ 3. إتمام مهمة ║")
اطبع_سطر("║ 4. حذف مهمة ║")
اطبع_سطر("║ 5. حفظ وخروج ║")
اطبع_سطر("╚══════════════════════════════╝")
اطبع("اختر: ")
نهاية
دالة عرض_المهام()
إذا (طول(المهام) == 0)
اطبع_سطر("📭 لا توجد مهام بعد!")
ارجع
نهاية
اطبع_سطر("")
اطبع_سطر("═══ مهامك (" + طول(المهام) + ") ═══")
لكل ي في 0..طول(المهام)
متغير م = المهام[ي]
متغير حالة = "⬜"
إذا (م.مكتملة)
حالة = "✅"
نهاية
اطبع_سطر(م"{ي + 1}. {حالة} {م.العنوان}")
نهاية
اطبع_سطر("═══════════════════════")
نهاية
# ═══════════════════════════════════════
# دوال العمليات
# ═══════════════════════════════════════
دالة إضافة_مهمة()
اطبع("أدخل المهمة: ")
متغير العنوان = اقرأ()
إذا (طول(العنوان) == 0)
اطبع_سطر("❌ لا يمكن إضافة مهمة فارغة!")
ارجع
نهاية
متغير م = مهمة()
م.العنوان = العنوان
م.مكتملة = خطأ
المهام.أضف(م)
اطبع_سطر("✅ تمت إضافة: " + العنوان)
نهاية
دالة إتمام_مهمة()
عرض_المهام()
إذا (طول(المهام) == 0)
ارجع
نهاية
اطبع("رقم المهمة المكتملة: ")
متغير رقم = رقم(اقرأ()) - 1
إذا (رقم >= 0 و رقم < طول(المهام))
المهام[رقم].مكتملة = صحيح
اطبع_سطر("✅ تم إتمام: " + المهام[رقم].العنوان)
وإلا
اطبع_سطر("❌ رقم غير صحيح!")
نهاية
نهاية
دالة حذف_مهمة()
عرض_المهام()
إذا (طول(المهام) == 0)
ارجع
نهاية
اطبع("رقم المهمة للحذف: ")
متغير رقم = رقم(اقرأ()) - 1
إذا (رقم >= 0 و رقم < طول(المهام))
متغير محذوفة = المهام[رقم].العنوان
المهام.احذف(رقم)
اطبع_سطر("🗑️ تم حذف: " + محذوفة)
وإلا
اطبع_سطر("❌ رقم غير صحيح!")
نهاية
نهاية
# ═══════════════════════════════════════
# دوال الملفات
# ═══════════════════════════════════════
دالة حفظ_المهام()
متغير محتوى = ""
لكل م في المهام
متغير حالة = "0"
إذا (م.مكتملة)
حالة = "1"
نهاية
محتوى = محتوى + حالة + "|" + م.العنوان + "\n"
نهاية
اكتب_ملف(اسم_الملف، محتوى)
اطبع_سطر("💾 تم الحفظ في " + اسم_الملف)
نهاية
دالة تحميل_المهام()
إذا (ليس ملف_موجود(اسم_الملف))
ارجع
نهاية
متغير محتوى = اقرأ_ملف(اسم_الملف)
متغير أسطر = محتوى.تقسيم("\n")
لكل سطر في أسطر
إذا (طول(سطر) > 2)
متغير أجزاء = سطر.تقسيم("|")
متغير م = مهمة()
م.مكتملة = (أجزاء[0] == "1")
م.العنوان = أجزاء[1]
المهام.أضف(م)
نهاية
نهاية
اطبع_سطر("📂 تم تحميل " + طول(المهام) + " مهمة")
نهاية
# ═══════════════════════════════════════
# البرنامج الرئيسي
# ═══════════════════════════════════════
دالة رئيسية()
اطبع_سطر("═══════════════════════════════")
اطبع_سطر(" مرحباً بك في قائمة المهام! ")
اطبع_سطر("═══════════════════════════════")
# تحميل المهام المحفوظة
تحميل_المهام()
# حلقة البرنامج الرئيسية
متغير يعمل = صحيح
بينما (يعمل)
عرض_القائمة()
متغير اختيار = اقرأ()
طابق (اختيار)
عندما "1":
إضافة_مهمة()
عندما "2":
عرض_المهام()
عندما "3":
إتمام_مهمة()
عندما "4":
حذف_مهمة()
عندما "5":
حفظ_المهام()
يعمل = خطأ
افتراضي:
اطبع_سطر("❓ اختيار غير صحيح!")
نهاية
نهاية
اطبع_سطر("")
اطبع_سطر("إلى اللقاء! 👋")
نهاية
# تشغيل البرنامج
رئيسية()🏆 تحديات إضافية
بعد إكمال المشروع الأساسي، جرّب هذه التحسينات:
- أولويات المهام — أضف مستوى أولوية (عاجل، عادي، منخفض)
- تاريخ الاستحقاق — أضف تاريخ لكل مهمة
- بحث في المهام — ابحث عن مهمة بالاسم
- تصنيفات — صنّف المهام (عمل، شخصي، دراسة)
- إحصائيات — اعرض نسبة الإنجاز
ماذا تعلمت؟
- ✅ بناء واجهة نصية تفاعلية
- ✅ التعامل مع المصفوفات والحلقات
- ✅ استخدام البنيات لتنظيم البيانات
- ✅ قراءة وكتابة الملفات
- ✅ مطابقة الأنماط مع
طابق