مشروع السيشن 2 لـ CS50 بالعربي: برنامج لحساب المرتبات
المشكلة اللي إحنا عايزين نحلها
محل صغير عايز يعمل automate لحساب المرتبات بتاعة الموظفين.
دلوقتي هم بيحسبوا المرتبات يدوي، وده بطيء وممكن يسبب أخطاء.
إحنا هنبني برنامج بيعمل الآتي:
- ياخد معلومات الموظف
- يحسب المرتب بناءً على ساعات الشغل
- يدعم الـ overtime pay
- يطبع تقرير منظم
اللي إنت هتبنيه
برنامج لحساب المرتبات، ويتصرف زي HR صغير.
التطوير خطوة بخطوة (Phases)
المرحلة الأولى: نظام الـ Input
الهدف:
نقرأ بيانات الموظف بشكل صحيح.
المطلوب:
- اسأل عن اسم الموظف
- اسأل عن عدد ساعات الشغل
- اسأل عن سعر الساعة
مثال على الـ Output المتوقع:
Enter employee name: Ahmed
Enter working hours: 45
Enter hourly rate: 10
المرحلة الثانية: حساب المرتب الأساسي
الهدف:
احسب المرتب الأساسي بدون overtime.
القاعدة:
salary = hours × rate
مثال على الـ Output المتوقع:
Salary: 450
المرحلة الثالثة: الـ Overtime Pay
القاعدة:
- أول 40 ساعة = السعر العادي
- الساعات الإضافية = 1.5 × سعر الساعة
الـ Logic:
- لو hours ≤ 40 → حساب عادي
- لو hours > 40 → نقسمها normal + overtime
(40 * 10) + (5 * 10 * 1.5) = 400 + 75 = 475
مثال على الـ Output المتوقع:
Salary: 475
المرحلة الأخيرة: تقرير مرتب منظم
بدل ما نطبع سطور عشوائية، خلّي الـ Output منظم:
مثال على الـ Output:
===============================
SALARY REPORT
===============================
Employee Name : Ahmed
Working Hours : 45
Hourly Rate : 10
Basic Salary : 450.00
Overtime Pay : 25.00
-------------------------------
Final Salary : 475.00
===============================
أهداف التعلّم
بعد الـ Assignment ده، المفروض تكون فاهم:
- إزاي الأنظمة الحقيقية بتكون متقسمة
- إزاي تكسر المشكلة الكبيرة لـ phases صغيرة
- إزاي تجمع بيانات من المستخدم باستخدام الـ input
- إزاي تخزن البيانات جوه variables مناسبة
- إزاي تستخدم أنواع البيانات زي
int,float,string - إزاي تستخدم الـ conditions (
if / else) - إزاي تراجع الـ code وتعمل debugging
لو خلصت ومحتاج تزود Features:
- ضيف tax rule: لو المرتب أكبر من 1000، يتم خصم 10% ضريبة، ولو أقل من كده مفيش ضريبة.
- ضيف performance bonus: لو الموظف أداؤه ممتاز أو حقق التارجت، أضف مبلغ إضافي على المرتب.
- ضيف attendance bonus: لو الموظف حضر كل أيام الشغل بدون غياب أو تأخير، أضف مكافأة إضافية.
Debugging Cheat Sheet
1. نسيان مكتبة الـ CS50
المشكلة: الـبرنامج مش بيتعرف على get_string, get_float
الحل:
#include <cs50.h>
راجع: لو الـ error بيقول “implicit declaration”، يبقى الـ header ده ناقص.
2. نوع بيانات غلط
المشكلة: الأرقام العشرية غلط أو متقربة
الحل:
float hours;
float rate;
راجع: المرتب فيه decimals، يبقى استخدم float مش int.
3. خطأ في Logic الـ Overtime
المشكلة: الـ overtime مش بيتحسب صح
الـ Logic الصح:
- أول 40 ساعة = السعر العادي
- أي زيادة = 1.5 × rate
Test Case:
- 45 ساعة، rate = 10
- المتوقع: (40 10) + (5 10 * 1.5) = 400 + 75 = 475
4. نسيان حالة الـ else
المشكلة: المرتب غلط لما الساعات ≤ 40
الحل:
if (hours > 40)
else
راجع: جرّب دايمًا بساعات = 30 أو 40
5. خطأ في الضريبة
المشكلة: الضريبة ثابتة أو غلط
الحل:
tax = salary * 0.10;
راجع: الضريبة لازم تعتمد على المرتب.
6. نسيان حساب الـ Final Salary
المشكلة: الضريبة اتحسبت لكن متخصمتش
الحل:
final_salary = salary - tax;
راجع: المرتب النهائي لازم يكون أقل من المرتب لو فيه ضريبة.
7. ترتيب إدخال غلط
المشكلة: الـ inputs ملخبطة (hours, rate, name)
الترتيب الصح:
- Name
- Hours
- Rate
8. خطأ Assignment بدل Comparison
المشكلة:
if (hours = 40)
الحل:
if (hours == 40)
9. خطأ في الـ Print Statement
المشكلة: القيم مش بتظهر
الحل:
printf("Salary: %.2f\n", salary);
راجع: لازم تضيف format specifiers.
10. شكل أرقام الـ Floating Point
المشكلة: أرقام طويلة أو شكلها مش منظم
الحل:
%.2f
ملاحظة
- ابدأ بـ inputs صغيرة
- احسب يدوي
- قارن مع الـ Output بتاع الـ Program
- حدّد المرحلة اللي فيها الغلط
تسجيل السيشن
لو محتاج تراجع أي جزء من الشرح وأنت شغال على الـ Project، تقدر تشوف تسجيل السيشن كامل من هنا: السيشن على YouTube
خليك فاكر: "مش المهم إزاي الكود بيتكتب، المهم إزاي بتفكر عشان تحل المشكلة." نشوفكم في الـ Project اللي جاي!
Member discussion