摘要:星期計(jì)算計(jì)算問題是學(xué)習(xí)生活常見的一類數(shù)學(xué)問題,該問題需要考慮的因素較多、計(jì)算較為復(fù)雜。該文首先對星期計(jì)算問題進(jìn)行了詳細(xì)介紹,然后使用Visual Basic程序語言實(shí)現(xiàn)了該問題的數(shù)學(xué)計(jì)算方法,包括交互界面的設(shè)計(jì)、用戶輸入數(shù)據(jù)的合法性驗(yàn)證、以及具體星期計(jì)算程序?qū)崿F(xiàn)等。實(shí)現(xiàn)的程序能方便地與用戶進(jìn)行交互,可應(yīng)用于人們的日常生活中,解決人們的星期查詢需求。
關(guān)鍵詞:Visual Basic;星期計(jì)算問題;程序設(shè)計(jì);應(yīng)用實(shí)現(xiàn)
中圖分類號:TP311.52文獻(xiàn)標(biāo)識碼: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ì)算問題程序設(shè)計(jì)與實(shí)現(xiàn)[J]. 數(shù)碼設(shè)計(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.
引言
日常生活或?qū)W習(xí)過程中,會存在這樣的問題,求某一指定的時(shí)間是星期幾。比如:我出生那天是星期幾?母親節(jié)是每年5月的第二個(gè)星期天,那么10年后的母親節(jié)將是5月幾日?在以后的一百年間的圣誕節(jié)最有可能出現(xiàn)在星期幾呢?……這些問題都可歸類于星期轉(zhuǎn)換問題。當(dāng)我們試圖去處理這類問題時(shí),發(fā)現(xiàn)找到此問題的解決方法并不容易。通常,解決這類問題最有效的辦法是查日歷,但我們身邊不會隨時(shí)攜帶日歷,也不存在這樣的萬年歷,可以查到過去或?qū)須v史中的任意一天。如果想在計(jì)算機(jī)編程中計(jì)算某一指定時(shí)間是星期幾,預(yù)先將一本萬年歷存儲于計(jì)算機(jī)中也是不現(xiàn)實(shí)的。那么,如何能夠通過年、月、日推出某一天是星期幾呢?
1? 解決方法
查資料時(shí)發(fā)現(xiàn),存在這樣的一個(gè)星期轉(zhuǎn)換公式,可以幫助我們計(jì)算星期問題。該公式的表示如下:
使用該公式計(jì)算星期的過程主要分為四步。
第一步,設(shè)置一個(gè)中間值f,對要計(jì)算的月份進(jìn)行處理。如果要計(jì)算的月份是1月或者2月,則將f的值置為1;如果要計(jì)算的月份在2月之后,則將f置為0。用數(shù)學(xué)公式表示如下:
公式中的符號“[]”稱作高斯符號,表示向下取整,即,取不大于原數(shù)的最大整數(shù)。
第二步,計(jì)算星期轉(zhuǎn)換公式中的y。
y=年份-f
從式中可知道,當(dāng)要計(jì)算的月份不是1月或2月時(shí),y的值與年份相同。
第三步,計(jì)算星期轉(zhuǎn)換公式中的m與d。d的值與日期相同,m值的計(jì)算如下:
m=月份+12f-2
第四步,將上述的y,m,d代入星期轉(zhuǎn)換公式中,進(jìn)而求得w的值。星期轉(zhuǎn)換公式中的符號“mod”表示取余數(shù)。這樣,w的取值范圍在0、1、2、3、4、5、6之間,其分別表示星期日、星期一、星期二、星期三、星期四、星期五、星期六。
2 ?編程實(shí)現(xiàn)
本文使用Windows操作系統(tǒng)中的Visual Basic(VB)編程語言來實(shí)現(xiàn)星期轉(zhuǎn)換公式。程序主要由交互界面,輸入驗(yàn)證、星期計(jì)算等部分組成。
2.1? 交互界面
交互界面的主要功能是提供界面以方便用戶輸入一個(gè)由年、月、日組成的時(shí)間,并且將由程序計(jì)算這一時(shí)間后所得的星期顯示給用戶,如圖1所示。
2.2 ?輸入驗(yàn)證
輸入驗(yàn)證的主要功能是對用戶輸入時(shí)間中的年、月、日進(jìn)行檢驗(yàn),以判斷其是否合法。
(1)年份的判斷。年份分為平年和閏年,閏年是比平年多出一段時(shí)間的年份,主要是為了彌補(bǔ)歷法中規(guī)定的紀(jì)年與地球公轉(zhuǎn)之間產(chǎn)生的時(shí)間差。在公歷中,平年為365天,其中2月為28天,而閏年則有366天,其中2月有29天。目前采用的閏年的計(jì)算規(guī)則是這樣的:
1)年份不可整除4,為平年;
2)年份可整除4但不可整除100,為閏年;
3)年份可整除100但不可整除400,為平年;
4)年份可整除400但不可整除3200,為閏年;
5)年份可整除3200,為平年。
比如,2018年不能被4整除,所以2018年是平年;2016年是閏年,其可以被4整除但不能被100整除;1900年能被100整除但不能被400整除,故為平年;2000年能被400整除,故為閏年。
需要指出的是,因?yàn)槿藗冊?753年修改了日歷系統(tǒng),所以1753年之前日歷中的星期是混亂的,所以我提出的程序并不支持1753年之前時(shí)間的星期計(jì)算。
(2)月份的判斷。一年有且僅有12個(gè)月,所以用戶輸入的月份的值應(yīng)該在1到12之間,不允許為其它的數(shù)。
(3)日期的判斷。在公歷中,月份分為大月和小月,大月31天,小月30天。1月、3月、5月、7月、8月、10月、12月這七個(gè)月為大月,有31天;4月、6月、9月和11月這四個(gè)月為小月,有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? 星期計(jì)算
對通過檢驗(yàn)的時(shí)間,接下來作為輸入,進(jìn)而實(shí)現(xiàn)星期轉(zhuǎn)換公式提供的方法,完成星期的轉(zhuǎn)換計(jì)算。
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)
'檢查用戶輸入的年月日是否合法,不合法,則提示輸入錯(cuò)誤
If checkDate(year, month, day) = False Then
MsgBox("輸入的日期有誤", , "提示")
Return
End If
'星期計(jì)算
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
'將結(jié)果轉(zhuǎn)換為星期表示
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
'輸出最終結(jié)果
Label1.Text = year & "年" & month & “月” & day & “日是? ” &resultText
End Sub
算法定義了三個(gè)變量來接收用戶輸入的時(shí)間,即年、月、日。然后調(diào)用上一節(jié)實(shí)現(xiàn)的“checkDate()”函數(shù)檢查用戶輸入的年月日是否合法,如果不合法,則提示輸入錯(cuò)誤。對通過驗(yàn)證的時(shí)間,繼而實(shí)現(xiàn)星期計(jì)算公式,并將實(shí)現(xiàn)的結(jié)果轉(zhuǎn)換為星期表示,并通過界面顯示給用戶。
3? 結(jié)束語
在人們?nèi)粘I钪袝r(shí)常需要星期查詢,但星期的計(jì)算是個(gè)數(shù)學(xué)問題,該問題的計(jì)算方法較為復(fù)雜。本文通過Visual Basic編程語言,實(shí)現(xiàn)了一個(gè)星期查詢程序,實(shí)現(xiàn)的程序能方便地與人們進(jìn)行交互,并可應(yīng)用于我們的日常生活中,解決人們的星期查詢需求。
參考文獻(xiàn):
[1]????? 吳中寧.VB編程的常用技巧[J].電腦知識與技術(shù),2017,13(11):85-86+90.
[2]????? 吳桂芹,楊曉燕. “講練同步、任務(wù)驅(qū)動”模式在Visual C++教學(xué)中的應(yīng)用[J].電腦知識與技術(shù).2016(28)
[3]????? 臧軍,王超.基于Visual Basic的圓柱螺紋量規(guī)尺寸計(jì)算[J].信息與電腦(理論版),2017(17):112-114.
[4]????? 王蕊.淺析Visual Basic應(yīng)用開發(fā)程序中的錯(cuò)誤處理程序[J].數(shù)字技術(shù)與應(yīng)用,2015(06):157.
[5]????? 楊愛琴,顧衛(wèi)江.Visual Basic程序設(shè)計(jì)課程中計(jì)算思維能力的培養(yǎng)[J].電腦知識與技術(shù),2013,9(28):6348-6349+6361.
[6]????? 楊吉,王春紅,常晶.Visual basic制做秒表[J].電腦知識與技術(shù),2010,6(16): 4440.