C#练习题:打印日历(控制台)

代码

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);

欢迎大家指正纠错及完善。一起加油吧!!!

上一篇:Python 3 日期和时间


下一篇:kotlin开发 inline内联函数的学习与记录