C++ 萬年曆、生肖判斷、計算第幾天

1、輸入一個年、月、日並計算它是本年度第幾天

2、輸入任何一年份,給出該年出生人的屬性,如1945年出生人的屬性爲“雞”

3、顯示輸入2000-2099年的任何一年的某一月的月曆,如下圖

problem1

#include <iostream>
using namespace std;
int main()
{
	int year, month, day, num;
	bool runnian;	//是否爲閏年標誌位
	cout << "請輸入一個年份:";
	cin >> year;
	cout << "請輸入月份:";
	cin >> month;
	cout << "請輸入日期:";
	cin >> day;
	if (year % 100 == 0)
	{
		if (year % 400 == 0)
			runnian = true;
		else
			runnian = false;
	}
	else
	{
		if (year % 4 == 0)
		{
			runnian = true;
		}
		else
			runnian = false;
	}

	switch (month)
	{
	case 1:  num = day; break;
	case 2:	 num = 31 + day; break;
	case 3:	 num = 59 + day; break;
	case 4:  num = 90 + day; break;
	case 5:  num = 120 + day; break;
	case 6:  num = 151 + day; break;
	case 7:  num = 182 + day; break;
	case 8:  num = 212 + day; break;
	case 9:  num = 243 + day; break;
	case 10: num = 274 + day; break;
	case 11: num = 304 + day; break;
	case 12: num = 335 + day; break;
	default: break;
	}

	if (month >= 3)
	{
		if (runnian == true)
			num++;
	}
	cout << "這是這一年的第" << num << "天";
	return 0;
}

problem 2

#include <iostream>
using namespace std;
int main()
{
	char p[12][4] = { "鼠","牛","虎","兔","龍","蛇","馬","羊","雞","猴","狗","豬" };
	int year0 = 2008;   //2008年是鼠年,作爲基準
	int year, n;
	cout << "請輸入一個年份";
	cin >> year;
	n = year - year0;
	n = n % 12;
	if (n < 0)
		n += 12;   //求餘時,n可能是負數,如果是負數則加12 
	cout << year << "年的人屬相爲:" << p[n];
	return 0;
}

problem3

#include <iostream>
using namespace std;
int year, month, day, he;
int run[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
int ping[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
//這點到基本點的求和
//判斷閏年和平年
int leap(int year)
{
	int four, hundred, fourhundred;
	four = year % 4;
	hundred = year % 100;
	fourhundred = year % 400;
	if (four == 0 && hundred == 0 && fourhundred == 0)
		return 1;
	else if (four == 0 && hundred != 0 && fourhundred != 0)
		return 1;
	else return 0;
}
int qiuhe(int year, int month, int day, int run[], int ping[])
{
	//19000101 星期一
	int i, sum = 0;
	for (i = 1900; i < year; i++)
	{
		int m;//用來標籤是閏年還是平年  m==1,就是閏年
		m = leap(i);
		if (m == 1)
		{
			sum = sum + 366;
		}
		else
		{
			sum = sum + 365;
		}
	}
	//加月份的天數
	for (i = 0; i < month - 1; i++)
	{
		if (leap(year) == 1)
			sum = sum + run[i];
		else
			sum = sum + ping[i];
	}
	return sum;
}


void muban()
{
	char weekday[7][10] = { "星期一\t","星期二\t","星期三\t","星期四\t","星期五\t","星期六\t","星期天" };
	int i;
	for (i = 0; i < 7; i++)
		cout << weekday[i];
	cout << endl;
}

void shibiePrint(int sum, int year, int month)
{
	int yushu, temp, i;
	yushu = sum % 7;//得到多餘的天數,然後在後一個月份用空格表示出來
	for (i = 0; i < yushu; i++)
		cout << "\t";//輸出空格
	temp = 7 - yushu;
	if (leap(year) == 1)
	{
		for (i = 1; i <= run[month - 1]; i++)//打印31天
		{
			cout << i<< "\t";
			if (i == temp || (i - temp) % 7 == 0)
				cout << endl;
		}
		cout << endl;
	}
	else
	{
		for (i = 1; i <= ping[month - 1]; i++)//打印30天
		{
			cout << i << "\t";
			if (i == temp || (i - temp) % 7 == 0)
				cout << endl;
		}
		cout << endl;
	}
}

int main()
{
	cout << "請輸入一個年份";
	cin >> year;
	cout << "請輸入月份";
	cin >> month;
	cout << "請輸入日期";
	cin >> day;
	he = qiuhe(year, month, day, run, ping);//調用函數求和
	cout << "\t\t\t"<< year<<"年"<<month<<"月\n\n";
	muban();//調用模板函數,輸出模板
	shibiePrint(he, year, month);//進行相應的識別,並輸出
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章