class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入年份:");
int year = int.Parse(Console.ReadLine());
Console.WriteLine("请输入月份:");
int month = int.Parse(Console.ReadLine());
int totaldays = GetTotaldays(year, month);
Console.WriteLine("{0}年{1}月距离1900年1月1日共{2}天",year,month,totaldays);
//打印万年历
Console.WriteLine("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
//计算当月的第一天是星期几
int week = totaldays % 7 + 1;
if (week==7)//7代表周日
{
week = 0;//输出0个\t
}
for (int i = 1; i <= week; i++)//周日不输出,是周几输出几个\t
{
Console.Write("\t");
}
//获取当月天数,循环输出
for (int i = 1; i <= GetMonthdays(year,month); i++)
{
Console.Write(i+"\t");
if ((totaldays+i)%7==6)//逢周六换行
{
Console.WriteLine();
}
}
Console.ReadLine();//阻断控制台关闭
}
/// <summary>
/// 获取总天数
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">月份</param>
/// <returns>返回总天数</returns>
private static int GetTotaldays(int year, int month)
{
int totaldays = 0;
for (int i = 1900; i < year; i++)
{
totaldays += GetYeardays(i);
}
for (int j = 1; j < month; j++)
{
totaldays += GetMonthdays(year, j);
}
return totaldays;
}
/// <summary>
/// 获取指定年中月拥有的天数
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">月份</param>
/// <returns>月天数</returns>
private static int GetMonthdays(int year, int month)
{
switch (month)
{
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (IsRun(year))
{
return 29;
}
else
{
return 28;
}
default:
return 31;
}
}
/// <summary>
/// 判断是否为闰年
/// </summary>
/// <param name="year">年份</param>
/// <returns>是否为闰年</returns>
private static bool IsRun(int year)
{
bool Isrun;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
Isrun = true;
}
else
{
Isrun = false;
}
return Isrun;
}
/// <summary>
/// 获取指定年份的天数
/// </summary>
/// <param name="year">年份</param>
/// <returns>年天数</returns>
private static int GetYeardays(int year)
{
int yeardays;
if (IsRun(year))
{
yeardays = 366;
}
else
{
yeardays = 365;
}
return yeardays;
}
}
效果如图: