Вывод календаря в консоль - C#
Формулировка задачи:
Есть такое задание, обработать строку получаемую от пользователя в виде dd mm yyyy и вывести все в виде красивого календаря.
Первую часть сделал, а вот с выводом проблемы. Вот собственно код:
Help
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Calendar { class chekIt { public int[] daysOfMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // Дни в месяцах соответсвенно public bool chekOnDayInWeek(int day, int month, int year, bool exit) { if (day != daysOfMonth[month - 1] && month != 2) //если введен не последний день месяца и месяц не февраль, идем дальше { return exit = true; } if (day == daysOfMonth[month - 1]) //если это последний день месяца, проверить совпадение { return exit = true; } else if ((month == 2) && (year % 4 == 0) && (day == 29)) // если это последний день февраля високосного года, то все норм { return exit = true; } else { Console.WriteLine("Данные введены не верно, попробуйте ввести снова!"); // иначе, предложить ввести снова return exit = false; } } public int output(int day, int month, int year, int week) { int count = 1; Console.WriteLine("ПН\tВТ\tСР\tЧТ\tПТ\tСБ\tВС"); for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { if (count -1 == daysOfMonth[month - 1]) { break; } if (count == day) { Console.Write("[{0}]\t", count); count++; continue; } Console.Write(" {0}\t", count); count++; } Console.WriteLine("\n"); } return 0; } public int dayOfWeek(int day, int month, int year) // просто формула нахождения дня недели по дате { int a = (14 - month) / 12; int y = year - a; int m = month + 12 * a - 2; return ((7000 + (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7) + 1; } } class Program { static void Main(string[] args) { chekIt e = new chekIt(); string input = " "; //Входные данные int day, month, year; //Здесь будут хранится значения приведенные в инт. bool chek = false; //Выход из цикла, значит введенные данные верны. Console.WriteLine("Введите день, месяц и год искомой даты, разделенный пробелом в формате dd mm yyyy:"); while (!chek) // Проверяем строку на корректность, если прошли - идем дальше. { input = Console.ReadLine(); // Делим строку на 3 числа string[] massSplit = input.Split(' '); if (massSplit.Length != 3) { Console.WriteLine("Введены не все данные, или слишком много, повторите ввод в формате dd mm yyyy!"); continue; } if (massSplit[0] == "") { Console.WriteLine("Первый символ не может быть пробелом!"); continue; } // Приводим наш инпут в целые числа try { day = Convert.ToInt32(massSplit[0]); month = Convert.ToInt32(massSplit[1]); year = Convert.ToInt32(massSplit[2]); } catch { Console.WriteLine("Введенный символ или символы не являются числами, повторите ввод!"); continue; } // Проверяем корректность данных if (day <= 0 || day > 31) { Console.WriteLine("Значение дня может быть числом от 1 до 31, повторите ввод!"); continue; } if (month <= 0 || month > 12) { Console.WriteLine("Значение месяца может быть числом от 1 до 12, повторите ввод!"); continue; } if (year < 1600 || year > 2400) { Console.WriteLine("Значение года может быть числом от 1600 до 2400, повторите ввод!"); continue; } chek = e.chekOnDayInWeek(day, month, year, chek); if (chek != true) { continue; } // Узнаем день недели int week = e.dayOfWeek(day, month, year); switch (week) { case 1: { Console.WriteLine("В этот день воскресенье!"); break; } case 2: { Console.WriteLine("В этот день понедельник!"); break; } case 3: { Console.WriteLine("В этот день вторник!"); break; } case 4: { Console.WriteLine("В этот день среда!"); break; } case 5: { Console.WriteLine("В этот день четверг!"); break; } case 6: { Console.WriteLine("В этот день пятница!"); break; } case 7: { Console.WriteLine("В этот день суббота!"); break; } } e.output(day, month, year, week); int[,] arrDayOfWeek = new int[7, 7]; for (int i = 0; i < 7; i++ ) { for (int j = 0; j < 7; j++) { arrDayOfWeek[i,j] = // И вот в этом месте я и не понимаю, что писать. } } } Console.ReadKey(); } } }
Решение задачи: «Вывод календаря в консоль»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class chek { public bool check(string d, ref string e) { int[] daysOfMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int D = 0; int M = 0; int Y = 0; int l = d.Length; string[] d2 = d.Split(' ');//деим входную строку на подстроки if (d2.Length != 3) { e = "Нужно ввести 3 числа в формате dd mm yyyy"; return false; } if (d[0] == ' ') { e = "первый символ не может быть пробелом!"; return false; } if (d2[0].Length > 2 || d2[0].Length == 0) { e = "неправильно введен день"; return false; } if (d2[1].Length > 2 || d2[0].Length == 0) { e = "неправильно введен месяц"; return false; } if (d2[2].Length != 4) { e = "неправильно введен год"; return false; } try { D = Convert.ToInt32(d2[0]); M = Convert.ToInt32(d2[1]); Y = Convert.ToInt32(d2[2]); } catch { e = "Можно вводить только цифры :)"; return false; } //на данный момент мы уже знаем, что нами прочитана корректная строка с тремя целыми значениями //теперь надо проверить, корректно ли кол-во дней для данного месяца, кол-во месяцев, кол-во лет if (Y < 1600 || Y > 2400) { e = "год должен быть от 1600 до 2400"; return false; } if (M < 1 || M > 12) { e = "месяц должен быть от одного до 12"; return false; } if (D < 1 || D > 31) { e = "день должен быть от одного до 31"; return false; } DateTime dt = new DateTime(); try { dt = DateTime.Parse(d); return true; } catch { e = "В этом месяце не может быть столько дней"; return false; } } } /*функция, проверяющая строку d. Если всё норм, возвр. тру, если нет - фолс и заполняет строку e описанием ошибки*/ namespace Calendar2 { class Program { static void Main(string[] args) { int[] daysOfMonth = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; bool flag = false; string error = " "; string input = " "; chek e = new chek(); while (flag != true) { Console.WriteLine("Введите дату в формате dd mm yyyy: "); input = Console.ReadLine(); flag = e.check(input, ref error); string[] d2 = input.Split(' '); //деим входную строку на подстроки int M = Convert.ToInt32(d2[1]); if (flag != true) { Console.WriteLine(error); } int chislo = 1; DayOfWeek[] d = new DayOfWeek[daysOfMonth[M]]; d[0] = DayOfWeek.Monday; d[1] = DayOfWeek.Tuesday; d[2] = DayOfWeek.Wednesday; d[3] = DayOfWeek.Thursday; d[4] = DayOfWeek.Friday; d[5] = DayOfWeek.Saturday; d[6] = DayOfWeek.Sunday; int a = 0; // ВОТ ТУТ ЧТО-ТО НАЧИНАЕТ ИДТИ НЕ ТАК for(int i=0; i < 7; i ++) { foreach (var x in d) { if (x == d[i]) { Console.Write(a); } else { Console.Write(" "); } } Console.WriteLine(); } } Console.ReadLine(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д