使用c# 实现 输入年份 输出对应的年份的日历 (使用的 .NET 6.0 框架)
//实现功能:在控制台输入年份,输出当年的日历
{//主函数
Console.WriteLine("请输入年份:");
int year = int.Parse(Console.ReadLine());
if (year < 1 || year > 9999)
{
Console.WriteLine("输入范围超出,无法给出");
return;
}
Yue(year);
}
//生成月份
static void Yue(int year)
{
int day = 1;
for (int mouth = 1; mouth <= 12; mouth++)
{
Console.WriteLine("\n\n\t{0}月\n", mouth);
for (int days = 28; days <= 31; days++)
{
if (mouthnumber(year, mouth) == days)
{
int i;
Console.WriteLine("\t日\t一\t二\t三\t四\t五\t六");
Console.Write(space(year, mouth, day));
for (i = 1; i <= days; i++)
{
Console.Write("\t{0}", i);
while (spacenumber(year, mouth, day) + i == 7 || spacenumber(year, mouth, day) + i == 14 || spacenumber(year, mouth, day) + i == 21 || spacenumber(year, mouth, day) + i == 28 || spacenumber(year, mouth, day) + i == 35) //逢七换行
{
Console.WriteLine("\n");
break;
}
}
}
}
}
}
//返回空格
static string space(int year, int mouth, int day)
{
string kongge = "";
int i;
for (i = 1; i <= GetWeekDay(year, mouth, day); i++)
{
kongge = kongge + "\t "; //\t+空格
}
return kongge;
}
//返回 空格数量
static int spacenumber(int year, int mouth, int day)
{
int i, q = 0;
int j = GetWeekDay(year, mouth, day);
for (i = 1; i <= j; i++)
q++;
return q;
}
// 获取输入的年月日对应的星期
static int GetWeekDay(int year, int mouth, int day)
{
DateTime dt = new DateTime(year, mouth, day);
return (int)dt.DayOfWeek;
}
//返回每月天数
static int mouthnumber(int year, int mouth)
{
int day;
switch (mouth)
{
case 2:
day = leapyear(year);
return day;
case 4:
case 6:
case 9:
case 11:
day = 30;
return day;
default:
day = 31;
return day;
}
}
//判断闰年的方法
static int leapyear(int year)
{
int day;
if (year % 4 == 0 && year / 100 != 0)
day = 29;
else if (year / 400 == 0)
day = 29;
else
day = 28;
return day;
}