0 / 0 / 0 Регистрация: 19.04.2011 Сообщений: 4 |
|
1 |
|
Создать календарь на год19.04.2011, 12:30. Показов 24728. Ответов 20
помогите пожалуйста составить календарь,так что бы при вводе года на экран выводился календарь на весь год.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
19.04.2011, 12:30 |
Ответы с готовыми решениями: Календарь на год Календарь на год Календарь на год Хочу сделать календарь событий на год Календарь на любой год 20 |
Заблокирован |
||||
19.04.2011, 17:37 |
2 |
|||
Сообщение было отмечено как решение Решение
Миниатюры
11 |
Заблокирован |
|
19.04.2011, 17:47 |
3 |
В силу “особенностей” time.h работает, начиная с 1970 года.
1 |
0 / 0 / 0 Регистрация: 19.04.2011 Сообщений: 4 |
|
20.04.2011, 17:00 [ТС] |
4 |
аааафигеть)спасибо огромное)) Добавлено через 38 секунд
0 |
0 / 0 / 0 Регистрация: 19.04.2011 Сообщений: 4 |
|
17.05.2011, 15:59 [ТС] |
5 |
а можно еще куда-то в эту программу запихать пользовательскую функцию?хотя бы одну?и что бы вывод был в файл или на экран?
0 |
5227 / 3199 / 362 Регистрация: 12.12.2009 Сообщений: 8,112 Записей в блоге: 2 |
|
17.05.2011, 16:26 |
6 |
В силу “особенностей” time.h работает, начиная с 1970 года. Эта “особенность” – начало жизни ОС UNIX
0 |
0 / 0 / 0 Регистрация: 19.04.2011 Сообщений: 4 |
|
17.06.2011, 20:34 [ТС] |
7 |
аааа,блин реал помогите. вообще не могу выввести это чертово програмирование.народ. честно скажу на знаю чо там пытаться сделать даже((
0 |
Антон1987 |
|
10.07.2012, 19:35 |
8 |
подскажите, пожалуйста, как сделать то же самое, но только на определенный месяц и год! Огромное спасибо!!! |
Заблокирован |
||||
15.07.2012, 11:24 |
9 |
|||
Как-то так:
2 |
0 / 0 / 0 Регистрация: 30.11.2017 Сообщений: 1 |
|
20.07.2012, 00:11 |
10 |
Какое условие надо добавить чтобы при выводе текущего месяца и года, текущая дата была бы выделена в квадратных скобках!?
0 |
0 / 0 / 0 Регистрация: 21.04.2015 Сообщений: 6 |
|
18.05.2015, 12:44 |
11 |
Каким образом можно реализовать прокрутку календаря вверх и вниз на Turbo C, если при запуске программы на экран помещается только фрагмент календаря?
0 |
0 / 0 / 0 Регистрация: 21.04.2015 Сообщений: 6 |
|
18.05.2015, 20:33 |
13 |
Большое спасибо за ссылку, но я совсем не могу разобраться, как это сделать на Си.
0 |
Maxwee 0 / 0 / 0 Регистрация: 21.04.2015 Сообщений: 6 |
||||
20.05.2015, 18:43 |
15 |
|||
Вам нужно поменять параметры самой консоли how do I enable scrolling in Windows command prompt? Или перейти на что-нибудь актуальней, чем TurboC Спасибо, необходимость в скроллинге уже отпала.Но у меня возник вопрос по поводу вашего календаря на введённый месяц и год: как можно организовать проверку на правильный ввод Month.Year ( т.е при вводе не чисел, а, например, символов программа бы не висла, а выдавала сообщение о неправильном формате и просила повторить ввод)?
0 |
Заблокирован |
|
20.05.2015, 23:37 |
16 |
Лучше считывать строку с помощью fgets, а затем искать в ней интовое число с помощью strol Добавлено через 3 минуты Добавлено через 10 минут
0 |
0 / 0 / 0 Регистрация: 12.06.2015 Сообщений: 5 |
|
12.06.2015, 12:20 |
17 |
почему все делают календари горизонтально только? где найти с вертикально расположенными днями недели ?
0 |
Заблокирован |
|
12.06.2015, 14:57 |
18 |
где найти с вертикально расположенными днями недели ? Дык, сделайте. Тюнинг, так сказать.
0 |
3174 / 1933 / 312 Регистрация: 27.08.2010 Сообщений: 5,131 Записей в блоге: 1 |
|
12.06.2015, 15:13 |
19 |
календари горизонтально только Не только. Миниатюры
0 |
0 / 0 / 0 Регистрация: 13.12.2015 Сообщений: 1 |
|
13.12.2015, 06:49 |
20 |
Здравствуйте, как сделать так чтобы он показывал конкретный (например: 2015) год.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
13.12.2015, 06:49 |
20 |
1. Обсуждение
После того, как я изучал C на первом курсе, я был сбит с толку. Как работает C? Он не такой интуитивно понятный, как HTML, не такой распространенный, как SQL, и не такой мощный, как Java. Почему он все еще там и остается горячим?
Ответ очень прост: язык программирования – это компания, структура языка C проста, но логическое мышление примерно такое же, как и в других языках, подходящих для начинающих.
Программирование не выполняется в одночасье, а способности нужно накапливать со временем. Это рекомендуется для начинающих, таких как я. Давайте поиграем с простыми программами на Си сами!
Во-вторых, вечный календарь
Простой годовой календарь, подобный этому, если вы посмотрите внимательно, нетрудно обнаружить, что он состоит из месячного календаря, каждый месяц имеет максимум 6 строк, что составляет 6 недель, 7 дней в неделю;
Процедура выглядит следующим образом:
Установите размер календаря:
int date [12] [6] [7]; // 12 месяцев, до 6 строк в месяц, 7 дней в строке
int calendar [] [12] = {{31,28,31,30,31,30,31,31,30,31,30,31}, // средний год
{31,29,31,30,31,30,31,31,30,31,30,31}}; // високосный год
int year;
char title [] = "SUN MON TUE WED THU FRI SAT"; // день недели
int sw, скачок, i, j, k, wd, день; // переменная
// sw день недели, скачок 0 нормальный год 1 високосный год, i, j, k вспомогательные переменные, wd неделя, день
Предложите пользователю ввести год для запроса: (Введите и перевод строки)
printf("Please input the year whose calendar you want to know: ");
scanf("%d%*c",&year);
Рассчитайте 1 января года и день недели:
(Поскольку 1 января установлено в субботу, 1 марта – в среду. Чтобы упростить алгоритм, этот алгоритм использует “неделю” в качестве единицы расчета. А 1 марта выбран в качестве базового месяца.
Каждые 4 года (3 обычных года + 1 високосный год) 208 недель + 5 дней = 208 * 7 + 5 = 1461
100 * за 100 лет (208 недель + 5 дней) -1 день = 5217 недель + 5 дней (все 100 лет временно устанавливаются как нормальный год)
Каждые 400 лет, всего 4 * (5217 недель + 5 дней) + 1 день (полные 400 лет прыжка) = 20871 неделя + 0 дней
– это 400 лет реинкарнации! )
long int getyear(int year,int month){
if (month <3) return year-1; // На основе марта первого года
else return year;
}
long int getmonth(int month){
if (month <3) return month + 13; // настроить месяц на следующий месяц
else return month+1;
}
long int getday(int year,int month,int day){
return 1461L * getyear (год, месяц) / 4 + 153L * getmonth (месяц) / 5 + день; // Подсчитать количество дней с 1 марта первого года
// Метод расчета: 1461 день каждые четыре года (эквивалентно вычислению среднего количества дней в году)
// Период 153 дня каждые пять месяцев (эквивалентно вычислению среднего количества дней в месяце)
}
int getweekday(int year,int month,int day){
return (int) ((getday (year, month, day)% 7-2 + 7)% 7); // Получить номер недели для даты
// Делим полученное количество дней на остаток 7 дней, минус среда, 1 марта, а остальные - дополнительные вычисления, которые гарантируют положительное число 1-7
}
Определите, является ли это високосным годом:
leap= year%4==0 && year%100||year%400==0 ;
Оставьте календарь пустым:
for(i=0;i<12;i++)
for(j=0;j<6;j++)
for(k=0;k<7;k++)
date[i][j][k]=0;
Введите дату года:
sw=getweekday(year,1,1);
for(i=0;i<12;i++)
for(wd=0,day=1; day <= calendar[leap][i]; day++){
date[i][wd][sw]=day;
sw = ++sw%7;
if(sw==0)
wd++;
}
Форматированный вывод:
printf("n|==================The Calendar of Year %d =====================|n|",year);
for(i=0;i<6;i++){
for(wd=0,k=0;k<7;k++)
wd+=date[i][5][k]+date[i+6][5][k];
wd=wd?6:5;
printf("%2d %s %2d %s |n|",i+1,title,i+7,title);
for(j=0;j<wd;j++){
printf(" ");
for(k=0;k<7;k++)
if(date[i][j][k])
printf("%4d",date[i][j][k]);
else printf(" ");
printf(" ");
for(k=0;k<7;k++)
if(date[i+6][j][k])
printf("%4d",date[i+6][j][k]);
else printf(" ");
printf(" |n|");
}
scanf("%*c");
}
puts("=================================================================|");
puts("n Press any key to quit...");
Результат
Полный код:
#include "stdio.h"
long int getyear(int year,int month){
if(month<3) return year-1;
else return year;
}
long int getmonth(int month){
if(month<3) return month+13;
else return month+1;
}
long int getday(int year,int month,int day){
return 1461L*f(year,month)/4+153L*g(month)/5+day;
}
int getweekday(int year,int month,int day){
return(int)((n(year,month,day)%7-2+7)%7);
}
int date[12][6][7];
int calender[ ][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
main()
{int sw,leap,i,j,k,wd,day;
int year;
char title[]="SUN MON TUE WED THU FRI SAT";
printf("Please input the year whose calendar you want to know: ");
scanf("%d%*c",&year);
sw=w(year,1,1);
leap=year%4==0&&year%100||year%400==0;
for(i=0;i<12;i++)
for(j=0;j<6;j++)
for(k=0;k<7;k++)
date[i][j][k]=0;
for(i=0;i<12;i++)
for(wd=0,day=1;day<=day_tbl[leap][i];day++){
date[i][wd][sw]=day;
sw=++sw%7;
if(sw==0) wd++;
}
printf("n|==================The Calendar of Year %d =====================|n|",year);
for(i=0;i<6;i++){
for(wd=0,k=0;k<7;k++)
wd+=date[i][5][k]+date[i+6][5][k];
wd=wd?6:5;
printf("%2d %s %2d %s |n|",i+1,title,i+7,title);
for(j=0;j<wd;j++)
{
printf(" ");
for(k=0;k<7;k++)
if(date[i][j][k])
printf("%4d",date[i][j][k]);
else printf(" ");
printf(" ");
for(k=0;k<7;k++)
if(date[i+6][j][k])
printf("%4d",date[i+6][j][k]);
else printf(" ");
printf(" |n|");
}
scanf("%*c");
}
puts("=================================================================|");
puts("n Press any key to quit...");
}
Одна из первых программ, которую можно попробовать написать на Python — это календарь. Она не сложная, но при всем при этом, с её помощью можно потренировать навыки работы со стандартными библиотеками Tkinter и calendar.
Описание программы
Календарь написан на Python 3 с помощью графической библиотеки Tkinter. Для определения текущего дня недели и количества дней в месяце использовалась стандартная библиотека calendar. Будем отображать календарь на текущий месяц в виде таблицы. Текущую дату выделим зелёным цветом. Также добавим кнопки для перелистывания месяцев.
Подключение библиотек и объявление переменных
Подключаем стандартные библиотеки Tkinter, datetime и calendar с помощью import. Инициализируем класс root, с помощью которого будет отрисовываться графический интерфейс. Задаем заголовок окна «Calendar». Объявляем пустой список days
. В дальнейшем в нем будут храниться поля таблицы. Каждое такое поле соответствует определенному дню.
В переменную now будем хранить текущую дату. В переменных year
и month
будут храниться год и месяц, календарь которых в данный момент отображается.
from tkinter import * import calendar import datetime root = Tk() root.title('Calendar') days = [] now = datetime.datetime.now() year = now.year month = now.month
Меняем текущий месяц
Функции prew
и next
будут вызываться при нажатии на одну из клавиш смены месяца. Если текущее значение месяца «январь» и пользователь нажмет на кнопку перехода на предыдущий месяц, то тогда уменьшится год и месяц поменяет значение на «декабрь».
Обратите внимание на то, что переменные month
и year
глобальные. Поэтому перед изменением их значения в функции необходимо использовать ключевое слово global
.
Функция fill
перерисовывает календарь.
def prew(): global month, year month -= 1 if month == 0: month = 12 year -= 1 fill() def next(): global month, year month += 1 if month == 13: month = 1 year += 1 fill()
Перерисовка календаря
В функции fill
будет перерисовываться отображение всех элементов. Она будет вызываться в начале работы программы и каждый раз после изменения месяца, для которого нужно вывести календарь.
Вначале выводим наименование месяца и год. Вычисляем количество дней в предыдущем месяце и записываем в переменную prew_month_days
. В переменноу week_day
запишем номер дня недели первого числа месяца (от 0 – если первое число выпадет на понедельник, до 6 — на воскресенье).
После этого в трех циклах выводим числа и их корректируем их цвета:
- В первом цикле заполняем номера дней выбранного месяца. Отображать будем их черным цветом. Если это текущий день, то его фон делаем зелёным.
- Во втором цикле заполняем числа предыдущего месяца. Они отображаться будут серым цветом.
- В третьем цикле добавляем числа следующего месяца. Их также выводим серым цветом.
def fill(): info_label['text'] = calendar.month_name[month] + ', ' + str(year) month_days = calendar.monthrange(year, month)[1] if month == 1: prew_month_days = calendar.monthrange(year-1, 12)[1] else: prew_month_days = calendar.monthrange(year, month - 1)[1] week_day = calendar.monthrange(year, month)[0] for n in range(month_days): days[n + week_day]['text'] = n+1 days[n + week_day]['fg'] = 'black' if year == now.year and month == now.month and n == now.day: days[n + week_day]['background'] = 'green' else: days[n + week_day]['background'] = 'lightgray' for n in range(week_day): days[week_day - n - 1]['text'] = prew_month_days - n days[week_day - n - 1]['fg'] = 'gray' days[week_day - n - 1]['background'] = '#f3f3f3' for n in range(6*7 - month_days - week_day): days[week_day + month_days + n]['text'] = n+1 days[week_day + month_days + n]['fg'] = 'gray' days[week_day + month_days + n]['background'] = '#f3f3f3'
Отображение элементов
Для отображения календаря в Python 3 мы используем библиотеку Tkinter. Воспользуемся её упаковщиком grid
. Он представит все создаваемые нами элементы в виде таблицы.
В первой строке в крайней левой и крайней правой ячейках (с номерами столбцов 0 и 6) отобразим кнопки смены месяцев. По центру выведем текстовое поле, в котором будет отображаться текущий год и месяц. Это поле будет занимать 5 ячеек таблицы, поэтому выставим параметр columnspan
в 5.
prew_button = Button(root, text='<', command=prew) prew_button.grid(row=0, column=0, sticky='nsew') next_button = Button(root, text='>', command=next) next_button.grid(row=0, column=6, sticky='nsew') info_label = Label(root, text='0', width=1, height=1, font=('Verdana', 16, 'bold'), fg='blue') info_label.grid(row=0, column=1, columnspan=5, sticky='nsew')
Во второй строке выведем сокращенные названия месяцев.
Дальше отображаем 6 строк по 7 столбцов, которые будем заполнять числами, обозначающими номера дней.
В завершении используем функцию fill
, которая заполнит наш календарь начальными данными – календарем текущего месяца. После этого запустим цикл обработки событий mainloop
.
for n in range(7): lbl = Label(root, text=calendar.day_abbr[n], width=1, height=1, font=('Verdana', 10, 'normal'), fg='darkblue') lbl.grid(row=1, column=n, sticky='nsew') for row in range(6): for col in range(7): lbl = Label(root, text='0', width=4, height=2, font=('Verdana', 16, 'bold')) lbl.grid(row=row+2, column=col, sticky='nsew') days.append(lbl) fill() root.mainloop()
Пример программы на Python 3 для вывода календаря с помощью библиотеки Tkinter достаточно прост. Он поможет программистам в изучении языка. Здесь у нас представлены различные условные операторы и циклы, работа с глобальными переменными в функциях. Самое сложное в этом примере – это отображение графических элементов.
Пример можно усложнить и выводить календарь сразу на весь год. Для этого надо будет использовать классы.
Приветствую всех посетителей!
Если раньше приходилось использовать стандартные календари, то с развитием компьютерной техники — календарь можно сделать свой, с нужными праздниками (например, отметить на нем дни рождения родственников, юбилеи и торжества), своим оформлением и размером и пр. 👌
В общем, сделать всё так, как нужно именно вам (чтобы ничего не забыть и вовремя всех поздравить!). Согласитесь, удобно было бы заранее знать, где и какие праздники, и планы вас ожидают?!
Вообще, способов, чтобы сделать свой календарь, достаточно много, и не каждый из них подойдет для человека, слабо разбирающегося в ПК. В этой статье приведу несколько пошаговых инструкций (в разных программах) для создания своего красочного календаря (думаю, что разберется каждый, кто того захочет).
*
Свой календарь! // Пример того, что мы будем делать (разумеется, фото можно будет загрузить своё, и праздники отметить те, которые вам нужны!)
*
👉 В тему!
Вместе с календарем можно подготовить и сделать красочный коллаж (это весьма хороший и памятный подарок!).
*
С помощью программы «Дизайн Календарей»
Официальный сайт: http://fotocalendar.su/
Удобнейшая программа для того, чтобы “состряпать” календарь под себя. Посудите сами:
- вам доступны самые разные форматы календарей: карманные, перекидные, настольные. Временной интервал также настраивается: на месяц, на год, квартал;
- в программе десятки самых разнообразных шаблонов: каждый шаблон можно доработать под свои требования;
- вы можете добавить в календарь любые свои даты: дни рождения, отпуска, важные события в жизни. Каждую такую дату можно выделить особым цветом, и даже картинкой;
- печатать календари можно на бумаге различных форматов (поддерживаются практически все типы принтеров).
Пожалуй, единственный минус — это в бесплатной версии есть проблема с сохранением в некоторых форматов. Подводя итог, в целом для решения нашей задачи — программа незаменима, и является одной из лучших в своем роде.
*
Рассмотрю подробно, как в ней сделать свой календарь:
- После установки и запуска программы, вы увидите окно приветствия с возможностью начать либо новый проект, либо открыть уже готовый. В своем примере выберу новый.
Новый проект
- Далее нужно выбрать тип календаря. В общем-то, здесь приведены все типы, которые только могут понадобиться: настенные календари (одни из самых популярных), настольные, карманные, на один месяц, на 12 месяцев, календарь с нуля. Для примера — выбрал вариант настенного календаря.
Настенные календари
- Затем пред вами предстанут десятки всевозможных шаблонов: зеленые, синий, светлые, темные, с природой, с животными, старинные и т.д., и т.п. В общем-то, нужно выбрать один из предложенных вариантов — здесь не советую (как известно: “на вкус и цвет – товарищей нет…”).
Выбор шаблона для календаря
- Следующий шаг: выбор фото для календаря. Здесь можно поставить фотку своего домашнего любимца, семейную фотографию, природу и т.д.
Выбор фото
- Затем нужно установить год календаря (с какой даты начинать отсчет — кстати, совсем не обязательно именно с нового года) и установить формат листа (по умолчанию – стоит обычный А4). После установки — нажать кнопку “готово”.
Выбор года и формата листа
- Собственно, Ваш календарь готов! Дело осталось за малым: настроить еще некоторые моменты, которые были обещаны в начале статьи 😎.
Свой календарь!
- Выбор праздников. Для этого нужно открыть раздел “Праздники” в верхнем меню программы отметить галочками, какие из праздников показывать на календаре. Например, вы можете показывать не только официальные праздничные дни, но и православные праздники
Какие праздники показывать
- Настойка оформления. Если календарь нуждается в доработке — вы всегда можете добавить нужные вам надписи, выделить любые из дат, настроить, например, лунный календарь, добавить страничку и пр. Для этого используйте раздел настроек “Календарь”.
Настойка оформления
- Раздел “Добавить” поможет вам добавить надпись, логотип, коллаж, фото на ваш календарь. Пример приведен на скрине ниже.
Что еще можно добавить на календарь
В общем-то, хороший и относительно простой способ создания красочных и ярких календарей (на мой взгляд 👌).
*
В Microsoft Word и Excel
Word и Excel есть на каждом втором домашнем компьютере — а значит, что сей способ будет актуален и востребован. К тому же календарь можно сделать быстро, не скачивая и не устанавливая дополнительного софта.
Рассмотрю ниже все действия по шагам на примере Word, Excel 2016/2019 (дабы их не так уж и много ✌).
*
👉 В помощь!
Бесплатные аналоги Word и Excel — см. мою подборку
*
👉 Word
- Сначала открываете меню “Файл/Создать”, затем выбираете понравившейся шаблон календаря (если у вас есть доступ к интернету — нажмите по ссылке “Календари” (выделена прямоугольником красного цвета на скрине ниже)).
Создать – календарь
- В интернете есть десятки самых разнообразных шаблонов календарей: годовых, месячных, личных, бизнес-календари и т.д. (см. скрин ниже 👇);
Категории шаблонов календаря
- Выбрав понравившейся шаблон, вам останется только доработать его под себя. Например, я выбрал простенький календарь, в который нужно вставить свой логотип и указать свои контакты (телефон, почта и пр.).
Вставка логотипа
- В общем-то, на этом создание календаря завершено…
Простенький календарь готов
- Пожалуй, единственный недостаток — это проблема со старыми шаблонами. Если вы взяли шаблон не того года, придется покопаться в настройках (перенести календарь в Excel и с помощью формул поправить его). На мой взгляд, в этом случае, быстрее будет сделать календарь полностью в Excel (об этом пару строк ниже в статье).
*
👉 Excel
- Запускаем Excel и в первом окне нажимаем по ссылке “Календари“ (необходимо подключение к интернету). Так же вызвать этот экран можно сочетанием кнопок Ctrl+O (т.е. открыть/создать).
Excel – календари
- Далее, среди сотни шаблонов календарей находим тот, который по душе. Например, я свой выбор остановил на календаре с символами восточного гороскопа. Чтобы загрузить шаблон к себе — нажмите всего одну кнопку “Создать”.
Выбранный календарь
- Ну и последнее, что осталось — это указать нужный вам год. Чем хорош Excel — тем, что он автоматически пересчитает ваш календарь и поставит числа и дни так, как они должны идти в выбранном вами году. Вам же останется пометить вручную для себя нужные даты, указать контакты на календаре (если нужно) и распечатать его.
Указываем нужный год
*
Онлайн-способ создания календаря
В сети сейчас есть десятки разнообразных сайтов по созданию самых разных календариков. Приведу несколько примеров, на которых остановился сам…
❶
http://calendarum.ru/
Выбор шаблона (онлайн)
Простенький сайт для создания календарика, визитки, конвертика. Пользоваться им очень удобно: все делается по шагам, все на русском языке. Сервис поддерживает картинки формата JPG и PNG, присутствует коллекция готовых шаблонов, красивые шрифты и пр. В общем-то, удобно, быстро, красиво!
❷
https://www.canva.com
Выбор шаблона для календаря (Canva) | Кликабельно
Этот сайт примечателен тем, что вы можете выбрать тему и шаблон календарика (например, какой-нибудь праздник 23 февраля, 8 марта и др.), затем загрузить в него свое фото, и скачать его к себе. Отмечу, что любой из шаблонов можно достаточно сильно изменить: добавить текст, поменять фон, изменить какие-то элементы.
Ну а затем, распечатав такой календарь — он станет отличным и оригинальным подарком.
Кстати, ваша загруженная фотография будет автоматически обработана нужными фильтрами и аккуратно вписана в цветовую гамму выбранного шаблона.
*
В общем-то, таких сайтов очень много, и на всех на них останавливаться не буду…
Удачи!
👋
Первая публикация: 14.05.2017
Корректировка: 1.12.2020
Полезный софт:
- Видео-Монтаж
Отличное ПО для создания своих первых видеороликов (все действия идут по шагам!).
Видео сделает даже новичок!
- Ускоритель компьютера
Программа для очистки Windows от “мусора” (удаляет временные файлы, ускоряет систему, оптимизирует реестр).
/*
Написать программу формирования календаря для любого года начиная с 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(); //Закроем файл
}