C++实现万年历源代码

下面为你详细讲解“C++实现万年历源代码”的完整攻略。

1. 需求分析

万年历是一款常用的日历工具,可以查询指定日期的日历信息。因此,我们需要实现以下几个功能:
1. 输入年份和月份,输出该月的日历
2. 根据当前时间自动输出当月的日历

2. 设计思路

我们可以根据闰年的规律和每月的天数,计算出一个月中每一天是星期几,并将这些天数以矩阵的形式输出。

3. 代码实现

下面为你提供一段C++代码,可以实现一个简单的万年历功能:

#include<iostream>
using namespace std;

int main()
{
    int month, year, daysInMonth;
    int weekDay=0;

    // 获取当前年份和月份
    time_t now = time(0);
    tm *local = localtime(&now);
    month = local->tm_mon + 1;
    year=local->tm_year + 1900;

    // 输入需要查询的年份和月份
    cout<<"Enter month (1-12): ";
    cin>>month;
    cout<<"Enter year (1900-2100): ";
    cin>>year;

    // 计算该月的天数
    switch(month)
    {
        case 1:
            cout<<"January "<<year<<endl;
            daysInMonth=31;
            break;
        case 2:
            cout<<"February "<<year<<endl;
            if((year%4==0 && year%100!=0) || (year%400==0))
                daysInMonth=29;
            else
                daysInMonth=28;
            break;
        case 3:
            cout<<"March "<<year<<endl;
            daysInMonth=31;
            break;
        case 4:
            cout<<"April "<<year<<endl;
            daysInMonth=30;
            break;
        case 5:
            cout<<"May "<<year<<endl;
            daysInMonth=31;
            break;
        case 6:
            cout<<"June "<<year<<endl;
            daysInMonth=30;
            break;
        case 7:
            cout<<"July "<<year<<endl;
            daysInMonth=31;
            break;
        case 8:
            cout<<"August "<<year<<endl;
            daysInMonth=31;
            break;
        case 9:
            cout<<"September "<<year<<endl;
            daysInMonth=30;
            break;
        case 10:
            cout<<"October "<<year<<endl;
            daysInMonth=31;
            break;
        case 11:
            cout<<"November "<<year<<endl;
            daysInMonth=30;
            break;
        case 12:
            cout<<"December "<<year<<endl;
            daysInMonth=31;
            break;
        default:
            cout<<"Invalid month";
            return 0;
    }

    // 计算该月1号是星期几
    tm time_in = { 0, 0, 0, 1, month-1, year - 1900 };
    time_t time_temp = mktime(&time_in);
    tm const *time_out = localtime(&time_temp);    
    weekDay = time_out->tm_wday;

    // 输出日历
    cout<<" Su  Mo  Tu  We  Th  Fr  Sa"<<endl;
    for(int i=0; i<weekDay; i++)
        cout<<"    ";
    for(int i=1; i<=daysInMonth; i++)
    {
        printf("%3d ", i);
        if(++weekDay>6)
        {
            weekDay=0;
            cout<<endl;
        }
    }
    if(weekDay)
        cout<<endl;

    return 0;
}

该程序首先获取当前的年份和月份,然后让用户输入需要查询的年份和月份,并根据闰年的规则计算该月的天数和1号是星期几。最后按星期排列输出该月的日历。

下面是两个示例:

示例1

如果用户输入的是2021年4月,程序会输出以下日历:

 April 2021
 Su  Mo  Tu  We  Th  Fr  Sa
                   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     

示例2

如果用户输入的是2024年2月,程序会输出以下日历:

February 2024
 Su  Mo  Tu  We  Th  Fr  Sa
               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           

4. 总结

本文为你提供了使用C++实现万年历的完整攻略,包括需求分析、设计思路和代码实现。同时,还给出了两个示例以说明该程序的功能。通过学习本文,你可以快速掌握如何使用C++实现万年历的功能,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现万年历源代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • C++实现编码转换的示例代码

    对于C++编码转换,通常使用的是C++11提供的codecvt头文件中的codecvt_utf8和codecvt_utf16模板类,这两个模板类可以帮助我们进行不同编码之间的转换。下面是一个完整的示例代码: #include <iostream> #include <locale> #include <codecvt> i…

    C 2023年5月24日
    00
  • CCleaner如何修复注册表 CCleaner修复注册表教程

    CCleaner如何修复注册表 CCleaner是一款功能丰富、广受用户欢迎的免费系统清理和优化工具,其中修复注册表功能可以清理无用的注册表项,帮助优化电脑性能。下面介绍CCleaner如何修复注册表。 步骤1:打开CCleaner 首先,下载并安装CCleaner软件,并打开该软件。 步骤2:选择注册表 点击左侧的“注册表”选项卡。(注:在使用注册表工具时…

    C 2023年5月23日
    00
  • JDK 7 新特性小结实例代码解析

    JDK 7 新特性小结实例代码解析 简介 JDK 7 是 Java Development Kit 的版本号,是 Java 的一个版本。JDK 7 主要添加了许多新特性,包括小型语言改进、文件访问/输入和输出的 I/O 改进、内部脚本引擎、实例创建类型推断、字符串开头的结尾和 switch 语句中的字符串变量、数字下划线等。本文将从例子出发,详细地介绍 JD…

    C 2023年5月23日
    00
  • C++如何实现二叉树链表

    C++可以通过定义结构体来表示二叉树链表节点,结构体中包含左右子节点指针和数据域。通过指针来实现二叉树的构建和遍历。 以下是具体的实现步骤: 1. 定义结构体 首先我们需要定义一个结构体来表示二叉树链表节点,结构体定义如下: struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNod…

    C 2023年5月23日
    00
  • html网页中使用希腊字母的方法

    要在HTML网页中使用希腊字母,可以使用HTML实体或Unicode字符。 使用HTML实体: 打开HTML编辑器或文本编辑器,并开始编写HTML文件。 需要使用希腊字母的地方,使用以下形式的HTML实体:&entity_name;,其中entity_name是预定义的实体名称。 接下来是几个常见的希腊字母实体: α: α β: &bet…

    C 2023年5月22日
    00
  • Win10错误代码0xc0000221怎么修复?Win10错误代码0xc0000221修复方法

    如果在启动Windows 10时出现错误代码0xc0000221,可能会使计算机无法正常启动操作系统。这通常是由于硬件或系统文件的损坏引起的。本文将详细介绍Win10错误代码0xc0000221的修复方法。 什么是Win10错误代码0xc0000221? Win10错误代码0xc0000221是一个启动错误代码,它意味着Windows 10无法加载关键的系统…

    C 2023年5月23日
    00
  • C语言大作业之图书管理系统的实现详程

    C语言大作业之图书管理系统的实现详程 概述 本文将详细讲解如何使用C语言编写一个简单的图书管理系统。该系统包含管理员和用户两种角色,主要实现以下功能:- 管理员:图书的添加、删除与修改- 用户:图书的查询、借阅、归还 系统设计 本系统由以下几个模块组成: main.c:主程序,实现系统的入口功能。 user.c:用户模块,实现用户相关的功能,如图书查询、借阅…

    C 2023年5月22日
    00
  • 基于c++ ege图形库实现五子棋游戏

    基于C++ ege图形库实现五子棋游戏攻略 五子棋游戏是一种非常经典的桌面游戏,为了帮助大家更好地了解如何使用C++ ege图形库实现五子棋游戏,本文将提供一份详细的攻略。 前置知识 在阅读本攻略之前,你应该已经有了一些C++的基础知识。同时,你需要了解ege图形库的基本用法,包括绘制图形、鼠标事件等。 实现步骤 1. 绘制棋盘 在绘制棋盘之前,我们需要先确…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部