物联网应用开发论文.docx
《物联网应用开发论文.docx》由会员分享,可在线阅读,更多相关《物联网应用开发论文.docx(21页珍藏版)》请在冰豆网上搜索。
物联网应用开发论文
工商学院
信息工程学院
物联网应用开发课程设计
项目名称:
日程管理
**********************
学号:
********
班级:
13物联本2
*********************
2016年6月18日
摘要
随着科技时代的发展变迁,人们的生活变得快捷便利,但是随之而来的是人们的生活方式和生活习惯也变的越来越丰富,每天需要做的事情逐渐增多,当我们忙于工作可能无暇顾及家庭,没有了合理的时间安排不仅使我们的生活变得慌乱,工作的效率也大打折扣。
因此,该系统是结合日常生活安排的实际情况、以实际应用为开发背景、经过实际的需求分析、采用在PC端对Android开发环境的模拟技术而开发出来的基于Android系统的一个手机应用。
本文运用软件工程原理和软件开发方法,对本应用进行了概要设计和详细设计。
该应用操作简便、界面友好、灵活、实用、安全,可以满足不同类型的人们对个人日程的要求,尤其是在该应用中,用户之间交互性的实现更是对传统日程安排的一大突破。
本文详细介绍了日程安排平台在Android系统上开发的设计背景,设计思路以及实现方法,着重说明了该应用的创新点、突破点、用户的体验要求和应用的实际运行情况。
围绕该应用的实际使用情况来对该应用进行分析设计,对在开发的过程中采用数据流程图、ER图以及程序流程图进行了详细的说明。
由于这是一个交互式的应用,用户可以在上面浏览、分享大家的时间安排心得、经验,与志同道合的朋友进行交流,使得该应用的开发对个人的时间管理有着很重要的意义。
关键词:
android、软件工程、日程安排、交互性
1绪论
1.1选题背景及意义
时间管理是一项生活中必不可少项目,人们为了生活中的安排,经常弄得头昏眼花,而且导致工作、学习效率大打折扣,失去了时间的自主性,没有了合理的时间安排,事情繁忙的工作者就像迷航的船找不到灯塔在茫茫大海中飘荡,在这种情况下,日程管理APP顺应而生。
与此同时,随着信息行业的飞速发展,Android系统在各个系统平台上的优势也日趋凸显。
与传统的手机系统平台不同,Android系统采用开源的模式,使得很多人可以自行开发手机软件并共享,从而也就使得这个平台可以使用的用户更多;再者,Android系统反应速度快,操作更简单,这也使得该系统的应用可以得到更广泛的推广。
在这种前提下,开发一种基于Android系统的物联网移动应用,对方便人们安排时间、提高时间利用质量有着非常重要的意义。
1.2论文结构
本文首先续写了论文的摘要,对本文的设计目的并对整体的文章做了相应的描述,又通过绪论分别表达了选题的背景及意义,其次用需求分析写出该项目的设计需求,而后对系统功能需求和系统的非功能需求进行了详细的分析,使读者能了解该项目的功能及其优缺点,通过数据流图和数据字典将整个项目的使用方法客观的显示在用户的面前。
然后分析了数据概念模型与关系模型设计分别用E-R途进行展示,并对系统的相应功能做了详细的设计,对该项目的每个功能进行了详细的说明,在系统实现部分对项目的代码进行了注释,将每段代码的作用进行了详细的阐述,系统测试部分将整个系统运行,对每个功能通过截图的方式展现,最后对本文的设计过程以及心得进行了详细的总结。
2需求分析
需求分析的定义:
所谓"需求分析",是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么。
可以说,在软件工程当中的“需求分析”就是确定要计算机“做什么”,要达到什么样的效果。
可以说需求分析是做系统之前必做的。
在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、围、定义和功能时所要做的所有的工作。
需求分析是软件工程中的一个关键过程。
在这个过程中,系统分析员和软件工程师确定顾客的需要。
只有在确定了这些需要后,他们才能够分析和寻求新系统的解决方法。
需求分析阶段的任务是确定软件系统功能。
在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤。
但在近十年,越来越多的人认识到,需求分析是整个过程中最关键的一个部分。
假如在需求分析时分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件项目无法在规定的时间里完工。
需求分析的原因:
需求分析就是分析软件用户的需什么。
如果投入大量的人力,物力、财力、时间,开发出的软件却没人要,那所有的投入都是徒劳。
如果费了很大的精力,开发一个软件,最后却不满足用户的要求,从而要重新开发过,这种返工是让人痛心疾首的(相信大家都有体会)。
比如:
用户需要一个forlinux的软件,而你在软件开发前期忽略了软件的运行环境,忘了向用户询问这个问题,而想当然的认为是开发forwindows的软件。
当你千辛万苦地开发完成向用户提交时才发现出了问题,那时候你是欲哭无泪了,恨不得找块豆腐一头撞死。
需求分析之所以重要,就因为他具有决策性、方向性、策略性的作用,他在软件开发的过程中具有举足轻重的地位,大家一定要对需求分析具有足够的重视。
在一个大型软件系统的开发中,他的作用要远远大于程序设计
需求分析的任务是通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明确用户的各种需求然后在此基础上确定新系统的功能。
确定对系统的综合要求,虽然功能需对软件系统的一项基本需求,但却并不是唯一的需求,通常对软件系统有下述几方面的综合要求。
1.功能需求
2.性能需求
3.可靠性和可用性需求
4.出错处理需求
5.接口需求
6.约束
7.逆向需求
8.将来可能提出的要求
需求分析需要用到如下工具:
RationalRose,PowerDoidsd,EnterpriseArchitect
2.1系统功能需求分析
(1)添加功能:
对将要完成的日程进行安排添加容、时间、类型等。
(2)查询功能:
通过已经添加的日程容、时间、类型查询相关的日程。
(3)删除功能:
删除不需要或者已经完成的日程安排。
(4)修改功能:
修改输入错误或者需要完善的日程。
(5)查看功能:
查看已经添加的日程安排。
2.2系统非功能需求分析
(1)性能需求:
用户在使用时响应速度很有优势、结果精度更准确、运行时资源消耗量更低。
(2)可靠性需求:
用户使用时故障可预测性较高。
(3)易用性需求:
用户对于软件的适用能力很强。
(4)安全性需求:
用户可以获得很多的授权,并有严格的私密保护。
(4)运行环境约束:
软件系统运行环境不需要较高的配置便可实现。
(5)外部接口:
待开发的功能适应多种类型的外部接口以及硬件设备。
2.3系统数据分析
图2-1系统数据流程图
2.4数据字典
数据字典表达了数据和处理过程的关系。
在SA方法中,处理过程的处理活动常常借助于判定表或判定树来描述。
系统中的数据则借助数据字典来描述。
数据字典是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果,在数据库设计中占有很重要的地位。
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程、外部项等六个部分。
3系统设计
3.1概要设计
首先设计了系统的欢迎界面,当用户通过欢迎界面进入主界面后,会显示出通过Listview适配器调取数据库里的容的日程安排,该项目设置了上下文菜单和选项菜单,分别实现打开、删除、修改、添加和查询按钮的设置,点击需要的功能后会显示相应的布局界面以及会达到的界面效果。
3.2数据概念模型与关系模型设计
3.2.1系统E-R图
图3-1系统E-R图
3.2.2概念模型转换关系模型
图3-2概念模型转换关系模型图
3.3详细设计
3.3.1欢迎界面
欢迎界面以一个图片为背景添加了布局之后,对该布局的显示设置停留时间,到达几秒的停留效果后通过监听事件设置欢迎界面的跳转,使其跳转到下一个日程安排的显示界面。
3.3.2查询界面
该系统的查询界面,首先添加了XML文件设置该界面的布局,在该布局中添加了Edittext控件用来显示查询的容,而后在数句库中添加相应的查询代码,结合listview适配器显示查询到的整条数据,并单独显示在另一个界面。
图3-3查询流程图
3.3.3日程安排的主界面
主界面用于显示所有的添加了数据容,以列表的方式对用户进行呈现,当用户添加了日程就会在该页面显示已经添加的安排,在该页面还可以完成对日程任务的修改、删除和查看等功能。
在该页面添加了上下文菜单对所要完成的功能进行操作。
3.3.4日程添加功能
日程添加界面是由Eidttext、Spinner、时间选择控件等组成的界面,通过LieanLyout线性布局将这些控件组合到一起,在JAVA文件中添加各个控件的事件监听,并将所有控件中的输入容连接到数据库,最后通过点击该界面的“添加”按钮保存输入的数据,将获取的容保存到数据库,与此同时添加跳转的事件,在触发结束后完成页面的跳转,最终跳转到日程安排的主界面显示所有添加的日程安排数据。
图3-4日程添加流程图
3.3.5日程修改功能
修改界面与添加界面类似,但是该界面是由对话框的方式呈献给用户的,也是在布局中添加了线性布局,并在该布局中设置了四个Eidttext控件,与添加界面不同的是该界面的文本中是连接数据库容并获取其中的容到相应的位置,用户可选择需要修改的部分直接修改,最后触发修改按钮后,在数据库中更新了修改后的数据,并在修改结束后跳转到主界面显示修改后的信息。
图3-5日程修改数据流程图
3.3.6删除日程功能
删除界面相对来说简单很多,只需在主界面选择要删除的数据,并通过上下文菜单长按那条数据,在显示删除选项后,选择删除,该条数据就会从连接的数据表中被删除,同时在主界面也会去掉该条数据。
3.3.7查看日程功能
查看功能是为用户提供日程遗忘后的提醒功能,当用户想要查看某条类型的数据时,只需长按该条数据,选择打开,就会显示该任务的容以及时间日期等信息。
4系统实现
主界面的核心代码:
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_guan);
mydb=newMydbOpen(context,"user1.db",null,1);//参数
showList("select*fromuserss");
registerForContextMenu(getListView());
getListView().setOnItemLongClickListener(newOnItemLongClickListener(){
@SuppressWarnings("unchecked")
@Override
publicbooleanonItemLongClick(AdapterView
>views,Viewarg1,intp,longarg3){
//TODOAuto-generatedmethodstub
HashMaphm=(HashMap)views.getItemAtPosition(p);
uid=hm.get("uid").toString();
returnfalse;
}
});
}
publicvoidshowList(Stringsql){
//TODOAuto-generatedmethodstub
SimpleAdapteradp=newSimpleAdapter(context,mydb.showUserList(sql,null),R.layout.activity_guan,newString[]{"uid","uname","uage","uq","us"},newint[]{R.id.uidtv,R.id.unametv,R.id.uagetv,R.id.uqtv,R.id.ustv});
getListView().setAdapter(adp);
}
publicbooleanonContextItemSelected(MenuItemitem){
if(item.getItemId()==itemId1)
{
AlertDialog.Builderbuilder=newBuilder(context);
LayoutInflaterinf=getLayoutInflater();
updView=inf.inflate(R.layout.update,(ViewGroup)findViewById(R.id.updlayout));
builder.setView(updView);
builder.setTitle("修改用户");
Cursorcur=mydb.getReadableDatabase().rawQuery("select*fromusersswhereuid=?
",newString[]{uid});
cur.moveToNext();
Stringname=cur.getString
(1);
Stringage=cur.getString
(2);
Stringq=cur.getString(3);
Strings=cur.getString(4);
unetupd=(EditText)updView.findViewById(R.id.unetupd);
uagetupd=(EditText)updView.findViewById(R.id.uagetupd);
uqpd=(EditText)updView.findViewById(R.id.uqpd);
uspd=(EditText)updView.findViewById(R.id.uspd);
unetupd.setText(name);
uagetupd.setText(age);
uqpd.setText(q);
uspd.setText(s);
builder.setPositiveButton("修改",newOnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
unetupd=(EditText)updView.findViewById(R.id.unetupd);
uagetupd=(EditText)updView.findViewById(R.id.uagetupd);
Stringun=unetupd.getText().toString();
Stringuage=uagetupd.getText().toString();
Stringuq=uqpd.getText().toString();
Stringus=uspd.getText().toString();
Stringsql="updateusersssetuname=?
uage=?
uq=?
us=?
whereuid=?
";
mydb.executeSql(sql,newString[]{un,uage,uq,us,uid});
showList("select*fromuserss");
}
});
builder.setNegativeButton("取消",null);
builder.create().show();
}
elseif(item.getItemId()==itemId2)
{
Stringsql="deletefromusersswhereuid=?
";
mydb.executeSql(sql,newString[]{uid});
showList("select*fromuserss");
}
elseif(item.getItemId()==itemId3)
{
AlertDialog.Builderbuilder=newBuilder(context);
LayoutInflaterinf=getLayoutInflater();
ukView=inf.inflate(R.layout.kai,(ViewGroup)findViewById(R.id.kailayout));
builder.setView(ukView);
builder.setTitle("查看日程");
Cursorcur=mydb.getReadableDatabase().rawQuery("select*fromusersswhereuid=?
",newString[]{uid});
cur.moveToNext();
Stringname=cur.getString
(1);
Stringage=cur.getString
(2);
Stringq=cur.getString(3);
Strings=cur.getString(4);
TextViewnei=(TextView)ukView.findViewById(R.id.te1);
TextViewnq=(TextView)ukView.findViewById(R.id.te2);
TextViewns=(TextView)ukView.findViewById(R.id.te3);
EditTextne=(EditText)ukView.findViewById(R.id.ed1);
//nei.setText(name);
nq.setText(q);
ns.setText(s);
ne.setText(name);
builder.setPositiveButton("确定",newOnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
}
});
builder.setNegativeButton("取消",null);
builder.create().show();}
returnsuper.onContextItemSelected(item);
}
publicvoidonCreateContextMenu(ContextMenumenu,android.view.Viewv,ContextMenuInfomenuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
menu.add(0,itemId1,menu.NONE,"修改");
menu.add(0,itemId2,menu.NONE,"删除");
menu.add(0,itemId3,menu.NONE,"打开");
//super.onCreateContextMenu(menu,v,menuInfo);
}
publicbooleanonMenuItemSelected(intfeatureId,MenuItemitem)
{
if(item.getItemId()==99)
{
Intenti=newIntent(Guan.this,Qi.class);
startActivity(i);
}
elseif(item.getItemId()==98)
{
AlertDialog.Builderbuilder=newBuilder(context);
LayoutInflaterinf=getLayoutInflater();
searchView=inf.inflate(R.layout.search,(ViewGroup)findViewById(R.id.searchlayout));
builder.setView(searchView);
builder.setTitle("查询用户");
builder.setPositiveButton("查询",newOnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
unet_search=(EditText)searchView.findViewById(R.id.unetsearch);
Stringun=unet_search.getText().toString();
Stringua=unet_search.getText().toString();
Stringuq=unet_search.getText().toString();
Stringus=unet_search.getText().toString();
Stringsql="select*fromusersswhereunamelike'%"+un+"%'oruagelike'%"+ua+"%'oruqlike'%"+uq+"%'oruslike'%"+us+"%'";
showList(sql);
}
});
builder.setNegativeButton("取消",null);
builder.create().show();
}
returnsuper.onMenuItemSelected(featureId,item);}
@Override
publicboole