مشروع شامل – نظام حجوزات

مقدمة: ما هو نظام الحجوزات؟

نظام الحجوزات Booking System هو نظام يسمح:

  • للعميل بحجز موعد
  • لصاحب الخدمة بإدارة الأوقات
  • للسيستم بمنع التداخل في الحجوزات (Conflict Detection)
  • بتتبع المواعيد، التوقيت، الحالة، الدفع، بيانات العميل
  • بتوليد تقارير
  • بإرسال تنبيهات
  • ومعالجة الـ Validation على التواريخ بدقة

النظام يُستخدم في:

  • العيادات
  • الصالونات
  • خدمات السيارات
  • المطاعم
  • التدريب
  • صالات الرياضة
  • الحجوزات الفندقية
  • وحتى حجوزات غرف الاجتماعات في الشركات

هذا مشروع ضخم… ورح نبنيه خطوة بخطوة.


القسم الأول: تحليل النظام (System Analysis)

قبل البرمجة لازم نعرف:

1) من هم المستخدمون؟

  • العميل (Customer)
  • مدير النظام (Admin)
  • الموظف (Staff)

2) ما الذي يمكن لكل مستخدم فعله؟

العميل:

  • إنشاء حساب
  • حجز موعد
  • تعديل الموعد
  • إلغاء الموعد
  • عرض حجوزاته الحالية
  • البحث عن مواعيد فارغة

الأدمن:

  • إدارة المستخدمين
  • إضافة خدمات (Service: قص شعر، فحص، موعد…)
  • تحديد أوقات الدوام
  • إدارة جميع الحجوزات
  • عرض التقارير الشهرية

الموظف:

  • رؤية جدول اليوم
  • تأكيد مواعيد
  • إلغاء مواعيد
  • تسجيل وصول العميل

القسم الثاني: تصميم قاعدة البيانات (Database Design)

نظام الحجوزات فيها 4 جداول أساسية:


1) جدول العملاء (Users)

الحقلالنوعالتفاصيل
idINTالمفتاح الأساسي
nameVARCHARاسم العميل
phoneVARCHARرقم الهاتف
emailVARCHARالبريد
passwordVARCHARكلمة المرور
created_atDATETIMEتاريخ التسجيل

2) جدول الخدمات (Services)

الحقلالنوع
idINT
nameVARCHAR
durationINT (minutes)
priceDOUBLE
activeBOOL

3) جدول الحجوزات (Bookings)

الحقلالنوعالوصف
idINTمعرف الحجز
user_idINTصاحب الحجز
service_idINTنوع الخدمة
dateDATEيوم الحجز
start_timeTIMEبداية الموعد
end_timeTIMEنهاية الموعد
statusENUM(pending / confirmed / canceled / completed)
created_atDATETIMEوقت الإنشاء

4) جدول أوقات العمل (Working_Hours)

الحقلالنوع
idINT
dayVARCHAR (Mon…Sun)
open_timeTIME
close_timeTIME
break_startTIME (optional)
break_endTIME

القسم الثالث: منطق النظام (Business Logic)

وهنا القوة الحقيقية.

المنطق العام:

عند إنشاء حجز:

  1. تأكد أن اليوم ضمن جدول العمل
  2. تأكد أن الوقت ضمن نطاق الدوام
  3. احسب مدة الخدمة
  4. حدّد نهاية الموعد
  5. ابحث عن أي حجز متداخل
  6. إذا فيه تضارب → رفض
  7. إذا ما فيه → تسجيل الحجز
  8. إرسال إشعار للعميل

القسم الرابع: منطق منع التداخل (Conflict Detection)

هذه أصعب نقطة بالنظام.

لو عندك موعد جديد:

start1 --- end1
start2 --- end2

التداخل يحدث لو:

start1 < end2 && start2 < end1

هذه القاعدة الذهبية.

مثال:

  • موعد موجود: 10:00 → 11:00
  • موعد جديد: 10:30 → 11:15

10:30 < 11:00 ✓
10:00 < 11:15 ✓
إذن يوجد تضارب.


القسم الخامس: واجهة المستخدم (UI/UX)

العميل:

  • صفحة اختيار خدمة
  • عرض المواعيد المتاحة
  • التقويم Calendar View
  • صفحة تأكيد الموعد

الأدمن:

  • لوحة تحكم
  • قائمة الخدمات
  • قائمة الحجوزات
  • جدول اليوم
  • احصائيات شهرية

الموظف:

  • Today’s Bookings
  • زر “تم الحضور”
  • زر “إلغاء”

القسم السادس: الخوارزمية الكاملة لإنشاء حجز

  1. استلام طلب العميل
  2. جلب خدمة الخدمة
  3. حساب end_time = start_time + duration
  4. التحقق من أن:
    • الموعد داخل ساعات العمل
    • لا يوجد تضارب مع حجوزات أخرى
  5. تسجيل الموعد
  6. إعادة ID الحجز
  7. إرسال رسالة SMS/Email
  8. تسجيل العملية في النظام Log

القسم السابع: مثال عملي (Case Study)

العميل يريد حجز قص شعر مدة 30 دقيقة

  • الخدمة = HairCut
  • المدة = 30 دقيقة
  • اليوم = 2025-02-10
  • الوقت = 15:00

النظام يحسب:

end_time = 15:30

ما المطلوب من النظام فعله؟

  • هل يوم الاثنين مفتوح؟
  • هل الموظف متاح بهذا الوقت؟
  • هل يوجد فاصل غداء؟
  • هل يوجد موعد آخر بين:
15:00 → 15:30

لو وجد موعد مثل:

14:45 → 15:20

فهذا تضارب → reject booking.

لو كل شيء تمام → system inserts booking.


القسم الثامن: كود عملي بلغة C++ (منطق التحقق)

bool isConflict(vector<Booking> bookings,
                Time newStart, Time newEnd) {

    for (auto &b : bookings) {
        if (!(newEnd <= b.start || newStart >= b.end)) {
            return true; // يوجد تضارب
        }
    }
    return false;
}

القسم التاسع: مثال أكبر: نظام حجوزات كامل (C++ Pseudo Code)

struct Booking {
    string user;
    string service;
    string date;
    Time start;
    Time end;
};

class BookingSystem {
private:
    vector<Booking> allBookings;

public:
    bool book(string user, string service, string date,
              Time start, int duration) {

        Time end = start.addMinutes(duration);

        for (auto &b : allBookings) {
            if (b.date == date) {
                if (!(end <= b.start || start >= b.end)) {
                    cout << "Conflict!\n";
                    return false;
                }
            }
        }

        allBookings.push_back({ user, service, date, start, end});
        cout << "Booking created.\n";
        return true;
    }
};

القسم العاشر: ميزات إضافية يمكن إضافتها للنظام

1) نظام الدفع الإلكتروني

  • PayPal
  • Stripe
  • Cash on arrival

2) نظام إرسال رسائل التذكير

  • SMS قبل الموعد بـ 24 ساعة
  • Email قبل الموعد بـ 2 ساعة

3) لوحة تقارير متقدمة

  • عدد الحجوزات اليومية
  • عدد الحجوزات الملغاة
  • أوقات الذروة
  • أكثر خدمة مطلوبة

4) نظام تقييم العملاء

  • تقييم الخدمة
  • تقييم الموظف

5) دعم الحجوزات المتكررة

مثل:

كل يوم اثنين | الساعة 10 | لمدة 6 أسابيع

6) دعم سعة الغرف (Room Capacity)

مثال: غرفة تستقبل 5 أشخاص بالحجز الواحد.

7) دعم الموظفين

  • كل موظف له جدول خاص
  • لا يجوز حجز موظف في نفس الوقت مرتين

القسم الحادي عشر: الأخطاء الشائعة في تصميم أنظمة الحجوزات

❌ الحساب اليدوي للوقت بدون التحقق من منطقة الزمن
❌ استخدام DateTime بدون Timezone → كارثة
❌ قبول حجوزات متداخلة بدون قصد
❌ عدم استخدام indexing مناسب في قاعدة البيانات
❌ عدم التحقق من ساعات العمل
❌ عدم توحيد تنسيق التاريخ والوقت
❌ السماح للعميل بحجز في الماضي
❌ عدم إغلاق الحجوزات الغير مؤكدة
❌ عدم وجود حالة للحجز (pending/confirmed)


القسم الثاني عشر: ما الذي يجعل نظام الحجوزات قويًا؟

✔ سريع
✔ يمنع التضارب 100%
✔ يدعم TimeZone
✔ يدعم خدمات متعددة
✔ يدعم موظفين متعددين
✔ وجود API
✔ تقارير دقيقة
✔ سهولة الاستخدام


القسم الثالث عشر: تطبيقات واقعية لنظامك

نظامك يمكن استخدامه لـ:

  • عيادة أسنان
  • نظام حجز جلسات تصوير
  • حجز غرفة اجتماعات
  • نظام حجز فندق
  • جدول مدرب رياضة
  • حجوزات سيارات أو صيانة
  • نظام حجوزات صالون رجالي / نسائي
  • حجوزات كورسات أو دورات
  • حجوزات كومبوتر لاب في مدرسة

كلها نفس المنطق… فقط تتغير البيانات.


الخلاصة النهائية

اليوم تعلمت:

✔ تحليل نظام حجوزات كامل

✔ تصميم قاعدة بيانات كاملة

✔ إدارة العملاء والخدمات

✔ حساب الوقت والمدة

✔ اكتشاف تضارب المواعيد

✔ كتابة خوارزمية الحجز

✔ بناء كود C++ كامل

✔ تصميم UI للعميل والأدمن

✔ الميزات الإضافية المتقدمة

✔ الأخطاء الشائعة وكيف تتجنبها

✔ كيف تجعل نظامك احترافي على مستوى عالمي


اكتشاف المزيد من كود التطور

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك رد

Scroll to Top