日期:2014-05-18  浏览次数:20759 次

高手帮忙,算日历的问题要求如下:排序,参数
参数要求:
开始年,结束年,每列排序3个月(在控制台实现效果)
效果如下:
08.01 08.02 08.03
周日 周一 周二 周三 周四 周五 周六 周日 周一 周二 周三 周四 周五 周六 周日 周一 周二 周三 周四 周五 周六
  1 2 3 4 5 1 2 3 1 2 3 4 5 6 7
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
30 31 30 31 30 31

08.04 08.05 08.06
。。。。
 有没那个高手帮忙解决下

------解决方案--------------------
using System;
using System.Collections.Generic;
using System.Text;

namespace CalendarSystem
{
class Program
{
static void Main(string[] args)
{
CreateCalendar(2008, 2015);
}

public static void CreateCalendar(int startDate, int endDate)
{
int start = startDate;
int end = endDate;
int months = (end - start + 1) * 12; //月
for (int i = 0; i < months / 3; i++)
{
Console.Write(String.Format("{0}\t\t\t", (GetMonthText(start, i * 3)).ToString()));
Console.Write(String.Format("{0}\t\t\t", (GetMonthText(start, i * 3 + 1)).ToString()));
Console.WriteLine(String.Format("{0}", (GetMonthText(start, i * 3 + 2)).ToString()));

Console.Write("日一二三四五六\t\t");
Console.Write("日一二三四五六\t\t");
Console.WriteLine("日一二三四五六");


for (int j = 0; j < 6; j++)
{
Console.Write(String.Format("{0}\t\t", SetDay(start, i * 3, j)));
Console.Write(String.Format("{0}\t\t", SetDay(start, i * 3 + 1, j)));
Console.WriteLine(String.Format("{0}", SetDay(start, i * 3 + 2, j)));
}
}
Console.ReadLine();
}

public static string GetMonthText(int startYear, int addMonth)
{
DateTime dt = new DateTime(startYear, 1, 1);
DateTime dtReturn = dt.AddMonths(addMonth);
return dtReturn.Year + "." + dtReturn.Month;
}

public static string SetDay(int startYear, int addMonth,double weekNum)
{
StringBuilder sb = new StringBuilder();
DateTime dt = new DateTime(startYear, 1, 1);
DateTime dtFirst = dt.AddMonths(addMonth);
DateTime dtWeekFirst ;
if (weekNum == 0)
{
dtWeekFirst = dtFirst;
}
else
{
double dStart = weekNum * 7 - Convert.ToDouble(dtFirst.DayOfWeek);
//if (dStart > dtFirst.AddMonths(1).AddDays(-1).Day)
//{
// return "";
//}
dtWeekFirst = dtFirst.AddDays(dStart);
}

string space = GetSpace(Convert.ToInt32(dtWeekFirst.DayOfWeek));
sb.Append(space);
for (double i = Convert.ToDouble(dtWeekFirst.DayOfWeek); i < 7; i++)
{
if (dtWeekFirst.AddDays(i).DayOfYear > dtFirst.AddMonths(1).AddDays(-1).DayOfYear || dtWeekFirst.AddDays(i).Year > dtFirst.AddMonths(1).AddDays(-1).Year)
{
sb.Append(" ");
continue;
}



if (dtWeekFirst.DayOfWeek != 0)
{
sb.Append(dtWeekFirst.AddDays(i - Convert.ToDouble(dtW