综合练习:双排月历

来源:互联网 发布:js throw 编辑:程序博客网 时间:2024/04/29 10:06
将两个月历并排打印
如果你可以独立完成,那说明你对编程已经有了一定的控制能力了

  1public static void Main(string[] args)
  2        {
  3
  4
  5            System.DateTime dt1 = new System.DateTime(200411);
  6            System.DateTime dt2 = new System.DateTime(200421);
  7            System.DateTime tmpdt;
  8            int tmpMonth1;//记录当前要操作的单月
  9            int tmpMonth2;//记录当前要操作的偶月
 10            int change = 0;//0为单月,1为偶月
 11            char[] weekChar = "日一二三四五六".ToCharArray();
 12
 13            //输出标题,每个标题之间空2个间隔,每个月之间空4个间隔
 14            for (int j = 0; j <= 1; j++)
 15            {
 16                for (int i = 0; i <= weekChar.Length - 1; i++)
 17                {
 18                    System.Console.Write("{0}  ", weekChar[i]);
 19                }

 20                System.Console.Write("    ");
 21            }

 22            System.Console.WriteLine();
 23            tmpMonth1 = dt1.Month; tmpMonth2 = dt2.Month;
 24            tmpdt = dt1;//将要打印的月交给打印控制
 25
 26            do//控制月
 27            {
 28                //定位每月的第一个打印位置(跳出需要打印月的不要打印)
 29                if (tmpdt.Day == 1)
 30                {//如果是当前控制月的第一天,先需要打印定位
 31                    if (tmpMonth1 == dt1.Month && tmpMonth2 == dt2.Month)
 32                    {
 33                        for (int i = 0; i <= (int)tmpdt.DayOfWeek - 1; i++)
 34                        {
 35                            System.Console.Write("{0}{1}""  ""  ");
 36                        }

 37                    }

 38                    else//不是本月就不要打了
 39                    {
 40                        System.Console.Write("");
 41                    }

 42                }

 43
 44                //打印每一天
 45                if (tmpdt.Day < 10)//如果日期<10,在前面多打一个空格
 46                {//正常情况正常打印
 47                    if (tmpMonth1 == dt1.Month && tmpMonth2 == dt2.Month)
 48                    {
 49                        System.Console.Write(" {0}  ", tmpdt.Day);
 50                    }

 51                    else
 52                    {//否则不打印日期,只打印一个占位间隔
 53                        if (change == 0 && tmpMonth1 != dt1.Month)
 54                        {
 55                            System.Console.Write(" {0}  "" ");
 56                        }

 57                        if (change == 1 && tmpMonth2 != dt2.Month)
 58                        {
 59                            System.Console.Write(" {0}  "" ");
 60                        }

 61                    }

 62                }

 63                else
 64                {
 65                    System.Console.Write("{0}  ", tmpdt.Day);
 66                }

 67
 68                //处理周六的情况
 69                if (tmpdt.DayOfWeek == System.DayOfWeek.Saturday)
 70                {//打印周六后是打印月间隔(单月)还是换行(偶月),同时收回打印控制
 71
 72                    if (change == 0)
 73                    {//单月
 74                        dt1 = tmpdt.AddDays(1);
 75                        System.Console.Write("    ");//月间隔
 76                        tmpdt = dt2;//交换控制
 77                    }

 78                    else
 79                    {//双月
 80                        dt2 = tmpdt.AddDays(1);
 81                        System.Console.WriteLine("");//换行
 82                        tmpdt = dt1;//交换控制
 83                    }

 84                    change = 1 - change;//切换标志
 85                }

 86                else//仅仅转到下一天
 87                {
 88                    tmpdt = tmpdt.AddDays(1);
 89                    if (change == 0)
 90                    { dt1 = tmpdt; }
 91                    else
 92                    { dt2 = tmpdt; }
 93                }

 94
 95                //交换单偶月
 96
 97            }

 98            while (tmpMonth1 == dt1.Month || tmpMonth2 == dt2.Month);//单月和偶月都结束
 99
100            System.Console.WriteLine();
101
102
103
104
105
106
107
108
109
110
111        }
原创粉丝点击