版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目錄TOC\o"1-3"\h\u9529目錄 13622第1章課題概述 2237481.1課題的目的 2144411.2課題的要求 2255771.2.1輸入輸出的要求 2100611.2.2程序實現(xiàn)的功能要求 2184041.3設備與環(huán)境 212423第2章概要設計 3141672.1整個程序的模塊結構及流程 3166172.2各個功能的描述 3270422.2.1天氣預報功能 32252.2.2域名ICP備案查詢功能 486622.2.3快遞狀態(tài)查詢功能 5312492.3輸入數(shù)據(jù)合法性的檢測及初步處理 512930第3章程序功能的實現(xiàn) 6118963.1主窗口的實現(xiàn) 6206513.2主要功能模塊的實現(xiàn) 6220153.2.1天氣預報功能的實現(xiàn) 6142483.2.2域名ICP備案查詢的實現(xiàn) 10239223.2.3快遞狀況查詢的實現(xiàn) 1327833第4章調試及發(fā)現(xiàn)問題的解決 1623074第5章程序測試及分析 1710395第6章總結 1932714參考文獻 20第1章課題概述本次JAVA課程設計的題目是設計并實現(xiàn)日常信息查詢系統(tǒng)2(天氣預報查詢、域名ICP備案查詢、快遞狀態(tài)查詢)。1.1課題的目的天氣預報查詢、域名ICP備案查詢、快遞狀態(tài)查詢等是目前日常生活中人們普遍需要查詢的內容。通過解析XML或JSON接口文件并將結果顯示在圖形用戶界面上,以便用戶獲得信息,同時還能加強對java以及各種jar包的學習與使用。1.2課題的要求1.2.1輸入輸出的要求程序運行時會彈出一個對話框,并將可查詢內容顯示在該對話框的標題欄。查詢內容相關信息(如城市名、域名等)通過對話框的文本區(qū)輸入。獲得的結果顯示在彈出的新窗口中。1.2.2程序實現(xiàn)的功能要求用戶能夠自由輸入想要查詢的內容。能正確獲得XML或JSON接口文件并且正確解析獲得相關信息,并將結果顯示在圖形用戶界面中。api接口返還的XML或JSON文件的格式要求以及遍歷文件、解析文件的方法。1.3設備與環(huán)境硬件:多媒體計算機。軟件:java集成開發(fā)環(huán)境、操作系統(tǒng)。第2章概要設計2.1整個程序的模塊結構及流程根據(jù)課題要求,整個程序按功能可劃分為天氣預報查詢、域名ICP備案查詢、快遞狀況查詢。除上述主要功能模塊之外,為更好地提供程序的人機交互能力,程序還應提供用戶自由輸入查詢內容的功能。整個程序的模塊圖2-1所示。圖2-1整個程序流程2.2各個功能的描述2.2.1天氣預報功能用戶手動輸入想要查詢的城市,城市和對應的城市編碼在HashMap中進行保存。通過yahoo天氣的api接口將城市代碼輸入到url網址中,獲得該城市實時天氣的XML文檔,并將結果保存在Document類中。然后根據(jù)XML文檔的標簽來遍歷所有子節(jié)點后獲得需要的數(shù)據(jù),分別將數(shù)據(jù)保存在Node類中。將結果按照格式輸出在圖形用戶界面中。圖2-2天氣預報流程示意圖2.2.2域名ICP備案查詢功能用戶手動輸入想要通過何種方式查詢域名ICP,再將相對應的內容輸入。url獲得網址,將api接口返回的JSON文件作為輸入保存在StringBuffer類中解析而不是通過下載。最后通過數(shù)組,String類的substring方法將結果輸出在圖形用戶界面中。圖2-3域名ICP備案查詢流程圖2.2.3快遞狀態(tài)查詢功能用戶手動輸入想要查詢的快遞公司以及快遞單號。url獲得網址,將api接口返回的JSON文件作為輸入保存在StringBuffer類中解析而不是通過下載。最后通過數(shù)組,String類的substring方法將結果輸出在圖形用戶界面中。圖2-4SEQ圖2-4\*ARABIC1快遞狀態(tài)查詢流程圖2.3輸入數(shù)據(jù)合法性的檢測及初步處理將用戶輸入的結構保存在input中,通過input.equals()方法來檢測用戶輸入的數(shù)據(jù)是否合法,是否包含在可查詢范圍內。如果不存在或不合法,提醒用戶重新輸入數(shù)據(jù)。在每個對話框中,還會提醒用戶可輸入的內容以及需注意的地方。第3章程序功能的實現(xiàn)3.1主窗口的實現(xiàn)在主程序all中調用JOptionPane方法,提示用戶輸入想要查詢的內容。再通過用戶輸入的內容調用對應的程序的main方法。importjavax.swing.JOptionPane;publicclassall{publicstaticvoidmain(String[]args){ Stringinput=null; input=JOptionPane.showInputDialog("請輸入想要查詢的內容(天氣預報、域名ICP備案查詢、快遞狀況查詢)"); if(input.equals("天氣預報")){ WeatherForecast.main(null);; }elseif(input.equals("域名ICP備案查詢")){ ICP.main(null); }elseif(input.equals("快遞狀況查詢")){ ExpressSearch.main(null); }else{ input=JOptionPane.showInputDialog("請重新輸入想要查詢的內容(天氣預報、域名ICP備案查詢、快遞狀況查詢)"); }}}3.2主要功能模塊的實現(xiàn)3.2.1天氣預報功能的實現(xiàn)天氣預報功能首先通過提示框獲取用戶輸入的城市名,定義dictionaryStrings將天氣情況存入,再定義HashMap類將城市與對應的城市編碼以鍵值對的形式存在HashMap中。通過城市名獲得對應編碼,將編碼及api接口網址輸入到url中,并返回一個URLConnection對象,將獲得的XML文件通過URLConnection的getInputStream方法保存在Document中。建立DocumentBuliderFactory來解析獲得的XML文件。定義一個NodeList通過標簽名<channel>來遍歷獲得的XML文件,運用NamedNodeMap來通過名稱訪問節(jié)點的集合,獲得日期、最高溫、最低溫、天氣情況等。將結果顯示在圖形用戶界面中。天氣預報功能實現(xiàn)的代碼如下:importjava.io.IOException;importjava.io.InputStream;import.URL;import.URLConnection;importjava.util.HashMap;importjava.util.Map;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JTextArea;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.w3c.dom.Document;importorg.w3c.dom.NamedNodeMap;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;classGetWeatherInfo{privatefinalString[]dictionaryStrings={"龍卷風","熱帶風暴","颶風","強雷陣雨","雷陣雨","小雨加雪","雨加冰雹","雪加冰雹","冰雨","毛毛雨","凍雨","陣雨","陣雨","小雪","零星小雪","高吹雪","雪","冰雹","雨夾雪","塵","霧","薄霧","多煙的","大風","有風","寒冷","陰天","夜間陰天","白天陰天","夜間多云","白天多云","夜間清亮","晴朗","轉晴","轉晴","雨夾冰雹","熱","雷陣雨","雷陣雨","雷陣雨","雷陣雨","大雪","陣雪","大雪","多云","雷","陣雪","雷雨"};publicGetWeatherInfo(){Citys();}/*初始化城市代號*/publicstaticMap<String,String>cityCode=newHashMap<String,String>();staticvoidCitys(){cityCode.put("北京","0008");cityCode.put("天津","0133");cityCode.put("武漢","0138");cityCode.put("杭州","0044");cityCode.put("合肥","0448");cityCode.put("上海","0116");cityCode.put("福州","0031");cityCode.put("重慶","0017");cityCode.put("南昌","0097");cityCode.put("香港","0049");cityCode.put("濟南","0064");cityCode.put("澳門","0512");cityCode.put("鄭州","0165");cityCode.put("呼和浩特","0249");cityCode.put("烏魯木齊","0135");cityCode.put("長沙","0013");cityCode.put("銀川","0259");cityCode.put("廣州","0037");cityCode.put("拉薩","0080");cityCode.put("???,"0502");cityCode.put("南京","0100");cityCode.put("成都","0016");cityCode.put("石家莊","0122");cityCode.put("貴陽","0039");cityCode.put("太原","0129");cityCode.put("昆明","0076");cityCode.put("沈陽","0119");cityCode.put("西安","0141");cityCode.put("長春","0010");cityCode.put("蘭州","0079");cityCode.put("西寧","0236");}privateDocumentgetWeatherXML(StringcityCode)throwsIOException{URLurl=newURL("/forecastrss?p=CHXX"+cityCode+"&u=c");URLConnectionconnection=url.openConnection();DocumentDoc=stringToElement(connection.getInputStream());returnDoc;}/*獲取天氣信息*/publicStringgetWeather(Stringcity){Stringresult=null;try{Documentdoc=getWeatherXML(GetWeatherInfo.cityCode.get(city));NodeListnodeList=doc.getElementsByTagName("channel");for(inti=0;i<nodeList.getLength();i++){Nodenode=nodeList.item(i);NodeListnodeList1=node.getChildNodes();for(intj=0;j<nodeList1.getLength();j++){Nodenode1=nodeList1.item(j);if(node1.getNodeName().equalsIgnoreCase("item")){NodeListnodeList2=node1.getChildNodes();for(intk=0;k<nodeList2.getLength();k++){Nodenode2=nodeList2.item(k);if(node2.getNodeName().equalsIgnoreCase("yweather:forecast")){NamedNodeMapnodeMap=node2.getAttributes();NodelowNode=nodeMap.getNamedItem("low");NodehighNode=nodeMap.getNamedItem("high");NodecodeNode=nodeMap.getNamedItem("code");NodedateNode=nodeMap.getNamedItem("date");Stringday=dateNode.getNodeValue();if(result==null){result="";}else{day=dateNode.getNodeValue();}result=result+day+""+dictionaryStrings[Integer.parseInt(codeNode.getNodeValue())]+"\t最低溫度:"+lowNode.getNodeValue()+"℃\t最高溫度:"+highNode.getNodeValue()+"℃\n";}}}}}}catch(Exceptione){e.printStackTrace();}returnresult;}publicDocumentstringToElement(InputStreaminput){try{DocumentBuilderdb=DocumentBuilderFactory.newInstance().newDocumentBuilder();Documentdoc=db.parse(input);returndoc;}catch(Exceptione){returnnull;}}}publicclassWeatherForecast{publicstaticvoidmain(Stringarg[]){ JFramejf=newJFrame("天氣預報"); jf.addWindowListener(newjava.awt.event.WindowAdapter(){ publicvoidwindowClosing(java.awt.event.WindowEventevt){ System.exit(0); } }); Stringinput; input=JOptionPane.showInputDialog("請輸入城市"); GetWeatherInfoinfo=newGetWeatherInfo(); Stringweather=info.getWeather(input); JTextAreajta=newJTextArea(); jta.setText(weather); jf.add(jta); jf.pack(); jf.setVisible(true); }}3.2.2域名ICP備案查詢的實現(xiàn)域名ICP備案查詢功能首先通過用戶輸入的查詢類型(域名、網站首頁等)以及信息后建立URL連接,并將網頁返回的JSON數(shù)據(jù)經過直接解析后保存(將字節(jié)解碼為字符)。將解析后的數(shù)據(jù)進行處理后輸出在圖形用戶界面中。域名ICP備案查詢功能的代碼實現(xiàn)如下:importjava.io.InputStreamReader;import.HttpURLConnection;import.URL;importjava.util.Scanner;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JTextArea;importnet.sf.json.JSONObject;publicclassICP{publicstaticJSONObjectgetHtmlJsonByUrl(StringurlTemp){URLurl=null;InputStreamReaderinput=null;HttpURLConnectionconn;JSONObjectjsonObj=null;try{url=newURL(urlTemp);conn=(HttpURLConnection)url.openConnection();input=newInputStreamReader(conn.getInputStream(),"utf-8");//字節(jié)解碼為字符ScannerinputStream=newScanner(input);StringBuffersb=newStringBuffer();while(inputStream.hasNext()){sb.append(inputStream.nextLine());}jsonObj=JSONObject.fromObject(sb.toString());}catch(Exceptione){System.out.println(e.getMessage());}returnjsonObj;}publicstaticvoidmain(String[]args){ finalStringkey="cef5c87064b3436ece77cd5070daf50d"; StringBufferstb=newStringBuffer(""); inttype=0; Stringinput,inputInfo=null,keyword; input=JOptionPane.showInputDialog("請輸入查詢類型(域名、網站首頁、許可證號、主辦單位、工商營業(yè)執(zhí)照)");if(input.equals("域名")){ type=1; inputInfo=JOptionPane.showInputDialog("請輸入信息");}elseif(input.equals("網站首頁")){ type=2; inputInfo=JOptionPane.showInputDialog("請輸入信息");}elseif(input.equals("許可證號")){ type=3; inputInfo=JOptionPane.showInputDialog("請輸入信息");}elseif(input.equals("主辦單位")){ type=5; inputInfo=JOptionPane.showInputDialog("請輸入信息");}elseif(input.equals("工商營業(yè)執(zhí)照")){ type=7; inputInfo=JOptionPane.showInputDialog("請輸入信息"); }else{ JOptionPane.showMessageDialog(null,"請輸入正確查詢類型"); input=JOptionPane.showInputDialog("請輸入查詢類型(網站名稱、域名、網站首頁、許可證號、主辦單位、工商營業(yè)執(zhí)照)"); }keyword=inputInfo;Stringurl="/japi/beian?key="+key+"&type="+type+"&keyword="+keyword+"&v=1.0";JSONObjectjsonObject=ICP.getHtmlJsonByUrl(url);Stringstr=jsonObject.get("result").toString();str=str.substring(2,str.length()-2);String[]arr=str.split(",");JFramejf=newJFrame("域名ICP備案查詢");jf.addWindowListener(newjava.awt.event.WindowAdapter(){ publicvoidwindowClosing(java.awt.event.WindowEventevt){ System.exit(0); } });for(inti=0;i<arr.length;i++){ String[]arr1=arr[i].split(":"); arr1[0]=arr1[0].substring(1,arr1[0].length()-1); arr1[1]=arr1[1].substring(1,arr1[1].length()-1); stb.append(arr1[0]+":"+arr1[1]+"\n"); }JTextAreajta=newJTextArea();jta.setText(stb.toString());jf.add(jta);jf.pack();jf.setVisible(true);}}3.2.3快遞狀況查詢的實現(xiàn)快遞狀況查詢功能首先通過用戶輸入的快遞公司以及快遞單號后建立URL連接,并將網頁返回的JSON數(shù)據(jù)經過直接解析后保存(將字節(jié)解碼為字符)。將解析后的數(shù)據(jù)進行處理后輸出在圖形用戶界面中??爝f狀況查詢功能實現(xiàn)的代碼如下:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.PrintStream;import.HttpURLConnection;import.URL;importjava.util.Map;importjava.util.Scanner;importjava.util.HashMap;importjava.util.Iterator;importjava.util.Set;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.text.Document;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;publicclassExpressSearch{ publicstaticJSONObjectgetHtmlJsonByUrl(StringurlTemp){ URLurl=null; InputStreamReaderinput=null; HttpURLConnectionconn; JSONObjectjsonObj=null; try{ url=newURL(urlTemp); conn=(HttpURLConnection)url.openConnection(); input=newInputStreamReader(conn.getInputStream(),"utf-8"); ScannerinputStream=newScanner(input); StringBuffersb=newStringBuffer(); while(inputStream.hasNext()){ sb.append(inputStream.nextLine()); } jsonObj=JSONObject.fromObject(sb.toString()); }catch(Exceptione){ System.out.println(e.getMessage()); } returnjsonObj; } staticclassGetExpressInfo{ publicfinalstaticMap<String,String>expCode=newHashMap<String,String>(); staticMap<String,String>map=newHashMap<String,String>(); publicstaticvoidExpresses(){ expCode.put("順豐","sf"); expCode.put("申通","sto"); expCode.put("韻達","yd"); expCode.put("圓通","yt"); expCode.put("EMS","ems"); expCode.put("中通","zt"); expCode.put("匯通","ht"); expCode.put("全峰","qf"); expCode.put("天天","tt"); } publicstaticvoidnewMap(){ map.put("申通","申通單號由12位數(shù)字組成,常見以268**、368**、58**等開頭"); map.put("EMS","EMS單號開頭和結尾2位是字母,中間是9位數(shù)字"); map.put("順豐","順豐單號由12位數(shù)字組成,常以電話區(qū)號后3位開頭"); map.put("圓通","圓通單號由10位字母數(shù)字組成,常見以1*、2*、6*、8*及V*等開頭"); map.put("韻達","韻達單號由13位數(shù)字組成,常見以10*、12*、19*等開頭"); } } publicstaticvoidmain(String[]args){ finalStringkey1="dd7c152f1c97ccda3ac7c05af3eb254a"; JFramejf=newJFrame("快遞查詢"); jf.addWindowListener(newjava.awt.event.WindowAdapter(){ publicvoidwindowClosing(java.awt.event.WindowEventevt){ System.exit(0); } }); GetExpressInfo.newMap(); GetExpressInfo.Expresses(); Stringinput,com,num,input1; input=JOptionPane.showInputDialog("請輸入快遞公司"); Set<String>mapSet=GetExpressInfo.expCode.keySet();//將map的鍵的值取出 while(!mapSet.contains(input)){ input=JOptionPane.showInputDialog("請輸入快遞公司"); } com=GetExpressInfo.expCode.get(input); input1=JOptionPane.showInputDialog("請輸入快遞單號"+"("+GetExpressInfo.map.get(input)+")"); num=input1; Stringurl="/exp/index?key="+key1+"&com="+com+"&no="+num; JSONObjectjsonObject=ExpressSearch.getHtmlJsonByUrl(url); Stringresult=jsonObject.get("result").toString(); JTextAreajta=newJTextArea(); jta.setText
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國單面背網超市貨架數(shù)據(jù)監(jiān)測研究報告
- 2025年中國油墨專用柔軟劑市場調查研究報告
- 2025至2031年中國鍛鋼蝶閥行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國耐磨合金管行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國牙墊行業(yè)投資前景及策略咨詢研究報告
- 大跨度鋼桁架吊裝施工過程模擬與力學分析
- 二零二四年度園林景觀土方開挖與照明工程承包合同3篇
- 2025年度城市綠地除草養(yǎng)護工程合同范本3篇
- 2025年度山地林業(yè)資源開發(fā)承包經營合同3篇
- 2025年度個人專利許可使用及維權服務合同4篇
- 2025年度版權授權協(xié)議:游戲角色形象設計與授權使用3篇
- 心肺復蘇課件2024
- 《城鎮(zhèn)燃氣領域重大隱患判定指導手冊》專題培訓
- 湖南財政經濟學院專升本管理學真題
- 2024年湖南商務職業(yè)技術學院單招職業(yè)適應性測試題庫帶答案
- 全國身份證前六位、區(qū)號、郵編-編碼大全
- 2024-2025學年福建省廈門市第一中學高一(上)適應性訓練物理試卷(10月)(含答案)
- 2024年全國各地中考試題分類匯編:作文題目
- 《零售學第二版教學》課件
- 廣東省珠海市香洲區(qū)2023-2024學年四年級下學期期末數(shù)學試卷
- 房地產行業(yè)職業(yè)生涯規(guī)劃
評論
0/150
提交評論