• 5.75 MB
  • 25页

美食分享软件项目报告.doc

  • 25页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《软件工程技术与设计》总结报告题目:美食分享软件的设计与实现组名:BMW组长:组主要成员:学号主要分工系统总体设计,协调各个组员的工作,Android端后台开发Android端数据库设计Android端交互页面设计Web端及后台开发Android端交互页面设计,撰写ppt 一完成情况概述1.1系统主要的功能性能需求完成情况美食分享软件系统包括了一般用户、系统管理员两种用户,根据其不同的角色对系统有不同的需求。我们的美食分享系统把绝大部分的功能都实现了,详细见下面分析。而且在这基础上,还在Web端实现了所有功能(原计划仅仅打算在Android端实现本系统)。1.一般用户需求一般用户可以通过安装在Android系统上的应用程序来访问美食分享软件。在手机端,用户可以注册或者登录系统,登录之后能够进行搜索美食,查看美食,收藏美食,上传美食等操作。这些功能已经全部实现了。2.管理员需求当管理员登录美食分享系统时,可以对整个系统进行管理,包括添加美食种类,删除美食种类,更改每日推荐等等。这些功能都已经实现,而且直接登录数据库图形化管理工具Navicat,操作数据库更为方便。操作页面事例如图1.1所示:图1-1操作页面示例 性能方面,就下面数据精确度几个指标进行展开:我们的系统能够做到:用户在进行美食搜索时要保证查全率、查准率,所有符合条件的美食都能被找到,这达到了预期的目标。(1)时间特性1.打开一个新的的时间不能超过3秒。2.系统处理美食搜索操作响应时间不能超过10秒。3.我们的系统,打开一个新需要时间不到1秒,在毫秒的量级;4.进行美食搜索操作同样也不到1秒,当然,这与我们的数据库里能够搜索的容偏少有关。(2)适应性本软件系统应能在Android2.2及其以上手机操作系统上良好运行,Web端应能使用IE6.0以上核的浏览器,Chrome浏览器,FireFox浏览器进行访问,完全达到预期目标。(3)安全性我们的系统具有一定程度的权限管理,逻辑分析以及检测数据完整性功能,各个功能模块需要相应的权限才能访问。例如:非注册用户(游客)只具备浏览美食,搜索美食的权限,只有登录用户才可以对美食进行收藏、上传等操作。这一部分在Web端和Android端已经实现,但是还有一些本地验证等还需要进一步的完善。(4)可靠性只要服务器不宕机(充当服务器的PC不关机),系统可以保证一直正常运行。1.2系统主要设计技术我们在系统中主要运用的一些技术有:1.使用jquery图片延迟加载插件jquery.lazyload实现图片延迟实现原理:把所有需要延时加载的图片改成如下的格式:,然后在页面加载时,把所有使用了lazy_src的图片都保存到数组里,然后在滚动时计算可视区域的top,然后把延时加载的图片中top小于当前可视区域(即图片出现在可视区域)的图片的src的值用lazy_src的来替换(加载图片)。使用方法:把页面上需要延时加载的图片src改成为lazy_src,然后把上面的js放到body最后面,然后调用:lazyLoad.init();调用的方法可以使用firebug来查看一时图片是否是延时加载。特效优点:(1)加速wordpress站点的页面载入速度;(2)不唐突的图片渐显方式;(3)代码精简,便于操作维护。 1.JAVA的动态代理 (1)代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种。 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。(2)工厂模式实例化对象模式,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例 对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。2.Ajax异步判断本系统对一些主键是否重复的判断,采用Ajax异步方式进行,只要光标离开输入框就和数据库进行查找比对。整个过程是异步进行的不会影响下面的输入,比对完成后,如果有重复,在对应的输入框后面用红字提示已经存在的信息。Ajax的验证代码流程如下。(1)创建Ajax引擎对象XMLHttpRequest。xmlHttp=newXMLHttpRequest();(2)调用open方法与Ajax引擎建立连接,并告诉Ajax引擎我们的请求方式为get,请求url及采用异步方式。xmlHttp.open("GET",url,true);(3)告诉Ajax引擎处理完后,如何把结果反馈给我们,我们通常指定一个方法句柄,那么Ajax就会调用我们指定的方法,从而就可以得到Ajax引擎返回的数据,这种方式一般称为回调机制。xmlHttp.onreadystatechange=function(){};(4)最后调用send方法,将设置信息发送到Ajax引擎让其处理。xmlHttp.send(null);1.3系统开发管理过程我们组进行软件开发的过程中,使用了SVN进行代码版本管理。这是提交的部分记录。 图1-2SVN提交记录其中MSTXClient项目(客户端)的代码行数为3556行,MSTX项目(服务器端)的代码行数为4753行。二系统设计与实现2.1系统结构设计1.WEB端逻辑架构本系统开发采用三层架构:表示层,JSP/Servlet主要负责相关的显示;业务逻辑层,主要实现业务规则;持久化层,主要包装持久化逻辑。三层架构是在MVC模式的基础上抽取了一个持久化层。抽取持久化层,主要是为了持久层的改变不影响业务逻辑层,为了更加清楚的划分职责。采用抽象工厂方法,三层架构依赖于抽象,每一层都建立一个抽象,是自上而下的依赖。如:程序对JDBC的依赖就是依赖了他的抽象层,程序和JDBC是单向依赖,只调用JDBC,JDBC实现不会调用程序,特别容易扩展。三层架构模式时序图如图2.l所示。 图2.1三层架构模式时序图 三层架构模式层与层的依赖关系如图2.2所示。表示层(JSP/Servlet)业务逻辑层(业务规则)持久化层(持久化逻辑,JDBC)图2.2层与层的依赖关系1.WEB端物理架构(1)Web服务器一台,技术解决方案apache-tomcat-7.0.57。(2)Database服务器一台,技术解决方案MySQLServer5.1.73。2.WEB端总体框架如图2.3所示:图2.3系统结构图JSP/Servlet主要负责相关的显示,使用人员点击jsp页面容,相关动作提交到Servlet业务处理端,调用业务逻辑方法,调用持久化业务逻辑和数据库打交道。然后返回jsp界面,渲染后在显示给用户。4.Android端的类架构图如下图2-4所示: 图2.4Android类架构图2.2系统主要功能接口设计 众所周知,接口是提供给其他模块或者系统使用的一种约定或者规。因此接口必须要保证足够的稳定性和易用性。这是设计接口的基本要求。在Android端,各个Activity模块之间的数据交互主要是利用Bundle类对数据进行封装,然后通过Intent机制在各个模块之间进行传输。Intent是一种运行时绑定(run-timebinding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的容选择适当的组件来完成请求。比如,有一个Activity希望打开网页浏览器查看某一网页的容,那么这个Activity只需要发出WEB_SEARCH_ACTION给Android,Android就会根据Intent的请求容,查询各组件注册时声明的IntentFilter,找到网页浏览器的Activity来浏览网页。 要在不同的activity之间传递数据,就要在intent中包含相应的容,一般来说数据中最基本的应该包括:ØAction:用来指明要实施的动作是什么,比如说ACTION_VIEW,ACTION_EDIT等。具体的可以查阅androidSDK->reference中的Android.content.intent类,里面的constants中定义了所有的action。ØData:要事实的具体的数据,一般由一个Uri变量来表示。ØCategory:一个字符串,包含了关于处理该intent的组件的种类的信息。一个intent对象可以有任意个category。ØType:显式指定Intent的数据类型(MIME)(多用途互联网扩展,MultipurposeInternetMailExtensions)。1登录模块 (1)请求消息接口含义:客户端通过socket请求提交用户信息进行验证接口协议:TCP/IP协议命令字:dout.writeUTF参数描述约束uid系统给用户分配的id必须是注册成功的idpwd密码必须是对应的密码(2)接收消息接口含义:客户端接收来自服务器端发来的消息接口协议:TCP/IP协议命令字:din.writeUTF参数描述约束uid系统给用户分配的id必须是注册成功的idpwd密码必须是对应的密码这部分的核心代码实现如下:2注册模块(1)请求消息接口含义:客户端通过socket请求提交用户信息进行注册接口协议:TCP/IP协议命令字:dout.writeUTF参数描述约束u_name用户名不能为空u_pwd1密码两次密码输入一致 u_qqQQ数字u_Email地址不能为空u_dis个人描述无(1)接收消息接口含义:客户端接收来自服务器端发来的消息接口协议:TCP/IP协议命令字:din.writeUTF参数描述约束uid系统给用户分配的id必须是注册成功的idu_name用户名提交的用户名这部分的核心代码实现如下:3拍照模块这一部分调用了手机上的相机api,同时将得到的照片提交到上传模块中,与其他容一起提交到服务器中。拍照的API函数:myCamera.takePicture调用的过程: 返回数据:接口含义:拍照模块向上传模块发送图片数据接口协议:TCP/IP协议命令字:onPictureTaken参数描述约束data图片二进制数据无主要实现代码:4地图模块这一部分调用了Google地图的API,同时将得到的照片提交到上传模块中,与其他容一起提交到服务器中。调用的Google地图API包括以下几个方面:返回数据:接口含义:地图模块向上传模块发送图片数据接口协议:TCP/IP协议命令字:setResult 参数描述约束RESULT_OK标识符无lat经度浮点数lon纬度浮点数主要实现代码:其他模块的接口设计与上述几个模块的接口设计类似,在这不再赘述。2.3系统的设计模式应用1MVC设计模式MVC全名是ModelViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。MVC结构如图2-5所示:图2-5MVC结构图2抽象工厂模式 下面是系统封装的抽象工厂描述性说明(1)创建抽象工厂类publicclassBeanFactory(2)保存相关对象保存Service相关对象privateMapMap=newHashMap();保存Dao相关对象privateMapdaoMap=newHashMap();(3)返回相关对象实例returnMap.get(c.getName());returndaoMap.get(c.getName());(4)将创建好多的对象放到Map中serviceMap.put(c.getName(),);daoMap.put(c.getName(),dao);(5)返回系列产品return;returndao;抽象工厂模式示意图如图2-6所示。3Filter统一控制本系统采用Filter技术面向切面编程,实现了统一处理字符集;简单的webCache,统一控制缓存;只有经过登录页面登陆成功才能进入其他页面。体现了一个责任链模式,提供了一种声明式服务,具有可插拔的能力。采用Filter技术对Request和Response请求进行了拦截,这对系统后期的完善,权限的分配,病毒的拦截有至关重要的作用。 采用Filter技术主要是调用下面的方法publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain){//完成相关的控制语句chain.doFilter(request,response);}通过本系统中的用户维护说明Filter的基本原理如图2-7所示。图2-7Filter统一控制流程图2.4系统的AOP设计应用面向方面编程(AspectOrientedProgramming,简称AOP)是一种声明式编程(DeclarativeProgramming)。声明式编程是和命令式编程(ImperativeProgramming)相对的概念。我们平时使用的编程语言,比如C++、Java、Ruby、Python等,都属命令式编程。命令式编程的意思是,程序员需要一步步写清楚程序需要如何做什么(HowtodoWhat)。声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么(WheretodoWhat)。比起命令式编程来,声明式编程是在一个更高的层次上编程。声明式编程语言是更高级的语言。声明式编程通常处理一些总结性、总览性的工作,不适合做顺序相关的细节相关的底层工作。 本系统中能用到AOP的地方:1.统一字符编码处理2.打印出所有业务类的工作流程日志3.所有关键业务方法都加上事务管理功能2.5系统的非功能设计(如性能、安全性等)这一部分已经在第一节阐述,这里不再赘述。2.6系统的数据库设计本系统中的信息表主要有10表:头像表、用户信息表、美食种类表、美食信息表、每日推荐表、我的收藏表、广告表、广告图片表和最大编号表。他们之间的关系可以用图2-8来表示。图2-8数据库设计图部分数据库建表语句如下:createdatabasemstx;usemstx;CREATETABLEmstx_user(/*用户信息表*/uidintNOTNULL,u_namechar(50)NOTNULL, u_qqvarchar(15),u_pwdvarchar(50),u_Emailvarchar(50),u_headint,u_adminbooleanNOTNULL,u_moodvarchar(50),u_integralint,u_hobbyvarchar(50),u_levelint,u_numberint,PRIMARYKEY(uid),FOREIGNKEY(u_head)REFERENCESmstx_head(tid));FOREIGNKEY(gid)REFERENCESmstx_ads(gid));CREATETABLEmstx_info(/*美食信息表*/midintNOTNULL,info_titlechar(50)NOTNULL,info_distext,info_lonfloat(17,14),info_latfloat(17,14),info_sortint,info_pricedouble,info_timeTIMESTAMP,uidint,hotel_namechar(50),PRIMARYKEY(mid),FOREIGNKEY(uid)REFERENCESmstx_user(uid),FOREIGNKEY(info_sort)REFERENCESmstx_sort(sid));其他表格设计类似,不再赘述。2.7用户界面设计我们采用了线性布局,线性布局时最简单布局之一,提供了控件水平或者垂直排列的模型。使用此布局时可以通过设置控件的weight参数控制各个控件在容器中的相对大小。界面主要分为八个部分:包括登录、注册、搜索、拍照界面等等。初步设计的WEB端界面如下: 1.启动配置好的Tomcat,运行该系统,首先进入该系统主页,如图2-7所示,用户可以在主页点击按钮或者进入相应界面:图2-7首页2.在主页可以点击”注册”按钮注册用户,然后通过”登陆”按钮登陆该系统,登陆界面如图2-8所示:图2-8注册界面3.登陆成功后,会自动跳转到系统主页,在主页点击”我的收藏” 会进入”我的收藏”,收藏用户美食,如图2-9所示,在收藏界面可以通过删除将相应美食从收藏中删除。图2-9我的收藏4.单击”美食搜索”便会进入搜索界面,效果如图2-10所示,在搜索界面可以根据美食种类及价格进行美食搜索,而且可以对搜索到的美食进行收藏。5.图2-10搜索界面5.单击”上传美食” ,按钮进入上传美食界面,在该界面中可以上传美食信息,上传后的美食便会存入数据库,其他用户便可搜索到美食,在上传美食界面中应用了Baidu地图技术,显示经纬度,如图2-11所示:图2-11上传美食6.点击右上侧”美食网欢迎您”,进入个人资料修改页面,可对用户信息进行修改,如图2-12所示:图2-12个人资料界面7.注销当前登陆的用户,使用管理员登陆,在网页右侧上出现”管理” ,通过该,进入管理页面,如图2-13所示,在页面可以执行添加删除每日推荐美食、上传广告图片、添加种类等。图2-13美食管理Android端的主要界面如下:图2-14美食上传图2-15美食搜索 图2-16美食信息图2-17美食收藏图2-18地图显示图2-19美食推荐 图2-20收藏提示图2-21搜索结果图2-22删除提示图2-23用户登录 图2-24用户注册2.8开发工具与环境2.8.1下载并安装eclipseEclipse版本有要求:The"EclipseClassic"versionisrecommended.Otherwise,aJavaorRCPversionofEclipseisrecommended.1.下载eclipse只需登录到http://.eclipse.org/downlands/即可下载最新版本的eclipse安装程序。2.将下载好的eclipse解压到D:eclipseforandroid。3.双击D:eclipseforandroid目录下的eclipse.exe运行eclipse即可[2]。2.8.2下载并安装jdk1.首先登录到SUN官方java.sun./javase/downloads下载最新的JDK安装程序。2.然后双击刚下载的JDK安装程序jdk-7u21-windows-i586,根据提示将JDK安装到默认目录。3.右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:ProgramFilesJavajdk1.7.0_21”的环境变量。再打开Path环境变量,在最后加上“C:ProgramFilesJavajdk1.7.0_21bin;”,单击“确定”按钮即可。 2.8.3开发环境简介JDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发员的产品。自从Java诞生以来,JDK已经成为最广泛的JavaSDK。JDK是整个Java的核心容,包括了Java运行环境、Java工具和Java基础类库三部分。从Sun的JDK1.5开始,提供了一些非常使用的功能,其版本也不断更新,运行效率得到了非常大的提高。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组建构建开发环境。Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。AndroidSDK即软件开发工具包(softwaredevelopmentkit)。被软件开发工程师用于为特定的软件包、软件架构、硬件平台、操作系统等建立应用软件工具的集合。因此AndroidSDK是Android专属的开发工具包。其授权协议为Apache,开发语言为Java、需要Android操作系统的支持。三主要技术亮点这一部分见上面的技术分析,在此不再赘述。四系统局限性分析1.Android端缺少个人资料的管理界面。我们的系统仅仅在Web端添加了个人资料的管理界面,在Android端并没有添加这一功能,有待后期改善。2.Android端原来设想的增加社交功能模块,但由于增加之后通信方面,数据库设计和管理方面难度都大大增加,在短短几周时间无法解决,因此这个预期的功能没有添加。3.整个系统在注册,上传等地方没有进行身份验证,数据完整性验证,因此整个系统的健壮性也还有需要改进的地方。4.在中国大陆Google地图无法正常使用,导致地图功能,导航功能只能在某些特殊条件下才能实现。5.Android端的页面设计没有做到现在主流的扁平化,看起来依然比较“ 传统”。6.由于我们在拍照获取图片后,没有对图片进行压缩,因此获取的图片实际上无法在相应页面进行展示,这一部分可以通过压缩图片技术进行解决。五开发过程总结1.我们团队在开发过程中,虽然经常联系,但是并没有很好地进行技术交流,特别是前期搭建Android开发环境,配置Apache服务器阶段,软件版本的不一致,出现各种不兼容的情况,导致了开发进度的延缓。2.模块化的思想很重要,每个人完成各部分容,然后向其他人提供自己的接口,能够很大程度上提高效率,这也是我们开发过程所遵循的原则。3.在进度计划上,由于其他课程作业较多,我们安排得稍显仓促,实际的开发工作在短短一个月时间完成(原计划是一个半月),这也导致了我们系统部分功能没有实现,引以为鉴。'