网站首页 > 基础教程 正文
题目:编写一个程序,输入一个年份(大于2010年),输出这一年的年历
已知:
1、2010年1月1日是星期五
2、闰年366天,非闰年为365天
3、闰年二月为29天,非闰年为28天
4、1、3、5、7、8、10、12月为31天
5、4、6、9、11月为30天
#include <iostream>
using namespace std;
class calendar {
public:
calendar(int y = 2010, int m = 1, int d = 1);
~calendar() {}
void calShow();
private:
int year;
int month;
int day;
int manyDaysOneYear = 365;//默认一年是365天
int manyDaysOneMonth = 30;//默认一个月是30天
int FirstWeekofYear = 5;//第一个月的第一天是星期几,缺省值为2010年1月1日,星期五
};
calendar::calendar(int y, int m, int d)
{
year = y; month = m; day = d;
// 计算用户选择该年这个月共多少天=========================================================================
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
manyDaysOneMonth = 31;
else if (month == 4 || month == 6 || month == 9 || month == 11)
manyDaysOneMonth = 30;
else if (month == 2 && manyDaysOneYear == 366)
manyDaysOneMonth = 29;
else if (month == 2 && manyDaysOneYear == 365)
manyDaysOneMonth = 28;
else cout << "月份输入错误!!!" << endl;
// =======================================================================================================
// 判断是否为闰年并计算出该年第一天是星期几===============================================================
if ((year % 4 == 0 && year % 100 != 0 || year % 400 == 0))
manyDaysOneYear = 366;
if (year >= 2010)
{
for (int i = 0; i < (year - 2010); i++)
{
if (((2010 + i) % 4 == 0 && (2010 + i) % 100 != 0 || (2010 + i) % 400 == 0))
FirstWeekofYear = (FirstWeekofYear + 366 % 7) % 7;//闰年的情况下,算出下一年的第一天是周几
else
FirstWeekofYear = (FirstWeekofYear + 365 % 7) % 7;
}
}
else if (year < 2010)
{
for (int i = 1; i <= (2010 - year); i++)
{
if (((2010 - i) % 4 == 0 && (2010 - i) % 100 != 0 || (2010 - i) % 400 == 0))
{
if ((FirstWeekofYear - 366 % 7) % 7 >= 0)
FirstWeekofYear = (FirstWeekofYear - 366 % 7) % 7;//闰年的情况下,算出下一年的第一天是周几
else
FirstWeekofYear = 7 + (FirstWeekofYear - 366 % 7) % 7;//闰年的情况下,算出下一年的第一天是周几
}
else
{
if ((FirstWeekofYear - 365 % 7) % 7 >= 0)
FirstWeekofYear = (FirstWeekofYear - 365 % 7) % 7;
else
FirstWeekofYear = 7 + (FirstWeekofYear - 365 % 7) % 7;
}
}
}
// =======================================================================================================
}
void calendar::calShow()
{
int FirstDayofMonth = FirstWeekofYear;//本年第一个月的第一天是星期FirstWeekofYear
for (int m = 1; m < month; m++)
{
if (m == 1
|| m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
FirstDayofMonth = (FirstDayofMonth + 31 % 7) % 7;//计算一个月的第一天是星期几
else if (m == 4 || m == 6 || m == 9 || m == 11)
FirstDayofMonth = (FirstDayofMonth + 30 % 7) % 7;//计算一个月的第一天是星期几
else if (m == 2 && manyDaysOneYear == 366)
FirstDayofMonth = (FirstDayofMonth + 29 % 7) % 7;//计算一个月的第一天是星期几
else if (m == 2 && manyDaysOneYear == 365)
FirstDayofMonth = (FirstDayofMonth + 28 % 7) % 7;//计算一个月的第一天是星期几
else cout << "月份输入错误!!!" << endl;
}
/*cout << "您选择的是" << year << "年" << month << "月" << day << "日" << endl;
cout << "这一年天数共有" << manyDaysOneYear << "天" << endl;
cout << "该年第一天是星期";
switch (FirstWeekofYear)
{
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;
}
//判断用户选择的这一天是星期几
cout << year << "年" << month << "月" << day << "日" << "是星期";
switch ((FirstDayofMonth + (day % 7 - 1)) % 7)
{
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;
}
cout << "这个月共有" << manyDaysOneMonth << "天" << endl;
cout << "\n\t\t " << year << "年" << month << "月日历\n" << endl;*/
cout << "一\t" << "二\t" << "三\t" << "四\t" << "五\t" << "六\t" << "日" << endl;
if (FirstDayofMonth == 0)// 因为本程序里0代表是星期7
{
for (int j = 0; j < 7 - 1; j++)
cout << "\t";
}
else
{
for (int j = 0; j < FirstDayofMonth - 1; j++)
cout << "\t";
}
for (int i = 1; i <= manyDaysOneMonth; i++)
{
cout << i << "\t";
if ((FirstDayofMonth + i - 1) % 7 == 0)
cout << "\n";
}
}
#include <time.h>
int main(void)
{
while (true)
{
system("cls");
time_t tt = time(NULL);
tm* t = localtime(&tt);
cout << t->tm_year + 1900 << "年" << t->tm_mon + 1 << "月" << t->tm_mday << "日"<<
t->tm_hour << "时" << t->tm_min << "分" << t->tm_sec << "秒\t" << "星期" << t->tm_wday << endl;
cout << "\n\t\t " << t->tm_year + 1900 << "年" << t->tm_mon + 1 << "月日历\n" << endl;
calendar c(t->tm_year + 1900, t->tm_mon + 1);
c.calShow();
_sleep(1000);
cout << endl;
}
getchar();
return 0;
}
猜你喜欢
- 2024-10-19 Python3 datetime模块指南:日期时间操作、时区管理与实战案例
- 2024-10-19 C++及数据结构复习笔记,类和对象很简单?为啥好多程序员还不会
- 2024-10-19 Linux时间和日期 linux 时间 表示方法
- 2024-10-19 C/C++的8种时间度量方式以及代码片段
- 2024-10-19 Python实战:使用 datetime模块处理时间日期的全方位指南
- 2024-10-19 C++编程的 42 条建议(四) c++编程100例
- 2024-10-19 mount with noatime - 合理关闭atime提高服务器性能
- 2024-10-19 linux下连续三次fork()——深度理解进程创建函数
- 2024-10-19 C函数time和clock的计时区别 c计时器函数
- 2024-10-19 win进程弹出Microsoft Visual C++ Runtime Library的解决办法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)