Advertisement
stefanpu

Working days count refactoring

Feb 14th, 2013
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. class WorkdaysBetweenTodayAndGivenDay
  5. {
  6.  
  7.     static int lengthDays;
  8.     static void Main()
  9.     {
  10.         DateTime now = DateTime.Today;
  11.         Console.Write("Enter a date YYYY-MM-DD for end : ");
  12.         DateTime endDate = DateTime.Parse(Console.ReadLine());
  13.         List<DateTime> holidays = new List<DateTime>() {new DateTime(2013, 1, 1),
  14.                                new DateTime(2013, 3, 3),
  15.                                new DateTime(2013, 5, 1),
  16.                                new DateTime(2013, 5, 6),
  17.                                new DateTime(2013, 5, 24),
  18.                                new DateTime(2013, 9, 22),
  19.                                new DateTime(2013, 12, 24),
  20.                                new DateTime(2013, 12, 25),
  21.                                new DateTime(2013, 12, 26),
  22.                                new DateTime(2013, 12, 31)};
  23.  
  24.         CountWorkdays(now, endDate , holidays);
  25.        
  26.         PrintResult(now, endDate, lengthDays);
  27.     }
  28.     static void CountWorkdays(DateTime start,DateTime end, List<DateTime> holidays)
  29.     {
  30.         //превърнал съм го в поле на класа за да е видимо от всички методи
  31.         //- виж началото на класа
  32.         lengthDays = (end - start).Days;
  33.         int length = lengthDays;
  34.         DateTime currentDate = new DateTime();
  35.  
  36.         for (int i = 0; i <= length; i++)
  37.         {
  38.             currentDate = start.AddDays(i);
  39.             // Вместо този цикъл можеш да използваш метода Contains
  40.             //for (int days = 0; days < holidays.Length; days++)
  41.             //{
  42.             //    int comparison = currentDate.CompareTo(holidays[days]);
  43.             //    if (comparison == 0)
  44.             //    {
  45.             //        lengthDays-- ;
  46.             //    }
  47.             //}
  48.             if (holidays.Contains(currentDate))
  49.             {
  50.                 lengthDays--;
  51.             }
  52.  
  53.             //Пренесъл съм го на два реда защото моят екран е тесен и не искам да scroll - вам
  54.             //настрани
  55.             if (currentDate.DayOfWeek == DayOfWeek.Saturday ||
  56.                 currentDate.DayOfWeek == DayOfWeek.Sunday)
  57.             {
  58.                 lengthDays--;
  59.             }
  60.         }
  61.  
  62.         //Много хубаво отделяш принтирането в отделен метод, но можеш да изкараш този
  63.         //метод в Main. Защо:
  64.  
  65.         //Един метод би трябвало да прави едно нещо. В твоя случай името е
  66.         //добро и подсказва, че методът брой работните дни. Това, което методът прави е да
  67.         //брой работните дни и да ги принтира. Или ще трябва да промениш името му на
  68.         //CountAndPrintWorkdays, или ще трябва да извадиш принтирането в Main метода.  
  69.         //PrintResult(start,end,lengthDays);
  70.            
  71.     }
  72.  
  73.     private static void PrintResult(DateTime start, DateTime end, int lengthDays)
  74.     {
  75.         Console.WriteLine("Today is: {0:D}", start);
  76.         Console.WriteLine("Final Date is: {0:D}", end);
  77.         Console.WriteLine();
  78.         Console.WriteLine("Working days: {0}", lengthDays);
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement