Java課程設(shè)計(jì)-日常信息查詢系統(tǒng)_第1頁
Java課程設(shè)計(jì)-日常信息查詢系統(tǒng)_第2頁
Java課程設(shè)計(jì)-日常信息查詢系統(tǒng)_第3頁
Java課程設(shè)計(jì)-日常信息查詢系統(tǒng)_第4頁
Java課程設(shè)計(jì)-日常信息查詢系統(tǒng)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第1章課題概述本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的題目是設(shè)計(jì)日常信息查詢系統(tǒng)(手機(jī)號碼歸屬地查詢、IP地址查詢、身份證信息查詢)。1.1課題的目的由于社會在不斷發(fā)展,互聯(lián)網(wǎng)已被千千萬萬的的家庭所接收。于此同時(shí),詐騙電話的的不斷轟炸,身份虛假問題頻頻發(fā)生,網(wǎng)關(guān)的龐大,因此一個(gè)簡單的日常信息查詢系統(tǒng)就顯得十分必要。通過對這些信息的查詢及分析,就避免被別人詐騙,財(cái)產(chǎn)安全的得以保證。本系統(tǒng)采用java語言編寫,用Google-Gson開源包處理數(shù)據(jù)。以最簡潔的界面反饋給用戶,使用戶有更好的體驗(yàn)。1.2課題的要求1.2.1輸入輸出的要求(1)程序運(yùn)行后應(yīng)首先輸出一個(gè)圖形界面,并將所有的查詢選項(xiàng)羅列在界面上供用戶進(jìn)行選擇,以便進(jìn)行相應(yīng)的操作。(2)查詢對象應(yīng)能夠從鍵盤輸入。(3)用戶每次更新輸入數(shù)據(jù)后,應(yīng)能立即輸出查詢的結(jié)果。(4)查詢結(jié)果的輸出應(yīng)整齊、清晰,以便用戶能夠驗(yàn)證程序的正確性。1.2.2程序?qū)崿F(xiàn)的功能要求(1)實(shí)現(xiàn)用手機(jī)號碼查詢歸屬地和運(yùn)營商(2)實(shí)現(xiàn)用IP地址查詢歸屬地(3)實(shí)現(xiàn)用身份證號查詢出生地、出生年月日、性別(4)將查詢的信息打印在界面上第2章概要設(shè)計(jì)2.1整個(gè)程序的模塊結(jié)構(gòu)及流程根據(jù)課題要求,整個(gè)程序按功能可劃分為手機(jī)號碼歸屬地查詢、IP地址查詢、身份證信息查詢?nèi)齻€(gè)主要功能。實(shí)現(xiàn)這三個(gè)功能,應(yīng)該包括從網(wǎng)上下載數(shù)據(jù)、解析數(shù)據(jù)、輸出數(shù)據(jù)。為更好地提供程序的人機(jī)交互能力,程序用圖形界面的形式展現(xiàn)。圖2-1整個(gè)程序各功能模塊2.2輸入數(shù)據(jù)合法性的檢測及初步處理為防止用戶輸入非法數(shù)據(jù),在查詢時(shí),對用戶輸入的字符串進(jìn)行數(shù)據(jù)合法性檢驗(yàn)是非常重要的。2.2.1手機(jī)號碼合法性檢測輸進(jìn)去一些字母,比如“AsslkjALKSJK”;手機(jī)號碼位數(shù)錯(cuò)誤,輸進(jìn)去少于11位或者多于11位不輸入號碼直接查詢;publicvoidactionPerformed(ActionEvente){ Stringstr=phoneTf.getText(); if(str.equals("")){ JOptionPane.showMessageDialog(phoneBtn,"請輸入你的手機(jī)號碼!"); return; } if(str.matches("[a-zA-Z]+")){ JOptionPane.showMessageDialog(phoneBtn,"輸入格式錯(cuò)誤!"); return; } if(!str.matches("\\d{11}")){ JOptionPane.showMessageDialog(phoneBtn,"手機(jī)號碼位數(shù)錯(cuò)誤!"); return; }2.2.2IP地址合法性檢測 不輸進(jìn)去IP地址直接查詢;publicvoidactionPerformed(ActionEvente){ Stringstr=ipTf.getText(); if(str.equals("")){ JOptionPane.showMessageDialog(ipBtn,"請輸入你要查詢的IP地址"); return; } if(str.matches("[a-zA-Z]+")){ JOptionPane.showMessageDialog(phoneBtn,"輸入格式錯(cuò)誤!"); return; } if(str.matches("\\d+")){ JOptionPane.showMessageDialog(phoneBtn,"輸入格式錯(cuò)誤!"); return; }2.2.3身份證號碼合法性檢測 不輸入身份證號碼直接查詢; 輸入身份證號碼不是18位;if(restring.equals("")){ JOptionPane.showMessageDialog(idBtn,"請輸入你的身份證號碼"); return; } if(!restring.matches("\\d{18}")){ JOptionPane.showMessageDialog(idBtn,"請檢查輸入的18位身份證號碼"); return; } string=newDownLoad().DownLoadIdImf( "/microservice/icardinfo?id=", idTf.getText());2.2.4網(wǎng)絡(luò)是否連接檢測 是否連接上網(wǎng)絡(luò);try{ if(!string.subSequence(4,6).equals("bd")){ JOptionPane.showMessageDialog(ipBtn,"你的網(wǎng)絡(luò)異常,請檢查!"); return; } }catch(StringIndexOutOfBoundsExceptione2){ JOptionPane.showMessageDialog(ipBtn,"你的網(wǎng)絡(luò)異常,請檢查!"); return; }2.4各個(gè)功能的描述2.4.1聯(lián)網(wǎng)下載數(shù)據(jù)要想查詢數(shù)據(jù),就需要從網(wǎng)上下載數(shù)據(jù)。網(wǎng)上有許多的接口便于我們查詢所要的信息,這些接口中有的是返回XML數(shù)據(jù),有的是返回Gson數(shù)據(jù),我們把這些下載來的數(shù)據(jù)保存在我們定義好的String變量中。2.4.2處理Gson數(shù)據(jù)保存在String的數(shù)據(jù)并不是標(biāo)準(zhǔn)形式的Gson數(shù)據(jù),包含了一些前綴和后綴。因此我們可以用StringBuffer來處理這些數(shù)據(jù),使之成為標(biāo)準(zhǔn)形式的數(shù)據(jù)。2.4.3解析數(shù)據(jù)那么處理好的數(shù)據(jù)我們就可以進(jìn)行解析了,解析需要用到Google-Gson的開源包,這個(gè)包功能十分強(qiáng)大,用它可以對我們的數(shù)據(jù)輕松進(jìn)行解析。2.4.4主窗口 最后將解析好的數(shù)據(jù)輸出在我們已經(jīng)設(shè)計(jì)的窗口上。第3章程序功能的實(shí)現(xiàn)3.1聯(lián)網(wǎng)下載數(shù)據(jù)的實(shí)現(xiàn)既然需要下載數(shù)據(jù),首先我們需要從網(wǎng)上找到相應(yīng)的接口來下載,聯(lián)網(wǎng)下載數(shù)據(jù)需要我們用到包和java.io來處理,將下載來的數(shù)據(jù)保存在一個(gè)字符串中,便于下面來處理。下載類中我有三個(gè)方法,每個(gè)方法分別處理不同的功能。但實(shí)質(zhì)上相當(dāng)于一個(gè)方法,首先你要獲得一個(gè)網(wǎng)址,將用Url類將網(wǎng)址變成一個(gè)Url對象,用里面的HttpUrlConnection方法開始連接網(wǎng)絡(luò),然后用BufferRead來讀取每一行然后連接起來,最后轉(zhuǎn)換成字符串返回。具體代碼如下:publicStringdownloadPhoImf(Stringurlstr,Stringnum){ StringBuffersb=newStringBuffer(); Stringline=null; BufferedReaderbf=null; try{ Stringreurlstr=urlstr+num; web=newURL(reurlstr); HttpURLConnectionurlConn=(HttpURLConnection)web .openConnection(); bf=newBufferedReader(newInputStreamReader( urlConn.getInputStream())); while((line=bf.readLine())!=null){ line.toString().trim(); sb.append(line); } System.out.println(sb.toString()); }catch(Exceptione){ }finally{ try{ if(bf!=null){ bf.close(); }else{ returnnull; } }catch(IOExceptione){ e.printStackTrace(); } } returnsb.toString().trim();}圖3-1運(yùn)行結(jié)果3.2解析數(shù)據(jù)的實(shí)現(xiàn)解析數(shù)據(jù)之前需要對我們下載的數(shù)據(jù)進(jìn)行處理,因?yàn)閿?shù)據(jù)必須是標(biāo)準(zhǔn)格式的數(shù)據(jù)(如圖)圖3-2Gson數(shù)據(jù)圖處理好這種Gson數(shù)據(jù)后就可以開始解析了,解析需要用到我們Google-Gson包給我們提供的方法來解析,首先我們需要將這個(gè)數(shù)據(jù)編程我們事先定義好的實(shí)體類,用實(shí)體類的get()方法就可以的出想要的結(jié)果。代碼如下:publicStringparsetCatName(StringJson){ Gsongson=newGson(); JsonReaderjr=newJsonReader(newStringReader(Json)); jr.setLenient(true); Useruse=gson.fromJson(jr,User.class); Strings=use.getBirthday(); returns; }這段代碼就可以實(shí)現(xiàn)將我們的Gson數(shù)據(jù)變成我們User實(shí)體類的類方法,便于解析。實(shí)體類的代碼如下:publicclassUser{ Stringbirthday; publicStringgetBirthday(){ returnbirthday; } publicvoidsetBirthday(Stringbirthday){ this.birthday=birthday; }就可以用上面use.getCatname()來得到birthday的結(jié)果。其他功能相對于這種功能類似,用相同的方法來解析即可(如下圖)。圖3-2解析示意圖3.3主窗口的實(shí)現(xiàn)主窗口使用java.awt包和javax.swing包給我們提供的方法來構(gòu)建我們需要的GUI。在界面中,因?yàn)槲覀兂绦虬齻€(gè)模塊,所以可以用三個(gè)Panel來構(gòu)建三個(gè)區(qū)域。在這三個(gè)區(qū)域中,分別添加一個(gè)TextField,Button和TextAera。這樣就可以得到我們需要的界面了。主要代碼在下: MyFrame(Strings){ super(s); setLayout(newGridLayout(3,1)); phoneJP=newJPanel(newFlowLayout()); ipJP=newJPanel(newFlowLayout()); idJP=newJPanel(newFlowLayout()); phoneBtn=newJButton("查詢"); phoneBtn.setBackground(Color.pink); ipBtn=newJButton("查詢"); ipBtn.setBackground(Color.pink); idBtn=newJButton("查詢"); idBtn.setBackground(Color.pink); phoneLab=newJLabel("請輸入手機(jī)號:"); ipLab=newJLabel("請輸入IP地址:"); IdLab=newJLabel("請輸入身份證號:"); phoneTf=newJTextField(15); ipTf=newJTextField(15); idTf=newJTextField(15); phoneTxa=newJTextArea(3,12); phoneTxa.setBackground(Color.pink); ipTxa=newJTextArea(3,12); ipTxa.setBackground(Color.pink); idTxa=newJTextArea(5,12); idTxa.setBackground(Color.pink); phoneJP.add(phoneLab); phoneJP.add(phoneTf); phoneJP.add(phoneBtn); phoneJP.add(newJScrollPane(phoneTxa)); ipJP.add(ipLab); ipJP.add(ipTf); ipJP.add(ipBtn); ipJP.add(ipTxa); ipJP.add(newJScrollPane(ipTxa)); idJP.add(IdLab); idJP.add(idTf); idJP.add(idBtn); idJP.add(idTxa); jsp=newJScrollPane(idTxa); jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); idJP.add(jsp); phoneBtn.addActionListener(newPhoneBtnMon()); ipBtn.addActionListener(newIPBtnMon()); idBtn.addActionListener(newIdBtnMon());第4章調(diào)試及發(fā)現(xiàn)問題的解決雖然在程序的編寫過程中遇到了很多問題,但是通過上網(wǎng)查閱相關(guān)資料,與其它同學(xué)討論,詢問指導(dǎo)老師等方式,最終都一一解決了,程序?qū)崿F(xiàn)及調(diào)試過程中遇到的主要問題及解決方法如下。1、如何聯(lián)網(wǎng)下載數(shù)據(jù)?解決方法:下載類中我有三個(gè)方法,每個(gè)方法分別處理不同的功能。但實(shí)質(zhì)上相當(dāng)于一個(gè)方法,首先你要獲得一個(gè)網(wǎng)址,將用Url類將網(wǎng)址變成一個(gè)Url對象,用里面的HttpUrlConnection方法開始連接網(wǎng)絡(luò),然后用BufferRead來讀取每一行然后連接起來,最后轉(zhuǎn)換成字符串返回。2、如何解析?解決方法:其實(shí)這個(gè)程序最關(guān)鍵的內(nèi)容是解析,剛開始我完全不知道怎么做,但是老師給我們提供了一個(gè)解析Gson數(shù)據(jù)的視頻,那個(gè)視頻中講述了兩種方法,但是第一種對我們數(shù)據(jù)格式要求太高而且解析起來用雙重循環(huán),顯得十分復(fù)雜。在這個(gè)程序中,我采用了第二種方法,也就是上述已經(jīng)講到的方法,非常好用。第5章程序測試及分析運(yùn)行程序,首先顯示程序GUI界面圖5-1程序主界面圖5-2所示,查詢手機(jī)號碼。圖5-2查詢手機(jī)號碼圖5-3所示,查詢IP地址圖5-3查詢IP地址如圖5-4,查詢身份證信息。圖5-4查詢身份證信息上面就是程序運(yùn)行后所處來的界面,總體來說,這個(gè)界面做的比較簡潔,但大體功能也已經(jīng)基本實(shí)現(xiàn),提示輸入你需要查詢的數(shù)據(jù),然后點(diǎn)擊查詢按鈕,即會將所需要的信息輸出在TextArea中。第6章總結(jié)通過這次課程設(shè)計(jì),終于獨(dú)立寫出了自己的一個(gè)小小的程序,還學(xué)會了自己使用外部開源包和多文件編譯。更重要的是通過

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論