基于JavaScript(网页脚本语言)编写的万年历(含源文件)
《软件系列课程设计——基于JavaScript (网页脚本语言)编写的万年历》
班级
学号
姓名
指导教师
成绩______________________________
2010年06 月18 日
目录
摘要………………………………………………………………………一、引言…………………………………………………………………
1.应用背景………………………………………………………
2.可行性分析……………………………………………………
3.研究路线及内容………………………………………………
二、系统开发工具………………………………………………………
三、系统设计(详细设计)………………………………………………
四、结束语
1.总结…………………………………………………………………
2.参考文献……………………………………………………………
摘要
极品万年历,带有带有电子时钟,可看不同时区时间,阳历、农历同步显示,鼠标指出,
天干地支计时即出。
一、引言
1,、应用背景
随着科技的发展,人们渴望着把现实生活中的林林总总都搬到电脑上,大到工程设计,小到极品万年历。
2、可行性分析
方便查看农历重要的日子,方便外出办公校正不同区时……
3、研究路线及内容
通过用JavaScript语言编写代码,并利用文本保存为HTTP或HTML格式。并试图实现一下内容:
1、可看阳历;
2、可看农历;
3、可看时间;
4、可看天干地支计时;
5、可划分区时。
二、系统开发工具
JavaScript网页脚本语言,IE、360安全浏览器或其他浏览器。
三、系统设计
1、程序源码
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)
var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
var Animals=new Array("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");
var solarTerm = new Array("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至")
var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,2633 43,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758)
var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十')
var nStr2 = new Array('初','十','廿','卅','')
var monthName = new Array("1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月");
//国历节日*表示放假日
var sFtv = new Array(
"0101*元旦",
"0214 情人节",
"0308 妇女节",
"0312 植树节",
"0315 消费者权益日",
"0401 愚人节",
"0501 劳动节",
"0504 青年节",
"0509 郝维节",
"0512 护士节",
"0601 儿童节",
"0701 建党节香港回归纪念",
"0801 建军节",
"0808 父亲节",
"0816 燕衔泥节",
"0909 毛泽东逝世纪念",
"0910 教师节",
"0928 孔子诞辰",
"1001*国庆节",
"1006 老人节",
"1024 联合国日",
"1112 孙中山诞辰纪念",
"1220 澳门回归纪念",
"1225 圣诞节",
"1226 毛泽东诞辰纪念")
//农历节日*表示放假日
var lFtv = new Array(
"0101*春节、弥勒佛圣诞!",
"0106 定光佛圣诞",
"0115 元宵节",
"0208 释迦牟尼佛出家",
"0215 释迦牟尼佛涅槃",
"0209 海空上师生日!",
"0219 观世音菩萨圣诞",
"0221 普贤菩萨圣诞",
"0316 准提菩萨圣诞",
"0404 文殊菩萨圣诞",
"0408 释迦牟尼佛圣诞",
"0415 佛吉祥日——释迦牟尼佛诞生、成道、涅槃三期同一庆(即南传佛教国家的卫塞节)", "0505 端午节",
"0513 伽蓝菩萨圣诞",
"0603 护法韦驮尊天菩萨圣诞",
"0619 观世音菩萨成道——此日放生、念佛,功德殊胜",
"0707 七夕情人节",
"0713 大势至菩萨圣诞",
"0715 中元节",
"0724 龙树菩萨圣诞",
"0730 地藏菩萨圣诞",
"0815 中秋节",
"0822 燃灯佛圣诞",
"0909 重阳节",
"0919 观世音菩萨出家纪念日",
"0930 药师琉璃光如来圣诞",
"1005 达摩祖师圣诞",
"1107 阿弥陀佛圣诞",
"1208 释迦如来成道日,腊八节",
"1224 小年",
"1229 华严菩萨圣诞",
"0100*除夕")
//某月的第几个星期几
var wFtv = new Array(
"0520 母亲节",
"0716 合作节",
"0730 被奴役国家周")
/***************************************************************************** 日期计算
*****************************************************************************/ //====================================== 传回农历y年的总天数
function lYearDays(y) {
var i, sum = 348
for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-1900] & i)? 1: 0
return(sum+leapDays(y))
}
//====================================== 传回农历y年闰月的天数
function leapDays(y) {
if(leapMonth(y)) return((lunarInfo[y-1900] & 0x10000)? 30: 29)
else return(0)
}
//====================================== 传回农历y年闰哪个月1-12 , 没闰传回0
function leapMonth(y) {
return(lunarInfo[y-1900] & 0xf)
}
//====================================== 传回农历y年m月的总天数
function monthDays(y,m) {
return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 )
}
//====================================== 算出农历, 传入日期物件, 传回农历日期物件
// 该物件属性有.year .month .day .isLeap .yearCyl .dayCyl .monCyl
function Lunar(objDate) {
var i, leap=0, temp=0
var baseDate = new Date(1900,0,31)
var offset = (objDate - baseDate)/86400000
this.dayCyl = offset + 40
this.monCyl = 14
for(i=1900; i<2050 && offset>0; i++) {
temp = lYearDays(i)
offset -= temp
this.monCyl += 12
}
if(offset<0) {
offset += temp;
i--;
this.monCyl -= 12
}
this.year = i
this.yearCyl = i-1864
leap = leapMonth(i) //闰哪个月
this.isLeap = false
for(i=1; i<13 && offset>0; i++) {
//闰月
if(leap>0 && i==(leap+1) && this.isLeap==false)
{ --i; this.isLeap = true; temp = leapDays(this.year); }
else
{ temp = monthDays(this.year, i); }
//解除闰月
if(this.isLeap==true && i==(leap+1)) this.isLeap = false
offset -= temp
if(this.isLeap == false) this.monCyl ++
}
if(offset==0 && leap>0 && i==leap+1)
if(this.isLeap)
{ this.isLeap = false; }
else
{ this.isLeap = true; --i; --this.monCyl;}
if(offset<0){ offset += temp; --i; --this.monCyl; }
this.month = i
this.day = offset + 1
}
//==============================传回国历y年某m+1月的天数
function solarDays(y,m) {
if(m==1)
return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28)
else
return(solarMonth[m])
}
//============================== 传入offset 传回干支, 0=甲子
function cyclical(num) {
return(Gan[num%10]+Zhi[num%12])
}
//============================== 月历属性
function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) { this.isToday = false;
//国历
this.sYear = sYear;
this.sMonth = sMonth;
this.sDay = sDay;
this.week = week;
//农历
this.lYear = lYear;
this.lMonth = lMonth;
this.lDay = lDay;
this.isLeap = isLeap;
//干支
this.cYear = cYear;
this.cMonth = cMonth;
this.cDay = cDay;
this.color = '';
this.lunarFestival = ''; //农历节日
this.solarFestival = ''; //国历节日
this.solarTerms = ''; //节气
}
//===== 某年的第n个节气为几日(从0小寒起算)
function sTerm(y,n) {
var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) )
return(offDate.getUTCDate())
}
//============================== 传回月历物件(y年,m+1月)
function calendar(y,m) {
var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2
var lDPOS = new Array(3)
var n = 0
var firstLM = 0
sDObj = new Date(y,m,1) //当月一日日期
this.length = solarDays(y,m) //国历当月天数
this.firstWeek = sDObj.getDay() //国历当月1日星期几
for(var i=0;i if(lD>lX) { sDObj = new Date(y,m,i+1) //当月一日日期 lDObj = new Lunar(sDObj) //农历 lY = lDObj.year //农历年 lM = lDObj.month //农历月 lD = lDObj.day //农历日 lL = lDObj.isLeap //农历是否闰月 lX = lL? leapDays(lY): monthDays(lY,lM) //农历当月最後一天 if(n==0) firstLM = lM lDPOS[n++] = i-lD+1 } //sYear,sMonth,sDay,week, //lYear,lMonth,lDay,isLeap, //cYear,cMonth,cDay this[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7], lY, lM, lD++, lL, cyclical(lDObj.yearCyl) ,cyclical(lDObj.monCyl), cyclical(lDObj.dayCyl++) ) if((i+this.firstWeek)%7==0) this[i].color = 'red' //周日颜色 if((i+this.firstWeek)%14==13) this[i].color = 'red' //周休二日颜色 } //节气 tmp1=sTerm(y,m*2 )-1 tmp2=sTerm(y,m*2+1)-1 this[tmp1].solarTerms = solarTerm[m*2] this[tmp2].solarTerms = solarTerm[m*2+1] if(m==3) this[tmp1].color = 'red' //清明颜色 //国历节日 for(i in sFtv) if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/)) if(Number(RegExp.$1)==(m+1)) { this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + ' ' if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = 'red' } //月周节日 for(i in wFtv) if(wFtv[i].match(/^(\d{2})(\d)(\d)([\s\*])(.+)$/)) if(Number(RegExp.$1)==(m+1)) { tmp1=Number(RegExp.$2) tmp2=Number(RegExp.$3) this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + ' ' } //农历节日 for(i in lFtv) if(lFtv[i].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) { tmp1=Number(RegExp.$1)-firstLM if(tmp1==-11) tmp1=1 if(tmp1 >=0 && tmp1 tmp2 = lDPOS[tmp1] + Number(RegExp.$2) -1 if( tmp2 >= 0 && tmp2 this[tmp2].lunarFestival += RegExp.$4 + ' ' if(RegExp.$3=='*') this[tmp2].color = 'red' } } } //黑色星期五 if((this.firstWeek+12)%7==5) this[12].solarFestival += '黑色星期五' //今日 if(y==tY && m==tM) this[tD-1].isToday = true; } //====================== 中文日期 function cDay(d){ var s; switch (d) { case 10: s = '初十'; break; case 20: s = '二十'; break; break; case 30: s = '三十'; break; break; default : s = nStr2[Math.floor(d/10)]; s += nStr1[d%10]; } return(s); } var cld; function drawCld(SY,SM) { var i,sD,s,size; cld = new calendar(SY,SM); if(SY>1874 && SY<1909) yDisplay = '光绪' + (((SY-1874)==1)?'元':SY-1874) if(SY>1908 && SY<1912) yDisplay = '宣统' + (((SY-1908)==1)?'元':SY-1908) if(SY>1911 && SY<1950) yDisplay = '民国' + (((SY-1911)==1)?'元':SY-1911) if(SY>1949) yDisplay = '共和国' + (((SY-1949)==1)?'元':SY-1949) GZ.innerHTML = yDisplay +'年农历' + cyclical(SY-1900+36) + '年 【'+Animals[(SY-4)%12]+'】'; YMBG.innerHTML = " " + SY + " for(i=0;i<42;i++) { sObj=eval('SD'+ i); lObj=eval('LD'+ i); sObj.className = ''; sD = i - cld.firstWeek; if(sD>-1 && sD sObj.innerHTML = sD+1; if(cld[sD].isToday) sObj.className = 'todyaColor'; //今日颜色 sObj.style.color = cld[sD].color; //国定假日颜色 if(cld[sD].lDay==1) //显示农历月 lObj.innerHTML = ''+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+''; else //显示农历日 lObj.innerHTML = cDay(cld[sD].lDay); s=cld[sD].lunarFestival; if(s.length>0) { //农历节日 if(s.length>6) s = s.substr(0, 4)+'…'; s = s.fontcolor('red'); } else { //国历节日 s=cld[sD].solarFestival; if(s.length>0) { size = (s.charCodeAt(0)>0 && s.charCodeAt(0)<128)?8:4; if(s.le ngth>size+2) s = s.substr(0, size)+'…'; s = s.fontcolor('blue'); } else { //廿四节气 s=cld[sD].solarTerms; if(s.length>0) s = s.fontcolor('limegreen'); } } if(s.length>0) lObj.innerHTML = s; } else { //非日期 sObj.innerHTML = ''; lObj.innerHTML = ''; } } } function changeCld() { var y,m; y=CLD.SY.selectedIndex+1900; m=CLD.SM.selectedIndex; drawCld(y,m); } function pushBtm(K) { switch (K){ case 'YU' : if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--; break; case 'YD' : if(CLD.SY.selectedIndex<149) CLD.SY.selectedIndex++; break; case 'MU' : if(CLD.SM.selectedIndex>0) { CLD.SM.selectedIndex--; } else { CLD.SM.selectedIndex=11; if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--; } break; case 'MD' : if(CLD.SM.selectedIndex<11) { CLD.SM.selectedIndex++; } else { CLD.SM.selectedIndex=0; if(CLD.SY.selectedIndex<149) CLD.SY.selectedIndex++; } break; default : CLD.SY.selectedIndex=tY-1900; CLD.SM.selectedIndex=tM; } changeCld(); } var Today = new Date(); var tY = Today.getFullYear(); var tM = Today.getMonth(); var tD = Today.getDate(); ////////////////////////////////////////////////////////////////////////////// var width = "130"; var offsetx = 2; var offsety = 16; var x = 0; var y = 0; var snow = 0; var sw = 0; var cnt = 0; var dStyle; document.onmousemove = mEvn; //显示详细日期资料 function mOvr(v) { var s,festival; var sObj=eval('SD'+ v); var d=sObj.innerHTML-1; //sYear,sMonth,sDay,week, //lYear,lMonth,lDay,isLeap, //cYear,cMonth,cDay if(sObj.innerHTML!='') { sObj.style.cursor = 's-resize'; if(cld[d].solarTerms == '' && cld[d].solarFestival == '' && cld[d].lunarFestival == '') festival = ''; else festival = ' ''+cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival+' s= ' ' cld[d].sYear+' 年'+cld[d].sMonth+' 月'+cld[d].sDay+' 日 '农历'+(cld[d].isLeap?'闰':' ')+cld[d].lMonth+' 月'+cld[d].lDay+' 日 ''+cld[d].cYear+'年'+cld[d].cMonth+'月'+cld[d].cDay + '日'+ ' document.all["detail"].innerHTML = s; if (snow == 0) { dStyle.left = x+offsetx-(width/2); dStyle.top = y+offsety; dStyle.visibility = "visible"; snow = 1; } } } //清除详细日期资料 function mOut() { if ( cnt >= 1 ) { sw = 0 } if ( sw == 0 ) { snow = 0; dStyle.visibility = "hidden";} else cnt++; } //取得位置 function mEvn() { x=event.x; y=event.y; if (document.body.scrollLeft) {x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;} if (snow){ dStyle.left = x+offsetx-(width/2) dStyle.top = y+offsety } } /////////////////////////////////////////////////////////////////////////// function changeTZ() { CITY.innerHTML = CLD.TZ.value.substr(6) setCookie("TZ",CLD.TZ.selectedIndex) } function tick() { var today today = new Date() Clock.innerHTML = today.toLocaleString().replace(/(年|月)/g, "/").replace(/日/, ""); Clock.innerHTML = TimeAdd(today.toGMTString(), CLD.TZ.value) window.setTimeout("tick()", 1000); } function setCookie(name, value) { var today = new Date() var expires = new Date() expires.setTime(today.getTime() + 1000*60*60*24*365) document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString() } function getCookie(Name) { var search = Name + "=" if(document.cookie.length > 0) { offset = document.cookie.indexOf(search) if(offset != -1) { offset += search.length end = document.cookie.indexOf(";", offset) if(end == -1) end = document.cookie.length return unescape(document.cookie.substring(offset, end)) } else return "" } } ///////////////////////////////////////////////////////// function initial() { dStyle = detail.style; CLD.SY.selectedIndex=tY-1900; CLD.SM.selectedIndex=tM; drawCld(tY,tM); CLD.TZ.selectedIndex=getCookie("TZ"); changeTZ(); tick(); } //--> y = Year(UTC) TimeAdd=DateAdd("n", (Cint(Mid(T,2,2))*60 + Cint(Mid(T,4,2))) * PlusMinus, UTC) '美国日光节约期间: 4月第一个星日00:00 至10月最後一个星期日00:00 If Mid(T,6,1)="*" And DateSerial(y,4,(9 - Weekday(DateSerial(y,4,1)) mod 7) ) <= TimeAdd And DateSerial(y,10,31 - Weekday(DateSerial(y,10,31))) >= TimeAdd Then TimeAdd=CStr(DateAdd("h", 1, TimeAdd)) tSave.innerHTML = "R" Else tSave.innerHTML = "" End If TimeAdd = CStr(TimeAdd) End Function '-->
" + monthName[SM];
';'+ '+'
';' +
'+ festival +''+
星期'+cld[d].week+'
'+
'+
2、每个模块分析及抓图
*看时间
*调时区
*阳历、农历同步看
*干支计时
四、结束语
1、总结
JavaScript 是根据"ECMAScript"标准制定的网页脚本语言,要想完全掌握以达到灵活应用的目标,还需要不断的练习。本万年历的制作基本实现了最初的想法,当然还有许多还有许多地方要去完善。
2.、参考文献
万年历C语言设计
万年历的设计: 要求:模仿现实生活中的挂历,能够显示年历、月历、日历,并具备退出功能。当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。当系统日期变到下一月时,系统自动翻页到下一月。 万年历的程序流程图: 主要程序流程图: 具体对于月份和年份的程序图如下:
上图为计算星期方法 上图为打印日历程序图
万年历的设计的程序源代码: #include
脚本语言和互动网页设计课程网上作业单选题答案
1: 下述选项中不属于JDBC基本功能的是:() 1.与数据库建立连接 2.提交SQL语句 3.处理查询结果 4.数据库维护管理 2:在page指令中,()属性是可以在页面中重复的的属性。 https://www.360docs.net/doc/12131028.html,nguage 2.buffer 3.import 4.autoFlush 3:下面哪种数据类型是基本数据类型()。 1.class 2.interface 3.数组 4.char 4:下列哪种数据类型是引用类型()。 1.boolean 2.int 3.interface 4.long
5: 在JSP中使用
3.getParameterValues() 4.getSession() 9:下面哪一个运算符有3个操作数()。 1.* 2.++ 3.&& 4.?: 10:以下文件名后缀中,只有()不是静态网页的后缀。 1..html 2..htm 3..jsp 4..shtml 11:以下选项中,哪一项不是JSP指令()。 1.page 2.import 3.include 4.taglib 12:实际开发中使用Session可以设置访问的安全性,请选择Session所设置的属性的数据类型( ) 1.String
推荐-电子万年历的设计与制作课程设计 精品
华南农业大学 电子工程学院应用物理系 课程设计(报告)任务书 设计题目:电子万年历的设计与制作 任务与要求(请按所选题目自行总结) 任务:设计一个电子万年历,利用实时时钟芯片ds1302和51单片机制作实时时钟。 要求: 1.使用LCD1602显示屏显示日期和时间; 2.能够显示新历和农历; 3. 包括时钟模块,能够显示实时时钟; 4. 要有时间设置按键部分; 5. 完成硬件电路的设计后,编写程序,实现时间和日期的显示等功能; 6. 调试程序,完成功能验证,写出完整的课程设计。 实验器材: 1.单片机最小系统:单片机(插座),晶振,电阻,电容,按键; 2.电源模块:自锁开关,LED灯,USB插座; 3.按键模块:按键; 4.1602显示模块:1602(排母),电位器,电容; 5.RTC模块:DS1302芯片(插座),晶振,CR2032电池(插座); 6.DIY小部件:漆包线,杜邦线,排针,排母,IC插座,电阻包,电容包,烙铁套装; 开始日期20XX 年 3 月 4 日完成日期20XX 年3 月 23 日
电子万年历设计 摘要:本系统是由单片机最小系统、电源模块、按键模块、LCD1602显示模块及RTC模块组成的电子万年历系统。通过时钟模块实时进行时间和日期的计数,进而传递给单片机处理,单片机再将其传递给LCD1602模块显示当前时间,另设有按键模块可以完成时间设置以及日期查询等功能操作。其设计简单,性能优良,时间设置可调,同时同步显示农历和星期,具有较强的实用性。本文先简要介绍每个模块的工作原理,再作整个系统电路的综合分析,说明该电子万年历的实现过程。 Summary:This system,electronic calendar system,is posed of SCM minimum system, power supply module, keys module, LCD1602 display module and RTC module .Through RTC module for counting the time and date, and then transmit to SCM for processing,and then send it to the LCD1602 module to show the current time, also operates key modules can be pleted time setting and operating date query function.Its simple design, excellent performance, adjustable time setting, synchronous display lunar calendar and week at the same time, has strong practicability.This paper first briefly introduces the working principle of each module, and then a prehensive analysis of the circuit.The last,illustrate the whole system implementation process of the electronic calendar. 关键词:万年历,计时,显示,农历 Keywords: calendar、timing、display、
C语言编写的万年历代码
该代码在VC++6.0编译器下运行,只要按照编译器给出的说明操作,就能将万年历显示在调试窗口中了……………………………………由于制作时间匆忙,很多注释都来不及写了,对于出学者可以慢慢看,代码很简单的,都放在了主函数里,如果有兴趣的话,可以把这些代码放在几个文件里,这样会好看点,加油了! #include printf("\t"); n++; } for(j=1;j<=31;j++){ if(n%7==0) printf("\n"); printf("%d\t",j); n++; } break; // 1 month case 2:w=(wo+31)%7; for(i=1;i 2016-2017学年第一学期期末考试《脚本语言和互动网页设计》大作业 一、编程题((每小题100分,共100分) 编写程序register.html和register.jsp。做一用户注册界面register.html,注册信息包括:用户名,年龄,性别,籍贯。然后提交到register.jsp进行注册检验,若用户名为admin,就提示“欢迎你,管理员!”,否则显示“注册成功”并显示出注册信息。 Register.html 脚本语言和互动网页设计