万年历


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>

void printMonth(int year, int month);
void printMonthBody(int year, int month);
int getStartDay(int year, int month);
int getTotalNumOfDays(int year, int month);
int getNumOfDaysInMonth(int year, int month);
bool isLeapYear(int year);

int main()
{
	int year, month;
	printf("请输入要查询的年份:\n");
	scanf_s("%d", &year);

	printf("请输入要查询的月份:\n");
	scanf_s("%d", &month);
	printMonth(year, month);

	return 0;
}

void printMonth(int year,int month)
{
	printf("%d年%d月份的日历\n",year,month);
	printf("--------------------------------\n");
	printf("日\t一\t二\t三\t四\t五\t六\n");
	printMonthBody(year, month);
}

void printMonthBody(int year,int month)
{
	int week = getStartDay(year, month);
	int days = getNumOfDaysInMonth(year, month);
	int i;
	int date = 1;
	int circulation = 0;
	//第一行的日期
	for (i = week % 7; i > 1; i--)
		printf("  \t");
	for (i = week; i <= 7; i++)
	{
		printf("%d\t", date++);
	}
	printf("\n");
	//从第二行开始的日期
	for (i = date; i <= days; i++)
	{
		if (circulation == 7)
		{
			printf("\n");
			circulation = 0;
		}
		printf("%d\t", i);
		circulation++;
	}
	
}

int getStartDay(int year,int month)
{
	int week;
	week = (getTotalNumOfDays(year, month) + 3) % 7;
	if (week == 0)
		return 7;
	else
		return week;
}

int getTotalNumOfDays(int year,int month)
{
	int i;
	int yearChange = year;
	int sum1 = 0, sum2 = 0, sum = 0, daysOfYear;
	for (i = year - 1800; i > 0; i--)
	{
		if (isLeapYear(yearChange))
			daysOfYear = 366;
		else
			daysOfYear = 365;
		sum1 += daysOfYear;
		yearChange--;
	}
	for (i = month - 1; i > 0; i--)
		sum2 += getNumOfDaysInMonth(year, i);
	sum = sum1 + sum2;
	return sum;
}

int getNumOfDaysInMonth(int year,int month)
{
	
	if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
		return 31;
	else if (month == 4 || month == 6 || month == 9 || month == 11)
		return 31;
	else if (month == 2)
	{
		if (isLeapYear(year))
			return 29;
		else
			return 28;
	}
}

bool isLeapYear(int year)
{
	if (year % 4 == 0)
		return true;
	else
		return false;
}

文章作者: WB
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WB !
  目录