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