美食分享软件项目报告_第1页
美食分享软件项目报告_第2页
美食分享软件项目报告_第3页
美食分享软件项目报告_第4页
美食分享软件项目报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件工程技术与设计总结报告题目:美食分享软件的设计与实现组名:BMW组长: 组内主要成员:姓名学号电话邮箱主要分工系统总体设计,协调各个组员的工作,Android端后台开发Android端数据库设计Android端交互页面设计Web端及后台开发Android端交互页面设计,撰写ppt一 完成情况概述1.1 系统主要的功能性能需求完成情况美食分享软件系统包括了一般用户、系统管理员两种用户,根据其不同的角色对系统有不同的需求。我们的美食分享系统把绝大部分的功能都实现了,详细见下面分析。而且在这基础上,还在Web端实现了所有功能(原计划仅仅打算在Android端实现本系统)。1 一般用户需求一般用户

2、可以通过安装在Android系统上的应用程序来访问美食分享软件。在手机端,用户可以注册或者登录系统,登录之后能够进行搜索美食,查看美食,收藏美食,上传美食等操作。这些功能已经全部实现了。2. 管理员需求当管理员登录美食分享系统时,可以对整个系统进行管理,包括添加美食种类,删除美食种类,更改每日推荐等等。这些功能都已经实现,而且直接登录数据库图形化管理工具Navicat,操作数据库更为方便。操作页面事例如图1.1所示:图1-1 操作页面示例性能方面,就下面数据精确度几个指标进行展开:我们的系统能够做到:用户在进行美食搜索时要保证查全率、查准率,所有符合条件的美食都能被找到,这达到了预期的目标。(

3、1) 时间特性1.打开一个新的链接的时间不能超过3秒。2.系统处理美食搜索操作响应时间不能超过10秒。3.我们的系统,打开一个新链接需要时间不到1秒,在毫秒的量级;4.进行美食搜索操作同样也不到1秒,当然,这与我们的数据库里能够搜索的内容偏少有关。(2) 适应性本软件系统应能在Android 2.2及其以上手机操作系统上良好运行,Web端应能使用IE6.0以上内核的浏览器,Chrome浏览器,FireFox浏览器进行访问,完全达到预期目标。(3) 安全性我们的系统具有一定程度的权限管理,逻辑分析以及检测数据完整性功能,各个功能模块需要相应的权限才能访问。例如:非注册用户(游客)只具备浏览美食,

4、搜索美食的权限,只有登录用户才可以对美食进行收藏、上传等操作。这一部分在Web端和Android端已经实现,但是还有一些本地验证等还需要进一步的完善。(4) 可靠性只要服务器不宕机(充当服务器的PC不关机),系统可以保证一直正常运行。1.2 系统主要设计技术我们在系统中主要运用的一些技术有:1. 使用jquery图片延迟加载插件jquery.lazyload实现图片延迟实现原理:把所有需要延时加载的图片改成如下的格式:<img lazy_src="图片路径" border="0"/>,然后在页面加载时,把所有使用了lazy

5、_src的图片都保存到数组里,然后在滚动时计算可视区域的top,然后把延时加载的图片中top小于当前可视区域(即图片出现在可视区域内)的图片的src的值用lazy_src的来替换(加载图片)。使用方法:把页面上需要延时加载的图片src改成为lazy_src,然后把上面的js放到body最后面,然后调用:lazyLoad.init();调用的方法可以使用firebug来查看一时图片是否是延时加载。特效优点:(1)加速wordpress站点的页面载入速度;(2)不唐突的图片渐显方式;(3)代码精简,便于操作维护。2. JAVA的动态代理 (1)代理模式 代理模式是常用的java

6、设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以分为两种。 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。(2)工厂模式实例化对象模式,是用工厂方法代替new操作的一种模

7、式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例 对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。3. Ajax异步判断本系统对一些主键是否重复的判断,采用Ajax异步方式进行,只要光标离开输入框就和数据库进行查找比对。整个过程是异步进行的不会影响下面的输入,比对完成后,如果有重

8、复,在对应的输入框后面用红字提示已经存在的信息。Ajax的验证代码流程如下。(1)创建Ajax引擎对象XMLHttpRequest。xmlHttp = new XMLHttpRequest();(2)调用open方法与Ajax引擎建立连接,并告诉Ajax引擎我们的请求方式为get,请求url及采用异步方式。xmlHttp.open("GET", url, true);(3)告诉Ajax引擎处理完后,如何把结果反馈给我们,我们通常指定一个方法句柄,那么Ajax就会调用我们指定的方法,从而就可以得到Ajax引擎返回的数据,这种方式一般称为回调机制。 xmlHttp.onread

9、ystatechange = function() ;(4)最后调用send方法,将设置信息发送到Ajax引擎让其处理。xmlHttp.send(null);1.3 系统开发管理过程我们组进行软件开发的过程中,使用了SVN进行代码版本管理。这是提交的部分记录。图1-2 SVN提交记录其中MSTXClient项目(客户端)的代码行数为3556行,MSTX项目(服务器端)的代码行数为4753行。二 系统设计与实现2.1 系统结构设计1. WEB端逻辑架构本系统开发采用三层架构:表示层,JSP/ Servlet主要负责相关的显示;业务逻辑层,主要实现业务规则;持久化层,主要包装持久化逻辑。三层架构是

10、在MVC模式的基础上抽取了一个持久化层。抽取持久化层,主要是为了持久层的改变不影响业务逻辑层,为了更加清楚的划分职责。采用抽象工厂方法,三层架构依赖于抽象,每一层都建立一个抽象,是自上而下的依赖。如:程序对JDBC的依赖就是依赖了他的抽象层,程序和JDBC是单向依赖,只调用JDBC,JDBC实现不会调用程序,特别容易扩展。三层架构模式时序图如图2.l所示。图2.1 三层架构模式时序图三层架构模式层与层的依赖关系如图2.2所示。表示层(JSP/Servlet)业务逻辑层(业务规则)持久化层(持久化逻辑,JDBC)图2.2 层与层的依赖关系2. WEB端物理架构(1) Web服务器一台,技术解决方

11、案apache-tomcat-7.0.57。(2) Database服务器一台,技术解决方案MySQL Server 5.1.73。3. WEB端总体框架如图2.3所示:图2.3 系统结构图JSP/ Servlet主要负责相关的显示,使用人员点击jsp页面内容,相关动作提交到Servlet业务处理端,调用业务逻辑方法,调用持久化业务逻辑和数据库打交道。然后返回jsp界面,渲染后在显示给用户。4.Android端的类架构图如下图2-4所示:图2.4Android类架构图2.2 系统主要功能接口设计 众所周知,接口是提供给其他模块或者系统使用的一种约定或者规范。因此接口必须要保证足够的稳

12、定性和易用性。这是设计接口的基本要求。在Android端,各个Activity模块之间的数据交互主要是利用Bundle类对数据进行封装,然后通过Intent机制在各个模块之间进行传输。Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION给Android,Android就会根据Inte

13、nt的请求内容,查询各组件注册时声明的IntentFilter,找到网页浏览器的Activity来浏览网页。 要在不同的activity之间传递数据,就要在intent中包含相应的内容,一般来说数据中最基本的应该包括:Ø Action:用来指明要实施的动作是什么,比如说ACTION_VIEW, ACTION_EDIT等。具体的可以查阅android SDK-> reference中的Aent类,里面的constants中定义了所有的action。Ø Data: 要事实的具体的数据,一般由一个Uri变量来表示。Ø

14、Category:一个字符串,包含了关于处理该intent的组件的种类的信息。一个intent对象可以有任意个category。Ø Type:显式指定Intent的数据类型(MIME)(多用途互联网邮件扩展,Multipurpose Internet Mail Extensions)。1 登录模块(1)请求消息接口含义:客户端通过socket请求提交用户信息进行验证接口协议:TCP/IP协议命令字:dout.writeUTF参数描述约束uid系统给用户分配的id必须是注册成功的idpwd密码必须是对应的密码(2)接收消息接口含义:客户端接收来自服务器端发来的消息接口协议:TCP/IP

15、协议命令字:din.writeUTF参数描述约束uid系统给用户分配的id必须是注册成功的idpwd密码必须是对应的密码这部分的核心代码实现如下:2 注册模块(1) 请求消息接口含义:客户端通过socket请求提交用户信息进行注册接口协议:TCP/IP协议命令字:dout.writeUTF参数描述约束u_name用户名不能为空u_pwd1密码两次密码输入一致u_qqQQ数字u_Email邮箱地址不能为空u_dis个人描述无(2) 接收消息接口含义:客户端接收来自服务器端发来的消息接口协议:TCP/IP协议命令字:din.writeUTF参数描述约束uid系统给用户分配的id必须是注册成功的id

16、u_name用户名提交的用户名这部分的核心代码实现如下:3 拍照模块这一部分调用了手机上的相机api,同时将得到的照片提交到上传模块中,与其他内容一起提交到服务器中。拍照的API函数:myCamera.takePicture调用的过程:返回数据:接口含义:拍照模块向上传模块发送图片数据接口协议:TCP/IP协议命令字:onPictureTaken参数描述约束data图片二进制数据无主要实现代码:4 地图模块这一部分调用了Google地图的API,同时将得到的照片提交到上传模块中,与其他内容一起提交到服务器中。调用的Google地图API包括以下几个方面:返回数据:接口含义:地图模块向上传模块发

17、送图片数据接口协议:TCP/IP协议命令字:setResult参数描述约束RESULT_OK标识符无lat经度浮点数lon纬度浮点数主要实现代码:其他模块的接口设计与上述几个模块的接口设计类似,在这不再赘述。2.3 系统的设计模式应用1 MVC设计模式MVC全名是Model View Controller,是模型(model)视图(view)控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面 显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于 映射传统的输入、处理和输出

18、功能在一个逻辑的图形化用户界面的结构中。MVC结构如图2-5所示:图2-5 MVC结构图2 抽象工厂模式下面是系统封装的抽象工厂描述性说明(1) 创建抽象工厂类public class BeanFactory(2) 保存相关对象保存Service相关对象private Map serviceMap = new HashMap();保存Dao相关对象private Map daoMap = new HashMap();(3) 返回相关对象实例return serviceMap.get(c.getName();return daoMap.get(c.getName();(4) 将创建好多的对象放到

19、Map中serviceMap.put(c.getName(), service); daoMap.put(c.getName(), dao);(5) 返回系列产品return service; return dao;抽象工厂模式示意图如图2-6所示。3 Filter统一控制本系统采用Filter技术面向切面编程,实现了统一处理字符集;简单的webCache,统一控制缓存;只有经过登录页面登陆成功才能进入其他页面。体现了一个责任链模式,提供了一种声明式服务,具有可插拔的能力。采用Filter技术对Request和Response请求进行了拦截,这对系统后期的完善,权限的分配,病毒的拦截有至关重要

20、的作用。采用Filter技术主要是调用下面的方法public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) /完成相关的控制语句chain.doFilter(request, response);通过本系统中的用户维护说明Filter的基本原理如图2-7所示。图2-7 Filter统一控制流程图2.4 系统的AOP 设计应用面向方面编程(Aspect Oriented Programming,简称AOP)是一种声明式编程(Declarative Programming)。声明式

21、编程是和命令式编程(Imperative Programming)相对的概念。我们平时使用的编程语言,比如C+、Java、Ruby、Python等,都属命令式编程。命令式编程的意思是, 程序员需要一步步写清楚程序需要如何做什么(How to do What)。声明式编程的意思是,程序员不需要一步步告诉程序如何做,只需要告诉程序在哪些地方做什么(Where to do What)。比起命令式编程来,声明式编程是在一个更高的层次上编程。声明式编程语言是更高级的语言。声明式编程通常处理一些总结性、总览性的工作,不适 合做顺序相关的细节相关的底层工作。本系统中能用到AOP的地方:1.统一字符编码处理2

22、.打印出所有业务类的工作流程日志3.所有关键业务方法都加上事务管理功能2.5 系统的非功能设计(如性能、安全性等)这一部分已经在第一节阐述,这里不再赘述。2.6 系统的数据库设计本系统中的信息表主要有10张表:头像表、用户信息表、美食种类表、美食信息表、每日推荐表、我的收藏表、广告表、广告图片表和最大编号表。他们之间的关系可以用图2-8来表示。图 2-8 数据库设计图部分数据库建表语句如下:create database mstx;use mstx;CREATE TABLE mstx_user(/*用户信息表*/uidintNOT NULL,u_namechar(50)NOT NULL,u_q

23、qvarchar(15),u_pwdvarchar(50),u_Emailvarchar(50),u_headint,u_adminboolean NOT NULL,u_moodvarchar(50),u_integralint,u_hobbyvarchar(50),u_levelint,u_numberint,PRIMARY KEY(uid),FOREIGN KEY(u_head) REFERENCES mstx_head(tid);FOREIGN KEY(gid) REFERENCES mstx_ads(gid);CREATE TABLE mstx_info(/*美食信息表*/mid in

24、t NOT NULL,info_titlechar(50)NOT NULL,info_distext,info_lonfloat(17,14),info_latfloat(17,14),info_sortint,info_pricedouble,info_timeTIMESTAMP,uidint,hotel_namechar(50),PRIMARY KEY(mid),FOREIGN KEY(uid) REFERENCES mstx_user(uid),FOREIGN KEY(info_sort) REFERENCES mstx_sort(sid);其他表格设计类似,不再赘述。2.7 用户界面设

25、计我们采用了线性布局,线性布局时最简单布局之一,提供了控件水平或者垂直排列的模型。使用此布局时可以通过设置控件的weight参数控制各个控件在容器中的相对大小。界面主要分为八个部分:包括登录、注册、搜索、拍照界面等等。初步设计的WEB端界面如下:1. 启动配置好的Tomcat,运行该系统,首先进入该系统主页,如图2-7所示,用户可以在主页点击按钮或者链接进入相应界面:图2-7 首页2. 在主页可以点击”注册”按钮注册用户,然后通过”登陆”按钮登陆该系统,登陆界面如图2-8所示:图2-8 注册界面3.登陆成功后,会自动跳转到系统主页,在主页点击”我的收藏”会进入”我的收藏”,收藏用户美食,如图2

26、-9所示,在收藏界面可以通过删除链接将相应美食从收藏中删除。图2-9 我的收藏4. 单击”美食搜索”链接便会进入搜索界面,效果如图2-10所示,在搜索界面可以根据美食种类及价格进行美食搜索,而且可以对搜索到的美食进行收藏。5.图2-10 搜索界面5.单击”上传美食”,按钮进入上传美食界面,在该界面中可以上传美食信息,上传后的美食便会存入数据库,其他用户便可搜索到美食,在上传美食界面中应用了Baidu地图技术,显示经纬度,如图2-11所示:图2-11 上传美食6. 点击右上侧”美食网欢迎您”链接,进入个人资料修改页面,可对用户信息进行修改,如图2-12所示:图2-12 个人资料界面7.注销当前登

27、陆的用户,使用管理员账号登陆,在网页右侧上出现”管理网站”,通过该链接,进入网站管理页面,如图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 "Eclipse Classic"

28、 version is recommended. Otherwise, a Java or RCP version of Eclipse is recommended.1.下载eclipse只需登录到http://downlands/即可下载最新版本的eclipse安装程序。2.将下载好的eclipse解压到D:eclipse for android。3.双击D:eclipse for android目录下的eclipse.exe运行eclipse即可2。2.8.2 下载并安装jdk1.首先登录到SUN官方网站2.然后双击刚下载的JDK安装程序jdk-7u21-w

29、indows-i586,根据提示将JDK安装到默认目录。3.右键单击我的电脑,依次选择属性/高级/环境变量,在系统变量中新建一个名为JAVA_HOME,值为“C:Program FilesJavajdk1.7.0_21”的环境变量。再打开Path环境变量,在最后加上“C:Program FilesJavajdk1.7.0_21bin;”,单击“确定”按钮即可。2.8.3开发环境简介JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java诞生以来,JDK已经成为最广泛的Java SDK。JDK是整个Java的核心内容,包括了Java运行环境、Java工具和Java基础类库三部分。从Sun的JDK1.5开始,提供了一些非常使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论