软件工程课设.docx
- 文档编号:6775939
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:18
- 大小:223.78KB
软件工程课设.docx
《软件工程课设.docx》由会员分享,可在线阅读,更多相关《软件工程课设.docx(18页珍藏版)》请在冰豆网上搜索。
软件工程课设
课程设计
课程名称_软件工程课程设计____
题目名称_快递查询软件--《FindIt》
学生学院____计算机学院________
专业班级______________
学号___________
学生姓名________________
指导教师_____________
2014年6月
摘要
本报告论述的快递查询软件是日常生活常用的实用性软件,该软件主要解决了人们对于快件查询的问题。
本报告论事了《FindIt》开发的目标和实现的功能,并重点接受了软件分析、软件设计、软件测试盒软件实施的全过程。
在描述软件分析和软件设计过程中,为了使该软件的开发过程具有规范化,为此,本报告确定了开发软件的指导思想:
一、运用规范化的设计思想;二、从实际应用出发,为求实用;三、以Android开发平台为主,开发一个适用于广大手机用户的软件
本报告分为四章编写,第一章是软件分析,软件分析是对软件现状进行分析。
根据软件的目标、需求分析和功能分析,制定和选择一个较好的软件方案,从而达到一个合理的优化软件;第二章是数据库设计和结构创建,数据库设计的全过程,可以相应的分成三个阶段:
第一阶段为数据库需求分析阶段,第二阶段为建立概念性数据模型,第三阶段为逻辑设计阶段;第三章为软件设计,软件设计的目的是最大限度地运用软件分析的结果,设计出能最大限度地满足要求的软件;第四章为软件测试盒软件运行,软件测试的目的是为了找出错误,修正错误,使软件真正达到要求。
1论述
1.1开发背景
1.2开发技术
2系统需求分析
2.1系统需求
2.2用例以及用例图
2.2.1角色定义
2.2.2用例图
2.3数据库的概念结构设计
2.4数据流图
3系统设计
3.1系统结构设计
3.2模块总体设计
3.3模块的详细设计
3.3.1登陆模块
3.3.2注册模块
3.3.3查询模块
3.3.4历史查看模块
3.4数据库逻辑结构的设计
3.4.1表结构的设计
3.4.2存储过程设计
3.4.2.1账号存储
3.4.2.1历史存储
4系统实现
4.1系统实现工具与支持平台
4.2系统界面设计
4.3系统核心代码
5测试
5.1导言
5.1.1目的
5.1.2范围
5.2测试项目
5.2.1测试项目的背景
5.2.2测试要点
5.3测试内容
6总结
参考文献
1、绪论
1.1开发背景
目前,随着网络的飞速发展与网上购物的普及,网上购物成为当下年轻人购物的主要方式之一,随着网购的普及,快递业也相应发展起来。
当人们网购完心仪的商品,总希望商品能够早日达到,希望能够时时刻刻关注商品的物流动向...
快递查询功能并不罕见,许多网站都提供了这种功能,但每次查询都必须登录浏览器,再进入网站查询,这会不会过于繁琐,如果有一个手机APP能够一键查询,那样不是会更加便捷,更加符合人们的需求。
《FindIt》这款软件正是为了满足人们这一需求而产生的。
简洁的界面,便捷的使用,只要轻轻松松就可以一键查询快递物流,一款真正满足人们对效率要求的快递查询软件。
1.2开发技术
《FindIt》软件是一款在Android平台开发的智能手机APP,该软件的核心开发技术为网站接口API的灵活使用,通过信息的交互,将快件信息传递至服务器,由服务器经行信息处理,将查询结果返回至手机客户端,再由手机客户端将返回的信息进行二次加工,最后将处理结果呈现给用户。
2、系统需求分析
2.1系统需求
(1)身份验证功能:
对用户的身份经行验证
(2)历史记录功能:
对用户的查询经行记录,方便日后再查询
(3)查询功能:
软件核心功能,对快件的物流查询
2.2用例以及用例图
2.2.1角色定义
角色或者执行者(Actor)指与系统产生交互的外部用户或者外部系统。
(1)用户是指在这个查询软件中通过客户端提交快件信息的人员,这个Actor主要参与客户端的注册,查询等功能。
(2)数据库是一个与系统产生交互的外部系统,这个Actor负责系统的数据查询、增加、删除和修改等操作。
2.2.2用例图
2.3数据库的概念结构设计
系统E-R图
2.4数据流图
3、系统设计
3.1系统结构设计
本系统采用C/S结构,即大家熟知的客户机和服务器结构。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
系统结构简图
3.2模块总体设计
系统功能结构图
3.3模块的详细设计
3.3.1登陆模块
(1)模块编号:
M1-001
(2)模块名称:
登陆模块
(3)模块功能:
对用户的身份经行验证
(4)模块背景描述:
系统设计快件历史查询功能,为了防止信息外泄,所以设置登陆模块进行身份验证,保证用户信息部外泄
3.3.2注册模块
(1)模块编号:
M1-002
(2)模块名称:
注册模块
(3)模块功能:
将新用户的信息进行记录
(4)模块背景描述:
3.3.3查询模块
(1)模块编号:
M1-003
(2)模块名称:
查询模块
(3)模块功能:
对快件信息进行收集和结果返回呈现
(4)模块背景描述:
3.3.4历史查看模块
(1)模块编号:
M1-004
(2)模块名称:
历史查看模块
(3)模块功能:
查看以往查询记录
(4)模块背景描述:
当需要对以往的已经查询的快件需要重新查询时,可以通过历史查看,便捷的再查询
3.4数据库逻辑结构的设计
3.4.1表结构的设计
History表
Idintergerprimarykeyautoincrement
companytextnotnull
numbertextnotnull
3.4.2存储过程设计
存储过程是一种特殊的公用模块,它在数据库服务器上执行,这里将它单独列出来,规定其详细设计模板
3.4.2.1账号存储
(1)存储过程中文名:
账号存储。
(2)存储过程英文名:
usersave
(3)存储过程功能:
将用户的用户名和密码进行存储,压入专门的数据库user表中,用
于对用户身份的验证,也为了区分不同用户的查询历史
3.4.2.1历史存储
(1)存储过程中文名:
历史存储。
(2)存储过程英文名:
historysave
(3)存储过程功能:
将用户的查询记录进行存储,压入专门的数据库history表中,用
于日后对查询结果的复查
4、系统实现
根据整个系统的总体设计以及相关子系统的相关模块功能的设计,我们进行了系统的软件开发。
详细设计和功能展示如下:
4.1系统实现工具与支持平台
(1)用户界面
本系统采用eclipse设计,使用范围为基于Android平台的手机。
(2)开发和运行环境
工具软件:
JDK1.6,ADT,SDK
开发环境:
eclipse
运行环境:
Android2.3.6
硬件配置:
内存1G,SD卡8G
4.2系统界面设计:
(1)系统登录界面
(2)注册界面
(3)查询界面(4)历史界面
(5)开始界面
4.3系统核心代码
4.3.1登陆功能块
//登录判定方法
publicbooleanlogin(Stringusername,Stringpassword){
SQLiteDatabasesdb=dbHelper.getReadableDatabase();
Stringsql="select*fromuserwhereusername=?
andpassword=?
";
Cursorcursor=sdb.rawQuery(sql,newString[]{username,password});
if(cursor.moveToFirst()==true){
cursor.close();
returntrue;
}
returnfalse;
}
//登陆实现部分
login.setOnClickListener(newOnClickListener()
{
publicvoidonClick(Viewview)
{
Stringyonghu=user.getText().toString();
Stringmima=password.getText().toString();
Log.i("TAG",yonghu+"_"+mima);
UserServiceuService=newUserService(loginActivity.this);
booleanflag=uService.login(yonghu,mima);
if(flag){
Log.i("TAG","登录成功");
Toast.makeText(loginActivity.this,"登录成功",1500).show();
Intentintent=newIntent(loginActivity.this,MainActivity.class);
intent.putExtra("user",yonghu);
startActivity(intent);
loginActivity.this.finish();
}else{
Log.i("TAG","登录失败");
Toast.makeText(loginActivity.this,"登陆失败",1500).show();
}
}
});
4.3.2注册功能块
//注册数据插入方法
publicbooleanregister(Useruser){
SQLiteDatabasesdb=dbHelper.getReadableDatabase();
Stringsql="insertintouser(username,password)values(?
?
)";
Objectobj[]={user.getUsername(),user.getPassword()};
sdb.execSQL(sql,obj);
returntrue;
}
}
//注册实现部分
register.setOnClickListener(newOnClickListener()
{
publicvoidonClick(Viewview)
{
//用户名&密码键入值获取
Stringyonghu=user.getText().toString();
Stringmima=password.getText().toString();
Stringagain=confirm.getText().toString();
if(yonghu.length()==0||mima.length()==0||again.length()==0)
{
Toast.makeText(registerActivity.this,"用户和密码不能为空",1500).show();
}
elseif(mima.equals(again))
{
//用户名&密码压入数据库
Log.i("TAG",yonghu+"_"+mima);
UserServiceuService=newUserService(registerActivity.this);
Useruser=newUser();
user.setUsername(yonghu);
user.setPassword(mima);
uService.register(user);
Toast.makeText(registerActivity.this,"注册成功",1500).show();
Intentintent=newIntent(registerActivity.this,
loginActivity.class);
startActivity(intent);
registerActivity.this.finish();
}
else
Toast.makeText(registerActivity.this,"两次密码须一致",2000).show();
}
});
4.3.3信息收集转换块
//转换数组
String[]type={"中通速递","韵达快运","圆通速递","顺丰快递",
"申通快递","汇通快运","天天快递","EMS快递"};
finalString[]str={"中通速递","韵达快运","圆通速递","顺丰快递",
"申通快递","汇通快运","天天快递","EMS快递",
"zhongtong","yunda","yuantong","shunfeng","shentong","huitongkuaidi","tiantian","ems"};
//快件信息收集&转换
check.setOnClickListener(newOnClickListener()
{
publicvoidonClick(Viewview)
{
Stringtype=spinner.getSelectedItem().toString();
Stringpostid=edittext.getText().toString();
if(postid.length()==0)
{
//提示框
Toast.makeText(MainActivity.this,"请输入快递单号",1500).show();
}
else
{
//快递公司转换
for(inti=0;i<8;i++)
{
if(type==str[i])type=str[i+8];
}
//信息传递及界面跳转
Intentintent=newIntent(MainActivity.this,
textActivity.class);
intent.putExtra("edittext",postid);
intent.putExtra("spinner",type);
startActivity(intent);
MainActivity.this.finish();
}
}
});
4.3.4查询结果处理块
webview=(WebView)findViewById(R.id.wv);
//设置WebView属性,能够执行Javascript脚本
webview.getSettings().setJavaScriptEnabled(true);
//网址传递获取
Intentintent=getIntent();
Stringtype=intent.getStringExtra("spinner");
Stringpostid=intent.getStringExtra("edittext");
Stringuri="
//加载需要显示的网页
webview.loadUrl(uri);
}
//设置回退
//覆盖Activity类的onKeyDown(intkeyCoder,KeyEventevent)方法
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if((keyCode==KeyEvent.KEYCODE_BACK)&&webview.canGoBack()){
webview.goBack();//goBack()表示返回WebView的上一页面
returntrue;
}
returnfalse
5、测试
5.1导言
5.1.1目的
该文档的目的是描述《FindIt》系统测试计划,其主要内容包括:
●测试系统简介
●测试方法
●测试标准
●测试计划
本文档的预期的读者是:
●开发人员
●项目管理人员
●测试人员
5.1.2范围
该文档定义了客户端系统的测试方法、测试标准和时间计划,但未确定具体的测试用例,这部分内容将在测试设计中确定。
5.2测试项目
5.2.1测试项目的背景
本次测试的目的是测试《FindIt》的登陆功能、注册功能、查询功能和历史记录等基本功能,以及能否支持大数据量存储和查看。
5.2.2测试要点
被测特性:
●对软件进行功能性测试
●对软件进行非功能性测试
不被测特性:
●程序源代码,逻辑等;
●模块的接口,模块的错误处理,模块的局部数据结构,模块在执行时执行流的独立路径,模块在处理边界值时的情形;
●单元(模块)之间的可用性等。
5.3测试内容
对被测软件进行系统级别的测试,针对软件的功能需求进行功能测试,验证此软件是否实现了需求分析中所定义的功能,是否正确实现了功能。
针对软件的非功能性需求对其进行性能测试,检查系统是否发生功能上或者性能上的问题。
测试内容即测试需求,包括功能测试和性能测试。
5.4测试方法
软件测试主要在Android的虚拟机中进行,模拟了真实的手机环境,对软件的界面呈现效果,存储情况,数据库的访问和查询进行测试,具体的测试结果和测试过程用以下的logcat框信息呈现:
6、总结
通过本次软件工程课程设计我从中学习到了许多课本中没有的知识,更重要的是从该课程设计中对自己的动手能力和动脑能力有了更大层次的提高,切实提高了自己的综合能力,使得将所学的知识同实际的运用相结合,并对Android知识的了解和运用,尤其是对API接口的运用有了更深层次的理解;对触发器和存储过程的运用有了很大的了解和认识,能够根据实际的情况来编写适当的触发器和存储过程,并显示正确的处理结果;同时,通过该设计也充分的将所学的语言和数据库知识有效的结合,创新性的开发出一个便捷实用的手机APP软件,为今后的实际工作的开发项目有了很大程度的帮助。
参考文献
[1]李宁.《Android开发权威指南》.人民邮电出版社
[2]吴亚峰.《Android核心技术与实例详解》.电子工业出版社
[3]王家栋.《Android4.0网络编程详解》.电子工业出版社
[4]李卫华.《Java技术及其应用》.清华大学出版社
(作者注:
本文只提供部分核心代码,未涉及全部代码和布局文件,如有特殊要求,求发邮件至邮箱****************,我会视情况给你回复工程文件)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程