1 课题介绍    1
1.1 课程设计目的    1
1.2 课程设计要求    1
2 总体设计    2
2.1 程序的模块划分    2
2.2 程序模块图    2
2.3程序测试效果图    2
3 详细设计    3
3.1 文件下载模块的实现    3
3.2 XML解析模块的实现    4
3.3 图形界面模块的实现    5
4 问题与解决    8
5 课程设计心得    9
6 参考文献    10

1 课题介绍
1.1 课程设计目的
课程设计题目:快递状态查询系统
本课程设计的目的是可以使用户在局域网的情况下,进行查询相应的快递信息。 通过这个课程要学会通过java下载网上提供的XML接口文件,并将获取的XML数据解析后以文字或图片形式显示到图形界面上。还需要掌握XML    的所对应的相应形式。
1.2 课程设计要求
将在网上下载的XML进行数据解析后以文字或图片形式显示到图形界面上榜。要求正确显示用户所输入订单号查询的信息,且在输入错误时显示错误的信息,使用户能再次多次重新输入。

2 总体设计
2.1 程序的模块划分
根据课题要求和程序需求,本快递状态查询系统总体上划分为如下四个模块:图形界面外模块(Frame类)、图形界面内模块(MyFrame类),文件下载模块(Downloader类)和XML数据解析模块(XML类)。程序的模块结构如图2-1所示。
1)图形界面模块
先在图形界面上设置标签,文本框,按钮,文本区,调用Downloader类下载文件,然后写
入文件l中,调用XML类解析文件。
2)文件下载模块
创建一个URL对象,创建uml14种图记忆口诀Http链接,调用openConnection方法,使用IO流输出数据,每次读取一行数据,将它添加到StringBuffer对象后面,抛去异常,关闭IO流,将数据转为String对象返回出去。
3)文件解析模块
创建一个解析器工厂,在其基础上创建一个解析器,开始解析文件。解析文件中的元素,若标签中的元素和正在解析的标签的名字一样,输出标签内的内容。
2.2 程序模块图
2-1 程序流程图
2.3程序测试效果图
2-2  程序效果图

3 详细设计
3.1 文件下载模块的实现
首先从程序主界面上的文本输入框中获取用户输入的待查询订单号,并将该订单号作为参数拼接到课题所规定的服务器查询地址中。比如:若用户在界面输入“6215530004”,则拼接得到的查询地址为“api.kuaidi100/apione?com=yuantong”。
然后将该查询地址传递给文件下载模块,通过该地址即可实例化一个URL对象,该URL对象打开一个HTTP连接后,通过该HTTP连接的getInputStream()方法将获取到服务器对上述查询地址响应的XML接口数据字节流。
最后将该字节流转换为字符流(InputStreamReader),再将字符流转换为带缓冲区的字符流(BufferReader),就可以利用BufferReader三角函数公式大全推导类提供的readLine()方法按行读取服务器返回的XML接口数据了。
以上过程的具体实现代码如下:
public class Downloader{
    private URL url = null ;
    public String download(String urlStr){
        StringBuffer sb = new StringBuffer();//字符缓冲区
        String line = null ;
        BufferedReader buffer = null ;//字符输入流
        try {
            url = new URL(urlStr);
            HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();//使用 ur1 创建 HttpsURLConnection
            buffer = new BufferedReader(new InputStream(),"
UTF-8"));
            while((line = adLine())!=null){
                sb.append(line);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                buffer.close();
                }catch(Exception e){
                    e.printStackTrace();
                }
        }
        String();
    }
}
3.2 XML解析模块的实现
先创建一个SAXParserFactory,然后引用characters类得到标签里面的内容。
以上过程的具体实现代码如下:
 
public class XML extends DefaultHandler {    //适配器模式
 
    public String str="",str1="";
 
public XML() {   
    super();   
  try {   
    SAXParserFactory sf = wInstance();    //创建一个SAXParserFactory
    SAXParser sp = sf.newSAXParser();   
 
    sp.parse(new InputSource("l"), this);   
  } catch (Exception e) {   
    e.printStackTrace();   
  } 
  System.out.println(str);
 
  }
 
  public void characters(char ch[], int start, int length)    //得到标签里面的内容
  throws SAXException {   
  String tag = (String) tags.peek();
 
  if (tag.equals("message")) {   
      str1=new String(ch, start, length);
      str+="快递存在是否:"+str1+"\n";
 
  }   
  else if (tag.equals("time")) { 
      str1=new String(ch, start, length);
      str+="签收时间:"+str1+"\n";
   
  }
  else if (tag.equals("context")) { 
      str1=new String(ch, start, length);
      str+="签收情况:"+str1+"\n";
       
  }
 
 
}
 
3.3 图形界面模块的实现
创建图形界面后,设置对应的位置,宽度和高度,然后设置窗口属性。
以上过程的具体实现代码如下:
public class MyFrame extends JFrame implements ActionListener{
    BorderLayout bl = new BorderLayout();//边框布局
    private JButton but1 , but2;//按钮
    private JLabel  num ;//空字符串
    private JLabel shuoming1 ,shuoming , shuoming2 ,shuoming3 ;
黑字体颜代码    private JTextField tname , tnum ;//单行文本
    private JTextArea tinformation ;//多行文本
   
    XML reader ;merge函数
   
    MyFrame (String s){
        super(s);
        setSize(480,500);//设置为指定的宽度和高度
        setLocationRelativeTo(null);//置于屏幕的中央
android图片       
        JPanel contentPanel = new JPanel();
        JPanel pan = new JPanel();
        JPanel pan1 = new JPanel();
        JPanel pan2 = new JPanel();
        setContentPane(contentPanel);//设置窗口属性
        contentPanel.setLayout(bl);
       
        shuoming2 = new JLabel("圆通的快递一般为10个数字,以1268v等开头");
        tinformation = new JTextArea(20,30);//20行,20
        but1 = new JButton("确定");java下载过程
        but2 = new JButton("退出");
        num = new JLabel("单号:");
        tnum = new JTextField(15);
        tinformation.setLineWrap(true);
        pan2.add(shuoming2);
        pan2.add(tinformation);
       
        pan.add(num);
        pan.add(tnum);
        contentPanel.add(pan,BorderLayout.NORTH);
        contentPanel.add(pan2, BorderLayout.CENTER);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。