这不能叫万年历吧。这玩意儿就练练手,有需求的时候能计算出来就行了。

解决方案 »

  1.   

    请问,怎么知道你的“万年历”是什么呢?怎样测试?
      

  2.   

    写出的目的、测试用例,这些文字描述远比你的代码更重要!
      

  3.   

    玩了一下,看起来是Start方法是入口。文档应该写清楚一点。可以考虑把PrintYMD等方法改为private,这样用户一眼就看出只能调用Start方法了。感觉楼主虽然把代码包装成为Calendar类,但内部还是过程式的思想。PrintYMD名称与内容不符,动词应该用Input或Read。YMD不符合C#命名法。《.NET设计规范》反对用缩写,反对全大写。至少应该是Ymd,更好的是用全名。ClcAllDay也一样,不要用缩写。ClcAllDay的参数是先year再month,但GetMonthDay变成了先month再year。不知道这样的变化有什么好处。楼主算法的核心在这里,本质上用循环,一年一年一月一月地把日子加起来。C#与C++不一样,不区分变量的定义和声明。楼主写
                int allDay = 0;//总天数
                allDay = ClcAllDay(year, month);//得到总天数
    一开始赋值为0是完全没必要的。如果装了VS插件Resharper,它会提示你这是句废话。FormPrintMonth的名称里我不知道Form是什么意思,day和allDay有什么区别。尝试在代码级别上就写清楚,再辅以注释。你的注释说“该月天数”和“总天数”,我也不明所以,幸好我不用自己调用这个方法。这个方法里你写了Console.WriteLine("\n");。请尝试改用Environment.NewLine。·如果楼主不是要练习日期算法,那么可以直接使用.net framework提供的日历类(System.Globalization.Calendar)。GregorianCalendar表示公历。如果楼主不想练习循环,想直接用数学公式,可以参考 《兩日期相差天數計算》