综合练习:双排月历

本文介绍了一个使用C#实现的并排打印两个月份的日历的方法。通过控制台输出,能够清晰展示两个月份的日历,并在单月和双月之间进行切换。此程序涉及日期和时间的操作、循环和条件判断等编程技巧。
将两个月历并排打印
如果你可以独立完成,那说明你对编程已经有了一定的控制能力了

  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        }
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、付费专栏及课程。

余额充值