مراجعة: تعديل الهياكل باستخدام المؤشرات
جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 49 من 63.
التحدي
سهلقم بإنشاء برنامج بلغة C يستعرض نظاماً كاملاً لإدارة الموظفين باستخدام تخصيص الذاكرة الديناميكي (dynamic memory allocation)، ومؤشرات الهياكل (struct pointers)، والدوال. يجب أن يقوم برنامجك بما يلي:
- تعريف هيكل
structباسمEmployeeيحتوي على الأعضاء التالية:- عدد صحيح
idلتخزين معرف الموظف - مصفوفة أحرف
nameبحجم 50 لتخزين اسم الموظف - مصفوفة أحرف
departmentبحجم 30 لتخزين اسم القسم - رقم عشري
salaryلتخزين راتب الموظف - عدد صحيح
yearsOfServiceلتخزين سنوات الخدمة
- عدد صحيح
- كتابة دالة باسم
fillEmployeeDataتقوم بما يلي:- تأخذ مؤشراً إلى هيكل
Employeeكمعامل (parameter) - تقرأ معلومات الموظف من المدخلات بهذا الترتيب: المعرف (ID)، الاسم، القسم، الراتب، سنوات الخدمة
- تُسند القيم إلى أعضاء الهيكل باستخدام عامل السهم (arrow operator)
- تحسب مكافأة بناءً على سنوات الخدمة: إذا كانت السنوات >= 5، تكون المكافأة 10% من الراتب، وإلا تكون 5% من الراتب
- تضيف المكافأة إلى الراتب:
empPtr->salary += bonus;
- تأخذ مؤشراً إلى هيكل
- كتابة دالة باسم
displayEmployeeتقوم بما يلي:- تأخذ مؤشراً إلى هيكل
Employeeكمعامل - تطبع معلومات الموظف بهذا التنسيق الدقيق:
Employee Details:ID: [id]Name: [name]Department: [department]Salary: [salary]Years of Service: [yearsOfService]
- تأخذ مؤشراً إلى هيكل
- كتابة دالة باسم
promoteEmployeeتقوم بما يلي:- تأخذ مؤشراً إلى هيكل
Employeeكمعامل - تزيد الراتب بنسبة 15% باستخدام عامل السهم
- تزيد سنوات الخدمة بمقدار 1
- تطبع
Employee promoted successfully!
- تأخذ مؤشراً إلى هيكل
- في الدالة الرئيسية (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
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية