1 min read

مشروع السيشن 2 لـ CS50 بالعربي: برنامج لحساب المرتبات

مشروع السيشن 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)

الترتيب الصح:

  1. Name
  2. Hours
  3. Rate

8. خطأ Assignment بدل Comparison

المشكلة:

if (hours = 40)

الحل:

if (hours == 40)

9. خطأ في الـ Print Statement

المشكلة: القيم مش بتظهر

الحل:

printf("Salary: %.2f\n", salary);

راجع: لازم تضيف format specifiers.


10. شكل أرقام الـ Floating Point

المشكلة: أرقام طويلة أو شكلها مش منظم

الحل:

%.2f

ملاحظة

  1. ابدأ بـ inputs صغيرة
  2. احسب يدوي
  3. قارن مع الـ Output بتاع الـ Program
  4. حدّد المرحلة اللي فيها الغلط

تسجيل السيشن

لو محتاج تراجع أي جزء من الشرح وأنت شغال على الـ Project، تقدر تشوف تسجيل السيشن كامل من هنا: السيشن على YouTube

خليك فاكر: "مش المهم إزاي الكود بيتكتب، المهم إزاي بتفكر عشان تحل المشكلة." نشوفكم في الـ Project اللي جاي!