C#实现控制台打印年历



1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace test2._17
8 {
9 internal class Program
10 {
11 #region C#实现控制台打印年历
12 /**
13 * 1.在控制台中实现年历的方法
14 * 调用12遍历实现月历
15 * 2.在控制台中实现阅历的方法
16 * 显示表头 Console.WriteLine("日\t一\t二...")
17 * 计算当月一日星期数,输出空白(\t)
18 * Console.WriteLine(\t);
19 * 计算当月天数,输出1\t2\t...
20 * 每逢6换行
21 * 3.根据年月日,计算星期数
22 * 4.计算指定月份的天数
23 * 5.判断闰年的方法:
24 * 2月闰年29天 平年28天
25 * 年份能被4整除但是不能被100整除
26 * 年份被400整除
27 */
28
29 ///<summary>
30 ///根据年月日,计算星期数的方法
31 /// </summary>
32 /// <param name="year">年</param>
33 /// <param name="month">月</param>
34 /// <param name="day">天</param>
35 private static int GetWeekByDay(int year,int month,int day)
36 {
37 DateTime dt = new DateTime(year,month,day);
38 return (int)dt.DayOfWeek;
39 }
40 /// <summary>
41 /// 判断闰年
42 /// </summary>
43 /// <param name="year">月</param>
44 private static bool IsLeapYear( int year)
45 {
46 return(year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
47 }
48 /// <summary>
49 /// 获取一个月的天数
50 /// </summary>
51 /// <param name="year">年</param>
52 /// <param name="month">月</param>
53 /// <returns></returns>
54 private static int GetDayByMonth( int year,int month)
55 {
56 if (month < 1 || month > 12) return 0;
57 switch (month)
58 {
59 case 2:
60 /*if (IsLeapYear(year))
61 return 29;
62 else
63 return 28;*/
64 return IsLeapYear(year) ? 29 : 28;
65 case 4:
66 case 6:
67 case 9:
68 case 11:
69 return 30;
70 default:
71 return 31;
72
73 }
74 }
75 /// <summary>
76 /// 输出月历
77 /// </summary>
78 /// <param name="year">年</param>
79 /// <param name="month">月</param>
80
81 private static void PrintMonthCalendar(int year, int month)
82 {
83 //1.显示表头
84 Console.WriteLine("{0}年{1}月", year, month);
85 Console.WriteLine("日\t一\t二\t三\t四\t五\t六");
86 //2.计算每个月的1号是星期几
87 int week = GetWeekByDay(year, month, 1);
88 for(int i=0; i<week; i++)
89 Console.Write("\t");
90
91 //3.根据当月总天数,显示日
92 int days=GetDayByMonth(year, month);
93 for(int i = 1; i <= days; i++)
94 {
95 Console.Write(i+"\t");
96 //4.逢六换行
97 if (GetWeekByDay(year, month, i) == 6)
98 Console.WriteLine();
99 }
100 }
101 private static void PrintYearCalendar(int year)
102 {
103 for(int i=1; i<=12; i++)
104 {
105 PrintMonthCalendar(year, i);
106 Console.WriteLine();
107 }
108 }
109 #endregion
110
111 static void Main()
112 {
113 Console.WriteLine("请输入年份:");
114 int year = int.Parse(Console.ReadLine());
115 PrintYearCalendar(year);
116 }
117 }
118 }

C#实现控制台打印年历的更多相关文章

  1. 关于在Xcode控制台打印的注意点

    注意!!在控制台中打印语句的返回值,这句代码也算是被执行过了一次 比如在下列代码的if语句执行之前,现在控制台打印 [_dataBaseexecuteUpdate:createSql] 的布尔值 if ...

  2. mybatis3.2.3+spring3 控制台打印sql解决办法

    学习mybatis的时候遇到打印不出sql 的问题,在这里做个总结: 1:首先log4j.properties这样配置: log4j.rootLogger=DEBUG,console,R log4j. ...

  3. myeclipse 控制台打印空指针 ,黏贴控制台sql到plsql有结果集,异常处理

    信用公司框架,不够熟悉. 在完成嗲点登录后,写动态页面是遇到,了问题:myeclipse 控制台打印空指针 ,黏贴控制台sql到plsql有结果集,异常处理. 最后大神给看,在接口实现重写的方法里返回 ...

  4. VS2010-win32下cocos2dx控制台打印的方法

    在xcode中  直接使用printf 或者 cout<<""<<endl;可以直接在控制台打印 但是在VS2010 却死活不好用   真郁闷 ------ ...

  5. node 在控制台打印有色彩的输出

    在学习 node 过程中,因为没有找到有断点的调试方法,只能退而次之,在控制台打印调试. 但整个控制台的输出都是一种颜色,有时候很难找到自己需要的信息,这时,有颜色的打印就会帮上很大的忙. conso ...

  6. Spring Boot使用AOP在控制台打印请求、响应信息

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等. AOP简介 AOP全称Aspect Oriented Programming,面向切面,AOP主要实现的 ...

  7. Javascript控制台打印Object对象

    Javascript控制台打印Object对象 做项目的时候遇到一个问题,在调试代码时需要打印对象来查看具体数值,想了各种方法也没有实现,最后查资料知道了可以使用JSON.stringify()将ob ...

  8. vc++2010如何新建项目并在控制台打印helloworld

    关于写c++使用什么集成开发环境的问题其实挺纠结的.我找了好久找到codeblocks,发现这款IDE还是最适合用在最标准的c++语法环境中.其实先前装过vs2015旗舰版,但是这款软件太大了,非常消 ...

  9. Intellij IDEA 2017 控制台打印换行

    Intellij IDEA 2017 控制台打印的内容超过屏幕宽度了,请问怎么自动换行? 记得重启idea

  10. Spring Boot使用Log4j Implemented Over SLF4J生成日志并在控制台打印

    Spring Boot设置切面,执行方法的时候在控制台打印出来,并生成日志文件 引入依赖: <!--日志--> <dependency> <groupId>org. ...

随机推荐

  1. 【awk】找出两个文件中的不同值

    https://blog.csdn.net/weixin_33534991/article/details/116683524 awk 'NR==FNR{a[$0]}NR>FNR{ if(!($ ...

  2. TCP协议之三次握手(二)

    本节主要研究三次握手出现的一些异常情况和编程相关的知识: 上一节分析了三次握手的过程,本节会回答一些三次握手的小问题,然后利用linux系统调用实践一下简单的网络的编程. 三次握手的常见问题 Q 向一 ...

  3. Python Telnetlib模块连接网络设备

    # -*- coding: UTF-8 -*- import telnetlib import time import datetime import os import json Username= ...

  4. tidb配置haproxy

    1.安装haproxy wget https://www.haproxy.org/download/2.6/src/haproxy-2.6.2.tar.gz make clean make -j 8  ...

  5. WDA学习(19):UI Element:Table使用

    1.12 UI Element:Table使用 1.Table Filter and Sort 1.1创建Context节点; NODE_SFLIGHT, FILTER_COL:CARRID,CONN ...

  6. Unity 设计模式-简单工厂模式和其他好用的通用代码块

    1. 2.加法操作类 using System.Collections; using System.Collections.Generic; using UnityEngine; //加法操作类 pu ...

  7. HCIP-ICT实战进阶04-ISIS原理与配置

    HCIP-ICT实战进阶04-ISIS原理与配置 0 前言 IS-IS(Intermediate System to Intermediate System, 中间系统到中间系统)协议, 和OSPF一 ...

  8. Ajax同步和异步的区别,如何解决跨域的问题

    同步的概念应该是来自于OS中关于同步的概念:不同进程为协同完成某项工作而在先后次序上调整(通过阻塞,唤醒等方式),同步强调的是顺序性,谁先谁后,异步则不存在这种顺序性. 同步:浏览器访问服务器请求,用 ...

  9. Linux 使用ssh服务管理远程主机

    配置网络服务 配置网卡的4种方法: 创建网络会话 RHEL和CentOS系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态.可以使用 ...

  10. libev中的gcc内嵌函数

    在学习libev的过程中,遇到了大量的gcc内嵌函数,大多是为了提升性能而使用的,这里做一个汇总和介绍,并会持续更新 1.__builtin_expect:该函数是gcc引入的,为的是让程序员讲最有可 ...