Вывод календаря в консоль - C#

Узнай цену своей работы

Формулировка задачи:

Есть такое задание, обработать строку получаемую от пользователя в виде dd mm yyyy и вывести все в виде красивого календаря. Первую часть сделал, а вот с выводом проблемы. Вот собственно код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Calendar
  7. {
  8. class chekIt
  9. {
  10. public int[] daysOfMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // Дни в месяцах соответсвенно
  11. public bool chekOnDayInWeek(int day, int month, int year, bool exit)
  12. {
  13. if (day != daysOfMonth[month - 1] && month != 2) //если введен не последний день месяца и месяц не февраль, идем дальше
  14. {
  15. return exit = true;
  16. }
  17. if (day == daysOfMonth[month - 1]) //если это последний день месяца, проверить совпадение
  18. {
  19. return exit = true;
  20. }
  21. else if ((month == 2) && (year % 4 == 0) && (day == 29)) // если это последний день февраля високосного года, то все норм
  22. {
  23. return exit = true;
  24. }
  25. else
  26. {
  27. Console.WriteLine("Данные введены не верно, попробуйте ввести снова!"); // иначе, предложить ввести снова
  28. return exit = false;
  29. }
  30. }
  31. public int output(int day, int month, int year, int week)
  32. {
  33. int count = 1;
  34. Console.WriteLine("ПН\tВТ\tСР\tЧТ\tПТ\tСБ\tВС");
  35. for (int i = 0; i < 7; i++)
  36. {
  37. for (int j = 0; j < 7; j++)
  38. {
  39. if (count -1 == daysOfMonth[month - 1])
  40. {
  41. break;
  42. }
  43. if (count == day)
  44. {
  45. Console.Write("[{0}]\t", count);
  46. count++;
  47. continue;
  48. }
  49. Console.Write(" {0}\t", count);
  50. count++;
  51. }
  52. Console.WriteLine("\n");
  53. }
  54. return 0;
  55. }
  56. public int dayOfWeek(int day, int month, int year) // просто формула нахождения дня недели по дате
  57. {
  58. int a = (14 - month) / 12;
  59. int y = year - a;
  60. int m = month + 12 * a - 2;
  61. return ((7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7) + 1;
  62. }
  63. }
  64.  
  65. class Program
  66. {
  67. static void Main(string[] args)
  68. {
  69. chekIt e = new chekIt();
  70. string input = " "; //Входные данные
  71. int day, month, year; //Здесь будут хранится значения приведенные в инт.
  72. bool chek = false; //Выход из цикла, значит введенные данные верны.
  73. Console.WriteLine("Введите день, месяц и год искомой даты, разделенный пробелом в формате dd mm yyyy:");
  74. while (!chek) // Проверяем строку на корректность, если прошли - идем дальше.
  75. {
  76. input = Console.ReadLine();
  77. // Делим строку на 3 числа
  78. string[] massSplit = input.Split(' ');
  79.  
  80. if (massSplit.Length != 3)
  81. {
  82. Console.WriteLine("Введены не все данные, или слишком много, повторите ввод в формате dd mm yyyy!");
  83. continue;
  84. }
  85. if (massSplit[0] == "")
  86. {
  87. Console.WriteLine("Первый символ не может быть пробелом!");
  88. continue;
  89. }
  90. // Приводим наш инпут в целые числа
  91. try
  92. {
  93. day = Convert.ToInt32(massSplit[0]);
  94. month = Convert.ToInt32(massSplit[1]);
  95. year = Convert.ToInt32(massSplit[2]);
  96. }
  97. catch
  98. {
  99. Console.WriteLine("Введенный символ или символы не являются числами, повторите ввод!");
  100. continue;
  101. }
  102. // Проверяем корректность данных
  103. if (day <= 0 || day > 31)
  104. {
  105. Console.WriteLine("Значение дня может быть числом от 1 до 31, повторите ввод!");
  106. continue;
  107. }
  108. if (month <= 0 || month > 12)
  109. {
  110. Console.WriteLine("Значение месяца может быть числом от 1 до 12, повторите ввод!");
  111. continue;
  112. }
  113. if (year < 1600 || year > 2400)
  114. {
  115. Console.WriteLine("Значение года может быть числом от 1600 до 2400, повторите ввод!");
  116. continue;
  117. }
  118.  
  119. chek = e.chekOnDayInWeek(day, month, year, chek);
  120. if (chek != true)
  121. {
  122. continue;
  123. }
  124. // Узнаем день недели
  125.  
  126. int week = e.dayOfWeek(day, month, year);
  127. switch (week)
  128. {
  129. case 1:
  130. {
  131. Console.WriteLine("В этот день воскресенье!");
  132. break;
  133. }
  134. case 2:
  135. {
  136. Console.WriteLine("В этот день понедельник!");
  137. break;
  138. }
  139. case 3:
  140. {
  141. Console.WriteLine("В этот день вторник!");
  142. break;
  143. }
  144. case 4:
  145. {
  146. Console.WriteLine("В этот день среда!");
  147. break;
  148. }
  149. case 5:
  150. {
  151. Console.WriteLine("В этот день четверг!");
  152. break;
  153. }
  154. case 6:
  155. {
  156. Console.WriteLine("В этот день пятница!");
  157. break;
  158. }
  159. case 7:
  160. {
  161. Console.WriteLine("В этот день суббота!");
  162. break;
  163. }
  164. }
  165. e.output(day, month, year, week);
  166. int[,] arrDayOfWeek = new int[7, 7];
  167. for (int i = 0; i < 7; i++ )
  168. {
  169. for (int j = 0; j < 7; j++)
  170. {
  171. arrDayOfWeek[i,j] = // И вот в этом месте я и не понимаю, что писать.
  172. }
  173. }
  174. }
  175. Console.ReadKey();
  176. }
  177. }
  178.  
  179. }
Help

Решение задачи: «Вывод календаря в консоль»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. class chek
  8. {
  9.  
  10.  
  11.     public bool check(string d, ref string e)
  12.     {
  13.         int[] daysOfMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  14.         int D = 0;
  15.         int M = 0;
  16.         int Y = 0;
  17.         int l = d.Length;
  18.         string[] d2 = d.Split(' ');//деим входную строку на подстроки
  19.         if (d2.Length != 3)
  20.         {
  21.             e = "Нужно ввести 3 числа в формате dd mm yyyy";
  22.             return false;
  23.         }
  24.         if (d[0] == ' ')
  25.         {
  26.             e = "первый символ не может быть пробелом!";
  27.             return false;
  28.         }
  29.         if (d2[0].Length > 2 || d2[0].Length == 0)
  30.         {
  31.             e = "неправильно введен день";
  32.             return false;
  33.         }
  34.         if (d2[1].Length > 2 || d2[0].Length == 0)
  35.         {
  36.             e = "неправильно введен месяц";
  37.             return false;
  38.         }
  39.         if (d2[2].Length != 4)
  40.         {
  41.             e = "неправильно введен год";
  42.             return false;
  43.         }
  44.         try
  45.         {
  46.             D = Convert.ToInt32(d2[0]);
  47.             M = Convert.ToInt32(d2[1]);
  48.             Y = Convert.ToInt32(d2[2]);
  49.         }
  50.         catch
  51.         {
  52.             e = "Можно вводить только цифры :)";
  53.             return false;
  54.         }
  55.         //на данный момент мы уже знаем, что нами прочитана корректная строка с тремя целыми значениями
  56.         //теперь надо проверить, корректно ли кол-во дней для данного месяца, кол-во месяцев, кол-во лет
  57.         if (Y < 1600 || Y > 2400)
  58.         {
  59.             e = "год должен быть от 1600 до 2400";
  60.             return false;
  61.         }
  62.         if (M < 1 || M > 12)
  63.         {
  64.             e = "месяц должен быть от одного до 12";
  65.             return false;
  66.         }
  67.         if (D < 1 || D > 31)
  68.         {
  69.             e = "день должен быть от одного до 31";
  70.             return false;
  71.         }
  72.         DateTime dt = new DateTime();
  73.         try
  74.         {
  75.             dt = DateTime.Parse(d);
  76.             return true;
  77.         }
  78.         catch
  79.         {
  80.             e = "В этом месяце не может быть столько дней";
  81.             return false;
  82.         }
  83.     }
  84. }
  85. /*функция, проверяющая строку d.
  86. Если всё норм, возвр. тру, если нет - фолс и заполняет строку e описанием ошибки*/
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96. namespace Calendar2
  97. {
  98.     class Program
  99.     {
  100.         static void Main(string[] args)
  101.         {
  102.             int[] daysOfMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  103.             bool flag = false;
  104.             string error = " ";
  105.             string input = " ";
  106.             chek e = new chek();
  107.             while (flag != true)
  108.             {
  109.                 Console.WriteLine("Введите дату в формате dd mm yyyy: ");
  110.                 input = Console.ReadLine();
  111.                 flag = e.check(input, ref error);
  112.                 string[] d2 = input.Split(' ');     //деим входную строку на подстроки
  113.                 int M = Convert.ToInt32(d2[1]);
  114.  
  115.                 if (flag != true)
  116.                 {
  117.                     Console.WriteLine(error);
  118.                 }
  119.                 int chislo = 1;
  120.                 DayOfWeek[] d = new DayOfWeek[daysOfMonth[M]];
  121.                 d[0] = DayOfWeek.Monday;
  122.                 d[1] = DayOfWeek.Tuesday;
  123.                 d[2] = DayOfWeek.Wednesday;
  124.                 d[3] = DayOfWeek.Thursday;
  125.                 d[4] = DayOfWeek.Friday;
  126.                 d[5] = DayOfWeek.Saturday;
  127.                 d[6] = DayOfWeek.Sunday;
  128.                 int a = 0;            // ВОТ ТУТ ЧТО-ТО НАЧИНАЕТ ИДТИ НЕ ТАК
  129.                 for(int i=0; i < 7; i ++)
  130.                 {
  131.                     foreach (var x in d)
  132.                     {
  133.                         if (x == d[i])
  134.                         {
  135.                             Console.Write(a);
  136.                         }
  137.                         else
  138.                         {
  139.                             Console.Write(" ");
  140.                         }
  141.                     }
  142.                     Console.WriteLine();
  143.                 }
  144.             }
  145.  
  146.             Console.ReadLine();
  147.         }
  148.     }
  149. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.467 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут