|
新疆农业大学
毕业论文
课题名称 电子台历的实现
专 业 信息管理与信息系统 班级 班
学生姓名
指导教师姓名 职称
日 期 2004 年 06 月 06日
目 录
摘 要 I ABSTRACT II 1 前言 1 2 设计总说明 1 2.1 预期目标 1 2.2 开发工具的选择 1 3 电子台历实现过程 2 3.1 分析 2 3.2 FLASH元件的前期准备 2 3.3 公历的计算与显示 2 3.4 农历和节气 3 3.4.1 农历的计算 3 3.4.2 节气的计算 4 3.5 节假日、农历和节气显示 4 3.6 控制按钮的实现 5 4 .SWF电子台历的发布 6 4.1 .SWF电子台历的运行环境 7 4.2 实际使用测试 7 4.3 .SWF电子台历的兼容性和可扩展性 7 5 .SWF电子台历的桌面化 8 6 小结 8 谢 辞 9 参考文献 10 附 录 11
摘 要
使用Flash及Flash action (动作脚本)编写函数,制作一款电子台历。Flash 可以最终发布为.swf格式文件。.swf格式文件易于传播,可方便的在网页上使用。同时该格式占用系统资源较少,兼容性也很好。发布后的.swf格式也可以随时创建为应用程序,方便在没有Macromedia Flash Player 的主机中运行。同时Flash 文件可方便的修改;.swf格式文件也可以作为对象(object)嵌入被其它开发工具使用,实现二次开发。 为了更符合中国人的使用习惯,台历本身除公历显示外加入显示节假日、农历、节气等内容的显示功能,并且借助于windows自身或第三方软件使台历桌面化,使之直观显示,方便用户操作和使用。
关键字 Flash .swf格式文件 公历 农历 节气 Abstract
Build the calendar with Flash and Flash action . The Flash cans be then end to announce for .swf format document, easy for using on the web page. It can be run in any system with Macromedia Flash Player. Certainly you can build a program for the machine without Macromedia Flash Player anytime you want.And the Flash files can be easily updated.Embeded development tools as a object,.swf format document can make out the second development. This calendar will impropriate possibly little system resources and shows more information as Christian ear stanza day off, solar division, lunar calendar and so on. At last you could make the calendar on the top of Windows desktop and easily used for user through windows or the third-part software.
Key words Flash .swf Christian ear solar division lunar calendar
1 前言 科技的进步改变着我们的生活,随着时间的流逝,很多事物改变了,同时也诞生了很多新事物,而电子台历却从未离开我们的生活,不仅如此更多样的电子台历扩充着的电子台历家族,电子台历已正式成为家用电脑中必不可少的软件。在各种操作系统中均已包含了电子台历的内容。但多数电子台历需要执行相应命令或操作才能显示,对使用者造成一些不便。以windows操作系统为例,它的日历组件隐藏于时日期和时间属性面板内,而且信息只有简单的日期和时间,并没有节假日、农历○1、节气○2等内容。 为了解决操作系统中电子台历使用的不便以及天生不足的功能,非常需要一款可显示节假日、农历、节气内容的电子台历。 2 设计总说明 2.1 预期目标 制作一款可直观显示节假日、农历、节气内容;方便、容易使用;占用系统资源较少的电子台历。 2.2 开发工具的选择 使用简VB、VFP、PB等开发工具虽然可以很方便制作出电子台历,但很难简单的实现较美观的运行窗口,即时实现也往往使用了较多的图片和控件,同时这些控件所需要的显示空间又未必适合软件本身,这样很难满足现代用户对软件界面的要求。 根据预期目标,我选择了Flash作为开发工具。使用Flash可以很方便解决软件界开发中的很多问题,特别是界面和多媒体部分。 Flash是美国的MACROMEDIA公司于1999年6月推出的优秀网页动画设计软件。它是一种交互式动画设计工具,用它可以将音乐,声效,动画以及富有新意的界面融合在一起,以制作出高品质的网页动态效果。 使用矢量图形和流式播放技术。与位图图形不同的是,矢量图形可以任意缩放尺寸而不影响图形的质量,同时Flash支持真彩色和半透明效果,可以方便得绘制出美观的软件的界面,轻松实现一些特殊效果。通过使用关键帧和图符使得所生成的动画文件非常小,几K字节的动画文件已经可以实现许多令人心动的动画效果,用在网页设计上不仅可以使网页更加生动,而且小巧玲珑下载迅速,使得动画可以在打开网页很短的时间里就得以播放。 发布Flash 内容时,一般使用一个扩展名为 .swf 的文件。.swf这种文件格式是一种交互性Web 兼容的流媒体格式,利用这种格式可以很方便的制作出美观的界面,并可以编写代码来完成某些功能、实现互动。这种格式可借助Macromedia Flash Player在各种操作平台下直接运行或嵌入其它程序或文件中。同时Macromedia Flash Player 是与其每个主要合作伙伴(包括 Microsoft、Apple、Netscape、AOL 和 Opera)的产品一起发布,任何人都可以在 Macromedia Flash Player 下载中心免费获得最新版本的 Flash Player。所以,利用.swf实现电子台历充分满足了软件界面和兼容性的要求。同时流式播放技术使得动画可以边播放边下载,从而缓解了网页浏览者焦急等待的情绪。 把音乐,动画,音效,交互方式融合在一起,越来越多的人已经把Flash作为网页动画设计的首选工具,并且创作出了许多令人叹为观止的动画(电影)效果。而且在Flash4.0的版本中已经可以支持MP3的音乐格式,这使得加入音乐的动画文件能保持小巧的‘身材’。 强大的动画编辑功能使得设计者可以随心所欲地设计出高品质的动画,通过ACTION和FSCOMMAND可以实现交互性,使Flash具有更大的设计自由度,另外,它与当今最流行的网页设计工具Dreamweaver配合默契,可以直接嵌入网页的任一位置,非常方便。 Macromedia宣布了第6版的Flash交互开发环境和播放器——FlashMX,而且它将作为全新的MacromediaMX战略计划的急先锋。到现在,Flash还仅仅具有在现有的Web页面上整合多媒体元素的功能,而在新的版本中,Flash的功能得到极大的扩展,可以用它创建完整的动态站点,从内容显示,到数据库连通,以及视频调试,Flash带来的结果是空前的。同时全新的Flash版本中ACTION和FSCOMMAND的种类和功能都极大地丰富起来,利用Flash可以开发出简单的应用程序,这些利用Flash制作出的应用程序既可以单独运行,也可以作为对象(object)嵌入被其它开发工具使用。 3 电子台历实现过程 3.1 分析 日期、节假日、农历、节气的运算和排列功能主要利用在Flash的动作脚本编写函数代码实现;使用元件实现软件界面和日期、节假日、农历、节气的显示。 3.2 Flash元件的前期准备 根据预定目标这个电子台历需要有显示节假日、农历、节气内容,可能还需要显示时钟。 首先使用绘图工具绘制电子台历界面,调整相应透明度,做出半透明效果。然后制作,前进、后退、复位和其它所需要的按钮元件,接着定义图形元件。最后建影片剪辑,规格如下: i. 影片剪辑1,插入31个关键帧,依次插入1至31的阿拉伯数字,在第一帧处插入动作函数stop( ); 。 ii. 影片剪辑2,插入多个关键帧,依次插入初一至三十的中文日期和中文节气、主要节假日名。由于农历、节气和主要节假日实际位置相同,所以将其存放在同一个影片剪辑中,并在影片剪辑第一帧处插入动作函数 stop( ); 。 iii. 影片剪辑3,插入10个关键帧,依次插入1至10的阿拉伯数字的液晶显示样式,在第一帧处插入动作函数stop( ); 。 iv. 影片剪辑4,插入6个影片剪辑3,等高度均匀分布,做出液晶表的样子。 所有元件留在库中待用。 3.3 公历的计算与显示 公历又称阳历,其基本法则为: i. 一年12个月合计365天; ii. 一月31天,二月28天,三月31天,四月30天,五月31天,六月30天,七月31天,八月31天,九月30天,十月31天,十一月30天,十二月31天; iii. 当年数为四的倍数,且不是一百的倍数时,当年为闰年,全年366天,二月为29天,其余各月不变。 直接利用系统时间就可以推算出公历信息,较麻烦的只有星期的计算。星期的计算是今日日期与1700年1月1日相比得到今天的星期参数。利用得到的参数计算出当月其它各日的参数,排序后调用影片剪辑中的关键帧实现日期在Flash中的显示。 // 日期的显示控制与当月日期排列 var x= curCal.firstWeek+1, y= 1; for(i=1;i<32;i++){ if (i>curCal.lenDay){ eval("day" + i)._visible = false; continue; }else{ eval("day" + i)._visible = true; } setDays(i,x,y); if (x==7){ x = 1; y++; }else{ x++; } } 3.4 农历和节气 3.4.1 农历的计算 农历是我国的一种历法,俗称阴历。农历平年有十二个月,闰年为十三个月,其中某一月为闰月,月名依前一月名而定,如前月是八月,闰月则为闰八月。 农历基本法则如下: i. 月朔日即是初一 ii. 月以中气得名 iii. 包含雨水中气月为正月,即是「寅」月 iv. 月无中气者为闰月,以前月同名 法则很简单,我认为阴阳历转换应该有公式可寻,在网上查询无果,最后发现目前所有万年历最多也就200年,所以发觉具体实现很难。 后在高平子○3天文前辈所著《学历散论》[1]一了解到古历的变更和阴阳历的缺陷。才知道由于月球转动的不稳定不规则,阴阳历转换确定无公式可寻。问题在有时一个太阴月比一个太阳月还要长。如此一个太阴月就有可能包括两个中气。这个双中气月后的阴历月名就全部乱掉了,直到下一个「假」闰月后才调整过来。这也是古代中国每百年必改历的原因。 3.4.2 节气的计算 节气的计算同样很难实现。《回历纲要》[2]提到按照公元前104年《太初历》中记载,太阳从黄经零度起,沿黄经每运行15度所经历的时日称为“一个节气”。每年运行360度,共经历24个节气,每月2个。其中,每月第一个节气为“节气”,即:立春、惊蛰、清明、立夏、芒种、小暑、立秋、白露、寒露、立冬、大雪和小寒等12个节气;每月的第二个节气为“中气”,即:雨水、春分、谷雨、小满、夏至、大暑、处暑、秋分、霜降、小雪、冬至和大寒等12个节气。“节气” 和“中气”交替出现,各历时15天,现在人们已经把“节气”和“中气”统称为“节气”。 二十四节气反映了太阳的周年运动,所以节气在现行的公历中日期基本固定,上半年在6日、21日,下半年在8日、23日,前后不差1~2天。但每月的两个节气之间间隔并不相同,在年际间也有变化,精确的交结时间的计算是大量、繁琐的天文数字的计算,即时勉强写入代码中也将耗费大量CUP资源和内存。这就背离了开发本意,所以最终决定放弃对节气的计算,而采用其它方法。 3.5 节假日、农历和节气显示 由于农历和节气很难用简单算法实现,所以目前解决农历显示的通用方法为提前输入相关信息,在显示过程中直接调用预先设定的资料,这也是市面上所有的称万年历的书籍,电子产品往往只有一百年到二百年的原因所在。 为实现农历和节气的显示,我使用台湾林洵贤先生的世界万年历○4中对农历设定和显示的源代码,并加以修改,使之能运行在Flash中。利用调用影片剪辑中关键帧的方法实现农历和节气的显示。 对于节假日的处理则分别使用两个数组存放公历和农历的节假日的信息。存放顺序与之前建立的影片剪辑中相同。 最后同样利用利用调用影片剪辑中的关键帧,实现节假日、农历和节气在Flash中的显示。当某一日中有节假日或节气时,显示相应内容;同时存在节假日和节气时,优先节假日的显示;没有节假日也没有节气时显示农历。代码如下: //设置日期右侧文字为节日或节气或农历 setNl(objnl, objday, cl){ var temp; var clnl= cl; var isDone = false; if(objday.lunarFestival.length > 0){ temp = getnlPos(objday.lunarFestival); if (temp > -1){ objnl.gotoAndStop(temp + 55); if (cl != cl_weekend) clnl = cl_jr; isDone = true; } } if(!isDone){ if(objday.solarFestival.length > 0){ temp = getnlPos(objday.solarFestival); if (temp > -1){ objnl.gotoAndStop(temp + 55); if (cl != cl_weekend) clnl = cl_jr; isDone = true; } } } if(!isDone){ if(objday.solarTerms > -1){ objnl.gotoAndStop(objday.solarTerms + 31); if (cl != cl_weekend) clnl = cl_jq; isDone = true; } } if(!isDone){ objnl.gotoAndStop(objday.lDay); } var mycolor = new Color(objnl); mycolor.setRGB(clnl); } 3.6 控制按钮的实现 Flash中利用 on ( ); 来定义鼠动作,根据需要,使用onRelease(鼠标左键释放)函数,为方便代码的查阅,将所有按钮操作定义在同一帧中,而并非分别定义在每个按钮上。 //月增加按钮处理 incm.onRelease = (){ curMonth++; if (curMonth > 12) { curMonth = 1; curYear++; } showCal(curYear, curMonth); } //月减少按钮处理 dscm.onRelease = () { curMonth--; if (curMonth < 1){ curMonth = 12; curYear--; } showCal(curYear, curMonth); } //年增加按钮处理 incy.onRelease = () { curYear++; showCal(curYear, curMonth); } //年减少按钮处理 dscy.onRelease = (){ curYear--; showCal(curYear, curMonth); } //返回今日显示 butt_today.onRelease = (){ showCal(tY, tM + 1); } 4 .swf电子台历的发布 调试好所有的代码,后建立多个层,依照显示层次放置相应元件和代码到不同的层中。排列个元件在影片中的位置后发布Flash文件为.swf。 为了显示效果,在代码开头处插入代码: //非全屏幕显示 fscommand("fullscreen", "false"); //不显示主菜单和鼠标右键菜单 fscommand("allowscale", "false"); fscommand("showmenu", "false"); 4.1 .swf电子台历的运行环境 由于使用了多个Flash MX提供的专用函数,运行这个电子台历需要Macromedia Flash Player 6.0.22 以上版本支持,Macromedia Flash Player 6.0.22运行对平台中浏览器有如下要求 Windows 98: Microsoft Internet Explorer 5.x、Netscape 4.7、Netscape 7.x、Mozilla 1.x、AOL 8 和 Opera 7.11 Windows Me: Microsoft Internet Explorer 5.5、Netscape 4.7、Netscape 7.x、Mozilla 1.x、AOL 8 和 Opera 7.11 Windows 2000: Microsoft Internet Explorer 5.x、Netscape 4.7、Netscape 7.x、Mozilla 1.x、CompuServe 7、AOL 8 和 Opera 7.11 Windows XP或Windows Sever 2003: Microsoft Internet Explorer 6.0、Netscape 7.x、Mozilla 1.x、CompuServe 7、AOL 8 和 Opera 7.11 Mac OS 9.x: Microsoft Internet Explorer 5.1、Netscape 4.8、Netscape 7.x、Mozilla 1.x 和 Opera 6 Mac OS X 10.1.x 或 Mac OS X 10.2.x: Microsoft Internet Explorer 5.2、Netscape 7.x、Mozilla 1.x、AOL 7、Opera 6 和 Safari 1.0(仅限 Mac OS X 10.2.x) 4.2 实际使用测试 在CL700MHz,128M RAM,Windows Sever 2003中测试结果如下: 占用CPU 1%;占用内存6180K;总进程数1; 同类产品日梭万年历○5在相同系统中占用CPU13%;占用内存9624K;总进程数1; 测试结果:.swf电子台历达到可显示节假日、农历、节气内容;显示直观;操作方便、容易使用的需要。最小日期为1900年1月1日,最大日期为2100年12月31日。跨度达到200年。在对农历日期和节气的检验中参考紫荆山天文台出版的《1901-2000万年历》[3]抽查30多年没有错误。同时相比同类产品,达到占用系统资源较少的要求。
4.3 .swf电子台历的兼容性和可扩展性 .swf在很多情况下被定义为跨平台的交互式多媒体格式。任何支持多媒体的操作平台,只要含有Macromedia Flash Player就可以运行.swf,不受其它任何限制。同时Macromedia Flash Player 是与其每个主要合作伙伴(包括 Microsoft、Apple、Netscape、AOL 和 Opera)的产品一起发布,世界范围内超过五亿一千六百万人使用Macromedia Flash Player。如果需要使用,任何人都可以在 Macromedia Flash Player 下载中心免费获得最新版本的 Flash Player。可以说基本每台计算机中都含有Macromedia Flash Player。所以,利用.swf实现电子台历充分满足了软件界面和兼容性的要求。 可扩展性方面.swf电子台历中各部分均为实现独立功能的独立影片,可扩展性较强。能无限制添加其他功能模块。. swf电子台历本身也可作为模块使用,目前的主流的软件都可以调用相应控件,达到.swf电子台历在其它程序中的显示和应用。在微软新的办公软件office2003中也直接加入了对.swf格式的支持。所以.swf的可扩展性方面也是非常优秀的。 5 .swf电子台历的桌面化 到此,一款电子台历得主体部分已经全部完成,但是这样做并没有很好的体现预期中“方便、容易使用”的特点。所以还需要将电子台历桌面化,如果可以将台历作为桌面或放置在桌面某个位置上,则可以解决这个问题。 这里的桌面化主要是电子台历直接windows系统的桌面上的显示。利用windows中桌面可显示web页的特点,将.swf电子台历插入html文件中,然后就可以直接在桌面处显示(如图5.1)。但这样会给一些将某些网页作为桌面已达到浏览方便的用户带来不便。 当然我们也可以使用第三方工具,将.swf电子台历制作为动态作面。也可以制作成为屏幕保护程序用于解决电子台历的桌面化,如swfkit 、TransFlash等就可以轻松的完成上述功能。 6 小结 在这个.SWF电子台历实现的过程中,日期、节假日、农历、节气的运算和排列功能主要利用在FLASH的动作脚本编写函数代码实现;软件界面由若干FLASH元件在场景中的排列、组合实现;日期、节假日、农历、节气的显示主要利用函数控制关键帧实现;电子台历的桌面化借助于WINDOWS自身或第三方软件实现。制作中,所有元件完全使用矢量图,大大减少了文件体积;利用.SWF支持真彩色和半透明的特点,将软件界面半透明,更容易融合在桌面或其它程序中。经测试这个电子台历达到自己的预期目标。但由于个人精力、水平有限,一个优秀台历的很多实用功能并未能全部融入这个.SWF电子台历中,比如记事和提醒。但这些功能完全可以利用.SWF与XML的交互实现。故用FLASH完全可以制作出一款优秀的电子台历。 谢 辞
在整个论文过程中得到了指导老师的耐心指导;在程序设计过程中参考了台湾林洵贤先生的世界万年历;程序测试阶段对比了刘安国同学的日梭万年历。在此向上述各位表示十万分地感谢。同时也由衷的向在座各位老师致谢,感谢您在四年中对我的教导和帮助。最后感谢各位同学,我要对大家说:“认识你们真好。”
参考文献
[1] 高平子,学历散论.北京:中央研究院数学研究所.1969 [2] 马坚,回历纲要.北京:中华书局.1955 [3] 紫荆山天文台,1901-2000万年历.北京:科学出版社.1979
附 录 ○1农历:农历是我国的一种历法,又称夏历、中历、旧历,俗称阴历。定月的方法是用朔望月周期给出,朔所在日为初一,朔望月长约29天半,所以农历大月30天,小月29天。农历平年有十二个月,全年354天或355天,闰年为十三个月,其中某一月为闰月,月名依前一月名而定,如前月是八月,闰月则为闰八月。闰年全年383天或384天。 ○2节气:二十四节气起源于黄河流域。远在春秋时代,就定出仲春、仲夏、仲秋和仲冬等四个节气。以后不断地改进与完善,到秦汉年间,二十四节气已完全确立。公元前104年,由邓平等制定的《太初历》,正式把二十四节气订于历法,明确了二十四节气的天文位置。 二十四节气反映了太阳的周年视运动,所以节气在现行的公历中日期基本固定,上半年在6日、21日,下半年在8日、23日,前后不差1~2天。 ○3高平子 Kao Ping Tse 1888-1970〔是中国近代最有成就的天文学者之一。他没有接受正规的天文教育。凭着对天文的酷爱,自己研读天文书籍。因为他对天文的贡献,在他的百年冥诞,月球的一个环形月坑以他的名字为名。位置在月球东经87.6度,南纬6.7度, 直径34公里,为国争光。 ○4台湾林洵贤先生的世界万年历是目前在网络中使用最多,功能最全的万年历。 ○5日梭万年历由武汉华中农业大学学生刘安国制作。 |
评论
想第一时间抢沙发么?