论文部分内容阅读
摘要:介绍了利用VB编程实现万年历的解法、思路、程序源代码及运行结果。
关键词:万年历 平年 闰年 VB 源程序
中图分类号:TP312 文献标识码:B 文章编号:1002-2422(2008)01-0015-02
1 问题的解法
制作万年历,首先要计算出这一年的一月一日是星期几,其次计算这一年是否为闰年,以便确定该年二月份是多少天,最后,再依次排出该年的年历。
根据历法,按下面公式计算,就可以知道任意一年的某月、某日是星期儿。公式如下:
S=x-I int((x-1/4)-int((x-1)/100) int((x-1)/400) C
其中x是公元的年数,c是从这一年的元旦算起到这天为止(包括这一天在内)的日数,int((x-1)/4)、int((x-1)/100)、int((x-1)/400)分别表示(x-1)/4、(X-1)/100、(x-1)/400的整数部分。
求出S后,再用7去除。若余数为零则这天是星期日;若不为零,则余数是几这一天就是星期几。
例如:求2006年10月1日是星期几。
C=(31 28 31 30 31 30 31 31 30 1)=274
S=2006-1 int((2006-1)/4)-int((2006-1)/100) int((2006-1)/400) 274
=2005 501-20 5 274=2765
2765÷7=395……0
所以,2006年10月1日是星期日。
2 程序設计思路
(1)由键盘输入年(year1)的值;
(2)判断所输入的年份是否为闰年。由历法可知,若该年的年数不能被4整除,则该年为平年,即2月份为28天;若该年的年数能被4整除,且不能被100整除,则该年为闰年,即2月份为29天;若能被400整除,则该年也为闰年:
(3)计算这一年每个月的第一天是星期几(m)。为了以后计算方便,免得重复计算,分别将m-1的值赋给数组元素c(1)~c(12):
(4)按所需要的格式输出该年的年历:先输出年号,再输出每个月份的月份号,之后在每个月份的月份导下输出星期日至星期六的一个汉字,本例使用“日”~“六”,最后在每月的星期“日”~“六”下输出该月的每一天相应的号数:
(5)关于变量及几个自定义子过程的简要说明:变量allmonthday表示每月的总天数:数组a(O)~a(6)表示周“日”~“六”:c(1)~c(12)分别表示1~12每月的第一天是星期几;v表示2月份总天数。
3 程序界面设计
在窗体界面中,主要控件为图片框(名称为pie1),用于输出年历,其AutoRedraw属性设置为True。
4 VB源程序
5 结束语
源程序已经在vB6下調试通过,还可以将窗体中的图片框控件换成RichTextBox控件,这样会使输出的万年历样式更美观。
关键词:万年历 平年 闰年 VB 源程序
中图分类号:TP312 文献标识码:B 文章编号:1002-2422(2008)01-0015-02
1 问题的解法
制作万年历,首先要计算出这一年的一月一日是星期几,其次计算这一年是否为闰年,以便确定该年二月份是多少天,最后,再依次排出该年的年历。
根据历法,按下面公式计算,就可以知道任意一年的某月、某日是星期儿。公式如下:
S=x-I int((x-1/4)-int((x-1)/100) int((x-1)/400) C
其中x是公元的年数,c是从这一年的元旦算起到这天为止(包括这一天在内)的日数,int((x-1)/4)、int((x-1)/100)、int((x-1)/400)分别表示(x-1)/4、(X-1)/100、(x-1)/400的整数部分。
求出S后,再用7去除。若余数为零则这天是星期日;若不为零,则余数是几这一天就是星期几。
例如:求2006年10月1日是星期几。
C=(31 28 31 30 31 30 31 31 30 1)=274
S=2006-1 int((2006-1)/4)-int((2006-1)/100) int((2006-1)/400) 274
=2005 501-20 5 274=2765
2765÷7=395……0
所以,2006年10月1日是星期日。
2 程序設计思路
(1)由键盘输入年(year1)的值;
(2)判断所输入的年份是否为闰年。由历法可知,若该年的年数不能被4整除,则该年为平年,即2月份为28天;若该年的年数能被4整除,且不能被100整除,则该年为闰年,即2月份为29天;若能被400整除,则该年也为闰年:
(3)计算这一年每个月的第一天是星期几(m)。为了以后计算方便,免得重复计算,分别将m-1的值赋给数组元素c(1)~c(12):
(4)按所需要的格式输出该年的年历:先输出年号,再输出每个月份的月份号,之后在每个月份的月份导下输出星期日至星期六的一个汉字,本例使用“日”~“六”,最后在每月的星期“日”~“六”下输出该月的每一天相应的号数:
(5)关于变量及几个自定义子过程的简要说明:变量allmonthday表示每月的总天数:数组a(O)~a(6)表示周“日”~“六”:c(1)~c(12)分别表示1~12每月的第一天是星期几;v表示2月份总天数。
3 程序界面设计
在窗体界面中,主要控件为图片框(名称为pie1),用于输出年历,其AutoRedraw属性设置为True。
4 VB源程序

5 结束语
源程序已经在vB6下調试通过,还可以将窗体中的图片框控件换成RichTextBox控件,这样会使输出的万年历样式更美观。