C#小程序—输入年份,生成年历

一个看网课时做的小练习程序,几年前刚学编程时挣扎了一节课都没有写出来,再次挑战没想到思路清晰流畅,一口气写下来了。下面是所有的代码,可以参考借鉴,也请大佬们多多指教。 (〃'▽'〃)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace yearCalendar
{
    class Program
    {
        enum Month { 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月 };

        /// <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>
        /// <returns>ture是闰年,false不是闰年</returns>
        private static bool IsLeapYear(int year)
        {
            bool flag;
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
                flag = true;
            else
                flag = false;
            return flag;
        }

        /// <summary>
        /// 输入年份和月份,获取当月的天数
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        /// <returns>当月天数</returns>
        private static int GetMonthDay(int year, int month)
        {
            int dayFlag = 0;
            switch (month)
            {
                case 2:
                    bool flag = IsLeapYear(year);
                    if (flag == false) dayFlag = 1;
                    else dayFlag = 2;
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    dayFlag = 3;
                    break;
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    dayFlag = 4;
                    break;
                default:
                    Console.WriteLine("Something wrong when count the days of the month!");
                    break;
                    /*优秀代码参考
                    if (month < 1 || month > 12) return 0;
                    switch (month)
                    {
                        case 2:
                            return IsLeapYear(year) ? 29 : 28;
                        case 4:
                        case 6:
                        case 9:
                        case 11:
                            return 30;
                        default:
                            return 31;
                    }
                     */
            }
            if (dayFlag == 1) return 28;
            else if (dayFlag == 2) return 29;
            else if (dayFlag == 3) return 30;
            else if (dayFlag == 4) return 31;
            else
            {
                Console.WriteLine("Flag was wrong!");
                return 0;
            }
        }
  
        /// <summary>
        /// 输入年份和月份,打印月历
        /// </summary>
        /// <param name="year">年份</param>
        /// <param name="month">月份</param>
        private static void CreateMonth(int year, int month)
        {
            Console.Write(year + "年");
            Console.WriteLine(Enum.GetName(typeof(Month),month-1));
            Console.WriteLine("\r\n日\t一\t二\t三\t四\t五\t六");

            int weekDay = GetWeekByDay(year, month, 1);
            int monthDay = GetMonthDay(year, month);
            int flag = weekDay;
            for (int i = 0; i < weekDay; i++)
            {
                Console.Write("\t");
            }
            for (int i = 1; i < monthDay + 1; i++)
            {
                Console.Write("{0}\t",i);
                flag++;
                if (flag % 7 == 0)
                {
                    Console.Write("\r\n");
                }
            }
            Console.Write("\r\n");
            Console.WriteLine("------------------------------------------------------");
        }

        /// <summary>
        /// 输入年份,打印年历
        /// </summary>
        /// <param name="year">年份</param>
        private static void CreateYear(int year)
        {
            for (int i = 1; i < 13; i++)
            {
                CreateMonth(year, i);
            }
        }

        static void Main(string[] args)
        {
            //int weekday = GetWeekByDay(2020,3,10);
            //bool flag = IsLeapYear(2000);
            //int monthDay = GetMonthDay(2020,3);
            //Console.WriteLine(monthDay);
            //CreateMonth(2020,3);
            //Console.ReadLine();
            Console.WriteLine("Please enter the year:");
            int year = int.Parse(Console.ReadLine());
            CreateYear(year);
            Console.ReadLine();
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 《骆驼祥子》的作者老舍,原名周树人。这本书主要讲述了祥子是农村人,后来到城市谋生,来到北京后,他选择了当时城市...
    6e66ff26a9d2阅读 405评论 0 0
  • 几回回梦回年少, 建新花乡春满园; 家家院落花斗艳, 户户篱墙栀子环; 少时挑水古井去, 曲径幽转香袭卷; 绿叶白...
    王文英wwy阅读 232评论 0 0
  • 第十三章 首次参赛 “高吊杀搓推勾挑平抽挡发接发”十三字口诀在经过大半年的练习后,定点击球基本...
    朱子_阅读 181评论 0 0
  • 我心中最理想的职业是当一名影视演员,拍个影视剧之类的,哪怕做个群众甲或乙。但是,大半辈子已经过去了,别说参演,连个...
    翟小雨阅读 547评论 6 11