#include <iostream>
#include <iomanip>
#include <ctime>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
std::vector<int> getdataday( int month ) {
std::vector<int> vec;
switch(month)
{
case 1:
vec.push_back(14);
vec.push_back(17);
vec.push_back(18);
vec.push_back(20);
break;
case 2:
vec.push_back(11);
vec.push_back(15);
vec.push_back(17);
break;
case 3:
vec.push_back(30);
break;
case 4:
vec.push_back(17);
vec.push_back(19);
vec.push_back(25);
break;
case 5:
vec.push_back(4);
vec.push_back(7);
vec.push_back(9);
vec.push_back(18);
break;
case 6:
vec.push_back(2);
vec.push_back(9);
vec.push_back(23);
vec.push_back(24);
vec.push_back(25);
break;
case 7:
vec.push_back(21);
break;
case 8:
vec.push_back(28);
vec.push_back(29);
vec.push_back(31);
break;
case 9:
vec.push_back(3);
vec.push_back(13);
vec.push_back(20);
break;
case 10:
vec.push_back(1);
vec.push_back(3);
break;
case 11:
vec.push_back(1);
vec.push_back(14);
vec.push_back(20);
vec.push_back(23);
break;
case 12:
vec.push_back(13);
vec.push_back(15);
break;
default:
break;
}
return vec;
}
std::string getdatamonth( int day, int month, int year ) {
std::string str = "";
switch(month)
{
case 1:
str += "14 родился Семен Фролов " + std::to_string(year - 1998) + " лет назад";
if (day == 14) str += "!!!";
str += "\n";
str += "14 родилась Любовь Клюшникова " + std::to_string(year - 1947) + " лет назад";
if (day == 14) str += "!!!";
str += "\n";
str += "17 родилась Виктория Шефер " + std::to_string(year - 1976) + " лет назад";
if (day == 17) str += "!!!";
str += "\n";
str += "18 родилась Елена Солодовникова " + std::to_string(year - 1970) + " лет назад";
if (day == 18) str += "!!!";
str += "\n";
str += "20 родилась Татьяна Каверина " + std::to_string(year - 1976) + " лет назад";
if (day == 20) str += "!!!";
str += "\n";
break;
case 2:
str += "11 родилась Инна Фролова " + std::to_string(year - 1970) + " лет назад";
if (day == 11) str += "!!!";
str += "\n";
str += "15 родилась Тамара Артюшкина " + std::to_string(year - 1952) + " лет назад";
if (day == 15) str += "!!!";
str += "\n";
str += "17 родился Сергей Солодовников " + std::to_string(year - 1998) + " лет назад";
if (day == 17) str += "!!!";
str += "\n";
break;
case 3:
str += "30 родился Евгений Солодовников " + std::to_string(year - 1973) + " лет назад";
if (day == 30) str += "!!!";
str += "\n";
break;
case 4:
str += "17 родился Сергей Солодовников " + std::to_string(year - 1969) + " лет назад";
if (day == 17) str += "!!!";
str += "\n";
str += "19 родилась Лидия Фролова " + std::to_string(year - 1946) + " лет назад";
if (day == 19) str += "!!!";
str += "\n";
str += "25 родился Иван Фролов " + std::to_string(year - 2001) + " лет назад";
if (day == 25) str += "!!!";
str += "\n";
break;
case 5:
str += "4 родилась Надежда Солодовникова " + std::to_string(year - 1976) + " лет назад";
if (day == 4) str += "!!!";
str += "\n";
str += "7 родился Сергей Напреев " + std::to_string(year - 1972) + " лет назад";
if (day == 7) str += "!!!";
str += "\n";
str += "9 родилась Александра Каверина " + std::to_string(year - 2003) + " лет назад";
if (day == 9) str += "!!!";
str += "\n";
str += "18 родился Антон Фролов " + std::to_string(year - 2009) + " лет назад";
if (day == 18) str += "!!!";
str += "\n";
break;
case 6:
str += "2 родилась Ольга Неустроева " + std::to_string(year - 1987) + " лет назад";
if (day == 2) str += "!!!";
str += "\n";
str += "9 родилась Елена Сахоненко " + std::to_string(year - 1968) + " лет назад";
if (day == 9) str += "!!!";
str += "\n";
str += "23 родился Андрей Фролов " + std::to_string(year - 1969) + " лет назад";
if (day == 23) str += "!!!";
str += "\n";
str += "24 родилась Юлия Лиханова " + std::to_string(year - 1980) + " лет назад";
if (day == 24) str += "!!!";
str += "\n";
str += "25 родилась Татьяна Карасева " + std::to_string(year - 1973) + " лет назад";
if (day == 25) str += "!!!";
str += "\n";
break;
case 7:
str += "21 родился Юрий Королев " + std::to_string(year - 1973) + " лет назад";
if (day == 21) str += "!!!";
str += "\n";
break;
case 8:
str += "28 родилась Валентина Рогозина " + std::to_string(year - 1969) + " лет назад";
if (day == 28) str += "!!!";
str += "\n";
str += "29 родился Александр Клюшников " + std::to_string(year - 1949) + " лет назад";
if (day == 29) str += "!!!";
str += "\n";
str += "31 родилась Марина Фролова " + std::to_string(year - 1968) + " лет назад";
if (day == 31) str += "!!!";
str += "\n";
break;
case 9:
str += "3 родился Александр Фролов " + std::to_string(year - 1971) + " лет назад";
if (day == 3) str += "!!!";
str += "\n";
str += "13 родилась Светлана Неустроева " + std::to_string(year - 1992) + " лет назад";
if (day == 13) str += "!!!";
str += "\n";
str += "20 родился Александр Рагозин " + std::to_string(year - 1992) + " лет назад";
if (day == 20) str += "!!!";
str += "\n";
break;
case 10:
str += "1 родилась Елена Сабанина " + std::to_string(year - 1973) + " лет назад";
if (day == 1) str += "!!!";
str += "\n";
str += "3 родилась Марьям Дербеденева " + std::to_string(year - 2000) + " лет назад";
if (day == 3) str += "!!!";
str += "\n";
break;
case 11:
str += "1 родилась Анастасия Солодовникова " + std::to_string(year - 1990) + " лет назад";
if (day == 1) str += "!!!";
str += "\n";
str += "14 родился Максим Шефер " + std::to_string(year - 2009) + " лет назад";
if (day == 14) str += "!!!";
str += "\n";
str += "20 родился Степан Солодовников " + std::to_string(year - 2007) + " лет назад";
if (day == 20) str += "!!!";
str += "\n";
str += "23 родилась София Фролова " + std::to_string(year - 1994) + " лет назад";
if (day == 23) str += "!!!";
str += "\n";
break;
case 12:
str += "13 родилась Валентина Солодовникова "+ std::to_string(year - 1943) + " лет назад";
if (day == 13) str += "!!!";
str += "\n";
str += "15 родился Евгений Напреев " + std::to_string(year - 2008) + " лет назад";
if (day == 15) str += "!!!";
str += "\n";
break;
default:
str += "";
break;
}
return str;
}
int main() {
setlocale(LC_ALL, "Russian");
/*
std::string line;
std::ifstream in("data.txt"); // окрываем файл для чтения
if (in.is_open())
{
while (std::getline(in, line))
{
std::cout << line << std::endl;
}
}
in.close(); // закрываем файл
*/
const int MAXLEN = 80;
char s[MAXLEN];
time_t tm = time(0);
strftime(s, MAXLEN, "%m", localtime(&tm));
int month = atoi( s );
strftime(s, MAXLEN, "%d", localtime(&tm));
int day = atoi( s );
strftime(s, MAXLEN, "%Y", localtime(&tm));
int year = atoi( s );
cout << " —------------------------------" << endl;
cout << " Календарь - " << year << endl;
cout << " —------------------------------" << endl << endl;
string monthsList[12] = {"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"};
int mDays [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/*
1) Определим номер дня недели, где:
0 - Понедельник
1 - Вторник
2 - Среда
3 - Четверг
4 - Пятница
5 - Суббота
6 - Воскресенье
*/
int days;
int current;
static int t[] = {6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
int y = year%100;
current = y/12 + y%12 + y%12/4 + t[month-1] + (20-year/100);
if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month <= 2) current--;
current = current%7;
/*
2) Проверка на високосность начиная с нулевого месяца:
0 - январь
...
11 - декабрь
*/
if( month == 2 ) // 1 - это февраль месяц, так как счёт начинается с 0.
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
days = 29; // Если високосный
else
days = mDays[month - 1];
else
days = mDays[month - 1];
/*
3) Выводим сам календарь
*/
cout << endl << " —----------" << monthsList[month - 1] << "-------------" << endl;
cout << " Пн" << " Вт" << " Ср" << " Чт" << " Пт" << " Сб" << " Вс" << endl;
/*
4) Вводим доп. переменные k и j:
k - количество дней в неделе от 0 до 6 (0 - ПН; 6 - ВС)
j - количество дней в месяце (от 1 до общего в месяце)
*/
int k;
std::vector<int> vec = getdataday(month);
for (k = 0; k < current; k++) cout << " ";
for (int j = 1; j <= days; j++) {
k++;
bool flag = true;
if (j == day) {
if (j < 10) cout << " " << "{" << j << "}"; else cout << " " << "{" << j << "}";
flag = false;
}
for (int i = 0; i <= vec.size(); i++) if ((j == vec[i])&&(flag)) {
if (j < 10) cout << " " << "[" << j << "]"; else cout << " " << "[" << j << "]";
flag = false;
}
if (flag) {
if (j < 10) cout << " " << j << " "; else cout << " " << j << " ";
}
if (k > 6)
{
k = 0;
cout << endl;
}
if (k)
{
current = k;
}
}
cout << endl;
cout << getdatamonth(day,month,year);
return 0;
}