j_0047.gif日历,几乎每个人都见过,看着很简单的一个东西,但却在我们的生活中不可缺少。以前从未关注过它,现在却要实现这个过程。手机上的万年历原来是这么来的。一起去看看吧!

namespace prjCalender
{
    //默认1900年一月一日是星期一
   //创建一个MyCalender类,在里面写出实现的过程
    class MyCalender
    {
        //Main方法中写出程序怎样执行
        static void Main(string []args)
        {
            //创建一个类的对象的引用t,用来访问类中的函数
            MyCalender r = new MyCalender();
            r.PrintYearCalender(2013);//访问并调用类中的函数
                                                                        
        }
        //打印月日历
        public void PrintMonthCalender(int year, int month)
        {
            //调用函数打印月日历的头
            PrintMonthCalenderHeader(year,month);
            //调用函数打印月日历的身体
            PrintMonthCalenderBody(year,month);
                                                   
        }
        //打印月日历身体的具体函数
        private void  PrintMonthCalenderBody(int year, int month)
        {
            //调用函数计算某年某月有多少天
            int days=GetMonthDays(year,month);
            //调用函数计算某年某月的第一天是星期几
            int weeks = GetWeeksDayByFirstDayOfMonth(year,month);
            //某天是星期几就在月日历的头部输出几个空格(将日期与周几对应起来)
            for (int i = 0; i < weeks; i++)
            {
                Console.Write("\t");
            }
            for (int i = 1; i <= days; i++)
            {
                Console.Write("{0}\t",i);
                if ((i+weeks)%7==0)//如果日期加上当月一号的星期几的数能被7整除,则需要换行输出该日期的后一天
                {
                    Console.Write("\n");//换行
                }
            }
            Console.Write("\n");//将一个月打印结束后换行打印下一个月
        }
        //计算某年某月的第一天是星期几的具体函数
        private int GetWeeksDayByFirstDayOfMonth(int year, int month)
        {
            int days = 0;
            //调用函数计算1900年到所求年(题中是2013年)的天数
            for (int i = 1900; i < year; i++)
            {
                days += GetYearDays(i);
            }
            //调用函数计算2013年到这一年某个月一号前一天的总天数与2013年提案的所有天数
            for (int i = 1; i < month; i++)
            {
                days += GetMonthDays(year,i);
            }
            //求出那一天(某月第一天)到底是星期几
            int weeks=(days%7+1)%7;
            return weeks;
        }
        //得到某一年的天数的具体函数
        private int GetYearDays(int year)
        {
            //如是闰年返回366天,否则返回365天
            if (IsLeapYear(year))
            {
                return 366;
            }
            return 365;
        }
        //得到某一月的天数的具体函数
        private int GetMonthDays(int year, int month)
        {
            //用分值结构来求比较容易
            switch (month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    return 31;
                case 4:
                case 6:
                case 9:
                case 11:
                    return 30;
                case 2:
                    if (IsLeapYear(year))
                    {
                        return 29;
                    }
                    return 28;
                default:
                    return 0;
            }
        }
        //判断一年是不是闰年并返回一个bool类型的结果
        private bool IsLeapYear(int year)
        {
            if (year%4==0&&year%100!=0||year%400==0)
            {
                return true;
            }
            return false;
        }
        //打印月日历头部的具体函数
        private void PrintMonthCalenderHeader(int year, int month)
        {
            Console.WriteLine("{0}年{1}月",year,month);
            Console.WriteLine("周日\t周一\t周二\t周三\t周四\t周五\t周六\t");
        }
        //调用打印月日历的函数打印一整年的日历
        public void PrintYearCalender(int year)
        {
            for (int i = 1; i <= 12; i++)
            {
                PrintMonthCalender(year,i);
            }
        }
                                                   
    }
}


神奇的日历就出来了

j_0047.gif174854731.png

            j_0001.gif加油,Ajax的姑娘!j_0016.gif