提示:
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 }
整体代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }