【C#基础】控制台月历

这两天看了一下B站的unityC#基础,看到一个经典例题,也是说月历的。

稍微做了一下,在这里分享一下我个人的代码方法。

PS:本方法主要基于三个语句

获得天数:

int DateTime.DaysInMonth(year, month)

获得当天为星期几:

DateTime date = new DateTime(year, month, day);

int date.DayOfWeek (这个转int可以输出0~6,对应星期日到星期六);

下面是使用案例

1.Main直接用来交互

        static void Main()
        {
            Console.WriteLine("请输入年份");
            int year = AnswerYear();
            Console.WriteLine("请输入月份");
            int month = AnswerMonth();
            Console.WriteLine("{0}年{1}月的月历", year, month);
            Display(year,month);//把年份和月份传到display里
            Console.WriteLine("再试一次吗?Y/N");
            do
            {
                var answer = Console.ReadLine()?.ToLower();
                switch (answer)
                {
                    case "y":Main();return;
                    case "n":return;
                    default:Console.WriteLine("无法识别的输入,请重新输入");break;
                }
            } while (true);
        }

2.AnswerYear和AnswerMonth的检测。

因为我的方法需要用到datetime(里面规定年份范围为1~9999,月份范围为1~12,否则会报错。)

        private static int AnswerYear()
        {
            int answer;
            do
            {
                int.TryParse(Console.ReadLine(), out answer);
                if (answer >= 1 & answer <= 9999) 
                {
                    break;
                }
                else
                {
                    Console.WriteLine("数据类型错误,请重新输入");
                }
            } while (true);
            return answer;
        }//判断输入的年份是否符合要求并输出int数

3.显示(display)函数

        private static void Display(int year,int month)
        {
            int days = DateTime.DaysInMonth(year, month);//获得当月天数
            Console.WriteLine("日\t一\t二\t三\t四\t五\t六");//表头
            //逐日编入表中
            for (int day = 1; day<=days; day++) 
            {
                DatesLocation(year, month, day);//处理位置的函数
                Console.Write(day);
            }
            Console.Write("\r\n");
        }

4.日期位置DatesLocation函数

        private static void DatesLocation(int year,int month,int day)
        {
            DateTime date = new DateTime(year, month, day);
            
            if (day == 1)//处理第一天的位置
            {
                for(int i= (int)date.DayOfWeek; i>0; i--)//第一天的星期数即为空格数
                {
                    Console.Write("\t");
                }
            }
            else if ((int)date.DayOfWeek == 0)//处理星期天的转行
            {
                Console.Write("\r\n");
            }
            else//同行的日期空格
            {
                Console.Write("\t");
            }
        }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值