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

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

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

Есть такое задание, обработать строку получаемую от пользователя в виде dd mm yyyy и вывести все в виде красивого календаря. Первую часть сделал, а вот с выводом проблемы. Вот собственно код:
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();
        }
    }

}
Help

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

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();
        }
    }
}

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


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

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

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