تعلم كيفية البرمجة ب #C


الدرس: TP : مرحبا ، إنها عطلة نهاية الأسبوع ...


الصفحة السابقة
مرحبًا بكم في هذا التطبيق الأول! لقد تمكنت في الفصول السابقة من اكتشاف القواعد الأولى للغة C# التي تسمح بإنشاء التطبيقات. لقد حان الوقت لوضع ما تعلمناه موضع التنفيذ. هذه فرصة لك لاختبار معرفتك والتحقق من صحة ما تعلمته من خلال تنفيذ هذا التمرين. 

تعليمات لعمل التطبيق


الهدف هو إنشاء تطبيق صغير يعرض رسالة مختلفة بناءً على اسم المستخدم والوقت من اليوم:
  • مرحبًا XXX للشريحة الزمنية 9 ساعات <-> 18 ساعة ، الاثنين ، الثلاثاء ، الأربعاء ، الخميس والجمعة
  • مساء الخير XXX للشريحة الزمنية 6 مساءً <-> 9 صباحًا ، الاثنين ، الثلاثاء ، الأربعاء ، الخميس
  • عطلة نهاية أسبوع جيدة XXX للفتحة الزمنية يوم الجمعة 6 مساءً <-> الاثنين 9 صباحًا
ربما يبدو الأمر بسيطًا بالنسبة لك ، في هذه الحالة ، امضي قدمًا وقم بهذا التطبيق الأول وحدك .
خلاف ذلك ، دعونا نلقي نظرة فاحصة على وصف هذا العمل لتجنب الضياع.
للقيام بهذا العمل الأول ، ستحتاج إلى عدة أشياء.
أولاً ، تحتاج إلى عرض اسم المستخدم ، وهو شيء قمنا به بالفعل من خلال الدخول في وظيفة .NET Framework .
ستحتاج أيضًا إلى استرداد الوقت الحالي لمقارنته بالاوقات المطلوبة. لقد رأيت بالفعل كيفية التحصل على التاريخ الحالي. لتتمكن من التحصل على الوقت من التاريخ الحالي ، ستحتاج إلى استخدام التعليمات DateTime.Now.Hour التي تُرجع عددًا صحيحًا يمثل وقت اليوم.
لمقارنة الوقت بقيم الأعداد الصحيحة ، ستحتاج إلى استخدام عوامل المقارنة والبيانات الشرطية التي رأيناها سابقًا.
للتعامل مع حالة اليوم الخاص في الأسبوع ، ستحتاج إلى إطار عمل .NET لإخبارك بموعد اليوم. إنه دور التعليمة  DateTime.Now.DayOfWeek التي تعد تعدادًا يدل على يوم الأسبوع. . يمكن الاطلاع على القيم المختلفة على هذا العنوان .
من أجل الوضوح ، نكررها هنا:
قيمة ترجمة
Sunday الأحد
Monday الإثنين
Tuesday الثلاثاء
Wednesday الأربعاء
Thursday الخميس
Friday الجمعة
Saturday السبت
يبقى فقط لمقارنة قيمتي التعداد ، كما رأينا في الفصل الخاص بالتعدادات.
هنا ، لديك كل الأدوات في متناول اليد لتنفيذ هذا TP الأول. لا تتردد في العودة إلى الفصول السابقة إذا كان لديك أي شكوك حول بناء الجملة أو الإرشادات التنفيذ. لا يمكنك حفظ لغة في المرة الأولى.
دورك الآن !

الحل المقترح


يُسمح لك بقراءة هذا التصحيح فقط إذا قمت بسحب شعرك بسبب هذا TP ! أرى أن لديك بعض الطاقة ، قليل من جهد فقط! 
ومع ذلك ، إذا أكملت TP بنجاح ، يمكنك أيضًا مقارنة عملك بعملي.
على أي حال ، هذا هو الحل الذي أقترحه. من الواضح ، يمكن أن يكون هناك العديد ، لكنه يحتوي على المعلومات اللازمة لتحقيق هذا TP .
أول شيء نفعله: إنشاء مشروع نوع وحدة التحكم. ثم أضفت الكود التالي:

static void Main(string[] args)
{
    if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday || DateTime.Now.DayOfWeek == DayOfWeek.Sunday)
    {
        // nous sommes le week-end
        AfficherBonWeekEnd();
    }
    else
    {
        // nous sommes en semaine

        if (DateTime.Now.DayOfWeek == DayOfWeek.Monday && DateTime.Now.Hour < 9)
        {
            // nous sommes le lundi matin
            AfficherBonWeekEnd();
        }
        else
        {
            if (DateTime.Now.Hour >= 9 && DateTime.Now.Hour < 18)
            {
                // nous sommes dans la journée
                AfficherBonjour();
            }
            else
            {
                // nous sommes en soirée

                if (DateTime.Now.DayOfWeek == DayOfWeek.Friday && DateTime.Now.Hour >= 18)
                {
                    // nous sommes le vendredi soir
                    AfficherBonWeekEnd();
                }
                else
                {
                    AfficherBonsoir();
                }
            }
        }
    }
}

static void AfficherBonWeekEnd()
{
    Console.WriteLine("Bon week-end " + Environment.UserName);
}

static void AfficherBonjour()
{
    Console.WriteLine("Bonjour " + Environment.UserName);
}

static void AfficherBonsoir()
{
    Console.WriteLine("Bonsoir " + Environment.UserName);
}
دعونا نلقي نظرة فاحصة على هذا الكود:
عند تحميل البرنامج (الطريقة Main ) نجري المقارنات المناسبة.

أولاً ، نحن نختبر يوم الأسبوع للتاريخ الحالي ( DateTime.Now.DayOfWeek) ونقارنه بالقيم التي تمثل يومي السبت والأحد. إذا كانت هذه هي الحالة ، فنحن نسميها طريقة تعرض الرسالة "عطلة نهاية أسبوع جيدة(Bon week-end)" باسم المستخدم الحالي الذي يمكننا استرداده من خلال Enrivonment.UserName .
إذا لم نكن في عطلة نهاية الأسبوع ، فسنختبر وقت التاريخ الحالي بـ DateTime.Now.Hour . إذا كنا صباح الاثنين قبل التاسعة صباحًا ، فسنواصل نشر "عطلة نهاية أسبوع جيدة(Bon week-end)" . وإلا ، إذا كنا في الفترة الزمنية من الساعة 9:00 صباحًا إلى 6:00 مساءً ، فيمكننا استدعاء الطريقة التي تعرض Bonjour . إذا لم يكن الأمر كذلك ، يبقى فقط التحقق من أننا لسنا مساء الجمعة ، وهو جزء من عطلة نهاية الأسبوع ، وإلا يمكننا عرض رسالة "مساء الخير(Bonsoir)" .

وهناك لديك ، تمرين جيد للمعالجات بالأحوال والتعدادات ...

اذهب أبعد من ذلك


هذا TP لم يكن معقدًا للغاية ، فقد سمح لنا بالتحقق من فهمنا لمبدأ  if وأنه يمكننا استدعاء عناصر من .NET Framework .

يمكننا تبسيط كتابة التطبيق من خلال تعقيد الاختبارات قليلاً بمزيج من الشروط.
على سبيل المثال ، يمكن أن يكون لدينا:

if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday ||
    DateTime.Now.DayOfWeek == DayOfWeek.Sunday ||
    (DateTime.Now.DayOfWeek == DayOfWeek.Monday && DateTime.Now.Hour < 9) ||
    (DateTime.Now.DayOfWeek == DayOfWeek.Friday && DateTime.Now.Hour >= 18))
{
    // nous sommes le week-end
    AfficherBonWeekEnd();
}
else
{
    // nous sommes en semaine
    if (DateTime.Now.Hour >= 9 && DateTime.Now.Hour < 18)
    {
        // nous sommes dans la journée
        AfficherBonjour();
    }
    else
    {
        AfficherBonsoir();
    }
}
الاختبار الأول يجعل من الممكن التحقق من أنه إما يوم السبت أو الأحد ، أو أننا يوم الاثنين وأن الوقت أقل من 9 ، أو أننا يوم الجمعة وأن الوقت أكبر من 18.
لدينا ، لهذا القيام به ، جنبا إلى جنب الاختبارات مع المشغل المنطقي  || . لاحظ أن الأقواس تسمح لنا بالتصرف وفقًا لترتيب تقييم الشروط. لكي تكون عطلة نهاية الأسبوع ، يجب أن تكون بالطبع "الجمعة والوقت أكبر من 18" أو "الاثنين والوقت أقل من 9" أو السبت أو الأحد.
يمكننا تبسيطه أكثر عن طريق تجنب مطالبة .NET Framework في كل مرة بالحصول على التاريخ الحالي. فقط قم بتخزين التاريخ الحالي في متغير نوع DateTime . والتي من شأنها أن تعطي:

DateTime dateCourante = DateTime.Now;

if (dateCourante.DayOfWeek == DayOfWeek.Saturday ||
    dateCourante.DayOfWeek == DayOfWeek.Sunday ||
    (dateCourante.DayOfWeek == DayOfWeek.Monday && dateCourante.Hour < 9) ||
    (dateCourante.DayOfWeek == DayOfWeek.Friday && dateCourante.Hour >= 18))
{
    // nous sommes le week-end
    AfficherBonWeekEnd();
}
else
{
    // nous sommes en semaine
    if (dateCourante.Hour >= 9 && dateCourante.Hour < 18)
    {
        // nous sommes dans la journée
        AfficherBonjour();
    }
    else
    {
        AfficherBonsoir();
    }
}
نحن نستخدم هنا نوع DateTime كنوع string أو int . يتم استخدامه لإدارة التواريخ والوقت. إنه مختلف قليلاً عن الأنواع التي رأيناها حتى الآن ، ولن نتناولها. سيكون لدينا الفرصة لمعرفة ما هو عليه في الدورة القادمة.
هذا التحسين ليس شيئًا غير عادي ، ولكنه يوفر لنا إستدعاءً في كل مرة لـ .NET Framework .

هذا هو TP . أتمنى أن تكون قد أتممت التمرين بنجاح.
ربما لاحظت أن هذا TP لم يكن صعباً للغاية. كان علينا فقط التفكير في كيفية تداخل ظروفنا بشكل صحيح.

لا تتردد في ممارسة وتدريب مع المشاكل الأخرى الخاصة بك. إذا كان لديك أي مشاكل ، يمكنك قراءة الفصول السابقة مرة أخرى.
سترى أنه سيكون لدينا الفرصة لاستخدام هذه العبارات الشرطية كثيرًا في جميع البرامج التي سنكتبها.