Загрузка данных


#include <iostream>
#include <string>

using namespace std;

int main() {
    setlocale(LC_ALL, ""); // Корректная настройка русской локализации

    int monthNumber;
    int dayNumber;
    string monthName = "";

    // 1. Вывод меню и ввод месяца
    cout << "[*] Календарь" << endl;
    cout << "[1] Январь" << endl;
    cout << "[2] Февраль" << endl;
    cout << "[3] Март" << endl;
    cout << "[4] Апрель" << endl;
    cout << "[5] Май" << endl;
    cout << "[6] Июнь" << endl;
    cout << "[7] Июль" << endl;
    cout << "[8] Август" << endl;
    cout << "[9] Сентябрь" << endl;
    cout << "[10] Октябрь" << endl;
    cout << "[11] Ноябрь" << endl;
    cout << "[12] Декабрь" << endl;
    
    cout << "[*] Выберите месяц: ";
    cin >> monthNumber;

    // Проверяем корректность ввода месяца через switch (заменяет if)
    switch (monthNumber) {
        case 1: monthName = "января"; break;
        case 2: monthName = "февраля"; break;
        case 3: monthName = "марта"; break;
        case 4: monthName = "апреля"; break;
        case 5: monthName = "мая"; break;
        case 6: monthName = "июня"; break;
        case 7: monthName = "июля"; break;
        case 8: monthName = "августа"; break;
        case 9: monthName = "сентября"; break;
        case 10: monthName = "октября"; break;
        case 11: monthName = "ноября"; break;
        case 12: monthName = "декабря"; break;
        default:
            cout << "Ошибка: Неверный номер месяца!" << endl;
            return 0; // Завершаем программу при ошибке
    }

    // 2. Ввод дня месяца
    cout << "[*] Выберите день месяца: ";
    cin >> dayNumber;

    // Главная проверка дней для каждого месяца через вложенный switch
    switch (monthNumber) {
        case 1: // Январь (31 день)
        case 3: // Март (31 день)
        case 5: // Май (31 день)
        case 7: // Июль (31 день)
        case 8: // Август (31 день)
        case 10: // Октябрь (31 день)
        case 12: // Декабрь (31 день)
            switch (dayNumber) {
                // Группируем все валидные кейсы от 1 до 31
                case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10:
                case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20:
                case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30:
                case 31:
                    cout << "[*] Календарь: " << dayNumber << " " << monthName << "." << endl;
                    break;
                default:
                    cout << "Ошибка: В этом месяце нет такого дня!" << endl;
                    break;
            }
            break;

        case 4: // Апрель (30 дней)
        case 6: // Июнь (30 дней)
        case 9: // Сентябрь (30 дней)
        case 11: // Ноябрь (30 дней)
            switch (dayNumber) {
                case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10:
                case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20:
                case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30:
                    cout << "[*] Календарь: " << dayNumber << " " << monthName << "." << endl;
                    break;
                default:
                    cout << "Ошибка: В этом месяце нет такого дня!" << endl;
                    break;
            }
            break;

        case 2: // Февраль (28 дней, невисокосный по умолчанию)
            switch (dayNumber) {
                case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10:
                case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20:
                case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28:
                    cout << "[*] Календарь: " << dayNumber << " " << monthName << "." << endl;
                    break;
                default:
                    cout << "Ошибка: В феврале всего 28 дней!" << endl;
                    break;
            }
            break;

        default:
            cout << "Критическая ошибка программы." << endl;
            break;
    }

    return 0;
}