综合练习:双排月历

本文介绍了一个使用C#实现的程序,该程序能够并排打印两个月的日历视图。通过控制台输出,程序展示了如何处理两个不同月份的日期,并确保它们正确地对齐在同一行中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将两个月历并排打印
如果你可以独立完成,那说明你对编程已经有了一定的控制能力了

1None.gifpublicstaticvoidMain(string[]args)
2ExpandedBlockStart.gifContractedBlock.gifdot.gif{
3InBlock.gif
4InBlock.gif
5InBlock.gifSystem.DateTimedt1=newSystem.DateTime(2004,1,1);
6InBlock.gifSystem.DateTimedt2=newSystem.DateTime(2004,2,1);
7InBlock.gifSystem.DateTimetmpdt;
8InBlock.gifinttmpMonth1;//记录当前要操作的单月
9InBlock.gifinttmpMonth2;//记录当前要操作的偶月
10InBlock.gifintchange=0;//0为单月,1为偶月
11InBlock.gifchar[]weekChar="日一二三四五六".ToCharArray();
12InBlock.gif
13InBlock.gif//输出标题,每个标题之间空2个间隔,每个月之间空4个间隔
14InBlock.giffor(intj=0;j<=1;j++)
15ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
16InBlock.giffor(inti=0;i<=weekChar.Length-1;i++)
17ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
18InBlock.gifSystem.Console.Write("{0}",weekChar[i]);
19ExpandedSubBlockEnd.gif}

20InBlock.gifSystem.Console.Write("");
21ExpandedSubBlockEnd.gif}

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

37ExpandedSubBlockEnd.gif}

38InBlock.gifelse//不是本月就不要打了
39ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
40InBlock.gifSystem.Console.Write("");
41ExpandedSubBlockEnd.gif}

42ExpandedSubBlockEnd.gif}

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

51InBlock.gifelse
52ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{//否则不打印日期,只打印一个占位间隔
53InBlock.gifif(change==0&&tmpMonth1!=dt1.Month)
54ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
55InBlock.gifSystem.Console.Write("{0}","");
56ExpandedSubBlockEnd.gif}

57InBlock.gifif(change==1&&tmpMonth2!=dt2.Month)
58ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
59InBlock.gifSystem.Console.Write("{0}","");
60ExpandedSubBlockEnd.gif}

61ExpandedSubBlockEnd.gif}

62ExpandedSubBlockEnd.gif}

63InBlock.gifelse
64ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
65InBlock.gifSystem.Console.Write("{0}",tmpdt.Day);
66ExpandedSubBlockEnd.gif}

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

78InBlock.gifelse
79ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{//双月
80InBlock.gifdt2=tmpdt.AddDays(1);
81InBlock.gifSystem.Console.WriteLine("");//换行
82InBlock.giftmpdt=dt1;//交换控制
83ExpandedSubBlockEnd.gif}

84InBlock.gifchange=1-change;//切换标志
85ExpandedSubBlockEnd.gif}

86InBlock.gifelse//仅仅转到下一天
87ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{
88InBlock.giftmpdt=tmpdt.AddDays(1);
89InBlock.gifif(change==0)
90ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{dt1=tmpdt;}
91InBlock.gifelse
92ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif{dt2=tmpdt;}
93ExpandedSubBlockEnd.gif}

94InBlock.gif
95InBlock.gif//交换单偶月
96InBlock.gif
97ExpandedSubBlockEnd.gif}

98InBlock.gifwhile(tmpMonth1==dt1.Month||tmpMonth2==dt2.Month);//单月和偶月都结束
99InBlock.gif
100InBlock.gifSystem.Console.WriteLine();
101InBlock.gif
102InBlock.gif
103InBlock.gif
104InBlock.gif
105InBlock.gif
106InBlock.gif
107InBlock.gif
108InBlock.gif
109InBlock.gif
110InBlock.gif
111ExpandedBlockEnd.gif}
TLssCalendar (支持农历的月历控件) Version 1.10 发布这个控件是因为我在网上找不到支持农历的月历控件,就自己写了个,希望能有用。 您可以没有任何限制的使用、修改、分发本控件。但没有任何担保,甚至没有适合特定目的而隐含的担保。如果您修改了本控件,烦请发一份拷贝到<LuckMiky@21cn.com> 。 开发平台:PWin2000Pro + Delphi 7.0 主要功能; 1、在日历面板上同时显示公历和农历,农历部分仅支持公元1900.1.31到公元2100.12.31; 2、可以定制控件界面颜色和字体,类似TmonthCalendar,可以选择采用AAFont平滑字体边缘(有点慢); 3、控件字体大小根据控件大小自动适应; 4、支持鼠标和键盘或者代码选择日期; Home:每月的第一天 End:每月的最后一天 PageUp: 上一个月 Page:下一个月 四个方向键移动光标 5、提供了公历转农历和农历转公历函数,支持干支年、月、日;函数原形及调用方法请看代码。 本单元农历转换部分为 Mostone.Jiang 漠石(mostone@hotmail.com)的CnBase.pas,作了一点小小改动。由于控件字体过小,采用了***与月共舞工作室周劲羽***的AAFont来平滑字体显示,在此感谢2位,提供了这么好的东西给我们免费使用! Miky2004.01 更新历史: 2004-4-24 Ver 1.10 修正了网友happylife发现的Bug; 修改了Paint部分,不再使用DoubleBuffered,显示速度有很大改观; 添加了干支记日显示方式选项; 添加了keypress,keydown,keyup事件; 添加了编译指令{DEFINE AAFONT},如果你没有AAFont,请把第49行删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值