Задача: Формирование календаря для любого года

  • Автор темы DeNN
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

DeNN

#1
Написать программу формирования календаря для любого года начиная с 1900 года.(1 января 1900 года - понедельник).Результатом работы программы должен быть текстовый файл, содержащий календарь в привычном для пользователя виде, что позволит просматривать его и получать копии, не прибегая к новым запускам программы.


Собственно вот задача....а вот как с файлом работать чёт не догоняю
Помогите в решении...
 

lazybiz

Well-known member
03.11.2010
1 339
0
#3
DeNN
Пример календаря в текстовом виде, пожалуйста.
 
D

DeNN

#4
А как сформировать календарь значит знаете?
Честно говоря в голове всегда понятней чем на языке С:welcome:
вот....не могли бы вы мне помочь?

Добавлено: Январь
ПН ВТ СР ЧТ ПТ СБ ВС
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 25 27 28
29 30 31
и так далее весь год
 
D

DeNN

#6
DeNN
Наброски есть? Хоть что-нибудь?
Признаться особых набросков нет....
Да и не хочется как то всё на халяву...
вы можете мне помочь с началом....если вам не трудно....
только можно не за мудреное начало, а то я дилетант в этом деле ещё...и могу не понять:welcome:
 

lazybiz

Well-known member
03.11.2010
1 339
0
#7
DeNN
Не уходи далеко.

Добавлено: DeNN
Нужно вводить только год? Я правильно понял!?
 

DarkKnight

Well-known member
01.08.2010
653
0
#9
Использовал интернациональный (компьютерный) формат дней недели (с Вс по Сб)..
Посчитал что под нашу Россию матушку форматировать не нужно, если захочешь сделаешь уже сам, там от 1-до 3х строчек добавить нужно :)

C++:
/*
Написать программу формирования календаря для любого года начиная с 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(); //Закроем файл

}
Добавлено: Намного более интересная реализация получится например если месяца идут не сверху вниз, а 3x3....
Если делать ее конечно без учетов координат консоли, но это уже другое задание и усилий приложить нужно в раз 5 больше, а то и больше.. :)
 

Вложения

Статус
Закрыто для дальнейших ответов.