上章也在文中举例过向控制台输出日历,那么这章我们就来具体的说说怎么实现:
//第一步:提示并获取用户的输入
//第二步:根据用户输入的年月,创建集合
//第三步:向控制台显示输出
//第四步:等待用户指令,清屏重新输出
怎么实现呢?
//第一步:提示并获取用户的输入,如果错误那么需要清屏提醒重新输入,前面一贴我们讲过,这种情况,我们就应该运用到while(true)和console.clear(),输入正确结束循环
int years, month;
while (true)
{
Console.Write("请输入年份(1900-2100):");
years = int.Parse(Console.ReadLine());
if (years < 1900 || years > 2100)
{
Console.Write("年份输入错误,按回车键后重新输入");
Console.ReadLine();
Console.Clear();
}
else
{
Console.Write("请输入月份(1-12):");
month = int.Parse(Console.ReadLine());
if (month < 1 || month > 12)
{
Console.Write("月份输入有误,按回车键后从新输入");
Console.ReadLine();
Console.Clear();
}
else
{
break;
}
}
}
这样就能获取到用户的正确输入了
//第二步:根据用户输入的年月,创建集合用来保存需要项控制台输出的数据,分析一下
1.输出的数据由两部分组成:字符串空格“”和数字,那么怎么计算空格的个数和当月的天数呢?
这里我们给出已知条件,1900年1月1日是周一:那么我们就需要算出到1号经过的天数,我们可以得出crossdays(到当月月一号经理的天数)%7=space(空白字符串的个数)
int space,crossdays=0;//space空白的个数(空白的个数和1990到今天经过的天数有关),空个的个数就是从1900年开始到某年某前一月需要经过的天数
#region//到year-1年需要经历的天数
for (int i = 1900; i <years; i++)
{
if(i%4==0&&i%100!=0||i%400==0)
{
crossdays += 366;
}
else
{
crossdays += 365;
}
}
#endregion
2.years-1年当年到month月经历的天数
#region//到当月1号需要经历的天数
for (int i = 1; i < month; i++)
{
if (i==2)
{
if(years%4==0&&years%100!=0||years%400==0)
{
crossdays += 29;
}
else
{
crossdays += 28;
}
}
else if (i<=7&&i%2!=0||i>7&&i%2==0)
{
crossdays += 31;
}
else
{
crossdays += 30;
}
}
#endregion
space = crossdays % 7;
3.空格加到集合dates中
space = crossdays % 7;
for (int i = 0; i < space; i++)
{
dates.Add("");
}
4.计算当月的天数
#region //当月的天数
int days;
if (month==2)
{
if(years%4==0&&years%100!=0||years%400==0)
{
days=29;
}
else
{
days=28;
}
}
else if(month<=7&&month%2!=0||month>7&&month%2==0)
{
days = 31;
}
else
{
days = 30;
}
5.把当月的天数加到集合之中
for (int i = 1; i <= days; i++)
{
dates.Add(i.ToString());
}
#endregion
//第三步:向控制台显示输出
Console.WriteLine("*********************************************************");
Console.Write("一" + "\t" + "二" + "\t" + "三" + "\t" + "四" + "\t" + "五" + "\t" + "六" + "\t" + "日");
//遍历输出集合dates
for (int i = 0; i < dates.Count; i++)
{
if (i % 7 == 0)
{
Console.WriteLine();
}
Console.Write(dates[i] + "\t");
}
Console.WriteLine();
Console.WriteLine("*********************************************************");
Console.Write("按回车键后继续");
//第四步:等待用户指令,清屏重新输出
Console.ReadLine();
Console.Clear();
而整个过程又是在一个死循环当中,所以我们需要再在外面嵌套一个while(true)循环。
最后我们就可以达到自己想要的控制台日历格式了。
原文地址:https://www.cnblogs.com/qlongbg/p/9162487.html