Flash CS4设计天气预报程序.docx
《Flash CS4设计天气预报程序.docx》由会员分享,可在线阅读,更多相关《Flash CS4设计天气预报程序.docx(31页珍藏版)》请在冰豆网上搜索。
![Flash CS4设计天气预报程序.docx](https://file1.bdocx.com/fileroot1/2023-1/6/23ed23c2-460d-4a53-b76f-cbce7fa0a0f5/23ed23c2-460d-4a53-b76f-cbce7fa0a0f51.gif)
FlashCS4设计天气预报程序
第18章设计天气预报程序
目前,互联网中已经存在很多种语言设计的天气预报程序,例如Ajax、HTML、ASP.NET、PHP、JSP等。
其实在Flash中,通过ActionScript脚本语言与上述语言相结合使用,也可以设计出Flash版的天气预报程序,而且该程序可以承继Flash的优点。
18.1创建数据库及ASP页面
Flash的ActionScript语言属于客户端语言,利用它可以在客户端实现比较绚丽的效果。
但是,它无法直接对服务器端的文件和数据库进行操作。
如果想要与服务器端的程序进行通信,则必须与服务器端语言(ASP、PHP、JSP等)相结合使用。
18.1.1创建数据库
数据库是用于存储数据信息的系统,通过其它语言程序可以读取数据库中的信息,或将信息存储到数据库中。
本例中创建的数据库用于存储获取的天气预报信息,以及为天气预报程序提供数据来源。
数据库结构如图18-1所示。
图18-1数据库
创建过程:
(1)在电脑的【开始】菜单中,执行【所有程序】|【MicrosoftOffice】|【MicrosoftOfficeAccess2007】命令,打开Access2007数据库,如图18-2所示。
图18-2打开Access2007数据库
MicrosoftOfficeAccess2007是关联式数据库管理系统,用于存储数据信息,是MicrosoftOffice2007的成员之一。
在创建数据库之前,首先需要确认电脑中是否已经安装此程序。
(2)在【MicrosoftAccess】界面中选择【模板类别】选择面板中的【功能】选项。
然后,选择【新建空白数据库】选项面板中的“空白数据库”选项,如图18-3所示。
图18-3选择空白数据库
(3)在界面右下角弹出的【空白数据库】界面中,单击【文件名】文本框右侧的【打开文件】按钮
,即会弹出【文件新建数据库】对话框,如图18-4所示。
图18-4打开【文件新建数据库】对话框
(4)在【文件新建数据库】对话框中选择要保存数据库的位置,本例中的数据库保存在IIS主目录(F盘下的myWeb文件夹)下的“weatherReport”文件夹内,并为数据库命名为“weather”,如图18-5所示。
图18-5选择数据库保存路径
(5)单击【确定】按钮后,在【MicrosoftAccess】界面的右下角即会显示数据库所要保存的路径和名称,如图18-6所示。
18-6显示数据库路径和名称
(6)单击【创建】按钮后,将会创建并打开“weather”数据库。
然后,在数据库界面中右击【表1】选项卡,在弹出的菜单中执行【设计视图】命令,如图18-7所示。
图18-7选择设计视图
(7)在弹出的【另存为】对话框中输入数据表的名称(本例为weatherInfo),该数据表用于存储天气预报信息,如图18-8所示。
图18-8命名数据表
(8)单击【确定】按钮后即可打开“weatherInfo”数据表,该表中默认存在“ID”字段,如图18-9所示。
图18-9打开数据表
(9)将光标放置在“ID”字段名称的下面的单元格中,然后输入新的字段名称“allInfo”,如图18-10所示。
图18-10创建新字段
(10)将光标放置在字段名称右侧的单元格中,在弹出的菜单中选择【文本】选项,即设置该字段中存储的数据为文本类型,如图18-11所示。
图18-11选择数据类型
(11)右击【weatherInfo】选项卡,在弹出的菜单中执行【数据表视图】命令,即可切换到数据表视图模式中,此时数据库就创建完成了,如图18-12所示。
图18-12数据表视图
18.1.2创建ASP页面
ASP是一种服务器端语言,它可以对文件和数据库进行操作。
本例将通过ASP页面实现获取网页中提供的天气预报信息、存储天气预报信息到数据库,以及为Flash提供信息源的功能。
创建过程:
(1)在电脑的【开始】菜单中,执行【所有程序】|【AdobeDreamweaverCS4】命令,打开DreamweaverCS4软件,该软件用于制作HTML、ASP、PHP等网页,如图18-13所示。
图18-13打开DreamweaverCS4
(2)单击该界面中【新建】列表的【ASPVBScript】选项,即可新建并打开一个ASP页面,如图18-14所示。
图18-14新建ASP页面
(3)选择文档中的所有代码并将其删除,然后输入以下代码。
该段代码通过创建XMLHTTP对象来获取指定网页中的源代码。
代码如下所示:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="936"%>
<%
Response.Buffer=true
'设置网页启动缓存
DimmyConnection,TheURL
'声明变量
TheURL="
'要获取源代码的网页URL
SetMyConnection=Server.CreateObject("Microsoft.XMLHTTP")
'创建XMLHTTP对象
MyConnection.Open"GET",TheURL,False
'通过GET方法打开指定网页
MyConnection.Send
TheData=MyConnection.responseText
'获取网页源代码中的所有文本信息
Response.ContentType=MyConnection.getResponseHeader("Content-Type")
'获取网页的内容格式
Response.Write(TheData)
'输出网页中的源代码
SetMyConnection=Nothing
'关闭XMLHTTP对象,以释放资源
%>
新建文本文档,将上面的代码复制到文档中,将其保存为后缀名为“.asp”的文件也可。
(4)输入完代码后,按Ctrl+S组合键,在弹出的【另存为】对话框中选择网页要保存的路径和名称(本例将网页保存在“weatherReport”文件夹内并命名为“proxy”),如图18-15所示。
图18-15保存ASP页面
对于没有安装Dreamweaver软件的用户来说,可以将代码输入到记事本中,然后再转换为asp格式的网页。
(5)使用相同的方法,在“weatherReport”文件夹内新建“process”ASP页面。
然后,在代码中通过创建Connection对象连接数据库;创建Recordset对象将获取的信息存储到数据表中。
代码如下所示:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="936"%>
<%
allInfo=Request("info")
Setconn=Server.CreateObject("Adodb.Connection")
'创建Connection对象
tmpPD="Provider=Microsoft.ACE.OLEDB.12.0"
'设置数据库驱动
tmpDS="DataSource="&Server.MapPath("weather.accdb")
'指定数据库的路径
tmpSTR=tmpPD&";"&tmpDS
'构造打开数据库的字符串
conn.OpentmpSTR
'利用Connection对象的Open方法打开数据库
Setrs=Server.CreateObject("Adodb.Recordset")
'创建Recordset对象
rs.open"weatherInfo",conn,1,3
'打开从数据库中读出的记录集
rs("allInfo")=allInfo
'将新的天气信息写入数据库
rs.update
'更新数据库
rs.Close
'利用Connection对象的Close方法关闭连接
Setrs=Nothing
Setconn=Nothing
'将Connection对象从内存中删除,以释放资源
%>
(6)在“weatherReport”文件夹内新建“getInfo”ASP页面。
然后,在代码中通过创建Connection对象连接数据库;创建Recordset对象输出“allInfo”字段中存储的数据。
代码如下所示:
<%
Setconn=Server.CreateObject("Adodb.Connection")
'创建Connection对象
tmpPD="Provider=Microsoft.ACE.OLEDB.12.0"
'设置数据库驱动
tmpDS="DataSource="&Server.MapPath("weather.accdb")
'指定数据库的路径
tmpSTR=tmpPD&";"&tmpDS
'构造打开数据库的字符串
conn.OpentmpSTR
'利用Connection对象的Open方法打开数据库
Setrs=Server.CreateObject("Adodb.Recordset")
'创建Recordset对象
rs.open"weatherInfo",conn,1,3
'打开从数据库中读出的记录集
response.writers("allInfo")
'输出allInfo字段中的数据
rs.Close
'利用Connection对象的Close方法关闭连接
Setrs=Nothing
Setconn=Nothing
'将Connection对象从内存中删除,以释放资源
%>
18.2服务器端的功能设计和实现
服务器端程序用于从获取的网页源代码中提取天气预报信息,并将其显示在可视化的界面中。
而为了方便简化操作,本例利用ActionScript语言定时从网页中获取天气预报信息,以快速为用户提供天气预报信息。
18.2.1获取天气预报信息界面
为了方便获取天气预报信息,可以让服务器端的Flash每到晚上8:
00自动从“中国气象局”网站获取新的数据,并更新到本地服务器中的数据库,从而可以大大减少劳动力。
获取天气预报信息的界面如图18-16所示。
图18-16自动获取天气预报信息界面
设计过程:
(1)在FlashCS4中,执行【文件】|【新建】命令,在打开的【新建文档】对话框中选择文档【类型】为“Flash文件(AdobeAIR)”,如图18-17所示。
图18-17新建Flash文件
(2)在【文档属性】面板中,设置文档的【尺寸】为600×340像素。
然后,在舞台中绘制一个绿色的渐变背景,如图18-18所示。
图18-18绘制背景
(3)将导入的“阴影”图像拖入到舞台中,并在上面绘制两个不同颜色和大小的矩形,以构成一个带边框的显示区域,然后将其转换为影片剪辑,如图18-19所示。
图18-19绘制显示区域
(4)新建图层,在显示区域的顶部输入标题文字,并在【属性】面板中设置其字符【系列】为“迷你简综艺”;【大小】为“37点”,如图18-20所示。
图18-20输入标题文字
(5)打开【组件】面板,将“GataGrid”组件拖入到标题文字的下面,并缩放其至适当的尺寸。
然后,在【属性】面板中设置其【实例名称】为“myDataGrid”,该组件用来显示天气预报信息,如图18-21所示。
图18-21拖入“DataGrid”组件
(6)在显示区域的左下角插入一个动态文本,并调整其大小。
然后,在【属性】面板中设置其【实例名称】为“mess”,该动态文本用来显示加载天气预报信息的状态,如图18-22所示。
图18-22插入动态文本
(7)在该动态文本的右侧再插入一个动态文本,调整其大小并设置【实例名称】为“mess”;字符【系列】为“迷你简综艺”;【大小】为“20点”,如图18-22所示。
图18-23插入动态文本
(8)此时,获取天气预报信息的界面就制作完成了,按Ctrl+Enter组合键可预览效果。
18.2.2获取天气预报信息程序
获取天气预报信息程序通过调用ASP页面,可以从指定网页中的获取源代码。
然后,利用ActionScript语言将源代码中的天气预报信息分离出来,最后再通过调用ASP页面将天气预报信息存储到数据库中。
获取天气预报信息程序如图18-24所法。
图18-24获取天气预报信息
制作过程:
(1)在“weatherReport”文件夹内新建名称为“countDown”的ActionScript文件。
然后,在该文件中创建pack包、“countDown”自定义类和主函数。
代码如下所示:
package{
publicclasscountDown{
//countDown自定义类
publicvarnow_millisecondsFrom1970:
Number;
publicvarnow_secondsFrom1970:
Number;
publicvarto_millisecondsFrom1970:
Number;
publicvarto_secondsFrom1970:
Number;
publicvarremainSeconds_Total:
Number;
publicvarremainDays:
String;
publicvarremainHours:
String;
publicvarremainMinutes:
String;
publicvarremainSeconds:
String;
publicvaroutputMess:
String;
//声明变量
publicfunctioncountDown(fromYear,fromMonth,fromDay,fromHour,fromMinute,fromSecond,toYear,toMonth,toDay,toHour,toMinute,toSecond){
//countDown主函数
}
}
}
(2)在countDown()函数体中,通过创建Date对象初始化起始时间和目标时间,并获取自1970年1月1日午夜(通用时间)以来的毫秒数,然后计算它们之间相距的秒数。
代码如下所示:
varfromDate:
Date=newDate(fromYear,fromMonth,fromDay,fromHour,fromMinute,fromSecond);
//初始化起始时间
now_millisecondsFrom1970=fromDate.getTime();
//获取起始时间自1970年1月1日午夜(通用时间)以来的毫秒数
now_secondsFrom1970=int(now_millisecondsFrom1970/1000);
//将毫秒数转换为秒数
vartoDate:
Date=newDate(toYear,toMonth,toDay,toHour,toMinute,toSecond);
//初始化目标时间
to_millisecondsFrom1970=toDate.getTime();
to_secondsFrom1970=int(to_millisecondsFrom1970/1000);
//获取目标时间自1970年1月1日午夜(通用时间)以来的秒数
remainSeconds_Total=to_secondsFrom1970-now_secondsFrom1970;
//计算起始时间与目标时间相距的秒数
(3)通过If语句判断目标时间是否落后于起始时间。
如果是,则自动将起始时间延后到第二天。
代码如下所示:
if(toHour//如果目标时间的小时数落后于起始时间的小时数
toDay+=1;//时间延后到第二天
}
if(toHour==fromDate.getHours()&&toMinute//如果目标时间的分钟数落后于起始时间的分钟数
toDay+=1;//时间延后到第二天
}
if(toHour==fromDate.getHours()&&toMinute==fromDate.getMinutes()&&toSecond//如果目标时间的秒数落后于起始时间的秒数
toDay+=1;//时间延后到第二天
}
(4)计算起始时间和目标时间之间相距的天数、小时数、分钟数和秒数,并将它们存储到outputMess变量中。
代码如下所示:
vartmpRemainDays:
Number;
tmpRemainDays=int(int(remainSeconds_Total/3600)/24);
//将相距的秒数转换为天数
remainDays=String(tmpRemainDays);
//将天数转换为字符串值
vartmpRemainHours:
Number;
tmpRemainHours=int((remainSeconds_Total-tmpRemainDays*24*3600)/3600);
//计算剩余的小时数
if(tmpRemainHours<10){
//如果小时数小于10
remainHours="0"+tmpRemainHours;
//则在小时数前面加上“0”字符串
}else{
remainHours=String(tmpRemainHours);
//将小时数转换为转换字符串值
}
vartmpRemainMinutes:
Number;
tmpRemainMinutes=int((remainSeconds_Total-tmpRemainDays*24*3600-tmpRemainHours*3600)/60);
//计算剩余的分钟数
if(tmpRemainMinutes<10){
remainMinutes="0"+tmpRemainMinutes;
}else{
remainMinutes=String(tmpRemainMinutes);
}
vartmpRemainSeconds:
Number;
tmpRemainSeconds=int(remainSeconds_Total%60);
//计算剩余的秒数
if(tmpRemainSeconds<10){
remainSeconds="0"+tmpRemainSeconds;
}else{
remainSeconds=String(tmpRemainSeconds);
}
outputMess=remainHours+":
"+remainMinutes+":
"+remainSeconds;
//将剩余的小时数、分钟数和秒数存储到outputMess变量中
(5)在“weatherReport”文件夹内新建名称为“weatherInfo”的ActionScript文件。
然后,在该文件中创建pack包、“weatherInfo”自定义类和主函数。
代码如下所示:
package{
//导入文件运行所需的类
importflash.display.*;
import.*;
importflash.events.*;
importflash.errors.*;
importflash.system.*;
importflash.text.*;
importflash.utils.*;
importfl.controls.DataGrid;
//导入DataGrid组件
importfl.controls.dataGridClasses.DataGridColumn;
//导入DataGridColumn类
importfl.managers.StyleManager;
importfl.data.DataProvider;
//导入DataProvider类
publicclassweatherInfoextendsSprite{
privatevarIP:
String;
privatevariisPath:
String;
privatevarproxyPath:
String;
privatevarprocessPath:
String;
//定义ASP文件路径
privatevaraspRequest:
URLRequest;
privatevaraspLoader:
URLLoader;
privatevartmpString:
String;
//定义URLRequest和URLLoader对象
privatevarmainArray:
Array;
privatevartmpArray:
Array;
privatevarstrToSend:
String;
privatevarCITY:
String;
privatevarDATE:
String;
privatevarWEAT:
String;
privatevarTEMP:
String;
privatevarWIND:
String;
privatevarULTR:
String;
privatevarAIR:
String;
//定义天气预报参数
privatevartmpOutputMess:
String;
privatevartmpArrayForCountDown:
Array;
privatevarcountDownInterval:
uint;
privatevargetInfoInterval:
uint;
privatevarstartCountInterval:
uint;
//定义倒计时
privatevartryGetInfoTimes:
Number;
privatevartryWriteInfoTimes:
Number;
//定义尝试调用次数
publicfunctionweatherInfo(){
init();//初始化设置
startLoad();//获取天气预报信息
startInterval();
}
}
}
(6)创建init()函数,该函数用来初始化天气预报程序中的设置,包括编码、服务器IP、程序位置等。
代码如下所示:
privatefunctioninit(){
System.useCodePage=true;
//设置编码,使Flash和操作系统使用的语言保持一致
IP="127.0.0.1";
//定义服务器IP
iisPath="http:
//