快递状态查询系统 java课程设计.docx
《快递状态查询系统 java课程设计.docx》由会员分享,可在线阅读,更多相关《快递状态查询系统 java课程设计.docx(10页珍藏版)》请在冰点文库上搜索。
快递状态查询系统java课程设计
目录
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.2XML解析模块的实现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类下载文件,然后写入文件”kuaidi.xml”中,调用XML类解析文件。
(2)文件下载模块
创建一个URL对象,创建Http链接,调用openConnection方法,使用IO流输出数据,每次读取一行数据,将它添加到StringBuffer对象后面,抛去异常,关闭IO流,将数据转为String对象返回出去。
(3)文件解析模块
创建一个解析器工厂,在其基础上创建一个解析器,开始解析文件。
解析文件中的元素,若标签中的元素和正在解析的标签的名字一样,输出标签内的内容。
2.2程序模块图
图2-1程序流程图
2.3程序测试效果图
2-2程序效果图
3详细设计
3.1文件下载模块的实现
首先从程序主界面上的文本输入框中获取用户输入的待查询订单号,并将该订单号作为参数拼接到课题所规定的服务器查询地址中。
比如:
若用户在界面输入“6215530004”,则拼接得到的查询地址为“
然后将该查询地址传递给文件下载模块,通过该地址即可实例化一个URL对象,该URL对象打开一个HTTP连接后,通过该HTTP连接的getInputStream()方法将获取到服务器对上述查询地址响应的XML接口数据字节流。
最后将该字节流转换为字符流(InputStreamReader),再将字符流转换为带缓冲区的字符流(BufferReader),就可以利用BufferReader类提供的readLine()方法按行读取服务器返回的XML接口数据了。
以上过程的具体实现代码如下:
publicclassDownloader{
privateURLurl=null;
publicStringdownload(StringurlStr){
StringBuffersb=newStringBuffer();//字符缓冲区
Stringline=null;
BufferedReaderbuffer=null;//字符输入流
try{
url=newURL(urlStr);
HttpURLConnectionurlConn=(HttpURLConnection)url.openConnection();//使用ur1创建HttpsURLConnection。
buffer=newBufferedReader(newInputStreamReader(urlConn.getInputStream(),"UTF-8"));
while((line=buffer.readLine())!
=null){
sb.append(line);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
buffer.close();
}catch(Exceptione){
e.printStackTrace();
}
}
returnsb.toString();
}
}
3.2XML解析模块的实现
先创建一个SAXParserFactory,然后引用characters类得到标签里面的内容。
以上过程的具体实现代码如下:
publicclassXMLextendsDefaultHandler{//适配器模式
publicStringstr="",str1="";
publicXML(){
super();
try{
SAXParserFactorysf=SAXParserFactory.newInstance();//创建一个SAXParserFactory
SAXParsersp=sf.newSAXParser();
sp.parse(newInputSource("kuaidi.xml"),this);
}catch(Exceptione){
e.printStackTrace();
}
System.out.println(str);
}
publicvoidcharacters(charch[],intstart,intlength)//得到标签里面的内容
throwsSAXException{
Stringtag=(String)tags.peek();
if(tag.equals("message")){
str1=newString(ch,start,length);
str+="快递存在是否:
"+str1+"\n";
}
elseif(tag.equals("time")){
str1=newString(ch,start,length);
str+="签收时间:
"+str1+"\n";
}
elseif(tag.equals("context")){
str1=newString(ch,start,length);
str+="签收情况:
"+str1+"\n";
}
}
3.3图形界面模块的实现
创建图形界面后,设置对应的位置,宽度和高度,然后设置窗口属性。
以上过程的具体实现代码如下:
publicclassMyFrameextendsJFrameimplementsActionListener{
BorderLayoutbl=newBorderLayout();//边框布局
privateJButtonbut1,but2;//按钮
privateJLabelnum;//空字符串
privateJLabelshuoming1,shuoming,shuoming2,shuoming3;
privateJTextFieldtname,tnum;//单行文本
privateJTextAreatinformation;//多行文本
XMLreader;
MyFrame(Strings){
super(s);
setSize(480,500);//设置为指定的宽度和高度
setLocationRelativeTo(null);//置于屏幕的中央
JPanelcontentPanel=newJPanel();
JPanelpan=newJPanel();
JPanelpan1=newJPanel();
JPanelpan2=newJPanel();
setContentPane(contentPanel);//设置窗口属性
contentPanel.setLayout(bl);
shuoming2=newJLabel("圆通的快递一般为10个数字,以1、2、6、8及v等开头");
tinformation=newJTextArea(20,30);//20行,20列
but1=newJButton("确定");
but2=newJButton("退出");
num=newJLabel("单号:
");
tnum=newJTextField(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);
pan1.add(but1);
pan1.add(but2);
contentPanel.add(pan1,BorderLayout.SOUTH);
but1.addActionListener(this);//添加指定的动作侦听器,以接收发自此按钮的动作事件
but2.addActionListener(this);
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//使用Systemexit方法退出应用程序
setVisible(true);//设置可见性
}
4问题与解决
编写程序的过程中遇到了很多问题,但是通过与同学讨论和网上查询都一一解决了,这些问题主要是以下几种类别:
1.XML文件解析错误
对应视频上的代码,大致一样的情况下,还出现了并不能正确得出相应的信息的错误,所以并不知道错误在哪里,之后问了同学之后,才解决了相应的问题。
2.图形界面未能显示
在最后的结果中,结果未能在图形界面上显示,只能在eclipse的结果中显示,当时并不知道是为什么,但在查询相应的API之后,才能显示到图形界面中。
3.在显示的结果中未能自动换行
在显示的结果中只能显示一行输出,在询问同学后使用了一个类之后实现了自动换行的功能。
5课程设计心得
经过这次课程设计,我对Java又有了一定地深入了解,这次我选的题目是快递状态查询系统,涉及的编程知识不是太多,主要的就是在文件下载模块和XML解析的模块,虽然之前并不懂这两个模块,但在仔细看了发的几个视频后,基本能了解大致的内容,但在很多地方有许多问题,比如并不知道某几行代码的意思,但只要按照视频所给的样例代码一样写上去就没错,并且能得出结果,之后也在XX查询了相应的意思,虽然能知道在文字上的大概意思,但其实并不知道真正的意思,只能按照别人写的方式来进行编程。
这样我并不能具有很强的编程能力,只能跟在别人的后面,别人做什么,我也做什么,所以此次对自己十分的不满意,并不能真正的理解并运用这次的文件下载和XML解析。
也知道了下次必须先要理解其相应的意思,然后按照自己的思路一步一步的做下去,虽然可能遇到很多的困难,但还是相信会成功的实现出结果的。
经过这次课程设计,知道了自己许多的不足,API文档十分不熟悉,图形界面相应的代码对需要在书上查询才能解决,说明自己的基础不是太好,要多看看相应的程序代码和API里各个类的解释。
6参考文献
[1]董小圆,编著,《java面向对象程序设计》,清华大学出版社,2011
[2]张化祥,陆晶,编著,《java程序设计》,清华大学出版社,2010
[3]依维恩著.王春楠,刘永金翻译.XML高级编程.北京:
清华大学出版社,2009.2
[4]张银鹤等编著.XML实践教程.北京:
清华大学出版社.2007.8