日历的打印(两个月并列打印)

初版

// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
#include <iomanip> 
using namespace std;

// 函数printYear:按要求的格式打印某年的日历
// 参数:year-年
// 返回值:无
void printYear(int year);

// leapYear:判断闰年
// 参数:y-年
// 返回值:1-是闰年,0-不是闰年
int leapYear(int y)
{
	if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
		return 1;
	return 0;
}

// 函数whatDay:计算某年某月的1号是星期几
// 参数:year-年,month-月
// 返回值:1到7--星期1到星期日
int whatDay(int year, int month)
{
	// 1年月日是星期一
	int w = 1;
	int i;

	// 1到year-1都是全年
	for (i = 1; i < year; i++)
	{
		if (leapYear(i))
			w += 366;
		else
			w += 365;
	}
	switch (month)
	{
	case 12: // 加月的
		w += 30;
	case 11: // 加月的
		w += 31;
	case 10: // 加月的
		w += 30;
	case 9:  // 加月的
		w += 31;
	case 8:  // 加月的
		w += 31;
	case 7:  // 加月的
		w += 30;
	case 6:  // 加月的
		w += 31;
	case 5:  // 加月的
		w += 30;
	case 4:  // 加月的
		w += 31;
	case 3:  // 加月的
		if (leapYear(year))
			w += 29;
		else
			w += 28;
	case 2:  // 加月的天
		w += 31;
	case 1:  // 1月不加了
		;
	}

	// 得到-6,其中为星期天
	w = w % 7;

	// 调整星期天
	if (w == 0)
		w = 7;
	return w;
}

// 请在下面补充代码,实现函数printYear
/*************** Begin **************/
void printTwoMonths(int year, int month1, int month2)
{
	//1.获得month1和month2分别多少天以及第一天是星期几

	int first = whatDay(year, month1);
	int second = whatDay(year, month2);
	int day1, day2;

	switch (month1)
	{
	case 1:day1 = 31; break;
	case 2:
		if (leapYear(year))
			day1 = 29;
		else
			day1 = 28; break;
	case 3:day1 = 31; break;
	case 4:day1 = 30; break;
	case 5:day1 = 31; break;
	case 6:day1 = 30; break;
	case 7:day1 = 31; break;
	case 8:day1 = 31; break;
	case 9:day1 = 30; break;
	case 10:day1 = 31; break;
	case 11:day1 = 30; break;
	case 12:day1 = 31; break;
	}
	switch (month2)
	{
	case 1:day2 = 31; break;
	case 2:
		if (leapYear(year))
			day2 = 29;
		else
			day2 = 28; break;
	case 3:day2 = 31; break;
	case 4:day2 = 30; break;
	case 5:day2 = 31; break;
	case 6:day2 = 30; break;
	case 7:day2 = 31; break;
	case 8:day2 = 31; break;
	case 9:day2 = 30; break;
	case 10:day2 = 31; break;
	case 11:day2 = 30; break;
	case 12:day2 = 31; break;
	}
	std::cout << "    ";
	printf("  %2d", day1);
	printf("  %2d", day2);
	std::cout << "    ";
	std::cout << std::endl;

	//2.分别打印month1和month2的第一行

	int i1 = first;
	int i2 = second;

	std::cout << "  一  二  三  四  五  六  日           一  二  三  四  五  六  日" << std::endl;
	for (int i = 1; i < first; i++) {
		std::cout << "    ";
	}
	for (i1; i1 <= 7; i1++) {
		printf("  %2d", i1 - first + 1);
	}
	std::cout << "         ";

	for (int i = 1; i < second; i++) {
		std::cout << "    ";
	}
	for (i2; i2 <= 7; i2++) {
		printf("  %2d", i2 - second + 1);
		if (i2 % 7 == 0) {
			std::cout << std::endl;
		}
	}

	//3.打印剩余的行,考虑:month1和month2中的换行问题和填充空格问题

	//第二行
	for (i1; i1 <= 14; i1++) {
		printf("  %2d", i1 - first + 1);
	}
	std::cout << "         ";
	for (i2; i2 <= 14; i2++) {
		printf("  %2d", i2 - second + 1);
		if (i2 % 7 == 0) {
			std::cout << std::endl;
		}
	}

	//第三行
	for (i1; i1 <= 21; i1++) {
		printf("  %2d", i1 - first + 1);
	}
	std::cout << "         ";
	for (i2; i2 <= 21; i2++) {
		printf("  %2d", i2 - second + 1);
		if (i2 % 7 == 0) {
			std::cout << std::endl;
		}
	}

	//第四行
	for (i1; i1 <= 28; i1++) {
		printf("  %2d", i1 - first + 1);
	}
	std::cout << "         ";
	for (i2; i2 <= 28; i2++) {
		printf("  %2d", i2 - second + 1);
		if (i2 % 7 == 0) {
			std::cout << std::endl;
		}
	}

	//第五行 

	if ((day1 - (i1 - first + 1)) >= 7) {
		for (i1; i1 <= 35; i1++) {
			printf("  %2d", i1 - first + 1);
		}
	}
	else if (0 <= day1 - (i1 - first) && day1 - (i1 - first) <= 7) {
		for (i1; i1 <= day1 + first - 1; i1++) {
			printf("  %2d", i1 - first + 1);
		}
		for (i1; i1 <= 35; i1++) {
			std::cout << "    ";
		}
	}
	else {
		for (i1; i1 <= 35; i1++) {
			std::cout << "    ";
		}
	}

	std::cout << "         ";

	if (day2 - (i2 - second) <= 7) {
		for (i2; i2 <= day2 + second - 1; i2++) {
			printf("  %2d", i2 - second + 1);
		}
		std::cout << std::endl;
	}
	else {
		for (i2; i2 <= 35; i2++) {
			printf("  %2d", i2 - second + 1);
			if (i2 % 7 == 0) {
				std::cout << std::endl;
			}
		}
	}

	//第六行
	if ( i1 - first + 1 <= day1) {
		for (i1; i1 <= day1 + first - 1; i1++) {
			printf("  %2d", i1 - first + 1);
		}
		for (i1; i1 <= 42; i1++) {
			std::cout << "    ";
		}
	}
	else if ((i1 - first + 1) > day1) {
		for (i1; i1 <= 42; i1++) {
			std::cout << "    ";
		}
	}

	std::cout << "         ";

	if (day2 - (i2 - second) <= 7) {
		for (i2; i2 <= day2 + second - 1; i2++) {
			printf("  %2d", i2 - second + 1);
		}
		std::cout << std::endl;
	}
}

void printYear(int year)
{
	printTwoMonths(year, 1, 2);
	printTwoMonths(year, 3, 4);
	printTwoMonths(year, 5, 6);
	printTwoMonths(year, 7, 8);
	printTwoMonths(year, 9, 10);
	printTwoMonths(year, 11, 12);
}


/*************** End **************/


int main()
{
	// 年
	int y;

	// 输入年
	cin >> y;

	// 输出该年的日历
	printYear(y);
	system("pause");
	return 0;
}

最终版本

// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>
#include <iomanip> 
using namespace std;

// 函数printYear:按要求的格式打印某年的日历
// 参数:year-年
// 返回值:无
void printYear(int year);

// leapYear:判断闰年
// 参数:y-年
// 返回值:1-是闰年,0-不是闰年
int leapYear(int y)
{
	if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
		return 1;
	return 0;
}

// 函数whatDay:计算某年某月的1号是星期几
// 参数:year-年,month-月
// 返回值:1到7--星期1到星期日
int whatDay(int year, int month)
{
	// 1年月日是星期一
	int w = 1;
	int i;

	// 1到year-1都是全年
	for (i = 1; i < year; i++)
	{
		if (leapYear(i))
			w += 366;
		else
			w += 365;
	}
	switch (month)
	{
	case 12: // 加月的
		w += 30;
	case 11: // 加月的
		w += 31;
	case 10: // 加月的
		w += 30;
	case 9:  // 加月的
		w += 31;
	case 8:  // 加月的
		w += 31;
	case 7:  // 加月的
		w += 30;
	case 6:  // 加月的
		w += 31;
	case 5:  // 加月的
		w += 30;
	case 4:  // 加月的
		w += 31;
	case 3:  // 加月的
		if (leapYear(year))
			w += 29;
		else
			w += 28;
	case 2:  // 加月的天
		w += 31;
	case 1:  // 1月不加了
		;
	}

	// 得到-6,其中为星期天
	w = w % 7;

	// 调整星期天
	if (w == 0)
		w = 7;
	return w;
}

void printYearnumber(int year){
	int y1=year/1000;
	int y2=year/100%10;
	int y3=year/10%10;
	int y4=year%10;
const char number[][8][4]={
{{' ','*','*',' '},   //0
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {' ','*','*',' '}
},
{{' ','*','*',' '},   //1
 {' ','*','*',' '},
 {'*','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '}
},
{{'*','*','*','*'},   //2
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'},
 {'*',' ',' ',' '},
 {'*',' ',' ',' '},
 {'*',' ',' ',' '},
 {'*','*','*','*'}
},
{{'*','*','*','*'},   //3
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'}
},
{{'*',' ','*',' '},   //4
 {'*',' ','*',' '},
 {'*',' ','*',' '},
 {'*','*','*','*'},
 {' ',' ','*',' '},
 {' ',' ','*',' '},
 {' ',' ','*',' '},
 {' ',' ','*',' '}
},
{{'*','*','*','*'},   //5
 {'*',' ',' ',' '},
 {'*',' ',' ',' '},
 {'*','*','*','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'}
},
{{'*','*','*','*'},   //6
 {'*',' ',' ',' '},
 {'*',' ',' ',' '},
 {'*','*','*','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*','*','*','*'}
},
{{'*','*','*','*'},   //7
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'}
},
{{'*','*','*','*'},   //8
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*','*','*','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*','*','*','*'}
},
{{'*','*','*','*'},   //9
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*','*','*','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'}
},
};
for(int i=0; i<8; i++)
	{   
	    for(int j=0; j<4; j++)
		 cout<<"      ";
	 	for(int j=0; j<4; j++)
		 cout<<number[y1][i][j];
		 cout<<"  ";
		for(int j=0; j<4; j++)
		 cout<<number[y2][i][j];  
		 cout<<"  ";
		for(int j=0; j<4; j++)
		 cout<<number[y3][i][j];
		 cout<<"  ";	 
		for(int j=0; j<4; j++)
		 cout<<number[y4][i][j];
		 cout<<"  ";	 	 	  	
		cout<<endl;
	} 
	cout<<endl;
}

// 请在下面补充代码,实现函数printYear
/*************** Begin **************/
void printTwoMonths(int year, int month1, int month2)
{
	//1.获得month1和month2分别多少天以及第一天是星期几
	int first = whatDay(year, month1);
	int second = whatDay(year, month2);
	int day1, day2;

	switch (month1)
	{
	case 1:day1 = 31; break;
	case 2:
		if (leapYear(year))
			day1 = 29;
		else
			day1 = 28; break;
	case 3:day1 = 31; break;
	case 4:day1 = 30; break;
	case 5:day1 = 31; break;
	case 6:day1 = 30; break;
	case 7:day1 = 31; break;
	case 8:day1 = 31; break;
	case 9:day1 = 30; break;
	case 10:day1 = 31; break;
	case 11:day1 = 30; break;
	case 12:day1 = 31; break;
	}
	switch (month2)
	{
	case 1:day2 = 31; break;
	case 2:
		if (leapYear(year))
			day2 = 29;
		else
			day2 = 28; break;
	case 3:day2 = 31; break;
	case 4:day2 = 30; break;
	case 5:day2 = 31; break;
	case 6:day2 = 30; break;
	case 7:day2 = 31; break;
	case 8:day2 = 31; break;
	case 9:day2 = 30; break;
	case 10:day2 = 31; break;
	case 11:day2 = 30; break;
	case 12:day2 = 31; break;
	}
    std::cout << "    ";
	printf("       %2d 月     (%2d天)",month1, day1);
	std::cout << "                    ";
	printf("%2d 月    (%2d天)",month2, day2);
	std::cout << "    ";
	std::cout << std::endl;


	//2.分别打印month1和month2的第一行
	int i1 = first;
	int i2 = second;

	std::cout << "  一  二  三  四  五  六  日           一  二  三  四  五  六  日" << std::endl;
	std::cout << "  ——————————————         ——————————————" << std::endl;
	for (int i = 1; i < first; i++) {
		std::cout << "    ";
	}
	for (i1; i1 <= 7; i1++) {
		printf("  %2d", i1 - first + 1);
	}
	std::cout << "         ";

	for (int i = 1; i < second; i++) {
		std::cout << "    ";
	}
	for (i2; i2 <= 7; i2++) {
		printf("  %2d", i2 - second + 1);
		if (i2 % 7 == 0) {
			std::cout << std::endl;
		}
	}

	//3.打印剩余的行,考虑:month1和month2中的换行问题和填充空格问题
	//第二行
	for (i1; i1 <= 14; i1++) {
		printf("  %2d", i1 - first + 1);
	}
	std::cout << "         ";
	for (i2; i2 <= 14; i2++) {
		printf("  %2d", i2 - second + 1);
		if (i2 % 7 == 0) {
			std::cout << std::endl;
		}
	}

	//第三行
	for (i1; i1 <= 21; i1++) {
		printf("  %2d", i1 - first + 1);
	}
	std::cout << "         ";
	for (i2; i2 <= 21; i2++) {
		printf("  %2d", i2 - second + 1);
		if (i2 % 7 == 0) {
			std::cout << std::endl;
		}
	}

	//第四行
	for (i1; i1 <= 28; i1++) {
		printf("  %2d", i1 - first + 1);
	}
	std::cout << "         ";
	for (i2; i2 <= 28; i2++) {
		printf("  %2d", i2 - second + 1);
		if (i2 % 7 == 0) {
			std::cout << std::endl;
		}
	}

	//第五行 
	if ((day1 - (i1 - first + 1)) >= 7) {
		for (i1; i1 <= 35; i1++) {
			printf("  %2d", i1 - first + 1);
		}
	}
	else if (0 <= day1 - (i1 - first) && day1 - (i1 - first) <= 7) {
		for (i1; i1 <= day1 + first - 1; i1++) {
			printf("  %2d", i1 - first + 1);
		}
		for (i1; i1 <= 35; i1++) {
			std::cout << "    ";
		}
	}
	else {
		for (i1; i1 <= 35; i1++) {
			std::cout << "    ";
		}
	}
	std::cout << "         ";
	if (day2 - (i2 - second) <= 7) {
		for (i2; i2 <= day2 + second - 1; i2++) {
			printf("  %2d", i2 - second + 1);
		}
		std::cout << std::endl;
	}
	else {
		for (i2; i2 <= 35; i2++) {
			printf("  %2d", i2 - second + 1);
			if (i2 % 7 == 0) {
				std::cout << std::endl;
			}
		}
	}

	//第六行
	if ( i1 - first + 1 <= day1) {
		for (i1; i1 <= day1 + first - 1; i1++) {
			printf("  %2d", i1 - first + 1);
		}
		for (i1; i1 <= 42; i1++) {
			std::cout << "    ";
		}
	}
	else if ((i1 - first + 1) > day1) {
		for (i1; i1 <= 42; i1++) {
			std::cout << "    ";
		}
	}
	std::cout << "         ";
	if (day2 - (i2 - second) <= 7) {
		for (i2; i2 <= day2 + second - 1; i2++) {
			printf("  %2d", i2 - second + 1);
		}
		std::cout << std::endl;
	}
	
	std::cout << std::endl;
}

void printYear(int year)
{
	printTwoMonths(year, 1, 2);
	printTwoMonths(year, 3, 4);
	printTwoMonths(year, 5, 6);
	printTwoMonths(year, 7, 8);
	printTwoMonths(year, 9, 10);
	printTwoMonths(year, 11, 12);
}


/*************** End **************/


int main()
{
	// 年
	int y;

	// 输入年
	cin >> y;
     
	// 输出该年的日历
	std::cout << std::endl;
	printYearnumber(y);
	std::cout << std::endl;
	printYear(y);

	system("pause");
	return 0;
}

附带打印年份数字的代码

#include <iostream>
using namespace std;

void printS();

void printS(int year){
	int y1=year/1000;
	int y2=year/100%10;
	int y3=year/10%10;
	int y4=year%10;
const char number[][8][4]={
{{' ','*','*',' '},   //0
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {' ','*','*',' '}
},
{{' ','*','*',' '},   //1
 {' ','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '},
 {' ','*','*',' '}
},
{{'*','*','*','*'},   //2
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'},
 {'*',' ',' ',' '},
 {'*',' ',' ',' '},
 {'*',' ',' ',' '},
 {'*','*','*','*'}
},
{{'*','*','*','*'},   //3
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'}
},
{{'*',' ','*',' '},   //4
 {'*',' ','*',' '},
 {'*',' ','*',' '},
 {'*','*','*','*'},
 {' ',' ','*',' '},
 {' ',' ','*',' '},
 {' ',' ','*',' '},
 {' ',' ','*',' '}
},
{{'*','*','*','*'},   //5
 {'*',' ',' ',' '},
 {'*',' ',' ',' '},
 {'*','*','*','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'}
},
{{'*','*','*','*'},   //6
 {'*',' ',' ',' '},
 {'*',' ',' ',' '},
 {'*','*','*','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*','*','*','*'}
},
{{'*','*','*','*'},   //7
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'}
},
{{'*','*','*','*'},   //8
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*','*','*','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*','*','*','*'}
},
{{'*','*','*','*'},   //8
 {'*',' ',' ','*'},
 {'*',' ',' ','*'},
 {'*','*','*','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {' ',' ',' ','*'},
 {'*','*','*','*'}
}
};
for(int i=0; i<8; i++)
	{
	 	for(int j=0; j<4; j++)
		 cout<<number[y1][i][j];
		 cout<<"  ";
		for(int j=0; j<4; j++)
		 cout<<number[y2][i][j];  
		 cout<<"  ";
		for(int j=0; j<4; j++)
		 cout<<number[y3][i][j];
		 cout<<"  ";	 
		for(int j=0; j<4; j++)
		 cout<<number[y4][i][j];
		 cout<<"  ";	 	 	  	
		cout<<endl;
	} 
	cout<<endl;
}

int main()
{   
	int y;

	// 输入年
	cin >> y;
     printS(y);

		cout<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43271844/article/details/83116514