/*
Написать программу формирования календаря для любого года начиная с 1900 года.(1 января 1900 года - понедельник).
Результатом работы программы должен быть текстовый файл, содержащий календарь в привычном для пользователя виде,
что позволит просматривать его и получать копии, не прибегая к новым запускам программы.
/*
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>
#include <iomanip> //Манипуляторы для поточных вводов-выводов
#include <time.h> //Это наша суть, работа со временем
#include <fstream> //Файловые потоки ввода/вывода
using namespace std;
void main(void)
{
setlocale(LC_ALL,"Russian");
int cYear; //Год на который будет разрабатыватся календарь
struct tm *date; //Структурно календарной даты
time_t temp = time(NULL);
char *Month[] = {"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь","Ноябрь", "Декабрь"};
ofstream file("Calendar.txt"); //Файловый ввод
cout << "Введите год : ";
cin >> cYear; //Ввод года
//Поставим date в 1 января введенного года
date = localtime(&temp); //Получим текущую дату
date->tm_year = cYear - 1900;
date->tm_mon = 0; //Это январь
date->tm_mday = 1; //Это первое число
time_t a = mktime(date); //Создадим time_t исходя из нашей даты
int limitsDay = date->tm_year; //Для цикла определим текущий год из структуры
int Selection = -1; //Опция выбора (смещение строки) если текущий месяц закончился
//Пока структура указывает еще на введенный год
while (date->tm_year == limitsDay)
{
if (Selection != date->tm_mon) //Проверим не закончился ли текущий месяц (нам же шапку вывести нужно)
{
//А если месяц закончился, то перейдем на след. строку
cout<< endl;
file<< endl;
//Выведим название месяца
cout<< endl<< Month[date->tm_mon] << endl;
file<< endl<< Month[date->tm_mon] << endl;
//Выведим шапку дней недели
cout<< setw(3) << "Вс"<< setw(3) << "Пн"<< setw(3) << "Вт"<< setw(3) << "Ср"<< setw(3) << "Чт"<< setw(3) << "Пт"<< setw(3) << "Сб"<<endl;
file<< setw(3) << "Вс"<< setw(3) << "Пн"<< setw(3) << "Вт"<< setw(3) << "Ср"<< setw(3) << "Чт"<< setw(3) << "Пт"<< setw(3) << "Сб"<<endl;
Selection = date->tm_mon; //Перезапишим Selection в уже новый-текущий месяц
if (date->tm_wday != 0) //Если день недели в новом месяце не сначало, то отделим пробелами
{
for (int i = 0; i < date->tm_wday; i++)
{
cout<< setw(3) << "";
file<< setw(3) << "";
}
}
}
cout<<setw(3)<<date->tm_mday; //Вывод дня в месяце
file<< setw(3) << date->tm_mday;
if (date->tm_wday == 6) //Если дни недели закончились перейдем на новую строку
{
cout << endl;
file << endl;
}
date->tm_mday++; //Добавим 1 день
a = mktime(date); //Свормируем новое время по данным структуры
}
cout << endl;
file.close(); //Закроем файл
}