额外:星期计算小程序

今天没做什么好题,分享一个我曾经做过的计算日期的小程序。

// 额外3.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

int totalDays(int year, int month, int day)
{
    int a;//当年已过的天数
    int leapYear = year / 4 - year / 100 + year / 400;//闰年的总数
    switch (month)
    {
    case 1:
        a = 0;
        break;
    case 2:
        a = 31;
        break;
    case 3:
        a = 31 + 28;//总感觉应该根据是不是闰年而判断加28还是29,但是程序输出总是正确的,不知道这是不是一个bug。
        break;
    case 4:
        a = 31 + 28 + 31;
        break;
    case 5:
        a = 31 + 28 + 31 + 30;
        break;
    case 6:
        a = 31 + 28 + 31 + 30 + 31;
        break;
    case 7:
        a = 31 + 28 + 31 + 30 + 31 + 30;
        break;
    case 8:
        a = 31 + 28 + 31 + 30 + 31 + 30 + 31;
        break;
    case 9:
        a = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
        break;
    case 10:
        a = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
        break;
    case 11:
        a = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
        break;
    case 12:
        a = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
        break;
    }
    return 365 * (year - 2 - leapYear) + leapYear*366 + a + day;//从公元1年1月1日到现在的天数
    /*减2是因为,已经过去的年没有公元0年,且也不包括用户输入的年份。减去闰年数量是因为闰年单算(乘以366)。所以,“year-2-leapYear”就是平年年数。变量a存储了用户输入年份
    之前,当年已经过的月份的天数*/
}
int main()
{
    int year, month, day,total;
    std::cout << "请输入年份:";
    std::cin >> year;
    std::cout << "请输入月份:";
    std::cin >> month;
    std::cout << "请输入日期:";
    std::cin >> day;
    switch (month)//检查输入月份是否存在,或与日期是否匹配
    {
    case 1:
        if (day > 31)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 2:
        if (year % 4 == 0)//闰年情况
        {
            if (day > 29) 
            {
                std::cout << "日期错误!";
                system("pause");
                return 1;
            }
        }
        else //平年情况
        {
            if(day>28)
            {
                std::cout << "日期错误!";
                system("pause");
                return 1;
            }
        }
        break;
    case 3:
        if(day>31)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 4:
        if (day > 30)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 5:
        if(day>31)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 6:
        if(day>30)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 7:
        if(day>31)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 8:
        if(day>31)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 9:
        if(day>30)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 10:
        if(day>31)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 11:
        if(day>30)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    case 12:
        if(day>31)
        {
            std::cout << "日期错误!";
            system("pause");
            return 1;
        }
        break;
    default:
        std::cout << "日期错误!";
        system("pause");
        return 1;
    }
    total = totalDays(year, month, day);//从公元1年1月1日到现在的总天数
    std::cout << "这个日期的星期是:";
    int b = total % 7;//根据总天数除以7后的余数判断星期(公元1年1月1日是星期一)
    switch (b)
    {
    case 0:
        std::cout << "";
        break;
    case 1:
        std::cout << "";
        break;
    case 2:
        std::cout << "";
        break;
    case 3:
        std::cout << "";
        break;
    case 4:
        std::cout << "";
        break;
    case 5:
        std::cout << "";
        break;
    case 6:
        std::cout << "";
        break;
    }
    std::cout<<"\n";
    system("pause");
    return 0;
}

// return 0表示程序正常返回,back=true表示程序异常返回。
//
// Copyright JiangYueChen 2018   All Rights Reserved.
//

猜你喜欢

转载自www.cnblogs.com/jiangyuechen/p/12237114.html