Skip to content

📋 مشروع: قائمة مهام CLI

مبتدئ⏱️ 30 دقيقة📁 ملف واحد

ما الذي سنبنيه؟

تطبيق سطر أوامر بسيط لإدارة قائمة المهام:

╔══════════════════════════════╗
║     📋 قائمة مهامي          ║
╠══════════════════════════════╣
║ 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":
                حفظ_المهام()
                يعمل = خطأ
            افتراضي:
                اطبع_سطر("❓ اختيار غير صحيح!")
        نهاية
    نهاية
    
    اطبع_سطر("")
    اطبع_سطر("إلى اللقاء! 👋")
نهاية

# تشغيل البرنامج
رئيسية()

🏆 تحديات إضافية

بعد إكمال المشروع الأساسي، جرّب هذه التحسينات:

  1. أولويات المهام — أضف مستوى أولوية (عاجل، عادي، منخفض)
  2. تاريخ الاستحقاق — أضف تاريخ لكل مهمة
  3. بحث في المهام — ابحث عن مهمة بالاسم
  4. تصنيفات — صنّف المهام (عمل، شخصي، دراسة)
  5. إحصائيات — اعرض نسبة الإنجاز

ماذا تعلمت؟

  • ✅ بناء واجهة نصية تفاعلية
  • ✅ التعامل مع المصفوفات والحلقات
  • ✅ استخدام البنيات لتنظيم البيانات
  • ✅ قراءة وكتابة الملفات
  • ✅ مطابقة الأنماط مع طابق

المشروع التالي:

🎮 لعبة تخمين الرقم →

مُرخَّص بموجب رخصة MIT