using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//接收用户输入的年月(1990年以后),在控制台中输出当月日历。
int year, month;//定义变量年和月
List<string> s = new List<string>();//定义集合用来保存星期几
int yearofDays = 0;//年的天数
int monthofDays = 0;//月的天数
//判断用户输入是否正确
while (true)
{
#region 判断用户输入的日期是否符合要求
while (true)
{
Console.Write("请输入年份(1990):");
year = int.Parse(Console.ReadLine());
if (year < 1990)
{
Console.WriteLine("年份错误,请按回车键继续!");
Console.ReadLine();//鼠标等待输入
Console.Clear();//清除屏幕
}
else
{
Console.Write("请输入月份(1-12):");
month = int.Parse(Console.ReadLine());
if (month <= 0 || month > 12)
{
Console.WriteLine("月份错误,请按回车继续!");
Console.ReadLine();
Console.Clear();
}
else
{
break;//输入年月都正确,则保存变量并结束循环
}
}
}
#endregion
#region 1990年到year-1年总共的天数
for (int i = 1990; i < year; i++)//计算平年还是闰年
{
//闰年一年有多少天
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{
yearofDays += 366;
}
//平年一年有多少天
else
{
yearofDays += 365;
}
}
#endregion
#region year年1月到month-1月总共的天数
for (int j = 1; j < month; j++)
{
//二月的天数
if (j == 2)//判断是否为闰年的二月
{
//平年的二月
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
monthofDays += 29;
}
//闰年的二月
else
{
monthofDays += 28;
}
}
//大月的天数
else if (j == 1 || j == 3 || j == 5 || j == 7 || j == 8 || j == 10 || j == 12)
{
monthofDays += 31;
}
//小月的天数
else
{
monthofDays += 30;
}
}
#endregion
#region 输出星期前面的空格
int AllDays = yearofDays + monthofDays;//经过的总天数
int dayofWeek = AllDays % 7 + 1;//到这个月1号是星期几
int space = dayofWeek - 1;//1号前面的空格数量
for (int k = 0; k < space; k++)
{
s.Add("");//循环输出1号前面的空格
}
int days = 0;//定义month整个月多少天
#region 计算月份对应的天数
if (month == 2)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
days = 29;
}
else
{
days = 28;
}
}
else if (month <= 7 && month % 2 != 0 || month > 7 && month % 2 == 0)
{
days = 31;
}
else
{
days = 30;
}
#endregion
//將天数添加到集合
for (int y = 1; y <= days; y++)
{
s.Add(y.ToString());//将整型数据添加到集合中
}
#endregion
#region 输出天数对应是星期几
Console.WriteLine("*****************************************************");
Console.Write("一\t二\t三\t四\t五\t六\t七");
//循环输出日历
for (int m = 0; m < s.Count; m++)
{
if (m % 7 == 0)//判断当前日期是否需要换行
{
Console.WriteLine();
}
Console.Write(s[m] + "\t");//在每天的日期与日期之间加上空格
}
Console.WriteLine();
Console.WriteLine("******************************************************");
Console.WriteLine("请按回车键继续");
Console.ReadLine();
Console.Clear();
#endregion
}
}
}
}
接收用户输入的年月(1990年以后),在控制台中输出当月日历。
最新推荐文章于 2024-09-26 16:53:54 发布