php中for循环制作年历_第1页
php中for循环制作年历_第2页
php中for循环制作年历_第3页
php中for循环制作年历_第4页
php中for循环制作年历_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、制作年历2.1实训说明2.1.1实验背景日历是一种记载日期等相关信息的出版物,通常每页显示一日信息的叫日历,每页显示一个月信息的叫月历,每页显示全年信息的叫年历。从日历的诞生至今,它有多种的呈现形式,如挂历、台历、年历卡、电子日历、万年历等。2.1.2功能描述在生活中,日历对于人们的旅程规划、行程安排和工作计划等有着重要的作用。下面将使用现阶段学习过的知识来实现年历的制作。具体需求如下所示:根据用户输入的年份输出对应的年历用户可输入年份的取值范围是15829999判断31天的月份(1月、3月、5月、7月、8月、10月、12月)判断30天的月份(4月、6月、9月、11月)实现闰年2月29天,平年

2、2月28天的功能将日期按照对应的星期输出展示按照3行4列的方式展示给定年份的年历确定年历中每月的星期输出顺序为“日、一、二、三、四、五、六”接下来对本阶段案例的实现思路进行系统的分析,将一个复杂的案例分解成多个阶段,逐一进行实现,具体如下图所示。判断_世纪年or普通年判断闰年or平年判断331天or30天or28天or29天一制作一非周日的凶1号前填充空白=填充空白一XX年1月1日对应的星期+计算一凶1日为周日,用0表示年历实现思路图从上图可以清晰的看到,实现年历的制作流程共分为6个阶段,第1阶段和第2阶段的判断是为了确定第3阶段2月份的天数,闰年2月份29天,平年28天。接着在第4阶段将每月

3、的1日设置为周天,使用0表示,周一到周六分别使用16表示,循环输出年历。然后利用蔡勒公式计算用户给定年份的1月1日对应的星期。最后对每月1号不是周日的月份日期,在输出前进行空白填充。2.1.3必备技术(一)网页技术(HTML+CSS)1. HTML网页构建的基本设计;2. HTML网页样式的基本设计;(二)PHP开发语言1 .变量2 .运算符3 .if语句4 .for语句5 .1.4学时分配实训课程学时安排可参考下表。学时实训内容第1学时判断世纪年和普通年判断闰年和平年第2学时判断每月最大的日期输出年月日对应的日期6 .1.5实训I目标1 .熟练掌握if、for、逻辑运算符的使用。2 .掌握编

4、程实现网页年历的生成。2.2 准备开发环境本项目支持如下软件版本的运行环境:Apache2.22.4PHP5.37.1支持WampServer、XAMPP等集成环境2.3 实训任务描述任务一:判断世纪年和普通年【任务描述】通常来讲,一百年是一个世纪,因此,只要用户给定的年份除以100,余数为0则表示该年份为世纪年,否则为普通年。编写PHP文件calendar.php,具体代码如下所示。1 ?php2 =2017;*3 /判断世纪年和普通年,4 if(5year%100=0)4”5 echo$year.,年是世纪年6 else+7 echoSyear.,年是普通年ebI在上述代码中,变量$yea

5、r用于保存用户给出的4位数字表示的年份,如2008表示2008年,1998表示1998年。当$丫32是世纪年时,表达式“$year%100”的结果为0,与0相等结果为真,则if语句判断为真,输出第5行提示语句,否则输出第7行的提示语句。值得一提的是,第4行的判断语句中,表达式“$year%100”的结果有两种情况,分别是0和任意正整数,而任意正整数在条件判断语句中会自动转换成布尔类型值true,0转换成false。因此,可以将第48行代码修改成如下形式。1if(yeaT号10011echo.年是普通年以3 )else4 echo.1年是世维年5 h在程序开发中,若在不考虑程序运行的复杂程度,两

6、种方式都可以。但若是要减少程序运行的复杂度,则建议使用第2种编写方式。任务二:判断闰年和平年【任务描述】闰年是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。其中,对于世纪年和普通年的闰年算法有所不同,具体如下:普通年闰年的判断条件,需要同时满足除以4余数为0且除以100余数不为0的两种情况世纪年闰年的判断条件,需要同时满足除以400余数为0且除以3200余数不为0的两种情况接下来,去掉上面输出的提示信息,添加确定是闰年还是平年的判断,继续编写PHP文件calendar.php,具体代码如下。I1$leap=0;-2if(Syear学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行代码用于判断世纪年是否为闰年。当为闰年时将变量$leap的值设置1,方便后面的判断。此外,if判断后若只有一条执行语句,则可以去掉“”,因此可以将上述第35行和第79行代码修改成以下形式。if(year%4=0)&(5year看100!=)与1白曰口=1if($year%400=0)“($yeAt%32001=0)SLeap-1,值得一提的是,对干上述的

8、判断还可以仅通过逻辑运算符完成,具体代码如下.$leap=$year%4=0)&(5year3100!=0);-$leap-($yiear%400-0)&$year%3200!=0)任务三:判断每月最大的日期【任务描述】继续编写calendar.php文件,实现每月最大日期的判断。具体代码如下所示。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月时每月最大的日期为31,第56行用于判断2月在闰年时最大的日期为29,普通年时为28,其余的月份最大的日期则是30。接着可以通过for循环进行测试查看,在上述第9行代码后添加以下代码,具体如下。for($d=1;=echo$d.6卜echo3在浏览器中运行calendar.php文件,效果如下图所示。从图中可以清晰的看出每个月共有多少天,以及各个月份天数的差别。,mi画niA1c+C由lujirwMdkrKijr4hp育E12J4567810U121314151171619IQ212223M25册27熊外JOV12JSb78910111214lilbL/1H192021z2JJ2A

10、JS62728i%4867gq1。It12B1415时171H19202L222324252627?SWW11j2JJ56789W1L121314LS)6P10192021222J2526272B29JO12M5678910LI12131413昉H181920212213242S26?7?82$WMJ2J456789W1112:m41S16171019?0212223J42S2627282H012U56789Wil12B14116171B15202L2223242S2627JO3112J456789inU1415|6171RJ9102122J4?526?7?8加认1J34567891IJ1L1

11、M314L&161720212J2425262726亚JO1254567B41011U13Hl&1617181920JL2223242526/7282SJO11J2345678910II1213141516L?19192021222324252627282SJOl?3d56789L0LI1314L5)617IB1920212223242526?72S3031任务四:输由年月日对应的日期【任务描述】1 .分行输出年历获取到每月共多少天后,接下来将每个月的日期按照星期的设置格式在表格中输出展示。其中,关于如何实现7个日期一行的设计思路如下所示。(1)根据需求分析,得到星期输出顺序为“日、一、二、三

12、、四、五、六”。(2)设定星期使用06之间的7位数字进行表示,0表示星期日,1表示星期一,依次类推。(3)将用户给定年份的每月1日对应的星期变量$w这里先假设为0(4)在循环每月的日期时,动态为星期变量$w加1,并判断$w的值是否大于6,若大于6,重置为0。(5)当星期变量$w等于6且不是最后一天时,设置换行按照上面的设计思路,修改calendar.php文件,并去掉测试查看代码。在确定每月的最大日期后添加日期变量$w,用于保存假设的某年某月1日对应的星期。具体代码如下。1H循邺输出每月的日期.2for=1;$m-12*+$m3,/确定每月的最大日明5 /候设用.户给定年份的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 地置星期变动15 $w5M+1)6?0:+l;v1G打17echo,TIB上述第78行用于输出日历的标题和星期,第10行用于循环每月的日期,第11行用于在表格中输出日期,第12行用于在表格中实现换行,即结束当前行,并开始下一行。第15行用于设置星期的变动。修改完成后,在浏览器中进行预览,效果如下图所示。分行展示年历从

14、上述的预览效果中可以看出,每月的日期按照星期的格式展示,但是每个日期对应的星期并不符合日期的算法。因此,接下来我们利用蔡勒公式计算出年月日对应的星期。2.按星期输出年历在完成对应星期的计算前,首先具体看一下蔡勒公式以及其涉及到的具体变量含义,具体如下。w=(d+1+2*m+3*(m+1)/5+y+y/4y/100+y/400)%7在上述给出的蔡勒公式中,共出现了4个变量,分别为w、v、m和do这些变量的具体含义如下所示。w:表示星期,其值取值范围是06,0表示星期日,1表示星期一,依次类推。V:4位数字表示的年份,其有效可以计算的范围是从1582年10月起。如2020表示2020年。m:表示月

15、份,其取值范围是314,3表示3月,4表示4月,依次类推。值得注意的是,在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算。如2020年1月10日将要看作2019年的13月1日来计算。d:表示日,其取值范围是131了解蔡勒公式的规定后,删除calendar.php文件中设置的星期变量$w,在判断每月的日期前添加以下代码,具体如下:1 /根据蔡勒公式计算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、码中,在利用蔡勒公式计算年月日对应的星期时,对于执行除法(/)的运算要利用强制类型转换取整,防止出现小数的情况。其中,当某月的1号不是星期日时,我们需要在1号输出前填充空白占位。继续编写calendar.php文件,添加填充空白的代码。具体实现如下。甲2 for消d_1;Sd-Smax_d;卜3 /若某年某月1号不是星期日,在1号输出前填充空白4 if($w&d=1)(5 echon6 ,7 echo11.?d.9 卜10.上述第4行代码用于判断当前日期为1号,且对应的星期不是星期日时,执行第5行代码填充空白。这里是通过合并单元格的方式实现,当然还可以采用其他方式,如添加空白占位符。为了让年历的展示更加的精美,可按照个人喜好设置CSS样式,参考效果如图所示。zLAJLrIQ.IJ?Jl/D,的GC。WQh。a12O170M30月H-=HE5nH-=ZEBn5-=DanH-=Dfin12345i12)11234(23,56?g7t91011Q1)45719W.C70W1112H)11U13M,51

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论