专业编程基础技术教程

网站首页 > 基础教程 正文

C++做的一个简单小程序,还很实用

ccvgpt 2024-10-19 03:25:17 基础教程 6 ℃

题目:编写一个程序,输入一个年份(大于2010年),输出这一年的年历

已知:

C++做的一个简单小程序,还很实用

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;

}

Tags:

最近发表
标签列表