基于Visual Basic的星期计算问题程序设计与实现
2018-10-20吴川汇
摘要:星期计算计算问题是学习生活常见的一类数学问题,该问题需要考虑的因素较多、计算较为复杂。该文首先对星期计算问题进行了详细介绍,然后使用Visual Basic程序语言实现了该问题的数学计算方法,包括交互界面的设计、用户输入数据的合法性验证、以及具体星期计算程序实现等。实现的程序能方便地与用户进行交互,可应用于人们的日常生活中,解决人们的星期查询需求。
关键词:Visual Basic;星期计算问题;程序设计;应用实现
中图分类号:TP311.52文献标识码:A文章编号:1672-9129(2018)06-0031-02
Design and Implementation of Weekly Calculation Problem Based on Visual Basic
WU Chuanhui*
(Ruian Tangxia Middle School, Zhejiang Rui'an, 325200, China)
Abstract:The calculation of the week calculation problem is a kind of mathematics problem that is common in learning life. The problem needs to be considered more and the calculation is more complicated. This paper first introduces the week calculation problem in detail, and then uses the Visual Basic programming language to implement the mathematical calculation method of the problem, including the design of the interactive interface, the legality verification of the user input data, and the implementation of the specific week calculation program. The implemented program can easily interact with the user, can be applied to people's daily life, and solve people's weekly query needs.
Keywords:Visual Basic; week calculation problem; program design; application implementation
引用:吴川汇. 基于Visual Basic的星期计算问题程序设计与实现[J]. 数码设计, 2018, 7(6): 31-32.
Cite:WU Chuanhui. Design and Implementation of Weekly Calculation Problem Based on Visual Basic[J]. Peak Data Science, 2018, 7(6): 31-32.
引言
日常生活或学习过程中,会存在这样的问题,求某一指定的时间是星期几。比如:我出生那天是星期几?母亲节是每年5月的第二个星期天,那么10年后的母亲节将是5月几日?在以后的一百年间的圣诞节最有可能出现在星期几呢?……这些问题都可归类于星期转换问题。当我们试图去处理这类问题时,发现找到此问题的解决方法并不容易。通常,解决这类问题最有效的办法是查日历,但我们身边不会随时携带日历,也不存在这样的万年历,可以查到过去或将来历史中的任意一天。如果想在计算机编程中计算某一指定时间是星期几,预先将一本万年历存储于计算机中也是不现实的。那么,如何能够通过年、月、日推出某一天是星期几呢?
1 解决方法
查资料时发现,存在这样的一个星期转换公式,可以帮助我们计算星期问题。该公式的表示如下:
使用该公式计算星期的过程主要分为四步。
第一步,设置一个中间值f,对要计算的月份进行处理。如果要计算的月份是1月或者2月,则将f的值置为1;如果要计算的月份在2月之后,则将f置为0。用数学公式表示如下:
公式中的符号“[]”称作高斯符号,表示向下取整,即,取不大于原数的最大整数。
第二步,计算星期转换公式中的y。
y=年份-f
從式中可知道,当要计算的月份不是1月或2月时,y的值与年份相同。
第三步,计算星期转换公式中的m与d。d的值与日期相同,m值的计算如下:
m=月份+12f-2
第四步,将上述的y,m,d代入星期转换公式中,进而求得w的值。星期转换公式中的符号“mod”表示取余数。这样,w的取值范围在0、1、2、3、4、5、6之间,其分别表示星期日、星期一、星期二、星期三、星期四、星期五、星期六。
2 编程实现
本文使用Windows操作系统中的Visual Basic(VB)编程语言来实现星期转换公式。程序主要由交互界面,输入验证、星期计算等部分组成。
2.1 交互界面
交互界面的主要功能是提供界面以方便用户输入一个由年、月、日组成的时间,并且将由程序计算这一时间后所得的星期显示给用户,如图1所示。
2.2 输入验证
输入验证的主要功能是对用户输入时间中的年、月、日进行检验,以判断其是否合法。
(1)年份的判断。年份分为平年和闰年,闰年是比平年多出一段时间的年份,主要是为了弥补历法中规定的纪年与地球公转之间产生的时间差。在公历中,平年为365天,其中2月为28天,而闰年则有366天,其中2月有29天。目前采用的闰年的计算规则是这样的:
1)年份不可整除4,为平年;
2)年份可整除4但不可整除100,为闰年;
3)年份可整除100但不可整除400,为平年;
4)年份可整除400但不可整除3200,为闰年;
5)年份可整除3200,为平年。
比如,2018年不能被4整除,所以2018年是平年;2016年是闰年,其可以被4整除但不能被100整除;1900年能被100整除但不能被400整除,故为平年;2000年能被400整除,故为闰年。
需要指出的是,因为人们在1753年修改了日历系统,所以1753年之前日历中的星期是混乱的,所以我提出的程序并不支持1753年之前时间的星期计算。
(2)月份的判断。一年有且仅有12个月,所以用户输入的月份的值应该在1到12之间,不允许为其它的数。
(3)日期的判断。在公历中,月份分为大月和小月,大月31天,小月30天。1月、3月、5月、7月、8月、10月、12月这七个月为大月,有31天;4月、6月、9月和11月这四个月为小月,有30天。而2月在平年只有28天,在闰年则有29天。
Private Function checkDate(ByVal year As Integer, ByVal month As Integer, ByVal day As Integer) As Boolean
'如果年份小于1753,或月份不在1到12之间,或日期不在1到31之间,则返回False
If year <= 1753 Or month <= 0 Or month > 12 Or day <= 0 Or day > 31 Then
Return False
End If
'如果月份是大月,则返回True
If month = 1 Or month = 3 Or month = 5 Or month = 7 Or month = 8 Or month = 10 Or month = 12 Then
Return True
End If
'年份是闰年,且月份是2月,如果是日期大于29,则返回False,否则返回True
If (((year Mod 4 = 0) And (year Mod 100 <> 0)) Or (year Mod 400 = 0)) Then
If month = 2 And (day = 30 Or day = 31) Then
Return False
Else
Return True
End If
'年份是平年,且月份是2月,如果是日期大于28,则返回False,否则返回True
Else
If month = 2 And (day = 29 Or day = 30 Or day = 31) Then
Return False
Else
Return True
End If
End If
End Function
2.3 星期计算
对通过检验的时间,接下来作为输入,进而实现星期转换公式提供的方法,完成星期的转换计算。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'申明变量
Dim year As Integer
Dim month As Integer
Dim day As Integer
Dim f As Integer
Dim y As Integer
Dim m As Integer
Dim result As Integer
Dim resultText As String
'接收用戶收入的年(year)、月(month)、日(day)
year = CInt(TextBox1.Text)
month = CInt(TextBox2.Text)
day = CInt(TextBox3.Text)
'检查用户输入的年月日是否合法,不合法,则提示输入错误
If checkDate(year, month, day) = False Then
MsgBox("输入的日期有误", , "提示")
Return
End If
'星期计算
f = (14 - month) \ 12
y = year - f
m = month + 12 * f - 2
result = (day + y + ((31 * m) \ 12) + (y \ 4) - (y \ 100) + (y \ 400)) Mod 7
'将结果转换为星期表示
Select Case result
Case 0
resultText = "星期天"
Case 1
resultText = "星期一"
Case 2
resultText = "星期二"
Case 3
resultText = "星期三"
Case 4
resultText = "星期四"
Case 5
resultText = "星期五"
Case 6
resultText = "星期六"
End Select
'輸出最终结果
Label1.Text = year & "年" & month & “月” & day & “日是 ” &resultText
End Sub
算法定义了三个变量来接收用户输入的时间,即年、月、日。然后调用上一节实现的“checkDate()”函数检查用户输入的年月日是否合法,如果不合法,则提示输入错误。对通过验证的时间,继而实现星期计算公式,并将实现的结果转换为星期表示,并通过界面显示给用户。
3 结束语
在人们日常生活中时常需要星期查询,但星期的计算是个数学问题,该问题的计算方法较为复杂。本文通过Visual Basic编程语言,实现了一个星期查询程序,实现的程序能方便地与人们进行交互,并可应用于我们的日常生活中,解决人们的星期查询需求。
参考文献:
[1] 吴中宁.VB编程的常用技巧[J].电脑知识与技术,2017,13(11):85-86+90.
[2] 吴桂芹,杨晓燕. “讲练同步、任务驱动”模式在Visual C++教学中的应用[J].电脑知识与技术.2016(28)
[3] 臧军,王超.基于Visual Basic的圆柱螺纹量规尺寸计算[J].信息与电脑(理论版),2017(17):112-114.
[4] 王蕊.浅析Visual Basic应用开发程序中的错误处理程序[J].数字技术与应用,2015(06):157.
[5] 杨爱琴,顾卫江.Visual Basic程序设计课程中计算思维能力的培养[J].电脑知识与技术,2013,9(28):6348-6349+6361.
[6] 杨吉,王春红,常晶.Visual basic制做秒表[J].电脑知识与技术,2010,6(16): 4440.