“万年历”雏鹰
日历,几乎每个人都见过,看着很简单的一个东西,但却在我们的生活中不可缺少。以前从未关注过它,现在却要实现这个过程。手机上的万年历原来是这么来的。一起去看看吧!
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); } } } }
神奇的日历就出来了!
转载于:https://blog.51cto.com/broncho/1264662