Создать календарь на год - C (СИ)

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

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

помогите пожалуйста составить календарь,так что бы при вводе года на экран выводился календарь на весь год.

Решение задачи: «Создать календарь на год»

textual
Листинг программы
#include <stdio.h>
#include <time.h>
 
int main()
{   time_t now;
    struct tm * timeinfo;
    int year, m, i, j;
    char* month[] = { "January","February", "March","April", "May","June", 
            "July", "August","September","October", "November","December"};
    
    printf ("YEAR: "); scanf ("%d",&year);
    time (&now); //get current timeinfo and modify it to the user's choice
    timeinfo = localtime (&now);
    timeinfo->tm_year = year-1900; //years numerated from 1900
    timeinfo->tm_mon = 0;
 
    m =-1;
while(m<12)
{   for(i=1; i<33; i++) //year days with "overload"
    {   timeinfo->tm_mday = i;
        mktime (timeinfo); //call mktime: the whole timeinfo for the day will be set 
 
        if(timeinfo->tm_mon > m) //"end month" event, "overload" processing
        {   printf("\n                        %s\n",month[timeinfo->tm_mon]);
            printf("<br>\n");
            printf("  Su  Mo  Tu  We  Th  Fr  Sa\n");
            printf("<br>\n");
            for(j=0;j<(timeinfo->tm_wday);j++)
                printf("    ");
            m++;
            break;
        }
        if (m==11 && timeinfo->tm_mon ==0) //"end year" event
        {   m++;
            break;
        }
        
        printf("%4d",timeinfo->tm_mday); //routine
            
        if(timeinfo->tm_wday==6)//"end week" event
            printf("\n");
    }
}
    getchar();getchar();
    return 0;
}

Объяснение кода листинга программы

Вот список действий, которые выполняются в коде:

  1. Подключение необходимых библиотек
  2. Инициализация переменных: year, m, i, j, timeinfo
  3. Создание массива month с названиями месяцев
  4. Ввод года с клавиатуры и сохранение его в переменной year
  5. Получение текущего времени и сохранение его в переменной now
  6. Приведение текущего времени к выбранному пользователем году
  7. Инициализация переменной m значением -1
  8. Запуск цикла while, который выполняется 12 раз
  9. Внутри цикла while запускается внутренний цикл for, который выполняется 32 раза
  10. Внутри внутреннего цикла for вычисляется день месяца и сохраняется в переменной timeinfo->tm_mday
  11. Вызов функции mktime для установки полного времени для текущего дня
  12. Проверка, если месяц в timeinfo больше текущего месяца m
  13. Если условие выполняется, то выполняется следующие действия: a. Вывод названия текущего месяца на экран b. Вывод пустой строки c. Вывод дня недели (времяinfo->tm_wday) в виде пробелов d. Увеличение значения m на 1 e. Выход из внутреннего цикла for с помощью оператора break
  14. Если условие выполняется (m==11 && timeinfo->tm_mon ==0), то выполняется следующие действия: a. Увеличение значения m на 1 b. Выход из внутреннего цикла for с помощью оператора break
  15. Вывод номера дня месяца в формате DD в виде пробелов
  16. Если времяinfo->tm_wday равно 6 (суббота), то выполняется вывод символа новой строки
  17. В конце программы добавлен вызов функции getchar() для обработки ввода пользователя, затем вызов функции getchar() и возврат 0, что означает успешное завершение программы

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

5   голосов , оценка 4.6 из 5
Похожие ответы