目录
频道首页
用C编写万年历系统问题和代码详解_万年历c语言代码讲解_无梦
收藏
0
The_Byte_Station 最近修改于 2023-10-29 11:57:48

在这里插入图片描述

问题:

要求:模仿现实生活中的挂历。 当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。 当系统日期变到下一月时,系统自动翻页到下一月。

代码详解:

这段代码可以生成指定年份所对应的日历。下面是该代码的详细解释:

1. 头文件及函数定义部分:

#include 

int year(int y)
{
    if ((y%4==0) && (y%100!=0) || y%400==0) // 判断闰年
        return 366;
    else
        return 365;
}

代码中定义了一个 year() 函数,用于判断某一年是否为闰年。

## 2. 主函数部分:

c int main() { int y; int i,j,sum=0;
int begin,week; int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // 定义每月的天数 scanf("%d",&y); // 输入年份 for(i=1;i

// 判断是否为闰年 int year(int y) { if((y%4==0&&y%100!=0)||y%400==0) return 366; else return 365; }

int main() { int y,sum=0,i,j,begin,week=1; int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // 每月的天数

printf("请输入要生成日历的年份:");
scanf("%d",&y);

// 计算前几年的天数之和
for(i=1;i下面是C++的代码:
注释如下:

c++

define CRTSECURENOWARNINGS 1 // 去掉警告

include

include // 用于包含exit函数

include // 包含时间相关的头文件

include // 包含字符串相关的头文件

using namespace std;

// 枚举月份 enum { January=0, February, March, April, May, June, July, August, September, October, November, December, };

class Calendar { public: int sum=0; // 表示闰年之前有多少天,初始为0 int year=GetTime(); // 年份为当前系统时间所在的年份 int week=0; // 当前月份的1号是星期几 protected: int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; // 存储月份天数 public: int IsLeap(int year); // 判断是否闰年的函数 Calendar(){} // 默认构造函数 Calendar(int year) { // 带参数构造函数 this->year = year; for (int i = 1; i < year; i++) // 计算闰年之前有多少天 { this->sum += IsLeap(i); } this->week = (sum + 1) % 7; // 计算当前年份的1月1号是星期几 } int GetTime() // 获取当前系统时间所在的年份 { // 获取当前系统时间 std::chrono::systemclock::timepoint now = std::chrono::systemclock::now(); // 转换为时间戳 std::timet nowc = std::chrono::systemclock::totimet(now); // 转换为本地时间 std::tm* localtime = std::localtime(&nowc); // 获取当前年份 int year = localtime->tmyear + 1900; // 输出当前年份 std::cout << "当前年份为:" << year << std::endl; return year; // 返回当前年份 } void PrintCalendar(); // 打印日历的函数 };

int Calendar:: IsLeap(int year) // 判断是否闰年的函数 { if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) return 366; // 是闰年则返回366 else return 365; // 否则返回365 }

void Calendar::PrintCalendar() // 打印日历的函数 { int begin = 1; // 每个月份的开始日期从1号开始 cout << this->year << "年日历>>>" << endl; // 输出年份所对应的日历 for (int j = January; j <= December; j++) // 遍历所有月份 { begin = 1; // 当前月份开始日期为1号 cout << " 第" << j + 1 << "月" << endl; // 输出当前月份 cout << " 7 1 2 3 4 5 6" << endl; // 输出星期几 printf("=====================\n"); for (int i = 0; i < this->week; i++) // 输出当前月份1号前的空格,即空白处 { cout << " "; } while (begin <= this->month[j]) // 输出当前月份的日期 { printf("%3d", begin++); // 输出日期并加1 week = (week + 1) % 7; if (!week) cout << endl; // 如果星期天了,换行输出下一行日期 } cout << endl<<endl; // 输出完毕当前月份的日期后,换行 } }

int main() { Calendar c; // 创建Calendar对象 c.PrintCalendar(); // 打印当前年份所对应的日历 return 0; } ```

这份代码主要实现了日历的打印功能。其中使用了枚举类型来表示月份,通过计算闰年之前有多少天来判断当前的日期是星期几,再输出对应的日期表格。在类中还实现了一个获取当前系统时间所在年份的函数。整个程序比较简单易懂,是一个较好的练手题目。

总结

本文介绍了如何使用 C 语言编写一个简单的日历生成程序。该程序使用了基本的循环、条件语句和数组等语法。读者可以根据自己的需要对程序进行扩展和优化。

内容大纲
批注笔记
用C编写万年历系统问题和代码详解_万年历c语言代码讲解_无梦
ArticleBot
z
z
z
z
申请加入
主页
会议室
Git管理
文章
云文档