c#从控制台输入年月,控制台输出当月日历。

时间:2024-04-16 22:20:42

提示:

  1、1900年1月1日是星期一;

 

  2、判断该年是否是闰年;

 1 //判断今年是不是闰年
 2         static bool LeapYear(int year)
 3         {
 4             if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
 5             {
 6                 return true;
 7             }
 8             else
 9             {
10                 return false;
11             }
12         }

  3、计算本月的天数;

 1 int day = 0;//声明一个变量,保存当月天数
 2             //计算当月的天数
 3             switch (month)
 4             {
 5                 case 12: day = 31; break;
 6                 case 11: day = 30; break;
 7                 case 10: day = 31; break;
 8                 case 9: day = 30; break;
 9                 case 8: day = 31; break;
10                 case 7: day = 31; break;
11                 case 6: day = 30; break;
12                 case 5: day = 31; break;
13                 case 4: day = 30; break;
14                 case 3: day = 31; break;
15                 case 2: day = SN?29:28; break;
16                 case 1: day = 31; break;
17             }

  4、计算本月第一天是星期几;

 1 //计算输入日期中月份第一天是星期几
 2         private static int XingQi(int year, int month,bool SN)
 3         {
 4             int sum = 0;//声明一个保存天数的变量
 5             //当年以前的总天数
 6             for (int i = 1900; year > i; i++)
 7             {
 8                 if (LeapYear(year))
 9                 {
10                     sum += 366;
11                 }
12                 else
13                 {
14                     sum += 365;
15                 }
16             }
17             //当月以前的总天数(平年)
18             switch (month)
19             {
20                 case 1: sum += 0; break;
21                 case 2: sum += 31; break;
22                 case 3: sum += 59; break;
23                 case 4: sum += 90; break;
24                 case 5: sum += 120; break;
25                 case 6: sum += 151; break;
26                 case 7: sum += 181; break;
27                 case 8: sum += 212; break;
28                 case 9: sum += 243; break;
29                 case 10: sum += 273; break;
30                 case 11: sum += 304; break;
31                 case 12: sum += 334; break;
32             }
33             //当年是闰年,且月份大于2,天数加1
34             if(SN==true && month>2)
35             {
36                 sum++;
37             }
38             //这里天数加1,是应为前面天数为当月前的总天数,而我们要得到的是当月第一天的星期对应数值
39             return (sum + 1) % 7;
40         }

  5、按格式输出当月日历。

 1 //按格式输出本月日历
 2             Console.WriteLine("日\t一\t二\t三\t四\t五\t六");
 3             for (int i = 1; i <= xq + day; i++)
 4             {
 5                 if (i <= xq)
 6                 {
 7                     Console.Write("\t");
 8                 }
 9                 else
10                 {
11                     Console.Write(i-xq+"\t");
12                 }
13                 //换行
14                 if(i%7==0)
15                     Console.WriteLine();
16             }

整体代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 
  6 
  7 namespace ConsoleApplication1
  8 {
  9     class Program
 10     {  
 11         static void Main(string[] args)
 12         {
 13             //提示用户输入年月
 14             Console.WriteLine("请输入年月");
 15             int year =Convert.ToInt32(Console.ReadLine());//声明一个年变量并接收保存用户的输入
 16             int month = Convert.ToInt32(Console.ReadLine());//声明一个年变量并接收保存用户的输入
 17             bool SN=LeapYear(year);//调用闰年判断函数,判断当年是不是闰年
 18             int xq=XingQi(year,month,SN);//声明一个变量,保存星期的对应数值
 19 
 20 
 21             int day = 0;//声明一个变量,保存当月天数
 22             //计算当月的天数
 23             switch (month)
 24             {
 25                 case 12: day = 31; break;
 26                 case 11: day = 30; break;
 27                 case 10: day = 31; break;
 28                 case 9: day = 30; break;
 29                 case 8: day = 31; break;
 30                 case 7: day = 31; break;
 31                 case 6: day = 30; break;
 32                 case 5: day = 31; break;
 33                 case 4: day = 30; break;
 34                 case 3: day = 31; break;
 35                 case 2: day = SN?29:28; break;
 36                 case 1: day = 31; break;
 37             }
 38 
 39             //按格式输出本月日历
 40             Console.WriteLine("日\t一\t二\t三\t四\t五\t六");
 41             for (int i = 1; i <= xq + day; i++)
 42             {
 43                 if (i <= xq)
 44                 {
 45                     Console.Write("\t");
 46                 }
 47                 else
 48                 {
 49                     Console.Write(i-xq+"\t");
 50                 }
 51                 //换行
 52                 if(i%7==0)
 53                     Console.WriteLine();
 54             }
 55 
 56                 Console.ReadLine();
 57         }
 58 
 59         //计算输入日期中月份第一天是星期几
 60         private static int XingQi(int year, int month,bool SN)
 61         {
 62             int sum = 0;//声明一个保存天数的变量
 63             //当年以前的总天数
 64             for (int i = 1900; year > i; i++)
 65             {
 66                 if (LeapYear(year))
 67                 {
 68                     sum += 366;
 69                 }
 70                 else
 71                 {
 72                     sum += 365;
 73                 }
 74             }
 75             //当月以前的总天数(平年)
 76             switch (month)
 77             {
 78                 case 1: sum += 0; break;
 79                 case 2: sum += 31; break;
 80                 case 3: sum += 59; break;
 81                 case 4: sum += 90; break;
 82                 case 5: sum += 120; break;
 83                 case 6: sum += 151; break;
 84                 case 7: sum += 181; break;
 85                 case 8: sum += 212; break;
 86                 case 9: sum += 243; break;
 87                 case 10: sum += 273; break;
 88                 case 11: sum += 304; break;
 89                 case 12: sum += 334; break;
 90             }
 91             //当年是闰年,且月份大于2,天数加1
 92             if(SN==true && month>2)
 93             {
 94                 sum++;
 95             }
 96             //这里天数加1,是应为前面天数为当月前的总天数,而我们要得到的是当月第一天的星期对应数值
 97             return (sum + 1) % 7;
 98         }
 99 
100         //判断今年是不是闰年
101         static bool LeapYear(int year)
102         {
103             if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
104             {
105                 return true;
106             }
107             else
108             {
109                 return false;
110             }
111         }
112         
113 
114     }
115 }
完整代码