Java课程设计报告--日常信息查询系统2.docx
目录1第1章课题概述21.1课题的目的21.2课题的要求21.2.1输入输出的要求21. 2.2程序实现的功能要求21.3设备与环境2第2章概要设计32.1整个程序的模块结构及流程32.2各个功能的描述32.2.1天气预报功能32.2.2域名ICP备案查询功能42.2.3快递状态查询功能52.3输入数据合法性的检测及初步处理5第3章程序功能的实现63.1主窗口的实现63.2主要功能模块的实现63.2.1天气预报功能的实现63.2.2域名ICP备案查询的实现103.2.3快递状况查询的实现13第4章调试及发现问题的解决16第5章程序测试及分析17第6章总结19参考文献20第1章课题概述本次JAVA课程设计的题目是设计并实现日常信息查询系统2(天气预报查询、域名ICP备案查询、快递状态查询)。1.1课题的目的天气预报查询、域名ICP备案查询、快递状态查询等是目前日常生活中人们普遍需要查询的内容。通过解析XML或JSON接口文件并将结果显示在图形用户界面上,以便用户获得信息,同时还能加强对java以及各种jar包的学习与使用。1. 2课题的要求1.1.1 输入输出的要求(1)程序运行时会弹出一个对话框,并将可查询内容显示在该对话框的标题栏。(2)查询内容相关信息(如城市名、域名等)通过对话框的文本区输入。(3)获得的结果显示在弹出的新窗口中。1.1.2 程序实现的功能要求(1)用户能够自由输入想要查询的内容。(2)能正确获得XML或JSON接口文件并且正确解析获得相关信息,并将结果显示在图形用户界面中。(3) api接口返还的XML或JSON文件的格式要求以及遍历文件、解析文件的方法。1. 3设备与环境硬件:多媒体计算机。软件:java集成开发环境、操作系统。第2章概要设计1.1 整个程序的模块结构及流程根据课题要求,整个程序按功能可划分为天气预报查询、域名ICP备案查询、快递状况查询。除上述主要功能模块之外,为更好地提供程序的人机交互能力,程序还应提供用户自由输入查询内容的功能。整个程序的模块图2-1所示。图2-1整个程序流程2. 2各个功能的描述2. 2.1天气预报功能用户手动输入想要查询的城市,城市和对应的城市编码在HaShMaP中进行保存。通过yahoo天气的api接口将城市代码输入到url网址中,获得该城市实时天气的XML文档,并将结果保存在DOCUment类中。然后根据XML文档的标签来遍历所有子节点后获得需要的数据,分别将数据保存在NOde类中。将结果按照格式输出在图形用户界面中。图2-2天气预报流程示意图2. 2.2域名ICP备案查询功能用户手动输入想要通过何种方式查询域名ICP,再将相对应的内容输入。url获得网址,将api接口返回的JSON文件作为输入保存在StringBuffer类中解析而不是通过下载。最后通过数组,String类的substring方法将结果输出在图形用户界面中。图2-3域名ICP备案查询流程图2. 2.3快递状态查询功能用户手动输入想要查询的快递公司以及快递单号。Url获得网址,将api接口返回的JSON文件作为输入保存在StringBuffer类中解析而不是通过下载。最后通过数组,String类的substring方法将结果输出在图形用户界面中。图2-41快递状态查询流程图2. 3输入数据合法性的检测及初步处理将用户输入的结构保存在input中,通过input.equals()方法来检测用户输入的数据是否合法,是否包含在可查询范围内。如果不存在或不合法,提醒用户重新输入数据。在每个对话框中,还会提醒用户可输入的内容以及需注意的地方。第3章程序功能的实现2.1 主窗口的实现在主程序all中调用JOPtionPane方法,提示用户输入想要查询的内容。再通过用户输入的内容调用对应的程序的main方法。importjava×.swing.DOptionPane;publicclassallpublicstaticvoidmain(Stringargs)Stringinput=null;input=JOptionPane.s/?ow7“putDia(og("请输入想要查询的内容(天气预报、域名ICP备案查询、快递状况查询)");if(input.equals("天气预报”)WeatherForecast.nin(null);elseif(input.equals(”域名ICP备案查询”)ICP.mn(null);)elseif(input.equals("快递状况查询”)EXPreSSSearCh勿null);elseinput=JOptionPanes/?ow7“putDia(og("请重新输入想要查询的内容(天气预报、域名ICP备案查询、快递状况查询)");3. 2主要功能模块的实现3. 2.1天气预报功能的实现天气预报功能首先通过提示框获取用户输入的城市名,定义dictionarystrings将天气情况存入,再定义HashMap类将城市与对应的城市编码以键值对的形式存在HaShMaP中。通过城市名获得对应编码,将编码及api接口网址输入到Url中,并返回一个URLConnection对象,将获得的XML文件通过URLConnection的getlnputStream方法保存在DOCUment中。建立DocumentBuIiderFactory来解析获得的XML文件。定义一个NodeList通过标签名channel来遍历获得的XML文件,运用NamedNOdeMaP来通过名称访问节点的集合,获得日期、最高温、最低温、天气情况等。将结果显示在图形用户界面中。天气预报功能实现的代码如下:importjava.io.IOException;importjava.io.InputStream;.URL;.URLConnection;importjava.util.HashMap;importjava.util.Map;importjavax.swing.JFrame;importjavax.swingJOptionPane;importjavax.swingJTextArea;importjava×.xml.parsers.DocumentBuiIder;importjavax.xml.parsers.DocumentBuiIderFactory;importorg.w3c.dom.Document;importorg.w3c.dom.NamedNodeMap;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;classGetWeatherInfoprivatefinalStringdictionarystrings=“龙卷风,”热带风暴,”飓风”,”强雷阵雨”,”雷阵雨“,”小雨加雪,”雨加冰雹,“雪加冰雹",“冰雨,“毛毛雨”/冻雨”,”阵雨,“阵雨”,”小雪,"零星小雪,”高吹雪“,“雪“冰雹“,“雨夹雪“,“尘”,“雾,“薄雾”多烟的“,”大风,”有风”,“寒冷”/阴天,”夜间阴天,”白天阴天,”夜间多云,”白天多云“J夜间清亮”,“晴朗,”转晴,“转晴”,“雨夹冰雹,“热,“雷阵雨”,“雷阵雨,“雷阵雨,“雷阵雨”J大雪”,”阵雪,“大雪”,哆云'7'雷,"阵雪,“雷雨”);publicGetWeatherInfoOCitys();)/*初始化城市代号*/publicstaticMap<String,String>CityCode=newHashMap<StringzString>();staticvoidCitys()cityCode.put(""z"0008");CityCode.put("天津","0133");CityCode.put(,武汉,"0138");CityCOde.put(“杭州“,“0044”);CityCOde.put(“合肥“,“0448”);cityCode.put("±S,"0116");CityeOde.put("福州,“0031”);CityCOde.put(“重庆","0017");cityCode.put("ffi"z"0097");cityCode.put(")","0049");cityCode.put("Fj"z',0064");cityCode.put("11"z"0512");CityCode.put("郑州,”0165");CityCOde.put(“呼和浩特”,“0249");CityCode.put(呜鲁木齐”,“0135");CityCode.put(“长沙,”0013");CityCode.put(“银川,“0259”);cityCode.put("M'',"0037");cityCode.put("½"z',0080");CityCOde.put(“海口,“0502");cityCode.put(""z"0100");CityCode.put("成都,“0016”);CityCode.put(“石家庄,”0122");cityCode.put(,0","0039");CityCode.put(“太原,”0129。;CityCode.put("昆明,“0076”);cityCode.put("JtH"z"0119");cityCode.put('三","0141");CityCOde.put("长春","0010");CityCode.put("兰州,“0079”);CityCOde.put(“西宁”,”0236");)privateDocumentgetWeatherXML(StringcityCode)throwsIOExceptionURLurl=newURL("+cityCode+"&u=c");URLConnectionconnection=url.openConnection();DocumentDoc=stringToElement(connection.getlnputStream();returnDoc;)*获取天气信息*/publicStringgetWeather(Stringcity)Stringresult=null;try(Documentdoc=getWeatherXML(GetWeatherlnfo.cityCode.get(city);NodeListnodeList=doc.getElementsByTagName("channel");for(inti=0;i<nodeList.getLength();i+)Nodenode=nodeList.item(i);NodeListnodeListl=node.getChildNodes();for(intj=0;j<nodeListl.getLength();j+)Nodenodel=nodeListl.item(j);if(no