向控制台输出日历

上章也在文中举例过向控制台输出日历,那么这章我们就来具体的说说怎么实现:

//第一步:提示并获取用户的输入

//第二步:根据用户输入的年月,创建集合

//第三步:向控制台显示输出

//第四步:等待用户指令,清屏重新输出

怎么实现呢?

//第一步:提示并获取用户的输入,如果错误那么需要清屏提醒重新输入,前面一贴我们讲过,这种情况,我们就应该运用到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

时间: 2024-10-12 09:51:52

向控制台输出日历的相关文章

C#输出日历

用C#输出日历,此功能可用于Ajax方式列出计划日程相关的内容,由于是C#控制输出,可以方便加上自己需要的业务处理逻辑. 1.控制台输出: [csharp] view plaincopyprint? using System; namespace 控制台日历 { class Program { public static void Main(string[] args) { string s = "    "; Console.WriteLine("输入年份:");

jenkins控制台输出乱码

根据以往写代码的经验,jenkins控制台输出乱码有可能是编码导致的,问了一下度娘,果然如此,解决办法如下:修改下jenkins的配置文件,设置字符编码为:UTF-8即可,打开jenkins的安装目录,找到jenkins.xml文件,在<arguments>标签处添加红色字体,即定义编码为utf-8<arguments>-Xrs -Xmx512m -Dfile.encoding=utf-8 -Dhudson.lifecycle=hudson.lifecycle.WindowsSer

C#在控制台输出异常所在的行数

对于异常,我们经常用try-catch语句来处理,一种常见的方式是在catch语句块用MessageBox.Show("异常")这种弹窗的方式来报告异常.但是有些时候,有些异常发生时我们不希望弹窗干扰用户,只是想要打印出异常信息查找原因.分析调试而已. 这时候常用的方法有:打印log将异常信息保存到文本中.将异常信息输出到可显示文本的控件中.将异常打印到"输出"窗口中. 其中涉及的关键问题是:如何快速定位异常所在的位置.如果可以输出异常所在的行数其实就可以很好解决这

eclipse运行 Maven Test命令时控制台输出乱码的解决办法

在Maven的pom.xml文件中增加: <properties>      <argLine>-Dfile.encoding=UTF-8</argLine> </properties> 今天突然遇到这个问题了,上网搜了一下,答案一大堆,还是这个最好!记录一下! eclipse运行 Maven Test命令时控制台输出乱码的解决办法,布布扣,bubuko.com

C++11,控制台输出的一段小程序。

#include <iostream> // std::cout, std::boolalpha, std::noboolalpha int main () { bool b = true; std::cout << std::boolalpha << b << '\n'; //把bool表示为alpha std::endl(std::cout); //把它当成一个函数来使用. std::cout << std::noboolalpha <

键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值

package cn; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; /**  * 键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值  * 分析:  *  1.创建键盘录入对象  *  2.键盘录入多个数据,我们不知道有多少个,所以用集合存储  *  3.以0结束,只要键盘录入的数据是0,就退出循环  *      4.把集合转换成数组  *      5.对数组进行排

代码实现:在控制台输出所有的”水仙花数”

/* * A:案例演示 * 需求:在控制台输出所有的"水仙花数" * 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身. * 举例:153就是一个水仙花数. * 153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153 分析: 1,100 - 999 2,获取每一个位数的值,百位,十位,个位 3,判断各个位上的立方和是否等于这个数,如果等于打印 */ class Test_Flower { public static void mai

控制台输出彩色样式

没错,就是这么无聊,给console的文字添加样式.你以为你真的了解console.log吗?不,你只是把它当成了alert的替代品,多的是你不知道的事. 在正常模式下,一般只能向console 控制台输出简单的文字信息.为了让显示友好一点,可以用console.warn()来输出警告信息,也可以用console.error()来输出错误信息. 笔者以前也只是认为console只有这几种样式,无意中发现居然还能自己添加样式,顿时感觉发现了新大陆. 下面是console.log() API的官方文

Java基础知识强化之集合框架笔记36:List练习之键盘录入多个数据在控制台输出最大值

1. 键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值 分析: •  创建键盘录入数据对象 •  键盘录入多个数据,我们不知道多少个,所以用集合存储 •  以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了 •  把集合转成数组 •  对数组排序 •  获取该数组中的最大索引的值 2. 代码实现: 1 1. package cn.itcast_03; 2 3 import java.util.ArrayList; 4 import java.util.Arrays;