إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    الخوارزميات و هياكل البيانات التحدي الثاني - الحل بلغة C#

    فكرة المشروع

    في هذا التمرين سنفترض أننا نقوم بتخزين بيانات لمؤسسة صغيرة.
    البيانات التي نريد تخزينها هي التالية:

    • الموظفين الذين يعملون في المؤسسة (الإسم, الهاتف, الجنس, دوام العمل, أيام العمل).
    • الزبائن الذين يشترون من المؤسسة (الإسم, الهاتف, الجنس, البريد الإلكتروني).
    • المنتجات التي تبيعها المؤسسة (إسم المنتج و سعره).
    • الفواتير الخاصة ببيع المنتجات (تاريخ البيع, هل تم الدفع أم لا, بيانات المشتري, المنتجات التي تم شراءها).

    ملاحظة: رقم التعرفة لكل من الأشخاص, المنتجات, الفواتير يجب أن يتم إعطاؤه لهم بشكل تلقائي.


    الشكل العام لأقسام المشروع


    شرح أقسام المشروع

    Person يمثل المعلومات المشتركة بين الموظف و الزبون.
    Client يمثل المعلومات الإضافية الخاصة بالزبون و غير موجودة عند الموظف.
    Employee يمثل المعلومات الإضافية الخاصة الموظف و غير موجودة عند الزبون.
    Product يمثل أي منتج تبيعه الشركة.
    Order يمثل فواتير بيع المنتجات و لاحظ أن كل فاتورة سيتم فيها بيع مجموعة من المنتجات و كل فاتورة سيتم إصدارها لشخص محدد.
    add_product(): مهمتها إضافة منتج جديد.
    add_person(): مهمتها إضافة شخص جديد سواء موظف أو زبون.
    add_order(): مهمتها إضافة فاتورة جديدة.
    remove_product(): مهمتها حذف منتج من خلال id المنتج الذي نمرره لها عند استدعائها.
    remove_person(): مهمتها حذف شخص من خلال id الشخص الذي نمرره لها عند استدعائها.
    remove_order(): مهمتها حذف فاتورة من خلال id الفاتورة الذي نمرره لها عند استدعائها.
    print_person_info(): مهمتها عرض كل معلومات الشخص من خلال id الشخص الذي نمرره لها عند استدعائها.
    print_product_details(): مهمتها عرض كل معلومات المنتج من خلال id المنتج الذي نمرره لها عند استدعائها.
    print_order_details(): مهمتها عرض كل معلومات الفاتورة من خلال id الفاتورة الذي نمرره لها عند استدعائها.
    print_person_orders(): مهمتها عرض كل فواتير الشخص من خلال id الشخص الذي نمرره لها عند استدعائها.
    print_extra_info(): مهمتها عرض كل المعلومات المتوفرة حول الشخص سواء كان موظف أو زبون.

    قم بتحويل الرسم إلى كود. ثم قم بإنشاء مجموعة موظفين, زبائن, منتجات و فواتير. و قم بتجربة جميع الدوال في البرنامج.


    معلومة

    لإعطاء رقم id موحد لكل كائن يتم إنشاؤه, يمكنك تعريف متغير ثابت ( static ) في الكلاس و جعله أيضاً private حتى لا يمكن تعديل قيمته بشكل يدوي من خارج هذا الكلاس. بعدها تقوم فقط بجعل قيمته تزيد 1 كلما قمت بإنشاء كائن من هذا الكلاس و من ثم تضع قيمته في المتغير id.

    ملاحظة: سنقوم بإنشاء متغير نوعه private static إسمه idIncrementer في الكلاسات Person, Product و Order من أجل هذا الهدف فقط.


    الحل بلغة #C

    Person.cs
    // الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي شخص Person هنا قمنا بتعريف الكلاس
    // لأننا لا نريد أن يتم إنشاء كائنات منه بل من الكلاسات التي ترث منه abstract ملاحظة: قمنا بتعريفه كـ
    abstract class Person
    {
        // هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها أي شخص
        public int Id { get; set; }
        public string Name { get; set; }
        public string Phone { get; set; }
        public string Gender { get; set; }
    
        // لأننا بنفس الوقت نريده أن يكون موحداً لجميع private و static قمنا بتعريفه كـ idIncrementer المتغير
        // الكائنات التي ننشئها من الكلاسات التي ترث من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
        private static int idIncrementer = 0;
    
        // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر من أي كلاس يرث هذا الكونستركتور
        // id تزيد 1 في كل مرة نستدعي فيها هذا الكونستركتور و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أيضاً أننا قمنا بتحديد أن قيمة
        // الخاصة بالكائن الذي سيملكها. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
        // و لكننا نستطيع إستدعاؤه من الكلاسات التي ترثه Main إنتبه: هذا الكونستركتور لا نستطيع إستدعاؤه بشكل مباشر من الكلاس
        public Person(string name, string phone, string gender)
        {
            idIncrementer++;
            this.Id = idIncrementer;
            this.Name = name;
            this.Phone = phone;
            this.Gender = gender;
        }
    }
    		

    Client.cs
    // الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي زبون Client هنا قمنا بتعريف الكلاس
    // Email لأن الزبون عبارة عن شخص عادي و لكنه يملك الخاصية الإضافية Person هذا الكلاس يرث من الكلاس
    class Client : Person
    {
        // هنا قمنا بتعريف الخاصية الإضافية التي سيملكها الزبون
        // Id, Name, Phone, Gender, Email :أصبح يملك الخصائص التالية Client إذاً الكلاس
        public string Email { get; set; }
    
        // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته
        // base() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس Name, Phone, Gender الخصائص
        // Id سيتولى أمر توليد قيمة للخاصية Person أيضاَ, لا تنسى أن كونستركتور الكلاس
        public Client(string name, string phone, string gender, string email) : base(name, phone, gender)
        {
            this.Email = email;
        }
    }
    		

    Employee.cs
    // الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي موظف Employee هنا قمنا بتعريف الكلاس
    // WorkingTime و Salary لأن الموظف عبارة عن شخص عادي و لكنه يملك خصائص إضافية هي Person هذا الكلاس يرث من الكلاس
    class Employee : Person
    {
        // هنا قمنا بتعريف الخاصية الإضافية التي سيملكها العميل
        // Id, Name, Phone, Gender, Salary, WorkingTime :أصبح يملك الخصائص التالية Employee إذاً الكلاس
        public float Salary { get; set; }
        public string WorkingTime { get; set; }
    
        // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته
        // base() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس Name, Phone, Gender الخصائص
        // id سيتولى أمر توليد قيمة للخاصية Person أيضاَ, لا تنسى أن كونستركتور الكلاس
        public Employee(string name, string phone, string gender, float salary, string workingTime) : base(name, phone, gender)
        {
            this.Salary = salary;
            this.WorkingTime = workingTime;
        }
    }
    		

    Product.cs
    // الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي منتج Product هنا قمنا بتعريف الكلاس
    class Product
    {
        // هنا قمنا بتعريف الخاصية الإضافية التي سيملكها المنتج
        public int Id { get; set; }
        public string Name { get; set; }
        public float Price { get; set; }
    
        // لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
        // لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
        private static int idIncrementer;
    
        // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
        // Id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
        // الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
        public Product(string name, float price)
        {
            idIncrementer++;
            this.Id = idIncrementer;
            this.Name = name;
            this.Price = price;
        }
    }
    		

    Order.cs
    using System.Collections.Generic;
    
    // الذي وضعنا فيه المعلومات الأساسية التي يجب أن تمكلها أي فاتورة Order هنا قمنا بتعريف الكلاس
    class Order
    {
        // هنا قمنا بتعريف الخصائص الأساسية التي يجب أن تملكها أي فاتورة
        public int Id { get; set; }
        public string Date { get; set; }
        public bool IsPaid { get; set; }
        public Person Person { get; set; }
        public<Product> Products { get; set; }
    
        // لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
        // لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
        private static int idIncrementer;
    
        // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
        // Id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
        // الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
        public Order(string date, bool isPaid, Person person,<Product> products)
        {
            idIncrementer++;
            this.Id = idIncrementer;
            this.Date = date;
            this.IsPaid = isPaid;
            this.Person = person;
            this.Products = products;
        }
    }
    		

    Company.cs
    // يمثل كل ما تحتويه الشركة من أشخاص, فواتير, منتجات, و الدوال التي يمكن استخدامها للتعامل معهم Company الكلاس
    using System;
    using System.Collections.Generic;
    
    class Company
    {
        // سنضع فيه كل معلومات الفواتير Orders سنضع فيه كل معلومات المنتجات. الكائن Products سنضع فيه كل معلومات الأشخاص. الكائن Persons الكائن
        public<Person> Persons { get; set; }
        public<Product> Products { get; set; }
        public<Order> Orders { get; set; }
    
        // Orders و Products و Persons هنا قمنا بتعريف كونستركتور الكلاس و الذي قمنا فيه بإنشاء الكائنات
        public Company()
        {
            Persons = new<Person>();
            Products = new<Product>();
            Orders = new<Order>();
        }
    
        // Products بداخل المصفوفة Product يمكن استخدامها لإضافة كائن من الكلاس AddProduct() الدالة 
        public void AddProduct(Product product)
        {
            Products.Add(product);
        }
    
        // Persons بداخل المصفوفة Person يمكن استخدامها لإضافة كائن من الكلاس AddPerson() الدالة 
        public void AddPerson(Person person)
        {
            Persons.Add(person);
        }
    
        // Orders بداخل المصفوفة Order يمكن استخدامها لإضافة كائن من الكلاس AddOrder() الدالة 
        public void AddOrder(Order order)
        {
            Orders.Add(order);
        }
    
        // الخاص به id بالإعتماد على رقم الـ Products موضوع بداخل المصفوفة Product يمكن استخدامها لإلغاء كائن من الكلاس RemoveProduct() الدالة 
        public void RemoveProduct(int id)
        {
            // product و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Products بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
            foreach (Product product in Products)
            {
                // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن
                if (product.Id == id)
                {
                    Products.Remove(product);
                    return;
                }
            }
    
            // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Products في حال لم يتم إيجاد أي كائن في المصفوفة 
            Console.WriteLine("Product with id " + id + " is not found!");
            Console.WriteLine("----------------------");
        }
    
        // الخاص به id بالإعتماد على رقم الـ Persons موضوع بداخل المصفوفة Person يمكن استخدامها لإلغاء كائن من الكلاس RemovePerson() الدالة 
        public void RemovePerson(int id)
        {
            // person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
            foreach (Person person in Persons)
            {
                // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
                if (person.Id == id)
                {
                    Persons.Remove(person);
                    return;
                }
            }
    
            // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Persons في حال لم يتم إيجاد أي كائن في المصفوفة 
            Console.WriteLine("Person with id " + id + " is not found!");
            Console.WriteLine("----------------------");
        }
    
        // الخاص به id بالإعتماد على رقم الـ Orders موضوع بداخل المصفوفة Order يمكن استخدامها لإلغاء كائن من الكلاس RemoveOrder() الدالة 
        public void RemoveOrder(int id)
        {
            // order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
            foreach (Order order in Orders)
            {
                // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن
                if (order.Id == id)
                {
                    Orders.Remove(order);
                    return;
                }
            }
    
            // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Orders في حال لم يتم إيجاد أي كائن في المصفوفة 
            Console.WriteLine("Order with id " + id + " is not found!");
            Console.WriteLine("----------------------");
        }
    
        // الخاص به id بالإعتماد على رقم الـ Persons يمكن استخدامها لطباعة كل المعلومات المتوفرة حول شخص موضوع بداخل المصفوفة PrintPersonInfo() الدالة 
        public void PrintPersonInfo(int id)
        {
            // person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
            foreach (Person person in Persons)
            {
                // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
                if (person.Id == id)
                {
                    Console.WriteLine("Person with id " + id + " info.");
                    Console.WriteLine("Name: " + person.Name);
                    Console.WriteLine("Phone: " + person.Phone);
                    Console.WriteLine("Gender: " + person.Gender);
    
                    // ( type-casting سيتم تحديد أن الكائن أصله منه ( أي سنفعل ,Client تم إنشاؤه من الكلاس person إذا كان الكائن
                    // Client التي يملكها الشخص فقط في حال كان عبارة عن كائن من الكلاس Email حتى نستطيع طباعة الخاصية
                    if (person is Client)
                    {
                        Console.WriteLine("Email: " + ((Client)person).Email);
                    }
                    // ( type-casting سيتم تحديد أن الكائن أصله منه ( أي سنفعل ,Employee تم إنشاؤه من الكلاس person إذا كان الكائن
                    // Employee التي يملكها الشخص فقط في حال كان عبارة عن كائن من الكلاس WorkingTime و Salary حتى نستطيع طباعة الخاصيتين
                    else if (person is Employee)
                    {
                        Console.WriteLine("Salary: " + ((Employee)person).Salary + "$");
                        Console.WriteLine("Working time: " + ((Employee)person).WorkingTime);
                    }
    
                    // بعدها سيتم رسم هذا الخط و من ثم الخروج من الدالة
                    Console.WriteLine("----------------------");
                    return;
                }
            }
    
            // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Persons في حال لم يتم إيجاد أي كائن في المصفوفة 
            Console.WriteLine("Person with id " + id + " is not found!");
            Console.WriteLine("----------------------");
        }
    
        // الخاص به id بالإعتماد على رقم الـ Products يمكن استخدامها لطباعة كل المعلومات المتوفرة حول منتج موضوع بداخل المصفوفة PrintProductDetails() الدالة 
        public void PrintProductDetails(int id)
        {
            // product و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Products بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
            foreach (Product product in Products)
            {
                // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن
                if (product.Id == id)
                {
                    Console.WriteLine("Product with id " + id + " details.");
                    Console.WriteLine("Name: " + product.Name);
                    Console.WriteLine("Price: " + product.Price + "$");
                    Console.WriteLine("----------------------");
                    return;
                }
            }
    
            // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Products في حال لم يتم إيجاد أي كائن في المصفوفة 
            Console.WriteLine("Product with id " + id + " is not found!");
            Console.WriteLine("----------------------");
        }
    
    
        // الخاص بها id بالإعتماد على رقم الـ Orders يمكن استخدامها لطباعة كل معلومات فاتورة موضوعة بداخل المصفوفة PrintProductDetails() الدالة 
        public void PrintOrderDetails(int id)
        {
            // سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في الفاتورة totalSum المتغير
            float totalSum = 0;
    
            // order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
            foreach (Order order in Orders)
            {
                // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن
                if (order.Id == id)
                {
                    Console.WriteLine("Order with id " + id + " details.");
                    Console.WriteLine("Date: " + order.Date);
                    Console.WriteLine("Is paid: " + ((order.IsPaid) ? "yes" : "no"));
                    Console.WriteLine("Ordered by: " + order.Person.Name);
                    Console.WriteLine("Products:");
    
                    // order الموضوعة في الكائن Products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
                    // product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن
                    // totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير
                    foreach (Product product in order.Products)
                    {
                        totalSum += product.Price;
                        Console.WriteLine("- " + product.Name + ": " + product.Price + "$");
                    }
    
                    // و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة و من ثم الخروج من الدالة totalSum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير
                    Console.WriteLine("Total: " + totalSum + "$");
                    Console.WriteLine("----------------------");
                    return;
                }
            }
    
            // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Orders في حال لم يتم إيجاد أي كائن في المصفوفة 
            Console.WriteLine("Order with id " + id + " is not found!");
            Console.WriteLine("----------------------");
        }
    
        // الخاص به id بالإعتماد على رقم الـ Persons يمكن استخدامها لطباعة كل معلومات الفواتير التابعة لشخص موضوع بداخل المصفوفة PrintProductDetails() الدالة 
        public void PrintPersonOrders(int id)
        {
            // person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
            foreach (Person person in Persons)
            {
                // الذي مررناه للدالة سيتم طباعة كل فواتيره و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
                if (person.Id == id)
                {
                    Console.WriteLine("All Orders made by person with id " + id + ":");
    
                    // order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
                    foreach (Order order in Orders)
                    {
                        // ( الذي مررناه للدالة سيتم طباعة معلوماته ( أي معلومات الفاتورة id يملك نفس رقم الـ order الموضوع في الكائن person في حال كان الكائن
                        if (order.Person.Id == id)
                        {
                            Console.WriteLine("> Order: #" + order.Id);
                            Console.WriteLine("  Date: " + order.Date);
                            Console.WriteLine("  Is paid: " + ((order.IsPaid) ? "yes" : "no"));
                            Console.WriteLine("  Ordered by: " + order.Person.Name);
                            Console.WriteLine("  Products:");
    
                            // سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في كل فاتورة totalSum المتغير
                            float totalSum = 0;
    
                            // order الموضوعة في الكائن Products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
                            // product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن
                            // totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير
                            foreach (Product product in order.Products)
                            {
                                totalSum += product.Price;
                                Console.WriteLine("  - " + product.Name + ": " + product.Price + "$");
                            }
    
                            // و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة totalSum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير
                            Console.WriteLine("  Total Price: " + totalSum + "$");
                        }
                    }
    
                    // بعدها سيتم رسم هذا الخط و من ثم الخروج من الدالة
                    Console.WriteLine("----------------------");
                    return;
                }
            }
    
            // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Persons في حال لم يتم إيجاد أي كائن في المصفوفة 
            Console.WriteLine("Person with id " + id + " is not found!");
            Console.WriteLine("----------------------");
        }
    }
    		

    Program.cs
    using System;
    using System.Collections.Generic;
    
    class Program
    {
        static void Main(string[] args)
        {
            // أي كأننا قمنا بإنشاء شخصين Person هنا قمنا بإنشاء كائنين من كلاسات ترث من الكلاس
            // و بالتالي فإنه يمثل شخص يعتبر زبون Client عبارة عن كائن من الكلاس person1
            // و بالتالي فإنه يمثل شخص يعتبر موظف Employee عبارة عن كائن من الكلاس person2
            Client person1 = new Client("Mhamad", "+96170123456", "Male", "mhamad@example.com");
            Employee person2 = new Employee("Nadine", "+9631249392", "Female", 800f, "8:00 AM to 3:00 PM");
    
            // و التي تمثل 6 منتجات Product هنا قمنا بتعريف 6 كائنات من الكلاس
            Product product1 = new Product("Keyboard", 15f);
            Product product2 = new Product("Camera", 45f);
            Product product3 = new Product("HDD 1TB", 70f);
            Product product4 = new Product("SSD 1TB", 274.66f);
            Product product5 = new Product("Mouse", 8f);
            Product product6 = new Product("Table", 44.55f);
    
            // product3 و product2 و product1 وضعنا فيه الكائنات هنا قمنا بتعريف كائن من الكلاس
            // و الذي سننئه بعد قليل order1 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
           <Product> order1Products = new<Product>();
            order1Products.Add(product1);
            order1Products.Add(product2);
            order1Products.Add(product3);
    
            // product4 وضعنا فيه الكائن هنا قمنا بتعريف كائن من الكلاس
            // و الذي سننئه بعد قليل order2 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
           <Product> order2Products = new<Product>();
            order2Products.Add(product4);
    
            // product5 و product6 وضعنا فيه الكائنات هنا قمنا بتعريف كائن من الكلاس
            // و الذي سننئه بعد قليل order3 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
           <Product> order3Products = new<Product>();
            order3Products.Add(product5);
            order3Products.Add(product6);
    
            // و التي تمثل فواتير Order هنا قمنا بتعريف 3 كائنات من الكلاس
            // person1 وضعناهما لنفس الشخص الذي يمثله الكائن order2 و order1 لاحظ أن الفاتورتين
            Order order1 = new Order("2020-1-1", true, person1, order1Products);
            Order order2 = new Order("2020-2-7", true, person1, order2Products);
            Order order3 = new Order("2020-5-4", false, person2, order3Products);
    
            // لأننا نريد تخزين الأشخاص و المنتجات و الفواتير بشكل مرتب بداخله Company هنا قمنا بإنشاء كائن من الكلاس
            Company company = new Company();
    
            // AddPerson() بواسطة الدالة company التي يمكلها الكائن Persons هنا قمنا بإضافة الشخصين في المصفوفة
            company.AddPerson(person1);
            company.AddPerson(person2);
    
            // AddProduct() بواسطة الدالة company التي يمكلها الكائن Products هنا قمنا بإضافة المنتجات في المصفوفة
            company.AddProduct(product1);
            company.AddProduct(product2);
            company.AddProduct(product3);
            company.AddProduct(product4);
            company.AddProduct(product5);
            company.AddProduct(product6);
    
            // AddOrder() بواسطة الدالة company التي يمكلها الكائن Orders هنا قمنا بإضافة الفواتير في المصفوفة
            company.AddOrder(order1);
            company.AddOrder(order2);
            company.AddOrder(order3);
    
            // PrintPersonInfo() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة معلومات كلا الشخصين بالإعتماد على رقم التعرفة
            // تذكر: رقم التعرفة الخاص بكل شخص تم إنشاؤه بشكل تلقائي عند إنشاء كل شخص بداخل الكونستركتور
            company.PrintPersonInfo(1);
            company.PrintPersonInfo(2);
    
            // PrintProductDetails() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة معلومات كل المنتجات بالإعتماد على رقم التعرفة
            // تذكر: رقم التعرفة الخاص بكل منتج تم إنشاؤه بشكل تلقائي عند إنشاء كل منتج بداخل الكونستركتور
            company.PrintProductDetails(1);
            company.PrintProductDetails(2);
            company.PrintProductDetails(3);
            company.PrintProductDetails(4);
            company.PrintProductDetails(5);
            company.PrintProductDetails(6);
    
            // PrintPersonOrders() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة الفواتير التي يملكها كل شخص بالإعتماد على رقم التعرفة
            company.PrintPersonOrders(1);
            company.PrintPersonOrders(2);
    
            // RemoveOrder() هنا قمنا الفاتورة التي تملك رقم التعرفة 1 بواسطة الدالة
            // PrintOrderDetails() بعدها حاولنا طباعة معلومات الفاتورة التي قمنا بحذفها بواسطة الدالة
            // بعدها قمنا بطباعة جمبع الفواتير التي يمكلها الشخص الذي يملك رقم التعرفة 1 و الذي كان يملك الفاتورة التي تم حذفها
            // لاحظ أن الفاتورة المحذوفة أيضاَ لم تظر ضمن فواتيره
            company.RemoveOrder(1);
            company.PrintOrderDetails(1);
            company.PrintPersonOrders(1);
    
            Console.ReadKey();
        }
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    Person with id 1 info.   --> الموضوعة في السطر 55 PrintPersonInfo() تم عرض هذا المحتوى بسبب استدعاء الدالة
    Name: Mhamad
    Phone: +96170123456
    Gender: Male
    Email: mhamad@example.com
    ----------------------
    Person with id 2 info.   --> الموضوعة في السطر 56 PrintPersonInfo() تم عرض هذا المحتوى بسبب استدعاء الدالة
    Name: Nadine
    Phone: +9631249392
    Gender: Female
    Salary: 800.0$
    Working time: 8:00 AM to 3:00 PM
    ----------------------
    Product with id 1 details.   --> الموضوعة في السطر 60 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
    Name: Keyboard
    Price: 15.0$
    ----------------------
    Product with id 2 details.   --> الموضوعة في السطر 61 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
    Name: Camera
    Price: 45.0$
    ----------------------
    Product with id 3 details.   --> الموضوعة في السطر 62 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
    Name: HDD 1TB
    Price: 70.0$
    ----------------------
    Product with id 4 details.   --> الموضوعة في السطر 63 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
    Name: SSD 1TB
    Price: 274.66$
    ----------------------
    Product with id 5 details.   --> الموضوعة في السطر 64 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
    Name: Mouse
    Price: 8.0$
    ----------------------
    Product with id 6 details.   --> الموضوعة في السطر 65 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
    Name: Table
    Price: 44.55$
    ----------------------
    All Orders made by person with id 1:   --> الموضوعة في السطر 68 PrintPersonOrders() تم عرض هذا المحتوى بسبب استدعاء الدالة
    > Order: #1
      Date: 2020-1-1
      Is paid: yes
      Ordered by: Mhamad
      Products:
      - Keyboard: 15.0$
      - Camera: 45.0$
      - HDD 1TB: 70.0$
      Total Price: 130.0$
    > Order: #2
      Date: 2020-2-7
      Is paid: yes
      Ordered by: Mhamad
      Products:
      - SSD 1TB: 274.66$
      Total Price: 274.66$
    ----------------------
    All Orders made by person with id 2:   --> الموضوعة في السطر 69 PrintPersonOrders() تم عرض هذا المحتوى بسبب استدعاء الدالة
    > Order: #3
      Date: 2020-5-4
      Is paid: no
      Ordered by: Nadine
      Products:
      - Mouse: 8.0$
      - Table: 44.55$
      Total Price: 52.55$
    ----------------------
    Order with id 1 is not found!   --> الموضوعة في السطر 75 PrintOrderDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
    ----------------------
    All Orders made by person with id 1:   --> الموضوعة في السطر 76 PrintPersonOrders() تم عرض هذا المحتوى بسبب استدعاء الدالة
    > Order: #2
      Date: 2020-2-7
      Is paid: yes
      Ordered by: Mhamad
      Products:
      - SSD 1TB: 274.66$
      Total Price: 274.66$
    ----------------------
    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات الأمن السيبراني

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب