-1-JAVA程序设计课程设计报告课题:校园IP查询系统姓名:邹志杰学号:201117010116同组姓名:肖奕、龚赛、王琼专业班级:计科11101班指导教师:刘国清设计时间:2013-6-22评阅意见:评定成绩:指导老师签名:年月日-2-目录一系统描述...........................................................................................-3-二分析与设计.......................................................................................-4-2.1校园IP查询系统功能模块......................................................-4-2.1.1校园IP查询系统主界面...............................................-4-2.1.2IP信息存储子系统:....................................................-4-2.1.3IP信息读取子系统........................................................-5-2.1.4IP信息查询子系统........................................................-6-2.2数据库结构描述........................................................................-7-2.3系统详细设计文档...................................................................-8-2.4各个模块的实现方法描述:.................................................-9-三系统测试.............................................................................................11四总结.....................................................................................................13五参考文献.............................................................................................14六附录(源码)...........................................................................................14-3-一系统描述校园IP地址查询系统采用Java和XML结合设计开发,将局域网内的IP地址进行分组归类,用户可以查询局域网内任一IP地址的归属。要进行本系统的开发,必须对SAX(simpleAPIforXML)比较熟悉,并且应该熟悉Java编程,而且还要熟悉利用JDBC进行数据连接的知识。当然,还要有一定的SQL基础和GUI编程知识。为了便于数据信息的表达和数据信息的网络传输,这个系统采用了XML格式来存储数据,即先通过JDBC-ODBC连接,将数据存储到数据库中,然后再从数据库中读出,以XML方式的形式组成XML文档,GUI查询界面再对这个XML文档进行查询操作,然后返回给用户相应的查询结果,因此,如何设计和开发好这个校园IP地址查询系统,对于提高Java开发水平和XML的应用能力有极大的帮助。在这个设计开发过程中,开发者需要掌握XML文档的表示形式、XML数据的数据库存储形式以及XML文档的解析形式等。1-1程序流程图输入IP格式正确否?在数据库中Y提示不在提示错误YNN确定结束输出IP所属单位开始-4-二分析与设计2.1校园IP查询系统功能模块2.1.1校园IP查询系统主界面校园IP查询系统主要包括IP地址显示区、“开始查询”按钮、“退出系统”按钮、查询地址输入区域。根据实际要求设计的主界面如图2-1所示。2-1校园IP查询系统主界面2.1.2IP信息存储子系统:可以使用命令行的方式来创建IP信息表。SQL脚本如下:CreatetableIPIfo(STARTIPvarchar(50),ENDIPvarchar(50),LOCALvarchar(50))使用java语言与数据库交互的过程如下:装入数据库驱动程序,这可以是一个JDBC驱动程序或JDBC-ODBC桥。(1)创建至数据库的Connection。(2)创建一个Statement对象,该对象实际执行SQL或存储过程。-5-(3)创建一个ResultSet,然后用执行查询的结果填充。要访问数据库,首先要装入JDBC驱动程序,在任何给定的时间都可以使用一些不同的驱动程序;由DriverManager通过尝试创建与每个所知的驱动程序的连接来确定使用哪一个。应用程序将使用第一个成功连接的驱动程序。这里是哟很难过Class.for.Name()直接装入驱动程序。当装入驱动程序类时,它向DriverManager注册。代码如下:StringdriverName=com.microsoft.jdbc.sqlservr.SQLserverDriver;try{Class.forName(driverName);}catch(ClassNotFoundExceptione){System.out.println(Errorcreatingclass:+e.getMessage());}成功装入驱动程序后,应用程序便可以连接到数据库。DriverManager通过静态gerConnection()方法进行连接,该方法以数据库的URL作为自变量。下面创建实际连接:Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);Stringurl=jdbc:sqlserver://localhost:1433;+DatabaseName=CampusIP;conn=DriverManager.getConnection(url,XIAOJIE,123456);stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);2.1.3IP信息读取子系统一旦链接到数据库,应用程序就可以开始检索数据了。在SQL数据库,通常使用SELECT语句检索数据。要选择数据表中的所有数据,可以运行如下命令:SELECT*FROMIPInfo;创建Statement对象很简单,只需使用Connection的createStatement方法即可,务必要捕获可能产生的SQLException。Statementstatement=null;try{statement=db.createStatement();}catch(SQLExceptione){System.out.println(“SQLError:”+e.getMessage());}要实际检索数据,必须执行Statement。这通常需要传递一个SELECT语句,该语句创建一组以ResultSet返回的数据,代码如下所示:ResultSetresultset=null;try{statement=db.createStatement();resultset=statement.executeQuery(“SELECT*FROMIPInfo”);}-6-catch(SQLExceptioe){system.out.println(“SQLError:”+e.getMessage());}可以用两种方法检索数据本身:通过名称和通过索引。这里采用通过名称检索,代码如下所示:if(resultset.next()){System.out.print(resultset.getString(“STARTIP”);System.out.print(resultset.getString(“ENDIP”));System.out.print(resultset.getString(“LOCAL”));}else{System.out.print(“NOdataexists”);}2.1.4IP信息查询子系统根据建好的IP地址XML文档,要查询输入的IP地址的相应信息首相要对输入的IP地址进行检验:if(strIP.length()15)returnfalse;else{while(indexintLen){if(((strIP.charAt(index)='0')&&(strIP.charAt(index)='9'))||(strIP.charAt(index)=='.'))index++;elsebreak;}if(indexintLen)returnfalse;elsereturntrue;}然后对XML文档进行解析将相应的IP地址信息生成3个列表,代码如下:SAXParserFactoryspf=SAXParserFactory.newInstance();SAXParserparser=spf.newSAXParser();XMLReaderxmlReader=parser.getXMLReader();IPInfoSAXHandleripInfoHandler=newIPInfoSAXHandler();xmlReader.setContentHandler(ipInfoHandler);InputSourcesource=newInputSource(TsinghuaIPAssign.xml);xmlReader.parse(source);startIPVector=ipInfoHandler.GetStartIPVector();endIPVector=ipInfoHandler.GetEndIPVector();localVector=ipInfoHandler.GetLocalVector();最后根据解析的XML文档所得到的IP地址信息列表查找输入的IP地址的相关信息,代码如下:VectorstartIPVector=parseIPInfo.GetStartIPVector();VectorendIPVector=parseIPInfo.GetEndIPVector();VectorlocalVector=parseIPInfo.GetLocalVector();intintLen=endIPVector.size();for(inti=1;iintLen;i++){BigIntegerbigIntStartIP=StringToBigInt(-7-IngnoreIPDot((String)startIPVector.elementAt(i)));BigIntegerbigIntEndIP=StringToBigInt(IngnoreIPDot((String)endIPVector.elementAt(i)));if(((bigIntIP.compareTo(bigIntStartIP)==1)&&(bigIntIP.compareTo(bigIntEndIP)==-1))||(bigIntIP.compareTo(bigIntStartIP)==0)||(bigIntIP.compareTo(bigIntEndIP)==0)){StringstrResult=此IP属于;str