已知道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. angular中子组件通过@Output 触发父组件的方 法

    1. 子组件引入 Output 和 EventEmitter import { Component, OnInit ,Input,Output,EventEmitter} from '@angular ...

  2. selenium元素input的value值设置【node.js版本】

    driver.executeScript(‘document.getElementById(“id”).value=“value”’); 这个操作就类似于//$("#id").va ...

  3. linux ubuntu 如何解决warning: no newline at end of file?

    今天写了一段代码, 是在Windows下编辑的, 保存后放在linux系统下编译. gcc和cc都产生以下的警告: a.h:1:2: warning: no newline at end of fil ...

  4. Flutter中的事件广播event_bus的基本使用

    官方包参考地址: https://pub.dev/packages/event_bus https://github.com/marcojakob/dart-event-bus 1.pubspec.y ...

  5. Qt编写自定义控件37-发光按钮(会呼吸的痛)

    一.前言 这个控件是好早以前写的,已经授权过好几个人开源过此控件代码,比如红磨坊小胖,此控件并不是来源于真实需求,而仅仅是突发奇想,类似于星星的闪烁,越到边缘越来越淡,定时器动态改变边缘发光的亮度,产 ...

  6. Jsoup-简单爬取知乎推荐页面(附:get_agent())

    总览 今天我们就来小用一下Jsoup,从一个整体的角度来看一看爬虫 一个基本的爬虫框架包括: [x] 解析网页 [x] 失败重试 [x] 抓取内容保存至本地 [x] 多线程抓取 *** 分模块讲解 将 ...

  7. (十七)jdbc(Java Data Base Connectivity,java数据库连接)基础使用

    一.JDBC相关概念介绍 1.1 JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习 ...

  8. redis配置用户认证密码

    1,下载安装 Download, extract and compile Redis with: $ wget http://download.redis.io/releases/redis-3.2. ...

  9. Spring Cloud(8):日志及分布式跟踪(Sleuth&Zipkin)

    简介 在微服务架构中,项目中前端发起一个请求,后端可能跨几个服务调用才能完成这个请求.如果系统越来越庞大,服务之间的调用与被调用关系就会变得很复杂,那么这时候我们需要分析具体哪一个服务出问题了就会显得 ...

  10. linux EXT4格式分区扩容

    1.查看现有的分区大小  2.关机增加磁盘大小为100G  3.查看磁盘扩容后状态 lsblk或dh -TH 4.进行分区扩展磁盘,保留根目录的起止位置.  5.删除根分区,不要保存  6.创建分区, ...