将两个月历并排打印
如果你可以独立完成,那说明你对编程已经有了一定的控制能力了
如果你可以独立完成,那说明你对编程已经有了一定的控制能力了
1
public
static
void
Main(
string
[] args)
2 {
3
4
5 System.DateTime dt1 = new System.DateTime(2004, 1, 1);
6 System.DateTime dt2 = new System.DateTime(2004, 2, 1);
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 }
2 {
3
4
5 System.DateTime dt1 = new System.DateTime(2004, 1, 1);
6 System.DateTime dt2 = new System.DateTime(2004, 2, 1);
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 }
本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806890