已知1800年1月1日是星期三,打印指定的年份和月份月历

#ifndef CALENDAR_H_
#define CALENDAR_H_

#include <string>
#include <iostream>
#include <stdio.h>

void showCalendar(int year, int month);
void showHead(int year, int month);
void showBody(int year, int month);
std::string month_number_toString(int month);
int getFirstDayOfMonth(int year, int month);
int getMonthDays(int year, int month);
bool isLeapYear(int year);

void showCalendar(int year, int month)
{

    showHead(year, month);
    showBody(year, month);
    std::cout << "\n-----------------------------------\n";
}

void showHead(int year, int month)
{
    std::cout << "           ";
    std::cout << month_number_toString(month) << " " << year << std::endl;
    std::cout << "-----------------------------------\n";
    std::cout << " Sun  Mon  Tue  Wed  Thu  Fri  Sat\n";
}

void showBody(int year, int month)
{
    int firstDay = getFirstDayOfMonth(year, month);
    int i = 0;
    int monthDays = getMonthDays(year, month);
    for (i = 0; i < firstDay; i++)
    {
        std::cout << "     ";
    }
    for (i = 1; i <= monthDays; i++)
    {
        printf(" %-3d ", i);
        if((firstDay + i) % 7 == 0)
            std::cout << std::endl;
    }
}

std::string month_number_toString(int month)
{
    std::string ret;
    switch (month)
    {
    case 1:        ret = "January";    break;
    case 2:        ret = "February";    break;
    case 3:        ret = "March";        break;
    case 4:        ret = "April";        break;
    case 5:        ret = "May";        break;
    case 6:        ret = "June";        break;
    case 7:        ret = "July";        break;
    case 8:        ret = "August";        break;
    case 9:        ret = "September";    break;
    case 10:    ret = "October";    break;
    case 11:    ret = "November";    break;
    case 12:    ret = "December";    break;
    default:    ret = "ErrorMonth";
    }
    return ret;
}

int getFirstDayOfMonth(int year, int month)
{
    int totalDays = 0;
    for (int i = 1800; i < year; i++)
        totalDays += isLeapYear(i) ? 366 : 365;
    for (int i = 1; i < month; i++)
        totalDays += getMonthDays(year, i);
    return (totalDays + 3) % 7;
}

int getMonthDays(int year, int month)
{
    int monthArray[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    return (month == 2 && isLeapYear(year)) ? 29 : monthArray[month - 1];
}

bool isLeapYear(int year)
{
    return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
}

#endif

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

int main()
{
    using namespace::std;
    int year, month;
    cout << "Enter full year (e.g., 2001): ";
    cin >> year;
    while (getchar() != ‘\n‘);
    cout << "Enter month in number between 1 and 12: ";
    cin >> month;
    showCalendar(year, month);
    return 0;
}

Enter full year (e.g., 2001): 2017
Enter month in number between 1 and 12: 6
           June 2017
-----------------------------------
 Sun  Mon  Tue  Wed  Thu  Fri  Sat
                     1    2    3
 4    5    6    7    8    9    10
 11   12   13   14   15   16   17
 18   19   20   21   22   23   24
 25   26   27   28   29   30
-----------------------------------
时间: 2024-11-29 09:29:44

已知1800年1月1日是星期三,打印指定的年份和月份月历的相关文章

2015年4月29日 dayofweek

#include <stdio.h>#include <stdlib.h>int DayofYear(int year, int month, int day);#define ISYEAR(year) (year%400==0) ||(year%4==0&&year%100!=0) int main(int argc, char *argv[]){/*已知1900年1月1日是星期一,输入一个年月日计算出来是星期几*/int year, month, day;cha

判断距离1970年1月1日的天数

#include <stdlib.h> /****************************************************************** 功能: 输入年月日,计算距离1970年1月1日的天数 输入: 年月日,输入年份范围[1970,2100],输入年月日的有效性需要判断 输出: DaysSince1970:距离1970年1月1日的天数 已知 1970年1月1日为星期四 异常时,输出不需要关注 返回: 1 上班 0 休假 -1 表示异常 根据国家规定:周一到

立法會五題:為自閉症和過度活躍症兒童提供的服務 2013年12月11日

立法會五題:為自閉症和過度活躍症兒童提供的服務*********************** 以下是今日(十二月十一日)在立法會會議上張國柱議員的提問和食物及衞生局局長高永文的答覆: 問題: 政府在二○一○至二○一一年度的<施政報告>中表示,將會在醫療.教育及學前服務等方面,加強為患有自閉症的兒童提供的服務,包括為他們的家長及照顧者提供有關自閉症的知識,以及擴大有關醫療服務的專業團隊.此外,政府在隨後發表的<財政預算案>中表示,每年會為額外約3 000名患有自閉症或過度活躍症的兒童

2015年7月8日 项目开发文档

日期 2015年7月8日 星期 星期三 位置 中蓝公寓蓝芳园D507 主要工作 1)         界面部分设计 2)         界面代码编写.界面图片.按钮PS工作 3)         服务器端部分代码编写 4)         客户端部分代码编写 遇到的问题 1)         将时间字符串转为JAVA自带的date类 2)         界面按钮PS出来的图片和界面的大小不合适 解决方法 1)         上网查询解决方法 2)         负责界面代码调整的同学和负

2015年7月15日 项目开发文档

日期 2015年7月15日 星期 星期三 位置 中蓝公寓蓝芳园D507 主要工作 1)         修改小错误 2)         将发送邮件功能添加到总程序中 3)         实现了多台机器远程通信功能 4)         对系统进行JUnit 5)         对系统进行人工手动测试 遇到的问题 1)         系统无法实现进行多台机器远程通信 2)         eclipse的JUnit和netbeans不一样,但之前只学习过eclipse的JUnit 3)  

06月19日【迅雷王】已更新可用迅雷会员114个

关注迅雷王迅雷王博客中的所有迅雷账号由Python程序自动验证可用后发送到Blog中供大家免费享用,如果很快被查封可以扫描微信二维码免费领取每日专享迅雷VIP账号! [迅雷王Blog]ID:xunleiaccount 按[Ctrl + D]收藏 [迅雷王]迅雷账号_迅雷王坚持在博客园至少每天更新10个可用迅雷账号!06月19日[迅雷王]已更新可用迅雷会员114个 [迅雷王迅雷钻石会员]81267[密码]size517984 [迅雷王迅雷钻石会员]tlxnvyw[密码]tlxnvyw:240735

抱团App iOS版1.6已于5月19日0点10分发布

抱团App iOS版1.6已于5月19日0点10分发布, App Store 下载地址:https://itunes.apple.com/cn/app/bao-tuan-tuan-gou-jing-pin/id789571099?ls=1&mt=8 欢迎各种吐槽,技术交流,等等. 抱团App iOS版1.6已于5月19日0点10分发布,布布扣,bubuko.com

06月20日【迅雷王】已更新可用迅雷会员80个

关注迅雷王迅雷王博客中的所有迅雷账号由Python程序自动验证可用后发送到Blog中供大家免费享用,如果很快被查封可以扫描微信二维码免费领取每日专享迅雷VIP账号! [迅雷王Blog]ID:xunleiaccount 按[Ctrl + D]收藏 [迅雷王]迅雷账号_迅雷王坚持在博客园至少每天更新10个可用迅雷账号!06月20日[迅雷王]已更新可用迅雷会员80个 [迅雷王迅雷钻石会员] 594cja:2 [密码] 046135 [迅雷王迅雷钻石会员]825270734:2[密码]9779959 [

06月19日【迅雷王】已更新最新迅雷会员57个

关注迅雷王迅雷王博客中的所有迅雷账号由Python程序自动验证成功后发送到Blog中供大家免费享用,如果很快被查封可以扫描微信二维码免费领取每日专享迅雷VIP账号! [迅雷王Blog]ID:xunleiaccount 按[Ctrl + D]收藏 [迅雷王]迅雷账号_迅雷王坚持在博客园至少每天更新10个最新可用的迅雷账号!06月19日[迅雷王]已更新最新迅雷会员57个 [迅雷王迅雷钻石会员]dyh780724:2[密码]5951533 [迅雷王迅雷钻石会员]838266065:2[密码]73373