Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة: تعديل الهياكل باستخدام المؤشرات

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 49 من 63.

challenge icon

التحدي

سهل

قم بإنشاء برنامج بلغة C يستعرض نظاماً كاملاً لإدارة الموظفين باستخدام تخصيص الذاكرة الديناميكي (dynamic memory allocation)، ومؤشرات الهياكل (struct pointers)، والدوال. يجب أن يقوم برنامجك بما يلي:

  1. تعريف هيكل struct باسم Employee يحتوي على الأعضاء التالية:
    • عدد صحيح id لتخزين معرف الموظف
    • مصفوفة أحرف name بحجم 50 لتخزين اسم الموظف
    • مصفوفة أحرف department بحجم 30 لتخزين اسم القسم
    • رقم عشري salary لتخزين راتب الموظف
    • عدد صحيح yearsOfService لتخزين سنوات الخدمة
  2. كتابة دالة باسم fillEmployeeData تقوم بما يلي:
    • تأخذ مؤشراً إلى هيكل Employee كمعامل (parameter)
    • تقرأ معلومات الموظف من المدخلات بهذا الترتيب: المعرف (ID)، الاسم، القسم، الراتب، سنوات الخدمة
    • تُسند القيم إلى أعضاء الهيكل باستخدام عامل السهم (arrow operator)
    • تحسب مكافأة بناءً على سنوات الخدمة: إذا كانت السنوات >= 5، تكون المكافأة 10% من الراتب، وإلا تكون 5% من الراتب
    • تضيف المكافأة إلى الراتب: empPtr->salary += bonus;
  3. كتابة دالة باسم displayEmployee تقوم بما يلي:
    • تأخذ مؤشراً إلى هيكل Employee كمعامل
    • تطبع معلومات الموظف بهذا التنسيق الدقيق:
      • Employee Details:
      • ID: [id]
      • Name: [name]
      • Department: [department]
      • Salary: [salary]
      • Years of Service: [yearsOfService]
  4. كتابة دالة باسم promoteEmployee تقوم بما يلي:
    • تأخذ مؤشراً إلى هيكل Employee كمعامل
    • تزيد الراتب بنسبة 15% باستخدام عامل السهم
    • تزيد سنوات الخدمة بمقدار 1
    • تطبع Employee promoted successfully!
  5. في الدالة الرئيسية (main function):
    • الإعلان عن مؤشر لهيكل Employee باسم empPtr
    • استخدام malloc() لتخصيص ذاكرة ديناميكياً لهيكل Employee واحد
    • التحقق مما إذا كان تخصيص الذاكرة ناجحاً:
      • إذا كان empPtr يساوي NULL، اطبع Memory allocation failed واخرج من البرنامج
      • إذا كان ناجحاً، اطبع Memory allocated successfully
    • استدعاء fillEmployeeData لتعبئة بيانات الموظف
    • طباعة Initial employee data:
    • استدعاء displayEmployee لعرض معلومات الموظف الأولية
    • استدعاء promoteEmployee لترقية الموظف
    • طباعة After promotion:
    • استدعاء displayEmployee مرة أخرى لعرض المعلومات المحدثة
    • تحرير الذاكرة المخصصة ديناميكياً باستخدام free(empPtr)
    • طباعة Memory freed successfully

يجمع هذا التحدي بين جميع المفاهيم الأساسية من الفصل: تعريف الهياكل (structs)، تخصيص الذاكرة الديناميكي باستخدام malloc()، التحقق من فشل التخصيص، تمرير مؤشرات الهياكل إلى الدوال، استخدام عامل السهم للوصول إلى أعضاء الهيكل وتعديلها، والتنظيف الصحيح للذاكرة باستخدام free(). توضح الدوال كيف تسمح المؤشرات بالتعديل المباشر على بيانات الهيكل الأصلية.

جرّب بنفسك

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// مهام: قم بتعريف هيكل الموظف (Employee struct) هنا

// مهام: قم بتنفيذ دالة fillEmployeeData هنا

// مهام: قم بتنفيذ دالة displayEmployee هنا

// مهام: قم بتنفيذ دالة promoteEmployee هنا

int main() {
    // مهام: قم بالتصريح عن empPtr وتخصيص الذاكرة
    
    // مهام: تحقق مما إذا كان تخصيص الذاكرة ناجحاً
    
    // مهام: قم بتعبئة بيانات الموظف، وعرض البيانات الأولية، والترقية، والعرض بعد الترقية
    
    // مهام: قم بتحرير الذاكرة وطباعة رسالة نجاح
    
    return 0;
}

جميع دروس Logic & Flow