目 录
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个数字,以1、2、6、8及v等开头");
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小时内删除。
发表评论