Java课程设计--日常信息查询系统.docx
第1章课题概述11.1 课题的目的11.2 课题的要求11.2. 1图形界面的要求11.2.2 输出信息的要求11.2.3 异常的要求1第2章概要设计21.1 整个程序的模块结构及流程22. 2信息查询系统的主要步骤描述32.1.1 手机号码归属地查询错误!未定义书签。2.1.2 2.2IP地址查询错误!未定义书签。2.1.3 身份证号码查询错误!未定义书签。第3章程序功能的实现43. 1主文件的实现43.2主要功能模块的实现43.2.1下载数据并解析的实现63.2.2手机号码归属地查询的实现83.2.3IP地址查询的实现93.2.4身份证号码查询的实现错误!未定义书签。第4章调试及发现问题的解决7第5章程序测试及分析12第6章总结15参考文献16第1章课题概述本次数据结构课程设计的题目是设计并实现一个口常信息查询系统1.1 课题的目的这个信息查询系统可以查询一些我们的日常信息,比如手机号码归属地、IP地址、身份证号码。通过这个实验不仅仅可以让获得我们在设计好程序后的成就感,还可以强化我们对io流,图形界面的理解,并且了解并掌握一些基本的联网获取网上信息一一信息的下载,解析和输出。1.2 课题的要求1.2.1 图形界面的要求(1)应该要设计出一个或者多个窗口,要求美观,简介,需要包含一些必要的文字提示及说明,查询功能实现的按钮,输入框以及显示得到的信息的相关文本组件。(2)最好能有多个窗口界面,有序地排列,分类所要查询的项目。1.2.2 输出信息的要求(1)不能出现乱码。(2)输出的信息要求有条理,按次序。1.2.3 异常的要求(1)要求能识别空输入,不存在的号码等一些基本的异常。(2)要求能进行多次输入。第2草概要设计2.1整个程序的模块结构及流程根据课题要求,整个程序按功能可划分为手机号码归属地查询、IP地址查询、身份证号码查询三个主要模块。这个系统还要求能实现用户与机器的互动,按用户的要求来查询相关信息。程序各功能模块的划分,及主要流程如图2-1所示。1开始)显示菜单出入菜单项机码属杳手号归地份号查身证码图2-1整个程序各功能模块间的流程2.2信息查询系统的主要步骤描述2.2.1手机号码归属地查询设计出图形界面,当然这个图形界面并不是独立的,不然太麻烦了,也没必要,图形界面里肯定至少要有输入框、查询按钮以及显示信息的文本框。首先,我先得到一个用户输入的手机号码,之后将这个号码以字符串的形式添加到事先设置好的网址后面,然后就可以将这个总的字符串通过URL联网并得到用户所需的信息,当然,我们必须得通过Utf-8转码,不然会是乱码,之后再解析这个字符串并返回给用户。其他的查询功能其实都是一样的。2.2.2IP地址查询设计图形界面。首先,我先得到一个用户输入的IP地址,之后将这个IP地址以字符串的形式添加到事先设置好的网址后面,然后就可以将这个总的字符串通过URL联网并得到用户所需的信息,当然,我们必须得通过Utf-8转码,不然会是乱码,之后再解析这个字符串并返回给用户。2.2.3身份证号码查询设计图形界面。首先,我先得到一个用户输入的身份证号码,之后将这个身份证号码以字符串的形式添加到事先设置好的网址后面,然后就可以将这个总的字符串通过URL联网并得到用户所需的信息,当然,我们必须得通过Utf-8转码,不然会是乱码,之后再解析这个字符串并返回给用户。第3章程序功能的实现3.1主文件的实现我的主文件是一个图形界面的设计,其他相关的功能都写在了其他的文件里,在主文件里调用他们就可以了,避免了文件的繁缗冗长,而且调理清晰,便于以后的修改维护。下面是我的主文件。classMyListenerSearchPhoneimplementsActionListenerIpublicvoidactionPerformed(ActionEvente)StringphoneNum=jiphone.getTextO;DataAnalysisldd=newDataAnalysislO;JDialogjdIphone=newJDialog(jiphone,“查询结果”);ContainerCtephone=jdlphone.getContentPaneO;jdlphone.SetLayout(newGridLayout(1,1);dd.datanalysis(phoneNum);JTextAreajtaphone=newJTextAreaO;jdlphone.setVisible(true);jdlphone.SetBounds(550,300,300,200);jtaphone.setFont(newjava.awt.Font("新宋体,Font.PLAIN,16);jtaphone,append(dd.PrOVince+“nr");jtaphone,append(dd.City+“nr");jtaphone,append(dd.areacOde+“nr");jtaphone,append(dd.zip+“nr");jtaphone,append(pany+zznrz,);jtaphone,append(dd.card+“nr");Ctephone.add(jtaphone);)classMyListenerlPimplementsActionListenerJTextFieldjiIP;JDialogjllP;publicvoidactionPerformed(ActionEvente)jlIP=newJDialog(jf,查询IP地址”);JLabeljlbIP=newJLabeI("IP地址为“);JiIP=newJTextField(20);ContainerctIP=jlIP.getContentPane();jlIP.SetLayout(null);jlIP.SetVisible(true);jlbIP.setFont(newjava.awt.Font("新宋体",Font.PLAIN,16);jlIP.setBounds(550,300,300,200);jlbIP.setBounds(100,20,210,50);jiIP.setBounds(80,70,100,25);ctIP.add(jiIP);ctIP.add(jbSearchIP);ctIP.add(jlbIP);JbSearchIP.addActIonListener(newMyListenerSearchIP();)classMyListenerSearchIPimplementsActionListenerfpublicvoidactionPerformed(ActionEvente)StringphoncNum=jiIP.getText();DataAnalysis2dd=newDataAnalysis2();JDialogJdlIP=newJDialog(jlIP,"查询结果”);ContainerCteIP=jdlIP.getContentPane();jdlIP.SetLayout(newGridLayout(1,1);dd.dataAnalysis(phoneNum);JTextAreajtaIP=newJTextAreaO;JcllIP.SetVisible(true);jdlIP.setBounds(550,300,300,200);JtaIP.setFont(newjava.awt.Font("新宋体",Font.PLAIN,16);jtaIP.append(dd.area+“nr");jtaIP.append(dd.IOCation+“nr");cteIP.add(jtaIP);)classMyListenerIDimplementsActionListenerfJTextFieldjiID;JDialogjlID;publicvoidactionPerformed(ActionEvente)(jHD=newJDialog(jf,”查询身份证号码“);JLabeljlbID=newJLabei.("身份证号码为“);jiID=newJTextField(20);ContainerctID=jHD.getContentPane();jHD.SetLayout(null);jHD.setVisible(true);jlbID.setFont(newjava.awt.Font("新宋体",Font.PLAIN,16);jlID.setBounds(550,300,300,200);jlbID.setBounds(100,20,210,50);jiID.setBounds(80,70,100,25);ctID.add(jiID);ctID.add(jbSearchIP);ctID.add(jlbID);JbSearchIP.addActIonListener(newMyListencrSearchIP();)classMyListenerSearchIPimplementsActionListenerfpublicvoidactionPerformed(ActionEvente)StringphoncNum=jiID.getText();DataAnalysisSdd=newDataAnalysis3();JDialogjdlID=newJDialog(jlID,"查询结果”);ContainerCteID=jdlID.getContentPane();jdlID.SetLayout(newGridLayout(1,1);dd.dataAnalysis(phoneNum);JTextAreajtaID=newJTextAreaO;JcllID.SetVisible(true);jdlID.setBounds(550,300,300,200);JtaID.setFont(newjava.awt.Font("新宋体",Font.PLAIN,16);jtaID.append(dd.area+“nr");jtaID.append(dd.sex+“nr");jtaID.append(dd.birthday+“nr");cteID.add(jtaID);)3.2主要功能模块的实现3.2.1下载数据并解析的实现想要实现这个系统必须先要下载数据,我下载的是json类型,并按照相关的要求进行解析。实现下载数据并解析的代码如下:publicclassHttpDownloaderpublicStringdownload(Stringaddress)StringBuffersb=newStringBufferO;Stringline=null;BufferedReaderbuffer=null;try(URLurl=newURL(address);HtIpURLConnectionurlConn=(HttpURLConnection)url.OpenConnection();buffer=newBufferedRcader(newInputStreamRcader(urIConn.getInputStrcam(),“UTF-8");while(line=buffer.readLine()!=null)sb.append(line);)catch(Exceptione)e.PrintStackTrace();finallytry(buffer,close();catch(Exceptione)e.PrintStackTrace();)intbegin=sb.IastIndexOf(*z*);intend=sb.indexf(zz*);Stringstr=sb.substring(begin,end+l);returnstr;)publicstaticvoidmain(Stringargs)throwsException)3.2.2手机号码归属地查询的实现首先,我先得到一个用户输入的手机号码,之后将这个号码以字符串的形式添加到事先设置好的网址后面,然后就可以将这个总的字符串通过URL联网并得到用户所需的信息,当然,我们必须得通过Utf-8转码,不然会是乱码,之后再解析这个字符串并返回给用户。实现手机号码归属地查询的代码如下:publicclassDataAnalysislStringprovince;Stringcity;Stringareacode;Stringzip;Stringcompany;Stringcard;publicvoiddatanalysis(StringphoneNmO)try(StringbigData=newHttpDownloaderO.download(z,httpJsonReaderreader=newJsonReader(newStringReader("1"+bigData+'1”);reader.beginArray();while(reader.hasNext()reader,beginbject();while(reader.hasNext()StringtagName=reader.nextName();if(tagName.equals("province")this,province="省份为:"+reader.FiextString();)if(tagName.equals("city")this,city="城市为:"+reader.nextString();)if(tagName.equals("arcacodc")this,areacode="区号为:"+reader.nextString();)if(tagName.equals("zip")this,zip="邮编为:"+reader.nextString();)if(tagName.equals("company")this,company="公司为:"+reader.nextString();)if(tagName.equals("card")this,card="卡类型:"+reader.nextString();)reader,endbject();)reader.endArray();reader,close();)catch(Exceptione)(e.PrintStackTrace();)3.2.3IP地址查询的实现首先,我先得到一个用户输入的IP地址,之后将这个IP地址以字符串的形式添加到事先设置好的网址后面,然后就可以将这个总的字符串通过URL联网并得到用户所需的信息,当然,我们必须得通过Utf-8转码,不然会是乱码,之后再解析这个字符串并返回给用户。实现IP地址查询的代码如下:publicvoiddataAnalysis(StringphoneNumO)(try(StringbigData=newHttpDownloaderOdownload(z,httpidcardindex?key=bb00d68319de8785a04e9c8362e373f4cardno=,+phoneNum0);JsonReaderreader=newJsonReader(newStringReader(""+bigData+'”);reader,beginArray();while(reader.hasNext()reader,beginbject();while(reader.hasNext()(StringtagName=reader.nextName();if(tagName.equals("area")this,area="地区:"+reader.nextString();)if(tagName.equals("sex")this,sex="性别为:"+reader.FiextString();)if(tagName.equals("birthday")this,birthday="生日为:"+reader.nextString();)if(tagName.equals("verify")this,verify="核实:"+reader.nextString();)reader,endbject();)reader.endArray();reader,close();catch(Exceptione)(e.PrintStackTrace();)publicstaticvoidmain(Stringargs)()3.2.4身份证号码查询的实现首先,我先得到一个用户输入的身份证号码,之后将这个身份证号码以字符串的形式添加到事先设置好的网址后面,然后就可以将这个总的字符串通过URL联网并得到用户所需的信息,当然,我们必须得通过utf-8转码,不然会是乱码,之后再解析这个字符串并返回给用户。乘法算法的代码实现如下:publicclassDataAnalysis2(Stringarea;Stringlocation;publicvoiddataAnalysis(StringphoneNumO)try(StringbigData=newHttpDownloaderO.download(z,httpJsonReaderreader=newJsonReader(newStringReader(""+bigData+"”);reader,beginArray();while(reader.hasNext()reader,beginbject();while(reader.hasNext()StringtagName=reader.nextName();if(tagName.CqUalS("area")this,area="地区:"+reader,nCXtString();)if(tagName.equals(z,locationz,)this,location="位置为:"+reader.nextString();)reader,endbject();)reader.endArray();reader,close();catch(Exceptione)(e.PrintStackTrace();)publicstaticvoidmain(Stringargs)()第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。1、写好程序后,为什么输出的会是乱码?解决方法:在字节流后面加上一个解码的方式“Utf-8”。2、窗口里面的组件无法显示,有时候,即便显示也是非常得小,而且无论怎么设置大小,都不能完善?解决方法:没有设置布局方式,我一般都采用的空布局方式,但这句代码一定要写,不过最后的文本框我采用的是流式布局。3、下一个时间监听器类要调用上一个类里构造的变量该怎么办?解决方法:将它改为成员变量。例如:JTextFieldjiphone;JDialogjIphone;publicvoidactionPerformcd(ActionEvente)jIphone=newJDialog(jf,"查询手机号码归属地”);JLabeljibphone=newJLabel("手机号码为“);jiphone=newJTextField(20);)classMyListencrSearchPhoncimplementsActionListenertpublicvoidactionPerformcd(ActionEvente)StringphoneNum=jiphone.getTcxt();第5章程序测试及分析运行程序,首先显示主窗口,可供选择的功能有手机号码归属地查询、IP地址查询、身份证号码查询。图5-1主界面这三个选项都要测试,我就先从手机号码归属地查询开始测试。点击手机号码查询,进入手机号码查询界面。图5-2手机号码查询输入手机号码T3262215338,并进行查询。得到查询结果。查询结果省份为:上海城市为:上海区号为:021邮编为:200000公司为:中国联通卡类型:联通130卡图5-3显示手机号码查询结果点击IP地址查询,进入IP地址查询界面。图5-4IP地址查询点击身份证号码查询,进入身份证号码查询界面。图5-6身份证号码查询输入身份证号码-420117199609252315,并进行查询。得到查询结果。图5-7身份证号澳门查询结果第6章总结通过一周的努力,终于完成了这个程序,做的过程中异常的艰难,但完成的那一刻,觉得什么样的辛苦都是值得的,特别有成就感。做的时候遇到了很多的问题,所以就会经常问同学,很多原来不懂得东西,经过同学的反复讲解终于弄明白了,甚至做之前我都不知道图形界面该怎么用?什么是gui?什么是SWing?通过做实验,看视频,才慢慢的了解。感觉编程真心折磨人,每次出错都会修改到心力交瘁,相当累,不过消除错误后感觉相当爽。参考文献1宋波李晋李妙研张悦刘杰周传生Java程序设计一一基于JDK6和NCtBCanS实现.北京:清华大学出版社,2011.3明日科技.JaVa从入门到精通.北京:清华大学出版社,2015.4邓文华,邹华胜.数据结构(C语言版)M.北京:清华大学出版社,20IL