




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、制作年歷2.1實(shí)訓(xùn)說(shuō)明2.1.1實(shí)驗(yàn)背景日歷是一種記載日期等相關(guān)信息的出版物,通常每頁(yè)顯示一日信息的叫日歷,每頁(yè)顯示一個(gè)月信息的叫月歷,每頁(yè)顯示全年信息的叫年歷。從日歷的誕生至今,它有多種的呈現(xiàn)形式,如掛歷、臺(tái)歷、年歷卡、電子日歷、萬(wàn)年歷等。2.1.2功能描述在生活中,日歷對(duì)于人們的旅程規(guī)劃、行程安排和工作計(jì)劃等有著重要的作用。下面將使用現(xiàn)階段學(xué)習(xí)過(guò)的知識(shí)來(lái)實(shí)現(xiàn)年歷的制作。具體需求如下所示:根據(jù)用戶輸入的年份輸出對(duì)應(yīng)的年歷用戶可輸入年份的取值范圍是15829999判斷31天的月份(1月、3月、5月、7月、8月、10月、12月)判斷30天的月份(4月、6月、9月、11月)實(shí)現(xiàn)閏年2月29天,平年
2、2月28天的功能將日期按照對(duì)應(yīng)的星期輸出展示按照3行4列的方式展示給定年份的年歷確定年歷中每月的星期輸出順序?yàn)椤叭?、一、二、三、四、五、六”接下?lái)對(duì)本階段案例的實(shí)現(xiàn)思路進(jìn)行系統(tǒng)的分析,將一個(gè)復(fù)雜的案例分解成多個(gè)階段,逐一進(jìn)行實(shí)現(xiàn),具體如下圖所示。判斷_世紀(jì)年or普通年判斷閏年or平年判斷331天or30天or28天or29天一制作一非周日的兇1號(hào)前填充空白=填充空白一XX年1月1日對(duì)應(yīng)的星期+計(jì)算一兇1日為周日,用0表示年歷實(shí)現(xiàn)思路圖從上圖可以清晰的看到,實(shí)現(xiàn)年歷的制作流程共分為6個(gè)階段,第1階段和第2階段的判斷是為了確定第3階段2月份的天數(shù),閏年2月份29天,平年28天。接著在第4階段將每月
3、的1日設(shè)置為周天,使用0表示,周一到周六分別使用16表示,循環(huán)輸出年歷。然后利用蔡勒公式計(jì)算用戶給定年份的1月1日對(duì)應(yīng)的星期。最后對(duì)每月1號(hào)不是周日的月份日期,在輸出前進(jìn)行空白填充。2.1.3必備技術(shù)(一)網(wǎng)頁(yè)技術(shù)(HTML+CSS)1. HTML網(wǎng)頁(yè)構(gòu)建的基本設(shè)計(jì);2. HTML網(wǎng)頁(yè)樣式的基本設(shè)計(jì);(二)PHP開發(fā)語(yǔ)言1 .變量2 .運(yùn)算符3 .if語(yǔ)句4 .for語(yǔ)句5 .1.4學(xué)時(shí)分配實(shí)訓(xùn)課程學(xué)時(shí)安排可參考下表。學(xué)時(shí)實(shí)訓(xùn)內(nèi)容第1學(xué)時(shí)判斷世紀(jì)年和普通年判斷閏年和平年第2學(xué)時(shí)判斷每月最大的日期輸出年月日對(duì)應(yīng)的日期6 .1.5實(shí)訓(xùn)I目標(biāo)1 .熟練掌握if、for、邏輯運(yùn)算符的使用。2 .掌握編
4、程實(shí)現(xiàn)網(wǎng)頁(yè)年歷的生成。2.2 準(zhǔn)備開發(fā)環(huán)境本項(xiàng)目支持如下軟件版本的運(yùn)行環(huán)境:Apache2.22.4PHP5.37.1支持WampServer、XAMPP等集成環(huán)境2.3 實(shí)訓(xùn)任務(wù)描述任務(wù)一:判斷世紀(jì)年和普通年【任務(wù)描述】通常來(lái)講,一百年是一個(gè)世紀(jì),因此,只要用戶給定的年份除以100,余數(shù)為0則表示該年份為世紀(jì)年,否則為普通年。編寫PHP文件calendar.php,具體代碼如下所示。1 ?php2 =2017;*3 /判斷世紀(jì)年和普通年,4 if(5year%100=0)4”5 echo$year.,年是世紀(jì)年6 else+7 echoSyear.,年是普通年ebI在上述代碼中,變量$yea
5、r用于保存用戶給出的4位數(shù)字表示的年份,如2008表示2008年,1998表示1998年。當(dāng)$丫32是世紀(jì)年時(shí),表達(dá)式“$year%100”的結(jié)果為0,與0相等結(jié)果為真,則if語(yǔ)句判斷為真,輸出第5行提示語(yǔ)句,否則輸出第7行的提示語(yǔ)句。值得一提的是,第4行的判斷語(yǔ)句中,表達(dá)式“$year%100”的結(jié)果有兩種情況,分別是0和任意正整數(shù),而任意正整數(shù)在條件判斷語(yǔ)句中會(huì)自動(dòng)轉(zhuǎn)換成布爾類型值true,0轉(zhuǎn)換成false。因此,可以將第48行代碼修改成如下形式。1if(yeaT號(hào)10011echo.年是普通年以3 )else4 echo.1年是世維年5 h在程序開發(fā)中,若在不考慮程序運(yùn)行的復(fù)雜程度,兩
6、種方式都可以。但若是要減少程序運(yùn)行的復(fù)雜度,則建議使用第2種編寫方式。任務(wù)二:判斷閏年和平年【任務(wù)描述】閏年是為了彌補(bǔ)因人為歷法規(guī)定造成的年度天數(shù)與地球?qū)嶋H公轉(zhuǎn)周期的時(shí)間差而設(shè)立的。補(bǔ)上時(shí)間差的年份為閏年。其中,對(duì)于世紀(jì)年和普通年的閏年算法有所不同,具體如下:普通年閏年的判斷條件,需要同時(shí)滿足除以4余數(shù)為0且除以100余數(shù)不為0的兩種情況世紀(jì)年閏年的判斷條件,需要同時(shí)滿足除以400余數(shù)為0且除以3200余數(shù)不為0的兩種情況接下來(lái),去掉上面輸出的提示信息,添加確定是閏年還是平年的判斷,繼續(xù)編寫PHP文件calendar.php,具體代碼如下。I1$leap=0;-2if(Syear學(xué)100+3i
7、f(SyeaH%4=0)占&(Syear皂100!=Q)4 $leap=1#-5 %6 elBe/7if($year&i4000)&$year%32C0!-0)上9$leap=1;gw|10卜上述第3-5行代碼用于判斷普通年是否為閏年,第79行代碼用于判斷世紀(jì)年是否為閏年。當(dāng)為閏年時(shí)將變量$leap的值設(shè)置1,方便后面的判斷。此外,if判斷后若只有一條執(zhí)行語(yǔ)句,則可以去掉“”,因此可以將上述第35行和第79行代碼修改成以下形式。if(year%4=0)&(5year看100!=)與1白曰口=1if($year%400=0)“($yeAt%32001=0)SLeap-1,值得一提的是,對(duì)干上述的
8、判斷還可以僅通過(guò)邏輯運(yùn)算符完成,具體代碼如下.$leap=$year%4=0)&(5year3100!=0);-$leap-($yiear%400-0)&$year%3200!=0)任務(wù)三:判斷每月最大的日期【任務(wù)描述】繼續(xù)編寫calendar.php文件,實(shí)現(xiàn)每月最大日期的判斷。具體代碼如下所示。1for(5m=1/$m-12;(.2確定每月的最大日期,3if=1|gin=3|S|7|=8|5th=10|$ni12*45max_d-31;a5|elaeif($m-2)(.6=$Leap?25:287el&e”曰$maK_d-30”|10卜上述第3行代碼用于判斷1月、3月、5月、7月、8月、1
9、0月或12月時(shí)每月最大的日期為31,第56行用于判斷2月在閏年時(shí)最大的日期為29,普通年時(shí)為28,其余的月份最大的日期則是30。接著可以通過(guò)for循環(huán)進(jìn)行測(cè)試查看,在上述第9行代碼后添加以下代碼,具體如下。for($d=1;=echo$d.6卜echo3在瀏覽器中運(yùn)行calendar.php文件,效果如下圖所示。從圖中可以清晰的看出每個(gè)月共有多少天,以及各個(gè)月份天數(shù)的差別。,mi畫niA1c+C由lujirwMdkrKijr4hp育E12J4567810U121314151171619IQ212223M25冊(cè)27熊外JOV12JSb78910111214lilbL/1H192021z2JJ2A
10、JS62728i%4867gq1。It12B1415時(shí)171H19202L222324252627?SWW11j2JJ56789W1L121314LS)6P10192021222J2526272B29JO12M5678910LI12131413昉H181920212213242S26?7?82$WMJ2J456789W1112:m41S16171019?0212223J42S2627282H012U56789Wil12B14116171B15202L2223242S2627JO3112J456789inU1415|6171RJ9102122J4?526?7?8加認(rèn)1J34567891IJ1L1
11、M314L&161720212J2425262726亞JO1254567B41011U13Hl&1617181920JL2223242526/7282SJO11J2345678910II1213141516L?19192021222324252627282SJOl?3d56789L0LI1314L5)617IB1920212223242526?72S3031任務(wù)四:輸由年月日對(duì)應(yīng)的日期【任務(wù)描述】1 .分行輸出年歷獲取到每月共多少天后,接下來(lái)將每個(gè)月的日期按照星期的設(shè)置格式在表格中輸出展示。其中,關(guān)于如何實(shí)現(xiàn)7個(gè)日期一行的設(shè)計(jì)思路如下所示。(1)根據(jù)需求分析,得到星期輸出順序?yàn)椤叭?、一、二、?/p>
12、、四、五、六”。(2)設(shè)定星期使用06之間的7位數(shù)字進(jìn)行表示,0表示星期日,1表示星期一,依次類推。(3)將用戶給定年份的每月1日對(duì)應(yīng)的星期變量$w這里先假設(shè)為0(4)在循環(huán)每月的日期時(shí),動(dòng)態(tài)為星期變量$w加1,并判斷$w的值是否大于6,若大于6,重置為0。(5)當(dāng)星期變量$w等于6且不是最后一天時(shí),設(shè)置換行按照上面的設(shè)計(jì)思路,修改calendar.php文件,并去掉測(cè)試查看代碼。在確定每月的最大日期后添加日期變量$w,用于保存假設(shè)的某年某月1日對(duì)應(yīng)的星期。具體代碼如下。1H循鄴輸出每月的日期.2for=1;$m-12*+$m3,/確定每月的最大日明5 /候設(shè)用.戶給定年份的1月1日為周日,使
13、用C表示-6 =。1etzho1*.$year.1年,.gm=1,;SeciioTBE55Af;9echo,10tor($d=1;$d-$max_d;+$d)-11 echot,.$d.七12 H如果是星期六且不是最后一天,則換行“13 tf&?d-$max_d)echoT*14 地置星期變動(dòng)15 $w5M+1)6?0:+l;v1G打17echo,TIB上述第78行用于輸出日歷的標(biāo)題和星期,第10行用于循環(huán)每月的日期,第11行用于在表格中輸出日期,第12行用于在表格中實(shí)現(xiàn)換行,即結(jié)束當(dāng)前行,并開始下一行。第15行用于設(shè)置星期的變動(dòng)。修改完成后,在瀏覽器中進(jìn)行預(yù)覽,效果如下圖所示。分行展示年歷從
14、上述的預(yù)覽效果中可以看出,每月的日期按照星期的格式展示,但是每個(gè)日期對(duì)應(yīng)的星期并不符合日期的算法。因此,接下來(lái)我們利用蔡勒公式計(jì)算出年月日對(duì)應(yīng)的星期。2.按星期輸出年歷在完成對(duì)應(yīng)星期的計(jì)算前,首先具體看一下蔡勒公式以及其涉及到的具體變量含義,具體如下。w=(d+1+2*m+3*(m+1)/5+y+y/4y/100+y/400)%7在上述給出的蔡勒公式中,共出現(xiàn)了4個(gè)變量,分別為w、v、m和do這些變量的具體含義如下所示。w:表示星期,其值取值范圍是06,0表示星期日,1表示星期一,依次類推。V:4位數(shù)字表示的年份,其有效可以計(jì)算的范圍是從1582年10月起。如2020表示2020年。m:表示月
15、份,其取值范圍是314,3表示3月,4表示4月,依次類推。值得注意的是,在蔡勒公式中,某年的1、2月要看作上一年的13、14月來(lái)計(jì)算。如2020年1月10日將要看作2019年的13月1日來(lái)計(jì)算。d:表示日,其取值范圍是131了解蔡勒公式的規(guī)定后,刪除calendar.php文件中設(shè)置的星期變量$w,在判斷每月的日期前添加以下代碼,具體如下:1 /根據(jù)蔡勒公式計(jì)算1月1日是星期幾.2 -$year-1;/年份減1*3 $m=13;/1月利用13表示一4 3d=15 $w=+1+2*$m+(int)3*+1)/5)+lint)/4)-(int)(5y/100)十Clnt)/400)%7;-在上述代
16、碼中,在利用蔡勒公式計(jì)算年月日對(duì)應(yīng)的星期時(shí),對(duì)于執(zhí)行除法(/)的運(yùn)算要利用強(qiáng)制類型轉(zhuǎn)換取整,防止出現(xiàn)小數(shù)的情況。其中,當(dāng)某月的1號(hào)不是星期日時(shí),我們需要在1號(hào)輸出前填充空白占位。繼續(xù)編寫calendar.php文件,添加填充空白的代碼。具體實(shí)現(xiàn)如下。甲2 for消d_1;Sd-Smax_d;卜3 /若某年某月1號(hào)不是星期日,在1號(hào)輸出前填充空白4 if($w&d=1)(5 echon6 ,7 echo11.?d.9 卜10.上述第4行代碼用于判斷當(dāng)前日期為1號(hào),且對(duì)應(yīng)的星期不是星期日時(shí),執(zhí)行第5行代碼填充空白。這里是通過(guò)合并單元格的方式實(shí)現(xiàn),當(dāng)然還可以采用其他方式,如添加空白占位符。為了讓年歷的展示更加的精美,可按照個(gè)人喜好設(shè)置CSS樣式,參考效果如圖所示。zLAJLrIQ.IJ?Jl/D,的GC。WQh。a12O170M30月H-=HE5nH-=ZEBn5-=DanH-=Dfin12345i12)11234(23,56?g7t91011Q1)45719W.C70W1112H)11U13M,51
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 法院文件保密管理制度
- 淺談我國(guó)空域管理制度
- 測(cè)量監(jiān)測(cè)監(jiān)理管理制度
- 浴室衛(wèi)生消毒管理制度
- 海外安保紀(jì)律管理制度
- 海港區(qū)小飯桌管理制度
- 海鮮市場(chǎng)衛(wèi)生管理制度
- 消毒器材使用管理制度
- 消防會(huì)議培訓(xùn)管理制度
- 消防器械使用管理制度
- 2022-2023學(xué)年廣東省云浮市高二物理第二學(xué)期期末統(tǒng)考試題含解析
- 后羅拉過(guò)橋搖臂-課程設(shè)計(jì)說(shuō)明書
- 《Python少兒編程》PPT課件(共11章)第二章 Python 編程基礎(chǔ)
- 配對(duì)樣本t檢驗(yàn)表格
- GB/T 91-2000開口銷
- 2021年汽車吊載人吊籃作業(yè)安全專項(xiàng)措施
- 質(zhì)量管理之CAPA教學(xué)課件
- 泌尿外科健康教育2膀胱沖洗健康宣教
- 焊接件通用技術(shù)要求
- 星子港件雜貨港區(qū)總平面布置與碼頭結(jié)構(gòu)設(shè)計(jì)
- 水墨印刷機(jī)操作規(guī)程
評(píng)論
0/150
提交評(píng)論