java校园IP查询系统报告.doc_第1页
java校园IP查询系统报告.doc_第2页
java校园IP查询系统报告.doc_第3页
java校园IP查询系统报告.doc_第4页
java校园IP查询系统报告.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(芙蓉学院)JAVA程序设计 课程设计报告课 题: 校园IP系统查询 姓 名: 郭志敏 学 号: 05 专业班级: 计算机科学与技术0601班 指导教师: 刘国清老师 设计时间: 2009年3月6号 评阅意见:评定成绩:指导老师签名: 年 月 日目 录一、系统描述:3二、分析与设计:32.1功能模块划分:32.2数据库结构描述:62.3、系统详细设计文档92.4、各个模块的实现方法描述:102.5测试数据及期望结果11三、源代码:12四、总结18五、参考文献:18湖南文理芙蓉学院Java课程设计报告一、系统描述:校园IP地址查询系统采用Java和XML结合设计开发,将局域网内的IP地址进行分组归类,用户可以查询局域网内任一IP地址的归属。要进行本系统的开发,必须对SAX(simple API for XML)比较熟悉,并且应该熟悉Java编程,而且还要熟悉利用JDBC进行数据连接的知识。当然,还要有一定的SQL基础和GUI编程知识。为了便于数据信息的表达和数据信息的网络传输,这个系统采用了XML格式来存储数据,即先通过JDBC-ODBC连接,将数据存储到数据库中,然后再从数据库中读出,以XML方式的形式组成XML文档,GUI查询界面再对这个XML文档进行查询操作,然后返回给用户相应的查询结果,因此,如何设计和开发好这个校园IP地址查询系统,对于提高Java开发水平和XML的应用能力有极大的帮助。在这个设计开发过程中,开发者需要掌握XML文档的表示形式、XML数据的数据库存储形式以及XML文档的解析形式等。二、分析与设计:2.1功能模块划分:2.1.1、校园IP查询系统主界面:校园IP查询系统主要包括IP地址显示区、“开始查询”按钮、“退出系统”按钮、查询地址输入区域。根据实际要求设计的主界面如图2-1所示。 图2-1 校园IP查询系统主界面2.1.2、IP信息存储子系统: 可以使用命令行的方式来创建IP信息表。SQL脚本如下:Create table IPIfo( STARTIP varchar(50), ENDIP varchar(50) ,LOCAL varchar(50)使用java语言与数据库交互的过程如下:装入数据库驱动程序,这可以是一个JDBC驱动程序或JDBC-ODBC桥。(1) 创建至数据库的Connection。(2) 创建一个Statement对象,该对象实际执行SQL或存储过程。(3) 创建一个ResultSet,然后用执行查询的结果填充。要访问数据库,首先要装入JDBC驱动程序,在任何给定的时间都可以使用一些不同的驱动程序;由DriverManager通过尝试创建与每个所知的驱动程序的连接来确定使用哪一个。应用程序将使用第一个成功连接的驱动程序。这里使用JDBC-ODBC桥连接数据库: (1)打开组件面板选中DataExpress栏。向Data Access中加入database和queryDataset组件,然后对database组件设置属性如下图2-2所示:图2-2 database设置(2)单击Data Access文件下的queryDataset组件然后设置属性,如图2-3所示: 图2-3 queryDataset设置2.1.3、IP信息读取子系统: 一旦链接到数据库,应用程序就可以开始检索数据了。在SQL数据库,通常使用SELECT语句检索数据。要选择数据表中的所有数据,可以运行如下命令: SELECT *FROM IPInfo; 创建Statement对象很简单,只需使用Connection的createStatement方法即可,务必要捕获可能产生的SQLException。 Statement statement =null;try statement =db.createStatement();catch(SQLException e)System.out.println(“SQL Error:”+e.getMessage(); 要实际检索数据,必须执行Statement。这通常需要传递一个SELECT语句,该语句创建一组以ResultSet返回的数据,代码如下所示: ResultSet resultset=null;try statement =db.createStatement();resultset= statement.executeQuery(“SELECT * FROM IPInfo”);catch (SQLExceptio e)system.out.println(“SQL Error:”+e.getMessage();可以用两种方法检索数据本身:通过名称和通过索引。这里采用通过名称检索,代码如下所示:if(()System.out.print(resultset.getString(“STARTIP”);System.out.print(resultset.getString(“ENDIP”);System.out.print(resultset.getString(“LOCAL”);else System.out.print(“NO data exists”); 第19页2.2数据库结构描述: 2.2.1、建立IP信息数据库 校园IP地址查询系统选用SQL Sever 2000作为系统服务数据库,这是因为SQL Sever 2000界面友好、操作简便,并且对于XML数据的支持较好。 为了能够存储IP信息,应先在SQL Sever 2000中建立一个IP信息数据库,具体步骤如下:(1)、打开SQL Sever 2000企业管理器,如图2-4所示: 图2-4 SQL Sever数据库(2)、右键单击“数据库”并选择“新建数据库”,如图2-5所示: 图2-5 新建数据库(3)、设置数据库名称为CampusIP。如图2-6所示: 图2-6 设置数据库名称(4)、设置数据库文件名及其存放地址“C:databasedataSQLMSSQLdataCampusIP_Data.MDF” ,如图2-7所示: 图2-7 设置数据库文件名(5)、设置数据事务日志文件名及其存放的位置“C:databasedataSQLMSSQLdataCampusIP_Log.LDF”如图2-8所示: 图2-8 设置数据库事务日志文件2.2.2建立IP信息数据库下面建立一个IP信息数据库,具体步骤如下:(1)、新建数据库表,如图2-9所示:图2-9 新建数据库表(2)、设计数据表的列名、数据类型等,表中的数据项共三项:STARTIP(起始IP地址)、ENDIP(结束IP地址)和LOCAL(这段IP的属主单位名称),如图2-10所示:图2-10 数据表设置(3)、设置数据表名称,如图2-11所示: 图2-11 设置数据表名称2.3、系统详细设计文档校园IP地址查询系统要求比较高的响应速度和异构平台的互通,它需要实现如下功能:(1)IP信息存储功能。根据输入文本文件的IP地址信息,通过JDBC-ODBC数据库连接实现对SQL Server数据库的连接,将IP地址信息存储到数据库中。数据库中的每一条IP地址信息由3个段:IP地址起始地址段、IP地址结束地址段和IP地址段属主,并且以IP地址起始地址段和IP地址结束地址段为索引以保证地址信息的唯一性。将IP地址存储在SQL Server 数据库中有利于实现数据源的唯一性,也有利于IP信息数据更新的简单性和高效性。IPInfoToDB类的主要作用是将IP地址写入数据库,它首先从文本文件中读取IP地址段信息,然后再将这些信息写入数据库中保存。(2)IP信息读取功能。由于需要实现IP信息查询的跨平台性,在进行IP地址查询前应先将IP地址信息从SQL Server数据库中取出并存储为XML文件格式,这样有利于IP地址信息的网络传输和跨平台查询。GenXML类的主要作用是将数据库中的IP信息读取出来并生成为一个XML文档,它包含的主要方法是SaveIPFromDB(),该函数根据输入的XML文档保存从数据库中读出的IP地址信息。(3)IP信息查询功能。在建立完成IP地址的XML格式的文档后,Ip地址查询就需要对相应的XML文档进行解析力。由于查询操作最主要的要求是响应速度,所以我们采用SAX来解析XML文档。SAX采用事件响应的方式来解析文档,不需要像DOM那样先生成XML文档内存树,所以能够提高查询响应速度。当然,在进行实际的IP地址查询前,需要验证输入的IP格式的正确性,并 对输入正确的IP地址进行一定的技术处理,更加有利于提高查询响应速度。 SAXPareseIPInfo类的主要作用就是解析前面生成的XML文档,并将这些地址信息格式化到一个表格中。IPInfoSAXHandler类从DefaultHandler继承而来,由于查询系统需要的IP地址信息的XML文档的主要元素是字符数据,因此只需要详细实现public void characters(char ch,int start,int length)这个方法。2.4、各个模块的实现方法描述: 2.4.1校园IP查询系统主要包括IP地址显示区、“开始查询”按钮、“退出系统”按钮、查询地址输入区。IP地址显示区罗列出局域网内所有的IP地址分段及其属主情况、查询地址输入区用于输入需要查询的IP地址,另外还需要给查询按钮和退出按钮添加相应的事件处理逻辑。(1)、查询系统的主框架设计如图2-12所示。其设置如图2-13所示: 图2-12 查询系统的主框架 图2-13 主框架设置(2)、“开始查询”按钮和“退出系统”按钮的设置除了显示文字不一样之外,其他的设置都一样。以“开始查询”按钮的设置为例,其设置如图2-14,JScrollPane的设置如图2-15: 图2-14“开始查询”按钮的设置 图2-15 JScrollPane的设置2.5测试数据及期望结果 三、源代码:package guo1;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;import javax.swing.event.*;import javax.swing.border.*;import com.borland.dx.sql.dataset.*;import com.borland.dbswing.*;import java.math.*;import java.util.*;/* * Title: 校园IP查询系统 * Description: * Copyright: Copyright (c) 2009 * Company: * author not attributable * version 1.0 */public class Frame1 extends JFrame JPanel contentPane;JMenuBar jMenuBar1 = new JMenuBar(); JMenu jMenuFile = new JMenu(); JMenuItem jMenuFileExit = new JMenuItem(); JMenu jMenuHelp = new JMenu(); JMenuItem jMenuHelpAbout = new JMenuItem(); JScrollPane scrollpane = new JScrollPane(); TitledBorder titledBorder1;JLabel jLabel1 = new JLabel(); JButton queryButton = new JButton(); JButton exitButton = new JButton(); Database database1 = new Database(); QueryDataSet queryDataSet1 = new QueryDataSet(); JdbTable jdbTable1 = new JdbTable();TitledBorder titledBorder2;TitledBorder titledBorder3;JLabel jLabel2 = new JLabel(); JdbTextField jdbTextField1 = new JdbTextField(); JMenu jMenu1 = new JMenu(); JMenuItem jMenuItem1 = new JMenuItem(); JMenuItem jMenuItem2 = new JMenuItem(); JMenuItem jMenuItem3 = new JMenuItem();/Construct the frame public Frame1() enableEvents(AWTEvent.WINDOW_EVENT_MASK); try jbInit(); catch(Exception e) e.printStackTrace(); /Component initialization private void jbInit() throws Exception contentPane = (JPanel) this.getContentPane(); titledBorder1 = new TitledBorder(); titledBorder2 = new TitledBorder(); titledBorder3 = new TitledBorder(); contentPane.setLayout(null); this.setSize(new Dimension(445, 446); this.setTitle(校园IP查询系统); jMenuFile.setText(文件); jMenuFileExit.setText(退出); jMenuFileExit.addActionListener(new Frame1_jMenuFileExit_ActionAdapter(this); jMenuHelp.setText(帮助);jMenuHelpAbout.setText(关于); jMenuHelpAbout.addActionListener(new Frame1_jMenuHelpAbout_ActionAdapter(this); scrollpane.setBorder(BorderFactory.createLoweredBevelBorder(); scrollpane.setMinimumSize(new Dimension(24, 28); scrollpane.setOpaque(true); scrollpane.setPreferredSize(new Dimension(454, 404);scrollpane.setBounds(new Rectangle(8, 9, 411, 229); jLabel1.setFont(new java.awt.Font(Dialog, 0, 15); jLabel1.setText(请输入待查询的IP地址:); jLabel1.setBounds(new Rectangle(2, 292, 173, 22); queryButton.setBounds(new Rectangle(42, 332, 108, 34); queryButton.setFont(new java.awt.Font(Dialog, 1, 16); queryButton.setActionCommand(开始查询);queryButton.setText(开始查询); queryButton.addActionListener(new Frame1_queryButton_actionAdapter(this); exitButton.setText(退出系统); exitButton.addActionListener(new Frame1_exitButton_actionAdapter(this); exitButton.setActionCommand(退出系统); exitButton.setBounds(new Rectangle(277, 337, 108, 34); exitButton.setFont(new java.awt.Font(Dialog, 1, 16);database1.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor(jdbc:odbc:data, , , false, sun.jdbc.odbc.JdbcOdbcDriver);database1.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED);database1.setDatabaseName();queryDataSet1.setAccumulateResults(false); queryDataSet1.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(database1, SELECT IPInfo.STARIP,IPInfo.ENDIP,IPInfo.LOCAL FROM CampusIP.dbo.IPInfo, null, true, Load.ALL); jdbTable1.setBorder(titledBorder3);jdbTable1.setDataSet(queryDataSet1); jLabel2.setFont(new java.awt.Font(Dialog, 0, 12); jLabel2.setText(计算机0601第五组); jLabel2.setBounds(new Rectangle(317, 387, 108, 33); jdbTextField1.setText(); jdbTextField1.setBounds(new Rectangle(155, 288, 259, 28); jMenu1.setText(网上冲浪); jMenuItem1.setText(上网); jMenuItem1.addActionListener(new Frame1_jMenuItem1_actionAdapter(this); jMenuItem2.setText(游戏); jMenuItem2.addActionListener(new Frame1_jMenuItem2_actionAdapter(this); jMenuItem3.setText(个人主页); jMenuItem3.addActionListener(new Frame1_jMenuItem3_actionAdapter(this); jMenuFile.add(jMenuFileExit); jMenuHelp.add(jMenuHelpAbout); jMenuBar1.add(jMenuFile); jMenuBar1.add(jMenuHelp); jMenuBar1.add(jMenu1); contentPane.add(queryButton, null);contentPane.add(exitButton, null); contentPane.add(jLabel2, null); contentPane.add(scrollpane, null); contentPane.add(jLabel1, null);contentPane.add(jdbTextField1, null); scrollpane.getViewport().add(jdbTable1, null); jMenu1.add(jMenuItem1);jMenu1.add(jMenuItem2);jMenu1.add(jMenuItem3); this.setJMenuBar(jMenuBar1); /File | Exit action performed public void jMenuFileExit_actionPerformed(ActionEvent e) System.exit(0); /Help | About action performed /Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) cessWindowEvent(e); if (e.getID() = WindowEvent.WINDOW_CLOSING) jMenuFileExit_actionPerformed(null); void queryButton_actionPerformed(ActionEvent e) String strIP = jdbTextField1.getText(); if (strIP.trim().length() = 0) JOptionPane anOptionPane = new JOptionPane(); /弹出对话框 anOptionPane.showMessageDialog(this, 请输入待查询得IP地址!, 输入提示, JOptionPane.ERROR_MESSAGE); return; QueryIP(strIP); /* 这个函数的作用就是查询输入的IP地址 */ private void QueryIP(String strIP) strIP = strIP.trim(); String strResult;/检查IP地址格式 if (CheckIPFormat(strIP) = false) strResult = 对不起,IP地址输入错误!; JOptionPane anOptionPane = new JOptionPane(); /弹出对话框 anOptionPane.showMessageDialog(this, strResult, IP地址输入格式错误, JOptionPane.ERROR_MESSAGE);return; /将IP地址字符串中的.去掉 strIP = IngnoreIPDot(strIP); /将去掉.的IP地址字符串转换为长整数 BigInteger bigIntIP = StringToBigInt(strIP); /查找IP地址所属单位 strResult = CheckIPInList(bigIntIP); JOptionPane anOptionPane = new JOptionPane(); /弹出对话框 anOptionPane.showMessageDialog(this, strResult, 查询结果, JOptionPane.PLAIN_MESSAGE); /* 这个函数的作用就是检查输入的IP地址的格式是否正确 */ private boolean CheckIPFormat(String strIP) int intLen = strIP.length(); int index = 0; if (strIP.length() 15) return false; while (index = 0) & (strIP.charAt(index) = 9) | (strIP.charAt(index) = .) index+; else break; if (index intLen) return false; return true; /* 这个函数的作用就是将IP地址中间的.去掉将其连成一纯数字字符串 */ private String IngnoreIPDot(String strIP) String strTmp = new String(); strIP = strIP.trim(); StringTokenizer token = new StringTokenizer(strIP, .); while (token.hasMoreElements() strTmp = strTmp.concat( (String) token.nextElement(); return strTmp; /* 这个函数的作用就是将数字字符串转换为长整数 */ private BigInteger StringToBigInt(String strIP) return new BigInteger(strIP); /* 这个函数的作用就是在已有IP地址列表中查找此IP地址,如果 找到就返回该IP地址的所属单位,如果找不到就报错 */ public String CheckIPInList(BigInteger bigIntIP) SAXParseIPInfo parseIPInfo = new SAXParseIPInfo(); try parseIPInfo.ParseIPInfo(); catch (Exception e) e.printStackTrace(); Vector startIPVector = parseIPInfo.GetStartIPVector(); Vector endIPVector = parseIPInfo.GetEndIPVector(); Vector localVector = parseIPInfo.GetLocalVector(); int intLen = endIPVector.size(); for (int i = 1; i intLen; i+) BigInteger bigIntStartIP = StringToBigInt( IngnoreIPDot( (String) startIPVector.elementAt(i); BigInteger bigIntEndIP = StringToBigInt( IngnoreIPDot( (String) endIPVector.elementAt(i); if ( ( (bigIntIP.compareTo(bigIntStartIP) = 1) & (bigIntIP.compareTo(bigIntEndIP) = -1) | (bigIntIP.compareTo(bigIntStartIP) = 0) | (bigIntIP.compareTo(bigIntEndIP) = 0) String strResult = 此IP属于; strResult = strResult.concat( (String) localVector.elementAt(i); return strResult; return 对不起,此IP不属于清华大学; void exitButton_actionPerformed(ActionEvent e) System.exit(0); void jMenuHelpAbout_actionPerformed(ActionEvent e) JOptionPane anOptionPane = new JOptionPane(); /弹出对话框 anOptionPane.showMessageDialog(this, 计算机0601班第五组制作 联系方式: QQ:312069145,校园IP系统查询,JOptionPane.ERROR_MESSAGE); void jMenuItem1_actionPerformed(ActionEvent e) Run(); public void Run()String url=;try Runtime.getRuntime().exec(explorer +http:/+url); catch(Exception e) public void RunPing ()try Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec(winmine.exe); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(); String line; while (line = reader.readLine() != null) System.out.println(line); catch (Exception e) e.printStackTrace(); void jMenuItem2_actionPerformed(ActionEvent e) RunPing (); void jMenuItem3_actionPerformed(ActionEvent e) Run1(); public void Run1() String url=/; try Runtime.getRuntime().exec(explorer +http:/+url); catch(Exception e) class Frame1_jMenuFileExit_ActionAdapter implements ActionListener Frame1 adaptee; Frame1_jMenuFileExit_ActionAdapter(Frame1 adaptee) this.adaptee = adaptee; public void actionPerformed(ActionEvent e) adaptee.jMenuFileExit_actionPerformed(e); class Frame1_jMenuHelpAbout_ActionAdapter implements ActionListener Frame1 adaptee; Frame1_jMenuHelpAbout_ActionAdapter(Frame1 adaptee) this.adaptee = adaptee; public void actionPerformed(ActionEvent e) adaptee.jMenuHelpAbout_actionPerformed(e); class Frame1_queryButton_actionAdapter implements java.awt.event.ActionListener Frame1 adaptee; Frame1_queryButton_actionAdapter(Frame1 adaptee) this.adaptee = adaptee; public void actionPerformed(ActionEvent e) adaptee.queryButton_actionPerformed(e); class IPInfoDataModel extends AbstractTableModel private Object arrIPInfo;private Vector startIPVector; private Vector endIPVector;private Vector localVector; public IPInfoDataModel() SAXParseIPInfo parseIPInfo = new SAXParseIPInfo(); try parseIPInfo.ParseIPInfo(); catch (Exception e) e.printStackTrace(); startIPVector = parseIPInfo.GetStartIPVector(); endIPVector = parseIPInfo.GetEndIPVector(); localVector = parseIPInfo.GetLocalVector(); int intLen = startIPVector.size(); arrIPInfo = new ObjectintLen3; for (int i = 0; i intLen; i+) arrIPInfoi = new Object3; for (int m = 0; m intLen - 1; m+) /System.out.print(m); arrIPInfom0 = startIPVector.elementAt(m); arrIPInfom1 = endIPVector.elementAt(m); arrIPInfom2 = localVector.elementAt(m); public int getColumnCount() return arrIPInfo0.length; public int getRowCount() return arrIPInfo.length - 1; public Object getValueAt(int row, int col) return arrIPInforowcol; public boolean isCellEditable(int row, int col) return false; class Frame1_exitButton_actionAdapter implements java.awt.event.ActionListener Frame1 adaptee;Frame1_exitButton_actionAdapter(Frame1 adaptee) this.adaptee = adaptee; PublicvoidactionPerformed(ActionEvente) adapte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论