已知道1900-1-1为星期一。

模块分区

//获取用户的正确输入并分别保存到变量year和month中

//声明一个用于保存空白和当月日期数的集合dates

//遍历输出集合dates

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
while (true)
{
#region 获取用户输入的年月,保存到变量year,month,死循环
int year, month;
while (true)
{
Console.Write("请输入年份(1900到2100):");
year = int.Parse(Console.ReadLine());
if (year < 1900 || year > 2100)
{
Console.Write("输入年份错误,请按回车键继续");
Console.ReadLine();
Console.Clear();
}
else//输入年份正确
{
Console.Write("请输入月份(1到12):");
month = int.Parse(Console.ReadLine());
if (month < 1 || month > 12)
{
Console.WriteLine("输入月份错误,请按回车键继续");
Console.ReadLine();
Console.Clear();
}
else
{
break;
}
}
}
#endregion
#region 集合dates 依次保存空白和每月的天数date
List<string> dates = new List<string> { };
#region 求空白的数量,保存到变量space中,并保存到集合dates中
//已知1900-1-1是星期1,求year-month-1与其的关系
//求space=(year-month-1)的星期几-1。space= dayOfWeek-1
//求dayOfWeek,为与1900-1-1隔多少天后,设为变量crossDays,dayOfWeek=crossDays%7+1
//求crossDays,从1900-1-1到year-month-1经过了多少天,为1900到year-1经过的总天数,加,从year年中的1月1日到month月1日的天数

//先求从1900-1-1,到year-month-1经过的天数
int space, dayOfWeek, crossDays, crossDaysOfYear = 0, crossDaysOfMonth = 0;
for (int i = 1990; i <= year - 1; i++)
{
//循环变量i为某一年
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))//闰年
{
crossDaysOfYear += 366;
}
else
{
crossDaysOfYear += 365;
}
}
for (int i = 1; i <= month-1; i++)
{
//循环变量i为某月
if (i == 2)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
crossDaysOfMonth += 29;
}
else
{
crossDaysOfMonth += 28;
}
}
else if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
{
crossDaysOfMonth += 31;
}
else
{
crossDaysOfMonth += 30;
}
}
crossDays = crossDaysOfYear + crossDaysOfMonth;//相隔的总天数
dayOfWeek = crossDays % 7 + 1;
space = dayOfWeek - 1;
for (int i = 0; i < space; i++)//添加空白字符串到集合中去
{
dates.Add("");
}
#endregion
#region 当月的天数date,再添加到集合中去
int days;//用户输入month的当月天数
if (month == 2)
{
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
days = 29;
}
else
{
days = 28;
}
}
else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
{
days = 31;
}
else
{
days = 30;
}
for (int i = 1; i <= days; i++)
{
dates.Add(i.ToString());
}
#endregion
#endregion
#region 遍历输出集合dates
Console.WriteLine("===================================");
Console.Write("一\t二\t三\t四\t五\t六\t日\t");
for (int i = 0; i < dates.Count; i++)
{
if (i % 7 == 0)
{
Console.WriteLine();//输出换行的意思
}
Console.Write(dates[i] + "\t");
}
Console.WriteLine();
Console.WriteLine("===================================");
#endregion
Console.Write("按回车键继续");
Console.ReadLine();
Console.Clear();
}
}
}
}

C# 控制台日历 region分区编写思想的更多相关文章

  1. C# 哥德巴赫猜想的实现方式 region分区编写

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  2. 【转帖】HBase之五:hbase的region分区

    HBase之五:hbase的region分区 https://www.cnblogs.com/duanxz/p/3154487.html 一.Region 概念 Region是表获取和分布的基本元素, ...

  3. 如何用C#完成控制台日历?

    本题目的最终要就是根据用户输入的年和月在控制台输出单月的日历信息,附加范围年在1900-2100之间,月的范围在1-12之间,当用户输入不在范围时要给予错误信息提示:已知条件是1900年1月1日为星期 ...

  4. HBase之五:hbase的region分区

    一.Region 概念 Region是表获取和分布的基本元素,由每个列族的一个Store组成.对象层级图如下: Table (HBase table) Region (Regions for the ...

  5. Java Calendar实现控制台日历

    public static void main(String[] args) throws IOException { //初始化日历对象 Calendar calendar = Calendar.g ...

  6. 用最笨的方法实现java控制台日历打印

    如果想用户自定义输入日期查询,可以通过Calendar的set方法和Scanner方法设置 Calendar类简单使用:https://blog.csdn.net/weixin_43670802/ar ...

  7. gtest测试代码编写思想

    mockXXX类 . testXXX类 . mock method 1. mockXXX 类,通常使用继承测试目标类的方法,来方便针对目标类的测试提供部分扩展功能,比如为protected 成员添加g ...

  8. VS2017创建控制台应用后,编写完代码调试正常,使用exe文件直接执行出现闪退情况解决方法。

    这是因为代码中包含的相对路径的原因. 解决办法:把项目中包含的所有相对路径修改为绝对路径. (个人觉得因为直接执行exe文件,默认打开在C盘的用户目录下.) 例如: std::string DATA_ ...

  9. .NET CORE与Spring Boot编写控制台程序应有的优雅姿势

    本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员.JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写 ...

随机推荐

  1. Java体系

    Java之父:詹姆斯·高斯林 java之前叫做“Oak”,后改名为Java.//Oak来源于橡树,java 来源爪哇岛的一种咖啡 Java语言平台 J2SE(Java 2 Platform Stand ...

  2. 严重性 代码 说明 项目 文件 行 禁止显示状态错误 C1128 节数超过对象文件格式限制: 请使用 /bigobj 进行编译。

    严重性 代码 说明 项目 文件 行 禁止显示状态错误 C1128 节数超过对象文件格式限制: 请使用 /bigobj 进行编译. 默认情况下,对象文件最多可存放 65,536 (2^16) 个可寻址的 ...

  3. Java环境中,word文档转PDF直接打开浏览而非下载

    在平台上,需要把文档直接浏览而非下载,实现方法是先把文档转为PDF文件, 但在linux系统中确实汉字字库,所以转换失败,以下是解决方法 后面正式服务器也要添加字库,不然会转换出乱码文件,处理步骤如下 ...

  4. 基于Spark的用户分析系统

    https://blog.csdn.net/ytbigdata/article/details/47154529

  5. c/c++编码规范(3)--google代码规范检测工具cpplint.py

    cpplint.py是来自google开源项目风格错误检测工具.它是一个python脚本,和google开源项目风格指南一同发布.下载地址:https://github.com/google/styl ...

  6. 【opencv】split

    opencv-split Divides a multi-channel array into several single-channel arrays. code ,,,,,,,,,,,}; Ma ...

  7. win10 1803 频繁死机,卡死不动

    摘自微软官网的解决办法,我的目测好像是可以了. 小娜搜索框输入“PowerShell”选择在管理员命令提示符下键入以下命令: Dism /Online /Cleanup-Image /ScanHeal ...

  8. CommMonitor8.0 串口过滤驱动 SDK DLL版本 C#/Delphi调用DEMO

    CommMonitor8.0 SDK DLL 版本,此版本是直接调用DLL. Delphi调用定义: constCommMOnitor8x = ‘CommMOnitor8x.dll’; typeTOn ...

  9. Navicat安装及使用

    一.安装Navicat 1.下载安装文件:navicat11.0.17_premium_cs_x86.exe(32位) 2.Oracle 的 Instance Client:instantclient ...

  10. Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)

    第十五篇(书中 6.1~6.9节 内容) 好的,昨天完成了第五章. 今天来看第六章. 总结重点: 1.如何对组件进行分组? 跟着做: 重点1:如何对组件进行分组? 首先,选中你想要组合的组件. 然后点 ...