天气预报查询系统文档.docx
《天气预报查询系统文档.docx》由会员分享,可在线阅读,更多相关《天气预报查询系统文档.docx(44页珍藏版)》请在冰豆网上搜索。
![天气预报查询系统文档.docx](https://file1.bdocx.com/fileroot1/2023-2/7/110c43f2-4c2d-4405-8f66-0b9da6cd499d/110c43f2-4c2d-4405-8f66-0b9da6cd499d1.gif)
天气预报查询系统文档
天
气
预
报
查
询
系
统
软件086班
陈雯
20081396
一、课程设计目的
1.学习java与Sqlserver2005等数据库的连接
2.进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面设计、Java多线程编程、java程序的设计、文件和网络输入输出流编程、Java数据库编程等。
3.通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。
二、课程设计总体要求
2.具有专门对各个城市进行天气查询的功能,但实现此功能需连接网络
3.显示当前时间、日期、星期的功能
4.具有托盘的功能,从而方便操作
5.设计此系统需要有一个通过选择城市从而获得天气情况的下拉框,以及显示该城市的天气情况的面板,因而采用简单的界面结构即可,界面见下图(注:
显示天气的图标是用flash制作的,需要jar包搭建来显示,具体的请看source文件夹)
6.代码实现(见具体的带有解释的源代码)
三、设计题目
设计一个天气预报查询系统,通过城市名获得当前、当日、明日的天气预报
四、注意事项
本系统设计的数据库是Sqlserver2005,用户名:
sa,密码:
123456.此天气预报查询系统文件夹中有备份的数据库.
五、设计
1.系统设计(功能)
系统启动后显示的托盘
系统启动后显示的气泡内容
鼠标移动到托盘图标时的事件
右击托盘图标的事件
系统初始化的界面
选择省份的界面
由省份得到的城市列表,此时是选择城市的界面
2.数据库的设计
数据库中的E-R图
数据库中的关系图
数据库中的表
由于满足第三范式,则得到的表为
天气预报(省份名,城市名,城市代码)
天气预报表的设计
天气预报表中的内容
五、实现
实现代码:
1、Today.java(对界面下方的时间进行处理)
packageWeatherFrame;
importjava.util.Calendar;
//此类用于对界面下方的时间进行处理
publicclassToday{
privatestaticfinalCalendarNOW=Calendar.getInstance();
privatestaticfinalintYEAR=NOW.get(Calendar.YEAR);
privatestaticfinalintMONTH=NOW.get(Calendar.MONTH)+1;privatestaticfinalintDAY=NOW.get(Calendar.DAY_OF_MONTH);
privatestaticfinalintWEEK=NOW.get(Calendar.DAY_OF_WEEK);
privatestaticfinalintHOUR=NOW.get(Calendar.HOUR_OF_DAY);
privatestaticfinalintMINUTE=NOW.get(Calendar.MINUTE);
privatestaticfinalintSECOND=NOW.get(Calendar.SECOND);
//
publicstaticStringgetDate(){//获得系统日期
returnYEAR+"-"+MONTH+"-"+DAY;
}
publicstaticStringgetDateOfNum(){//获得系统天数
Stringy=YEAR+"";
Stringm=MONTH+"";
Stringd=DAY+"";
if(MONTH<10)
m="0"+MONTH;
if(DAY<10)
d="0"+DAY;
returny+m+d;
}
publicstaticStringgetDateOfShow(){//显示年月日格式化
returnYEAR+"年"+MONTH+"月"+DAY+"日";
}
publicstaticStringgetDayOfWeek(){//获得系统时间后转化为星期
StringdayOfWeek="";
switch(WEEK){
case1:
dayOfWeek="星期日";
break;
case2:
dayOfWeek="星期一";
break;
case3:
dayOfWeek="星期二";
break;
case4:
dayOfWeek="星期三";
break;
case5:
dayOfWeek="星期四";
break;
case6:
dayOfWeek="星期五";
case7:
dayOfWeek="星期六";
break;
}
returndayOfWeek;
}
publicstaticStringgetTime(){//获得系统时间
returnHOUR+":
"+MINUTE+":
"+SECOND;
}
publicstaticvoidmain(String[]args){
System.out.println(Today.getDayOfWeek());
}
publicstaticintgetYEAR(){//获得系统年
returnYEAR;
}
publicstaticintgetDAY(){//获得系统天
returnDAY;
}
publicstaticintgetMONTH(){//获得系统月
returnMONTH;
}
}
2、Tray.java(在系统任务栏中具有托盘)
packageWeatherFrame;
importjava.awt.*;
importjava.awt.TrayIcon.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.AncestorEvent;
importjavax.swing.event.AncestorListener;
//此类用于在系统任务栏中具有托盘的功能
publicclassTray{
publicTrayIcontrayicon;
privateJFramef;
privateFontfont;
privateColorcolor;
publicSystemTraysysTray;
publicTray(JFramef){
this.f=f;
}
publicvoidSystemTrayInitial(){//系统栏初始化
if(!
SystemTray.isSupported())//判断当前系统是否支持系统栏
//isSupported()判断当前系统是否支持系统栏
return;
try{
finalStringtitle="天气预报";
finalStringmessage="详细相关信息\n请查看本系统";
sysTray=SystemTray.getSystemTray();
//设置托盘的图标
Imageimage=Toolkit.getDefaultToolkit().getImage(
Tray.class.getResource("/images/icon.png"));
trayicon=newTrayIcon(image,"");
trayicon.setToolTip("\n详细相关信息\n\n请查看本系统\n");//鼠标移动托盘图标显示的文字
//设置右击托盘的图标后的事件
finalJPopupMenupop=createMenu();
f.addMouseListener(newMouseListener(){
@Override
publicvoidmouseClicked(MouseEventarg0){
//TODOAuto-generatedmethodstub
pop.setVisible(false);
}
@Override
publicvoidmouseEntered(MouseEventarg0){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmouseExited(MouseEventarg0){
//TODOAuto-generatedmethodstub
}
@Override
publicvoidmousePressed(MouseEventarg0){
//TODOAuto-generatedmethodstub
pop.setVisible(false);
}
@Override
publicvoidmouseReleased(MouseEventarg0){
//TODOAuto-generatedmethodstub
}
});
trayicon.addMouseListener(newMouseListener(){//点击图标的事件
publicvoidmousePressed(MouseEvente){
if(e.getButton()==1){//点击左键的事件
f.setVisible(true);
f.toFront();
pop.setVisible(false);
}elseif(e.getButton()==3){//点击右键的事件
pop.show(e.getComponent(),e.getX(),e.getY());
}
}
publicvoidmouseExited(MouseEventarg0){}
publicvoidmouseClicked(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseReleased(MouseEvente){}
});
//向系统托盘中添加托盘图标对象
sysTray.add(trayicon);
//在系统托盘图标上显示气泡提示信息,此处NONE为不以任何形式显示
trayicon.displayMessage(title,message,MessageType.NONE);
}catch(Exceptione){
e.printStackTrace();
}
}
//创建右击托盘后出现的内容
privateJPopupMenucreateMenu(){//创建系统栏菜单的方法
font=newFont("楷体",Font.PLAIN,12);
color=Color.white;
finalJPopupMenumenu=newJPopupMenu();
menu.setBorder(BorderFactory.createLineBorder(newColor(0,178,231),1));//设置右击托盘图标的边框属性
finalJMenuItemexitItem=newJMenuItem("退出");//设置右击托盘图标的退出相关操作
exitItem
.setIcon(newImageIcon(Tray.class.getResource("/images/退出.png")));
exitItem.setBackground(color);
exitItem.setFont(font);
exitItem.addMouseListener(newMouseListener(){//右击托盘图标的退出事件
publicvoidmouseClicked(MouseEventarg0){
exitItem.setBackground(Color.white);
menu.setVisible(false);
}
publicvoidmouseEntered(MouseEventarg0){
//TODOAuto-generatedmethodstub
exitItem.setBackground(newColor(0,178,231));
}
publicvoidmouseExited(MouseEventarg0){
exitItem.setBackground(Color.white);
}
publicvoidmousePressed(MouseEventarg0){
exitItem.setBackground(Color.white);
}
publicvoidmouseReleased(MouseEventarg0){
exitItem.setBackground(Color.white);
}
});
exitItem.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
menu.setVisible(false);
System.exit(0);
}
});
finalJMenuItemopenItem=newJMenuItem("打开");//设置右击托盘图标的打开相关操作
openItem
.setIcon(newImageIcon(Tray.class.getResource("/images/打开.png")));
openItem.setBackground(color);
openItem.setFont(font);
openItem.addMouseListener(newMouseListener(){//右击托盘图标的打开事件
publicvoidmouseClicked(MouseEventarg0){
openItem.setBackground(Color.white);
menu.setVisible(false);
}
publicvoidmouseEntered(MouseEventarg0){
openItem.setBackground(newColor(0,178,231));
}
publicvoidmouseExited(MouseEventarg0){
openItem.setBackground(Color.white);
}
publicvoidmousePressed(MouseEventarg0){
openItem.setBackground(Color.white);
}
publicvoidmouseReleased(MouseEventarg0){
openItem.setBackground(Color.white);
}
});
openItem.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(!
f.isVisible()){
menu.setVisible(false);
f.setVisible(true);
f.toFront();
}else
f.toFront();
}
});
//系统栏的访问服务器菜单项事件
menu.add(openItem);
menu.add(exitItem);
returnmenu;
}
}
3、WeatherFrame.java(天气预报查询系统)
packageWeatherFrame;
importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.awt.event.WindowListener;
importjava.io.File;
importjava.io.IOException;
import.InetAddress;
import.MalformedURLException;
import.URL;
import.UnknownHostException;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.text.DateFormat;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
importjava.util.Locale;
importjavax.swing.BorderFactory;
importjavax.swing.Box;
importjavax.swing.ImageIcon;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importjavax.swing.JTabbedPane;
importjavax.swing.SwingConstants;
importjavax.swing.UIManager;
importjavax.swing.border.TitledBorder;
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.ParserConfigurationException;
importorg.w3c.dom.DOMException;
importorg.w3c.dom.Document;
importorg.w3c.dom.NamedNodeMap;
importorg.w3c.dom.NodeList;
importorg.xml.sax.SAXException;
importcom.jpackages.jflashplayer.FlashPanel;
importcom.jpackages.jflashplayer.JFlashInvalidFlashException;
importcom.jpackages.jflashplayer.JFlashLibraryLoadFailedException;
importWeatherFrame.YahooWeatherFramePre.CityItem;
//此类是天气预报查询系统的主要代码
publicclassWeatherFrameextendsJFrame{
privateContainercontainer;
privateintx;
privateinty;
privateDimensiondeminsion;
privateJPanelstauspanel;
privateJLabellabel;
privateJLabeltimelabel;
privateJLabeldatelabel;
privateJTabbedPanetabbedpane;
privateJPanelpanel;
//天气情况图片
publicstaticJLabeljlTodayImg=newJLabel();
//天气总情况描述
JLabeljlTodayTitle=newJLabel();
//当前气温
JLabeljlTodayDegree=newJLabel();
//当前风冷热系数
JLabeljlTodayChill=newJLabel();
//当前风速
JLabeljlTodaySpeed=newJLabel();
//当前风向
JLabeljlTodayDirection=newJLabel();
//当前湿度
JLabeljlTodayHumidity=newJLabel();
//当前气压
JLabeljlTodayPressure=newJLabel();
//当前能见度
JLabeljlTodayVisiblity=newJLabel();
//日出