21xrx.com
2024-12-23 01:38:00 Monday
登录
文章检索 我的文章 写文章
C++编写万年历代码
2023-06-30 00:33:51 深夜i     --     --
C++ 万年历 编写 代码 日期计算

万年历是一种非常实用的日历工具,它能够显示任意年份的月份日历,并且提供闰年判断功能等。本文将介绍如何使用C++编写一个万年历代码。

一、确定需求

在开始设计代码之前,首先需要确定需求和功能。针对万年历的功能,我们需要实现以下几个功能:

1. 显示任意年份的月份日历

2. 判断指定年是否为闰年

3. 显示指定月份的月历

4. 显示指定日期是星期几

5. 退出程序

二、设计思路

根据以上需求,我们可以设计出以下的思路:

1. 定义一个结构体Date,用来记录日期信息,包括年、月、日等信息。

2. 编写函数isLeapYear,用来判断指定年是否为闰年。

3. 编写函数getMonthDays,用来获取指定年份和月份的天数。

4. 编写函数showMonth,用来显示指定年份和月份的月历。

5. 编写函数getWeekday,用来获取指定日期是星期几。

6. 在主函数中,实现整个程序的控制流程,包括用户输入和输出等。

三、完整代码

根据以上设计思路,我们可以编写出以下完整的万年历代码:


#include <iostream>

using namespace std;

// 定义日期结构体

struct Date

  int year;

  int month;

  int day;

;

// 判断闰年

bool isLeapYear(int year)

{

  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)

  

    return true;

  

  return false;

}

// 获取每月天数

int getMonthDays(int year, int month)

{

  int days = 0;

  if (month == 2)

  {

    if (isLeapYear(year))

    

      days = 29;

    

    else

    

      days = 28;

    

  }

  else if (month == 4 || month == 6 || month == 9 || month == 11)

  

    days = 30;

  

  else

  

    days = 31;

  

  return days;

}

// 输出指定日期是星期几

void getWeekday(Date date)

{

  int year = date.year;

  int month = date.month;

  int day = date.day;

  if (month == 1 || month == 2)

  {

    year--;

    month += 12;

  }

  int century = year / 100;

  year = year % 100;

  int week = (year + year / 4 + century / 4 - 2 * century + 26 * (month + 1) / 10 + day - 1) % 7;

  switch (week)

  

  case 0:

    cout << "星期日" << endl;

    break;

  case 1:

    cout << "星期一" << endl;

    break;

  case 2:

    cout << "星期二" << endl;

    break;

  case 3:

    cout << "星期三" << endl;

    break;

  case 4:

    cout << "星期四" << endl;

    break;

  case 5:

    cout << "星期五" << endl;

    break;

  case 6:

    cout << "星期六" << endl;

    break;

  

}

// 显示指定年份和月份的月历

void showMonth(int year, int month)

{

  int days = getMonthDays(year, month);

  Date date;

  date.year = year;

  date.month = month;

  date.day = 1;

  int weekday = getWeekday(date);

  cout << year << "年" << month << "月" << endl;

  cout << "日\t一\t二\t三\t四\t五\t六" << endl;

  for (int i = 1; i <= weekday; i++)

  {

    cout << "\t";

  }

  for (int i = 1; i <= days; i++)

  {

    cout << i << "\t";

    weekday++;

    if (weekday % 7 == 0)

    

      cout << endl;

    

  }

  if (weekday % 7 != 0)

  

    cout << endl;

  

}

int main()

{

  int choice = 0;

  while (1)

  {

    cout << "请选择功能:" << endl;

    cout << "1. 显示任意年份的月份日历" << endl;

    cout << "2. 判断指定年是否为闰年" << endl;

    cout << "3. 显示指定月份的月历" << endl;

    cout << "4. 显示指定日期是星期几" << endl;

    cout << "5. 退出程序" << endl;

    cout << "请输入功能序号:";

    cin >> choice;

    switch (choice)

    {

    case 1:

    {

      int year = 0;

      cout << "请输入年份:";

      cin >> year;

      for (int i = 1; i <= 12; i++)

      {

        showMonth(year, i);

      }

      break;

    }

    case 2:

    {

      int year = 0;

      cout << "请输入年份:";

      cin >> year;

      if (isLeapYear(year))

      

        cout << year << "年是闰年" << endl;

      

      else

      

        cout << year << "年不是闰年" << endl;

      

      break;

    }

    case 3:

    {

      int year = 0;

      int month = 0;

      cout << "请输入年份:";

      cin >> year;

      cout << "请输入月份:";

      cin >> month;

      showMonth(year, month);

      break;

    }

    case 4:

    {

      Date date;

      cout << "请输入日期:" << endl;

      cin >> date.year;

      cin >> date.month;

      cin >> date.day;

      getWeekday(date);

      break;

    }

    case 5:

      return 0;

    }

  }

  return 0;

}

四、使用方法

在编译运行程序后,根据提示输入功能序号和参数,即可实现对应的万年历功能。例如,输入1,然后输入需要查询的年份,程序将会输出这个年份的12个月份的月历。输入2,然后输入需要查询的年份,程序将会判断这个年份是否为闰年。输入3,然后输入需要查询的年份和月份,程序将会输出这个月份的月历。输入4,然后输入需要查询的日期,程序将会输出这个日期是星期几。输入5即可退出程序。

五、总结

根据以上的设计思路,结合代码实现,我们可以轻松编写出一个简单而又实用的万年历程序。在实际的开发中,我们可以通过参考和修改这个代码,实现更多功能和特性,如添加农历功能和节假日提示等。同时,通过思考设计方案和分析设计思路,我们可以提高自己的编写代码的能力和效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复