代码
Calendar类
using System; using System.Collections.Generic; using System.Text; namespace B_CSharp_lianxi { class Calendar { #region 练习一:打印日历 /*1.在控制台中显示日历的方法 * -调用12遍月历 *2.在控制台中显示月历的方法 * -显示表头 Console.WriteLine("日\t一\t二\t......"); * -输出当月1号的星期数,输出空白(\t) * Console.Write("\t"); * -计算当月天数 * -每逢星期六换行 *3.根据年月日,计算星期数 *4.计算指定月份的天数 *5.判断闰年 * 2月闰年29天,平年28天 * 闰年:能被4整除且不能被100整除或能被400整除 * */ /// <summary> /// 根据年月日计算星期数的方法 /// </summary> /// <param name="year">年</param> /// <param name="month">月</param> /// <param name="day">日</param> /// <returns>星期数</returns> private static int GetWeekByDay(int year, int month, int day) { DateTime dt = new DateTime(year, month, day); return (int)dt.DayOfWeek; } /// <summary> /// 判断是否是闰年 /// </summary> /// <param name="year">年</param> /// <param name="month">月</param> /// <param name="day">日</param> /// <returns>是、否</returns> private static bool IsLeapYear(int year) { //方法一 //if(year % 4 == 0 && year %100!=0 || year % 400 == 0) //{ // return true; //} //else //{ // return false; //} //方法二 return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0); } private static int GetDaysByMonth(int year, int month) { //使用if 的嵌套 if (month >= 1 && month <= 12) { switch (month) { case 2: //方法一: if (IsLeapYear(year)) return 29; else return 28; //方法二: //return IsLeapYear(year) ? 29 : 28;//三元表达式 case 4: case 6: case 9: case 11: return 30; default: return 31; //不使用braek的原因是,return同样可打断swich case且力度更强.return可以打断方法 } } else return 0; /* //减少If的嵌套 if (month < 1 && month > 12) return 0; //把短路的情况放在上面 switch (month) { case 2: //方法一: if (IsLeapYear(year)) return 29; else return 28; //方法二: //return IsLeapYear(year) ? 29 : 28;//三元表达式 case 4: case 6: case 9: case 11: return 30; default: return 31; //不使用braek的原因是,return同样可打断swich case且力度更强.return可以打断方法 } */ } /// <summary> /// 打印月历 /// </summary> /// <param name="year"></param> /// <param name="month"></param> private static void PrintMonthCalendar(int year, int month) { //1.显示表头 Console.WriteLine("{0}年{1}月", year, month); Console.WriteLine("日\t一\t二\t三\t四\t五\t六"); //2.根据1号的星期数显示空白 int week = GetWeekByDay(year, month, 1); for (int i = 0; i < week; i++) { //Console.WriteLine("\t");//不可以这么写 Console.Write("\t");//不可以这么写 } //根据当月总天数。显示日 int days = GetDaysByMonth(year, month); for (int i = 1; i <= days; i++) { Console.Write(i + "\t"); if (GetWeekByDay(year, month, i) == 6) Console.WriteLine(); } //每逢周六换行 } public static void PrintYearCalendar(int year) { for (int i = 1; i <= 12; i++) { PrintMonthCalendar(year, i); Console.WriteLine(); } } #endregion } }
Program类
Console.WriteLine("请输入年份"); int year = int.Parse(Console.ReadLine()); Calendar.PrintYearCalendar(year);
欢迎大家指正纠错及完善。一起加油吧!!!