基于Android开发铁路查询小助手.docx
《基于Android开发铁路查询小助手.docx》由会员分享,可在线阅读,更多相关《基于Android开发铁路查询小助手.docx(44页珍藏版)》请在冰豆网上搜索。
基于Android开发铁路查询小助手
摘要
出行一直是人们日常生活中不可或缺的一部分。
而现在的交通状态还不够完好,整个交通查询体系庞大复杂。
人们的出行却是无时无刻的,人们需要随时获取出行信息,为自己的形成进行合理的安排,其中优先考虑的就是交通工具。
本课题设计的基于Android的铁路小助手可以帮助人们解决这些生活小问题。
关键词:
Android;铁路查询;SQLite
目录
1课程设计目的1
2课程设计要求1
3相关知识2
4课程设计分析3
4.1技术可行性分析3
4.2操作可行性分析3
4.3经济可行性分析3
5程序代码4
5.1开发环境和目标平台4
5.1.1开发环境4
5.1.2目标平台4
5.2数据库设计4
5.3.1主体框架6
5.3.2欢迎界面7
5.3.3主菜单模块7
5.3.4主要功能模块8
5.3.5附加功能模块12
5.3.6方法模块19
6运行结果与分析27
6.1运行结果27
6.2分析29
7结论30
8参考文献31
1课程设计目的
中国地域辽阔,铁路线路纵横交错,给人们带来了方便。
但随着火车的客流量不断增长,越来越多的弊端暴露在人们面前:
●火车车次查询不方便。
●车次变动大。
●不能随时随地查询等。
这些状况已经与人们的快节奏生活方式格格不入,急切需要一个方便快捷的查询软件。
本次设计的目的将通过开发这个查询软件,帮助用户解决火车车次查询问题。
2课程设计要求
本系统主要为用户提供一个专属于自己的火车时刻表查询功能,用户在自己手机上安装此软件,根据自己的需求自行添加相关的列车信息,达到真正拥有一个专属于自己的、实用的火车查询系统。
其功能主要包括以下几点。
●站站查询,提供一个站到达另一站的所有车次的查询,包括发车时间和到站时间。
●中转站查询,提供从起点站到达中转站,然后再从中转站到达终点站的所有车次,以及车次相关信息的查询。
●车次查询,提供该车次相关信息的查询。
起点站及发车时间,终点站及到站时间。
●车站查询,提供经过该车站所有车次的查询。
●车次添加,提供某一列车的添加功能,只要提供起点站、终点站和列车类型等信息,即可实现添加车次的功能。
●车站添加,提供添加车站的功能,如果新增了某一个车站,则需提供其站名和其名字的简称。
●关系添加,该功能提供用户添加某列车经过某个站的相关信息,需要提供到站时间,发车时间等信息。
3相关知识
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
Android操作系统最初由AndyRubin开发,主要支持手机。
2005年8月由Google收购注资。
2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。
随后Google以Apache开源许可证的授权方式,发布了Android的源代码。
第一部Android智能手机发布于2008年10月。
Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。
2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。
4课程设计分析
4.1技术可行性分析
本系统采用JavaJDK、Eclipse、GoogleAndroidSDK、ADT、SQLite进行开发。
Android是一个开放性移动开发平台,它为开发人员提供了大量的使用库和工具。
它使得开发人员可以快速地创建自己的应用程序。
该系统使用的SQLite,是目前最流行的开源嵌入式数据库,易于维护,简单操纵。
Android的运用程序可以在其虚拟机上运行,这给开发工作带来了极大的方便。
另外,Java语言是可以编写跨平台应用软件的面向对象的编程设计语言。
因此,这样的开发平台保证了系统设计工作在技术上的可行性。
4.2操作可行性分析
本系统是为使用安卓智能手机的用户开发的,用户还可以根据自己的需求在此软件上自行添加相关的列车信息。
其次,软件界面简单清洁,美观易懂,方便用户查询列车信息。
4.3经济可行性分析
成本:
系统开发仅使用电脑一台,程序开发软件可免费使用,系统开发成本低。
效益:
该软件可以供安卓手机用户使用,软件布局中有设置动画图片,可以考虑设立广告模块,具有不错的商业效应。
5程序代码
5.1开发环境和目标平台
5.1.1开发环境
系统:
Windows7x64
JDK:
jdk-8u65-windows-x64
AndroidSDK:
Android4.4.2(API19)、Android2.2(API8)
开发平台EclipseJ2EEMars及其ADT。
5.1.2目标平台
手机平台为Android2.2,向下兼容Android2.1、Android2.0、Android1.6。
虚拟机配置:
Device:
4.7inWXGA
CPU\ABI:
ARM(armeabi)
Target:
Android2.2(APIlevel8)
Skin:
HVGA
RAM:
512M
ROM:
30M
5.2数据库设计
(1)列车表:
用于记录列车的信息,其中包括列车名、始发站、终点站,以及列车在数据库中的编号等,如表5-2-1所示。
表5-2-1列车表
字段名称
数据类型
字段大小
是否主键
是否为空
说明
Tid
NUM
Int
Yes
No
ID
Tname
文本
20
No
No
Name
Tstartstation
文本
20
No
No
始发站
Tterminus
文本
20
No
No
终点站
Ttype
文本
20
No
No
列车类型
建立该表的SQL语句如下:
Creattableifnotexiststrain(
Tidintegerprimarykey,
Tnamechar(20),
Tstartstationchar(20),
Tterminuschar(20),
Ttypechar(20));
(2)车站表:
该表用来记录车站的信息,包括车站名和车站简称,具体如表5-2-2所示。
表5-2-2车站表
字段名称
数据类型
字段大小
是否主键
是否为空
说明
Sid
NUM
Int
Yes
No
ID
Sname
文本
20
No
No
Name
Spy
文本
20
No
No
车站简称
建立该表的SQL语句如下:
Creattableifnotexistsstation(
Sidintegerprimarykey,
Snamechar(20),
Spychar(20));
(3)关系表:
此表用来记录列车与车站关系,即某列车与其所经过的车站的信息,具体如表5-2-3所示。
表5-2-3关系表
字段名称
数据类型
字段大小
是否主键
是否为空
说明
Rid
NUM
Int
Yes
No
关系ID
Sid
NUM
Int
No
No
车站ID
Tid
NUM
Int
No
No
列车ID
Rarrivetime
文本
20
No
Yes
到站时间
Rstarttime
文本
20
No
Yes
发车时间
建立该表的SQL语句如下:
Creattableifnotexistsrelation(
Ridintegerprimarykey,
Sidinteger,
Tidinteger,
Rarrivetimechar(20),
Rstarttimechar(20));
5.3主类LCCXActivity
5.3.1主体框架
enumWhichView{MAIN_MENU,ZZCX_VIEW,CCCX_VIEW,CZCCCX_VIEW,LIST_VIEW,
PASSSTATION_VIEW,CCTJ_VIEW,CZTJ_VIEW,GXTJ_VIEW,FJGN_VIEW,WELCOME_VIEW,ABOUT_VIEW,HELP_VIEW}
publicclassLCCXActivityextendsActivity{
WelcomeViewwv;//进入欢迎界面
WhichViewcurr;//当前枚举值
staticintflag;//设置页面的标志位
String[][]msgg=newString[][]{{""}};//声明引用
Strings1[];
Strings2[];
Handlerhd=newHandler(){//声明消息处理器
@Override
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
case0:
goToWelcomeView();break;
case1:
goToMainMenu();break;
case2:
setContentView(R.layout.about);
curr=WhichView.ABOUT_VIEW;
break;
case3:
setContentView(R.layout.help);
curr=WhichView.HELP_VIEW;
break;
}
}
};
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);//设置为全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置横屏模式
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
CreatTable.creattable();//建表
iniTLisit();//初始化数组
this.hd.sendEmptyMessage(0);//发送消息进入欢迎界面
}
5.3.2欢迎界面
publicvoidgoToWelcomeView(){
if(wv==null)//如果该对象没创建则创建
wv=newWelcomeView(this);
setContentView(wv);
curr=WhichView.WELCOME_VIEW;//标识当前所在界面
}
5.3.3主菜单模块
publicvoidgoToMainMenu(){
setContentView(R.layout.main);
curr=WhichView.MAIN_MENU;//拿到主菜单中个按钮的引用
ImageButtonibzzcx=(ImageButton)findViewById(R.id.ibzzcx);
ImageButtonibcccx=(ImageButton)findViewById(R.id.ibcccx);
ImageButtonibczcccx=(ImageButton)findViewById(R.id.ibczcccx);
ImageButtonibfjgn=(ImageButton)findViewById(R.id.ibfjgn);
ImageButtonibabout=(ImageButton)findViewById(R.id.about_button);
ImageButtonibhelp=(ImageButton)findViewById(R.id.help_button);
ibabout.setOnClickListener(//按钮监听
newOnClickListener(){
publicvoidonClick(Viewv){
hd.sendEmptyMessage(3);//发消息进入关于界面}
}
);
ibhelp.setOnClickListener(//帮助查询的监听
newOnClickListener(){
publicvoidonClick(Viewv){
hd.sendEmptyMessage
(2);//发消息进入帮助界面
}
}
);
ibzzcx.setOnClickListener(//站站查询按钮的监听
newOnClickListener(){
publicvoidonClick(Viewv){
goTozzcxView();//进入站站查询模块
}
}
);
ibcccx.setOnClickListener(//车次查询按钮的监听
newOnClickListener(){
publicvoidonClick(Viewv){
goTocccxView();//进入车次查询模块
}
}
);
ibczcccx.setOnClickListener(//车站所有车次查询
newOnClickListener(){
publicvoidonClick(Viewv){
goToczcccxView();//进入车站查询模块
}
}
);
ibfjgn.setOnClickListener(//附加功能按钮的监听
newOnClickListener(){
publicvoidonClick(Viewv){
goTofjgnView();//进入附加功能模块
}
}
);
}
5.3.4主要功能模块
其中包含站站查询模块、车次查询模块、车站查询模块三部分。
1)站站查询:
publicvoidgoTozzcxView(){
setContentView(R.layout.zzcx);
curr=WhichView.ZZCX_VIEW;
flag=0;//标志位
Buttonbcx=(Button)findViewById(R.id.zzcxbt);//查询按钮
Buttonbfh=(Button)findViewById(R.id.zzcxfhbt);//返回按钮
iniTLisitarray(R.id.EditText01);//为各个车站输入文本框添加适配器
iniTLisitarray(R.id.zzcxzzz);
iniTLisitarray(R.id.zzcxzdz);
finalCheckBoxzzzcx=(CheckBox)findViewById(R.id.zzcxzzzbt);
bcx.setOnClickListener(//为查询按钮添加监听
newOnClickListener(){
@Override
publicvoidonClick(Viewv){
if(!
isLegal())
return;
AutoCompleteTextViewzzcx_cfz=(AutoCompleteTextView)findViewById(R.id.EditText01);//出发站
AutoCompleteTextViewzzcx_zzz=(AutoCompleteTextView)findViewById(R.id.zzcxzzz);//中转站
AutoCompleteTextViewzzcx_zdz=(AutoCompleteTextView)findViewById(R.id.zzcxzdz);//终点站
Stringstart=zzcx_cfz.getText().toString().trim();
Stringend=zzcx_zdz.getText().toString().trim();
Stringbetween=zzcx_zzz.getText().toString().trim();
Vector>temp;
if(zzzcx.isChecked()==true){
temp=LoadUtil.Zjzquery(start,between,end);//中转查询
if(temp.size()==0){
Toast.makeText(LCCXActivity.this,"没有你所查找的中转站路线!
!
!
",Toast.LENGTH_SHORT).show();
zzcx_cfz.setText("");zzcx_zzz.setText("");
zzcx_zdz.setText("");
return;
}
}else{
temp=LoadUtil.getSameVector(start,end);
if(temp.size()==0){
Toast.makeText(LCCXActivity.this,"对不起,没有相关的列车信息!
!
!
",Toast.LENGTH_SHORT).show();
zzcx_cfz.setText("");zzcx_zzz.setText("");
zzcx_zdz.setText("");
return;
}
}
zzcx_cfz=null;
zzcx_zdz=null;
zzcx_zzz=null;
String[][]msgInfo=newString[temp.elementAt(0).size()][temp.size()];//新建和结果向量对应的数组
for(inti=0;ifor(intj=0;jmsgInfo[j][i]=(String)temp.get(i).get(j);
}
}
goToListView(msgInfo);//切换到查询结果显示界面ListView界面
}
}
);
bfh.setOnClickListener(//为返回按钮添加监听
newOnClickListener(){
@Override
publicvoidonClick(Viewv){
goToMainMenu();//返回到主菜单界面
}
}
);
}
2)车次查询:
publicvoidgoTocccxView(){
setContentView(R.layout.cccx);//切换到车次查询界面
curr=WhichView.CCCX_VIEW;//标识界面
flag=1;
Buttonbcx=(Button)findViewById(R.id.cccx_cx);
Buttonbfh=(Button)findViewById(R.id.cccx_fh);
bcx.setOnClickListener(
newOnClickListener(){
@Override
publicvoidonClick(Viewv){
if(!
isLegal()){//如果各个输入框不满足规则则返回
return;
}
AutoCompleteTextViewcccx_cc=(AutoCompleteTextView)findViewById(R.id.cccxcc);//得到车次输入框的引用
Stringcccxcc=cccx_cc.getText().toString().trim();Vector>temp=LoadUtil.trainSearch(cccxcc);
//调用工具函数查询得到结果集
cccx_cc=null;
if(temp.size()==0){
Toast.makeText(LCCXActivity.this,"没有相关信息!
!
!
",Toast.LENGTH_SHORT).show();
return;
}
String[][]msgInfo=newString[temp.elementAt(0).size()][temp.size()];//新建对应于向量的数组
for(inti=0;ifor(intj=0;jmsgInfo[j][i]=(String)temp.get(i).get(j);
}
}
goToListView(msgInfo);//切换到结果显示界面ListView界面
}
}
);
bfh.setOnClickListener(//为返回按钮添加监听
new