//万年历输入年份月份查找当月的日历 #region Console.WriteLine("==========================Max Jiang的万年历========================= "); int[] daysArr = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; Console.Write("请输入 1900 至 2099 年之间的年份:"); int inputYear = Convert.ToInt32(Console.ReadLine()); Console.Write("请输入查询的月份:"); int inputMonth = Convert.ToInt32(Console.ReadLine()); int yearDays = 0; for (int year = 1900; year <= inputYear - 1; year++) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { yearDays += 366; } else { yearDays += 365; } } //Console.WriteLine(yearDays); int monthDays = 0; Console.WriteLine("---------------------第" + inputYear + "年------------第" + inputMonth + "月份-------------------- "); for (int month = 0; month < inputMonth - 1; month++) { if ((inputYear % 4 == 0 && inputYear % 100 != 0) || inputYear % 400 == 0) { daysArr[1] = 29; monthDays += daysArr[month]; } else { daysArr[1] = 28; monthDays += daysArr[month]; } } //Console.Write(monthDays); yearDays += monthDays; //计算出输入的前一月的天数总和 ////这是将知道的每月的第一天星期几,放在相对应的周几 int dayOfWeek = yearDays % 7 + 1; //通过总天数计算周数,加1为了计算下一月的第一天星期几 //Console.WriteLine("本月第一天是星期" + dayOfWeek); int[,] weeks = new int[(daysArr[inputMonth - 1] / 7) + 1, 7];//二位数组,加载周 Console.WriteLine("星期一 星期二 星期三 星期四 星期五 星期六 星期日 "); int cols = 0; int m = 1; switch (dayOfWeek) { case 1: cols = 0; break; case 2: cols = 1; break; case 3: cols = 2; break; case 4: cols = 3; break; case 5: cols = 4; break;//通过列cols承载星期几 case 6: cols = 5; break; case 7: cols = 6; break; default: break; } for (int row = 0; row < (daysArr[inputMonth - 1] / 7) + 1; row++) { if (cols != 0) { for (int i = 0; i < cols; i++) { weeks[row, i] = 0;//如果新月份的第一天不是星期一,用空填充星期 Console.Write(" "); } } for (; cols < 7; cols++)//通过cols给每一列赋值,也就是天数 { if (m <= daysArr[inputMonth - 1])//小于没月份的天数 { weeks[row, cols] = m; Console.Write("