目 录
(1)后台用户:管理后台页面以及对相关后台包括用户、评论、反馈、分类、图片等管理以及对菜品的信息的修改和维护
(2)前台用户:实现注册登录以及相关信息完善,对自身信息的修改,对菜品收藏以及评价,对应用给出反馈意见。
1 引言
1.1本课题研究背景
在电子商务高速迅猛发展的今天,各个行业都搭上网络的快车开展网络营销。餐饮业作为传统行业中最为重要的分支,在网络营销方面餐饮企业首先需要搭建网络营销平台,并通过网络平台展示自身菜品特色,能够让消费者在众多的菜品中快速定位感兴趣的菜品,提高顾客的认知度、粘合性和体验性。
特色菜品通常都为餐饮企业的特色菜、招牌菜,菜品好吃,光靠口碑传播速度相比网络传播速度要慢得多,所以本文以特色菜品推荐系统为研究对象,针对餐饮企业特色菜不断出新和与其他菜品相对个性化等特点进行设计开发。
1.2国内外发展现状
- 国外研究现状
ShaneCond(2010)设计了一套将餐饮点餐与餐饮收款相融合的餐饮支付系统,通过该系统用户可以完成网上订餐下单,订单付款等功能,能够将餐饮企业收款机像PC机一样实现订餐支付即时到账,取消了餐饮企业收取现金的流程,提高餐饮企业工作效率。
JohnLim(2012)所开发的电子点餐系统,通过PDA完成菜品的预览,该系统解决餐饮企业因经常更换菜谱而需要重新印刷菜单的环节,降低了餐饮企业的费用支出。同时,该系统具有人性化推荐菜品功能,它能够根据用户年龄、来自地区、饮食爱好等具有针对性的显示不同菜品,让用户更加便捷的进行点餐,增加了用户与餐馆之间的粘合度。
HossamM(2014)把菜品推荐系统与用户活动区域相结合,针对用户所在地区的餐馆所推荐的特色菜品在就餐时间进行菜品推荐,由此用户可以方便的在所在位置找到最想吃的美食,同时该系统还具有GPS地理信息定位功能,无论用户出差在何地,均能在就餐时间获得系统所推荐的最佳美食。
- 国内研究现状
孙文心(2013)将我国传统美食进行了多角度、多方面的划分,形成社会化美食食谱,并将该食谱融入到菜品推荐系统设计之中,便于用户从不同角度选择美食。
肖蕾(2013)基于HTML5建设多终端点餐平台,该平台采用响应式布局进行设计,能够实现在台式电脑、笔记本、PAD和手机之间点餐系统显示自动适应屏幕像素,为用户提供美观点餐应用界面。
王玉雯(2013)针对于我国中小餐馆服务特色,设计出一套智能服务系统,该系统包括智能点餐、智能提醒用户用餐、自动推荐特价、特色菜品,自动结算等功能,为中小餐馆更好的、更快的服务大众提供了非常好的系统服务平台。
陈婷婷(2014)在融合上下文和项目属性的美食商店信息推荐算法研究与实现中针对美食商店的商品信息进行智能推荐,当用户选择某一美食时,其所相匹配的最佳搭配自动显示,其中融入了饮食健康等知识,为用户通过最优餐饮规划。
王聪等(2015)设计开发融合情境的移动美食推荐系统,改系统基于Android平台为用户提供针对于不同时令的情景美食推荐,在不同节日中,以节日主题为特色的美食搭配大大提高的用户对美食的渴望诉求,让餐饮企业进入主题时代。
周建亮(2015)对基于无线终端设备点餐系统的设计与实现方面将传统餐馆点餐流程以APP方式引入到客户手机端,实现用户与餐饮企业之间无缝衔接,提高用户用餐效率,增加餐饮企业销售收入。
- 发展趋势
餐饮信息化在国外发展已经相当成熟,而我国餐饮信息化正处于蓬勃发展阶段。在实现计算机技术与管理理念、营销手段相结合的内容方面,结合较为成熟的网络开发技术,充分借鉴和利用已有成功开发经验,发挥我们后发优势,加速餐饮企业信息化建设的步伐,这是推动我国传统中华餐饮业与国际接轨,与时代同行的重要内容,势必也是未来信息产业与传统产业相结合的发展趋势。。
1.3论文研究意义
特色菜推荐系统如同传统餐馆菜单中的招牌菜一样,是将餐馆的优势菜品推荐给食客。所不同的是传统餐馆菜单的宣传效果具有一定的局限性,而特色菜推荐系统基于互联网,传播范围更加广泛。
此外,作为特色菜推荐系统,其具有的功能不仅仅局限于展示和宣传餐饮企业特色菜品,其还包括对顾客信息的消费记录、餐饮习惯、就餐兴趣、就餐时间等方面信息收集,对餐饮企业具有针对性的推荐特色菜品具有非常重要的现实意义。。
1.4本论文的组织结构
本文主要按照以下章节展开叙述的。
第一章:主要介绍了课题的研究背景、国内外发展现状、研究意义及主要研究的内容。
第二章:主要介绍了在开发过程中所应用到的相关技术的概念,原理及方法。
第三章:主要对系统进行了概述,主要对系统的功能进行了分析,系统应该包括哪些模块,分析本系统的亮点,对系统的需求进行了分析,采用UML建模的方式,更加图形化的对系统的需求进行分析。
第四章:主要是对系统的设计分析。包括系统的总体架构、系统的流程设计、业务逻辑层设计、数据库层设计。
第五章:主要是对系统的各个功能模块的实现和数据库的实现等。在实现过程中,应用了相关的web技术,包括AJAX技术、android技术等等,并对其的操作过程作了详细的介绍。
第六章:主要是对系统进行性能测试和功能测试。
第七章:对自己所作的工作进行总结,同时对系统的做了展望。
2 相关技术介绍
本系统是基于web技术和android技术的基于Android的菜谱推荐系统,本系统所采用web技术主要有以下几个方面。HTML中的CSS,Web脚本中的JavaScript、AJAX、JQuery,Serv脚本采用SQL,XML中采用XML文件,后台数据库采用mysql数据库存储数据,并结合JSP技术进行开发。UML是统一建模语言的简写,它是一个支持模型化和软件系统开发的图形化语言,已经成为了一种标准的可视化的建模语言。
2.1 JAVA技术
2.1.1 JDBC简介
JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。
有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。
Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。
2.1.2 servlet简介
servlet是在服务器上运行的小程序。这个词是在Java applet的环境中创造的,Java applet是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。
服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口(CGI(Common Gateway Interface))应用程序完成的。然而,在服务器上运行Java,这种程序可使用Java编程语言实现。在通信量大的服务器上,Javaservlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。
最早支持Servlet技术的是JavaSoft的Java Web Server。此后,一些其它的基于Java的WebServer开始支持标准的ServletAPI。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程为:
客户端发送请求至服务器端;
服务器将请求信息发送至Servlet
Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求
服务器将响应返回给客户端
Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java ServletAPI的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于Servlet运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为FacelessObject。
一个servlet就是Java编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器的应用程序。
2.2开发环境及平台
2.2.1 Eclipse简介
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(Java Development Tools,JDT)。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。
- Eclipse的主要构成
Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——Eclipse Platform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。Eclipse Platform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。
Eclipse SDK(软件开发者包)是Eclipse Platform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到Eclipse Platform中的工具。Eclipse SDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以 GPL发布,第三方组件有各自自身的许可协议。
- Eclipse Android环境搭建
- JDK安装
- 我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:
JAVA_HOME值为:安装JDK的目录;
CLASSPATH值为:D:\AndroidDeveloper\android-sdk-windows\tools;
- Path:在开始追加%JAVA_HOME%\bin;
- NOTE:前面四步设置环境变量对搭建Android开发环境不是必须的,可以跳过。
安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入Java –version查看JDK的版本信息。
- Eclipse安装
在http://www.eclipse.org/downloads/,下载Eclipse IDE for Java Developers(92M)的win 32bit版,Android SDK安装在Android Developers下载android-sdk_r05
-windows.zip,下载完成后解压到任意路径。
- 运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的“Force https://...” 这项,再点击Available Packages。
- 选择希望安装的SDK及其文档或者其它包,点击Installation Selected、Accept All、Install Accepted,开始下载安装所选包。
在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:\AndroidDevelop\android-sdk-windows\tools)。
2.2.2 MyEclipse简介
MyEclipse,是一个十分优秀的用于开发Java,J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。
在对于毕业课题的设计中,Android终端设备客户端是采用Eclipse开发工具开发的;而Web版本是采用MyEclipse开发工具开发的。
2.2.3 Tomcat简介
Tomcat很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。
Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行Tomcat 时,它实际上作为一个与Apache独立的进程单独运行的。
当配置正确时,Apache为HTML页面服务,而Tomcat实际上运行JSP 页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。
2.2.4 应用平台Android简介
Android是基于Linux内核的操作系统,早期由Google开发,后由开放手机联盟开发。它采用了软件堆的架构,主要分为三部分。底层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。Android在未公开之前常被传闻为GPhone。
它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分:底层以Linux核心为基础,由c语言开发,只提供基本功能。中间层包括函数库Library和虚拟机Virtual Machine,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java编写。
- 开放性
在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
- 挣脱运营商的束缚
在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。
- 丰富的硬件选择
这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。
- 不受任何限制的开发商
Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻挠,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。
- 无缝结合的Google应用
如今叱咤互联网的Google已经走过10年历史。从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。
Android平台四大组件:
在Android系统中,为我们提供了四大基本组件,每个组件是一个视图,但是有些是可见的,有些是不可见的视图,像Activity,ContentProvider是可见的视图,Service和BroadcastReceiver是不可见的,它们只在系统的后台运行。下面分别介绍四大组件:
(1)Activity 简介
在Android系统中Activity提供可视化的用户界面,一个Android应用通常由多个Activity组成。多个Activity组成了Activity栈(Stack),当前活动的Activity处于栈顶。Activity有自己的生命周期,由Android系统来控制。
(2)Service 简介
顾名思义Service就是运行在后台的一种服务程序,一般很少和用户交互,因此 没有可视化界面定义一个Service类比较简单,只要继承Service类,实现其生命周期 中的方法就可以了。一个定义好的Service必须在AndroidManifest.xml配置文件 注册,通过<service>元素声明才能使用.Service有自己的生命周期,我们可以调 用 startService()启动一个Service或者bindService()方法来绑定一个存在的 Service 。
(3)Broadcast Receiver 简介
Broadcast Receiver 顾名思义广播接收器,它和事件处理机制类似,只不过事件处理机制是程序组件级别的(例如,某个按钮的单击事件),而广播事件处理机制是系统级别的。到目前为止我们可以使用Intent来启动一个程序组件,我们还可以通过使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息。我们可以在你的应用程序中实现Broadcast Receiver来监听和响应这些广播的Intent。
(4)ContentProvider简介
Content Provider 用来保存和检索数据,并且使应用程序之间相互访问数据成为可能。它是跨应用程序共享数据的唯一方法。
Android 为常用的数据类型(如:音视频、图片和联系方式等)提供了大量的Content Provider。它们被定义在Android.provider包下面。通过这样定义好的ContentProvider 我们可以方便的进行数据操作。当然我们必须拥有适当的权限。我们也可以自己来定ContentProvider共享我们的数据,方便用户的访问。
2.2.5 Android开发环境搭建
任何事物要运行,都要有它的环境,Android也有它的环境才能够运行,下面介绍Android的开发环境配置。
搭建开发环境需要的软件:
- 操作系统:window XP或linux
- 软件包:Android SDK(Software Development kit Java Development kit) 、ADT(Android Develoopment Tool)
- IDE环境:Eclipse IDE+ADT Eclipse3.3以上
- JDK:Java Runtime Environment虚拟机 、(JDK)Java Development kit
安装步骤如下:
第一步:安装Java虚拟机sun-java6-jdk版本。
第二步:安装Eclipse3.5工具,到官网Eclipse Downloads | The Eclipse Foundation,选择版本下载后进行安装。(如图1-2)
Eclipse工具的版本如图1-2所示:
图1-2 Eclipse工具的版本图
第三步:安装Android SDK:首先要下载SDK,可以在这个网址下载Http://developer.Android.com/sdk ,选择相应的系统进行安装。
sdk下载的地址图如图1-3所示:
图1-3 sdk下载的地址图
第四步:安装Android ADT插件。运行Eclipse,选择help->install new software 选择add,将会弹出一个【Add Site】对话框。
【Add Site】对话框如图1-4:
图1-4 【Add Site】对话框图
点击OK,选择要安装的软件,占next,然后选择接受协议,直到安装成功,重启Eclipse软件,设置Android SDK Home,Window->refrence。
设置Android SDK Home界面如图1-5所示:
图1-5 设置Android SDK Home界面图
在SDK location中输入SDK Tools路D:\Androidsoftware\Android-sdk-windows 点击OK,这样Android环境就已经搭建成功了。
3 系统需求分析
3.1系统概述
本设计是一个基于Android设备的菜谱推荐系统,能够用用户提供方便的菜谱推荐,从而提高了服务的质量,本文从系统需求、系统实际、代码实现几个方面介绍了整个软件的开发过程,这个系统采用JAVA、mysql数据库并利用MyEclipse、TOMCAT、Android SDK、ADT、AVD、DDMS等开发环境或者开发工具。
3.2系统功能分析
android菜谱程序是基于android手机的一款应用软件,为用户提供菜谱以及管理自己收藏的菜谱。同时,系统依据用户的浏览历史信息为用户推荐不同口味的菜肴.
pc端
1实现菜谱的后台录入与查看,包括菜谱的名称,菜系,菜品截图,原材料,制作步骤等。2后台实现管理员用户管理,包括管理员用户的登录以及增删改查。
3对用户评论的管理,包括用户评论的记录和备份。
4实现记录用户口味功能,记录用户的查看历史并分析。
Android端
1实现菜谱的查看功能,包括按菜系或口味等方式分类查看。
2实现用户的注册以及登录功能,记录用户的查看历史,并根据用户的口味进行推荐。
3实现对注册用户浏览菜谱的收藏功能,同时对用户推送菜谱。
4实现菜谱的评价功能。
3.3系统数据库需求分析
3.3.1系统综合需求分析
针对基于Android的菜谱推荐系统,经过调研和分析,总结出如下的需求信息。
(1)后台用户:管理后台页面以及对相关后台包括用户、评论、反馈、分类、图片等管理以及对菜品的信息的修改和维护
(2)前台用户:实现注册登录以及相关信息完善,对自身信息的修改,对菜品收藏以及评价,对应用给出反馈意见。
(3)菜品:包括名称、口味、制作过程以及用料等信息,由管理员用户进行推荐3.3.2系统数据流图分析
数据流图是结构化分析方法中使用的工具,主要以图形的方式描述数据在系统中的流动和处理过程,是一种功能模型,下面为系统的部分数据流图。
图3-1为基于Android的菜谱推荐系统0层数据流图
图3-1 系统0层数据流图
图3-2为基于Android的菜谱推荐系统的全局数据流图。
图3-2 系统1层数据流图
3.4 基于UML的系统建模分析
3.4.2系统顺序图
系统顺序图是系统需求分析的一部分,系统顺序图所展示的是在特定场景下系统参与者发起的事件、事件的顺序以及系统之间的交互情况。
图3-9为后台管理员的系统顺序图。
图3-9 管理员系统顺序图
其主要的工作运行流程:
(1)管理员首先在“登录界面”登录进入“后台主界面”
(2)管理员可以管理用户。
(3)管理员可以管理菜谱信息。
图3-10为前台会员的系统顺序图
图3-10 会员系统顺序图
其主要的工作运行流程:
(1)会员首先在“登录界面”登录系统,然后进入“查询界面”
(2)会员查询信息。
(3)会员进行收藏。
3.4.3系统部署图
图3-11系统部署图
简要说明。
(1)B/S客户端:需要使用web浏览器(IE6.0或以上版本)。
(2)服务器:使用Web Server =IIS 5.1+。
(3)数据库服务器:需使用SQL Server 2005。
4 系统设计
在系统开发过程中,开发者可以采用各种各样的设计模式开发系统,每个设计模式都有自己优缺点,只有采用合适的系统设计模式才能开发出满足需求的系统,为了使系统功能更加稳定安全,采用先进的分层设计模式可以优化系统,使系统的层次更加分明,可以降低层与层之间的依赖,方便替换原有的层代码,有助于团队开发,使各层之间的逻辑可以复用,已达到分散关注、松散耦合、逻辑复用、标准定义的目的。
4.1 系统架构和工作原理
4.1.1系统架构
本系统的架构设计采用的是工厂模式,表示层(UI)、业务逻辑层(BLL)、数据层(DAL)、接口层(IDAL)、工厂层(DALFactory)。
第一层 表示层(用户界面层):表示层包含了系统的界面和显示在界面上的功能的逻辑代码。表示层的作用主要是通过web服务器的HTTP协议把所要展示的页面传送给客户端,客户端接收页面并把它显示在web浏览器上,方便用户浏览。
第二层 业务逻辑层:业务逻辑层主要针对的是数据业务逻辑的处理,主要是通过工厂层来调用数据层的代码来完成相关的业务逻辑操作, 业务逻辑层调用工厂层得到程序集指定类的实例,完成数据层操作。
第三层 数据层:数据层主要的操作都是针对数据库的表的操作,主要完成对数据的增加、删除、修改、更新、查找等等,调用继承接口层定义的函数方法,从数据库中取到的数据保存在Model文件的字段中。
第四层 接口层:定义了一个接口函数方法,主要为数据层定义函数方法,使其他层可以调用此函数方法。
第五层 工厂层:定义了一些静态方法,给出具体方法中要实现的接口,返回程序集的指定类的实例,通过创建反射来确定加载哪一个数据库访问程序集的类,使得系统在不改变其他层的代码的前提下,通过修改配置文件中的参数访问数据层,返回一个完整的调用数据层的路径给业务逻辑层,。
图4-1为系统的架构图。
图4-1 系统架构图
4.1.2系统工作原理
本系统是基于web技术开发的系统,也是B/S(浏览器/服务器)模式的,首先,客户端运行浏览器,通过HTTP协议浏览器以超文本的形式向web服务器提出访问数据库请求,web服务器接收请求,然后在交给数据库服务器处理,数据库服务器经过验证相应的SQL语法,验证数据请求,最后将处理的结果返回给web服务器,web服务器再把转变成HTML的形式,显示在客服端的浏览器上。
Android部分,通过HTTP协议访问服务端,调用服务端服务,服务端接收到服务后,执行业务逻辑操作,将信息返回给android客户端。
4.2 系统功能模块设计
本系统分为以下几个模块。
图4-2 系统功能模块图
4.5数据库层设计
数据库的设计主要是指在特定环境下,根据用户的需求,构造一个最优化的数据库,数据库是整个系统开发中重要的组成部分,主要提供存储、维护、检索数据的功能,优化的数据库可以提高系统的效率和存储数据的效率。
数据库设计的主要步骤分为需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段。
需求分析阶段主要的任务是理解用户的需求,对数据进行分析和处理。
概念设计阶段主要的任务是设计一个E-R图。
逻辑设计阶段主要的任务是将E-R图转变为数据模型,进行表和字段的设计,以及建立视图等操作。
物理设计阶段主要的任务是建立存储结构、存取方法、索引,进行物理存储安排。
4.6用户界面层设计
用户界面层是一个可视化的界面,主要面向对象是用户,用户可以在界面上进行各种操作,例如,浏览页面、查询信息、订阅等等操作。
现在网站的客户端用户都是采用浏览器方式,后台开发人员主要进行的工作是前台界面和后台代码的独立编写。
图4-20为该系统的服务端主页面
图4-20主页面
Android需要是采用布局模式的方式实现,开发人员需要搭建布局模板。
5 系统主要模块的实现
5.1登录模块的实现
图5-1 用户登录界面
用户要想使用本系统,首先需要登入系统进行验证,用户打开登入界面,输入用户名和密码,点击登陆按钮,android会对登入信息进行接收。
代码如下:
userEditText.getText().toString()
pwdEditText.getText().toString()
接收成功,验证输入合法之后会调用服务端的接口。
代码如下:
String url = HttpUtil.BASE_URL
+ "QLoginServlet?userName="
+ URLEncoder.encode(
URLEncoder.encode(userEditText.getText().toString(), "UTF-8"), "UTF-8")+"&password="
+ URLEncoder.encode(
URLEncoder.encode(pwdEditText.getText().toString(), "UTF-8"), "UTF-8");
服务端接收到android端数据之后,会进行数据库的查询操作,返回结果。
//获取用户名密码
String userName = URLDecoder.decode(request.getParameter("userName"),"UTF-8");
String password = URLDecoder.decode(request.getParameter("password"),"UTF-8");
//查询数据库sql
String sql = "select * from users where email= '"+userName +"' and password='"+password+"' ";
//调用数据库累进行查询操作
DBUtil util = new DBUtil();
Connection conn = util.openConnection();
String result = "0";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
result=rs.getInt("id")+"";
5.2主界面的实现
图5-2 主界面
Android端代码:
//判断 用户名 密码 电话,姓名是收入
if(userName.getText()!=null&&pwd.getText()!=null&&phone.getText()!=null&&realname.getText()!=null){
//调用服务端接口
String url = HttpUtil.BASE_URL
+ "QRegisterServlet?userName="
+ URLEncoder.encode(
URLEncoder.encode(userName.getText().toString(), "UTF-8"), "UTF-8")+"&password="
+ URLEncoder.encode(
URLEncoder.encode(pwd.getText().toString(), "UTF-8"), "UTF-8")+"&phone="
+ URLEncoder.encode(
URLEncoder.encode(phone.getText().toString(), "UTF-8"), "UTF-8")+"&realname="
+ URLEncoder.encode(
URLEncoder.encode(realname.getText().toString(), "UTF-8"), "UTF-8");
// 查询返回结果
String result = HttpUtil.queryStringForPost(url);
if(result.equals("1")){
Toast.makeText(getApplicationContext(), "注册成功", 1).show();
Intent intent = new Intent();
intent.setClass(RegisterActivity.this,
LoginActivity.class);
startActivity(intent);
}else if(result.equals("2")){
Toast.makeText(getApplicationContext(), "用户名重复", 1).show();
}else{
Toast.makeText(getApplicationContext(), "注册失败", 1).show();
}
}else{
Toast.makeText(getApplicationContext(), "不能为空", 1).show();
}
服务端代码:
//接受参数
String userName = URLDecoder.decode(request.getParameter("userName"),"UTF-8");
String password = URLDecoder.decode(request.getParameter("password"),"UTF-8");
String phone = URLDecoder.decode(request.getParameter("phone"),"UTF-8");
String realname = URLDecoder.decode(request.getParameter("realname"),"UTF-8");
//查询用户名是否重复
String sql2 = "select count(*) from users where email='"+userName+"'";
//执行插入操作
String sql = "insert into users(email,password,realname,tel) values('"+userName+"','"
+password+"','"+realname+"','"+phone+"')";
5.3菜谱查看模块
图5-4 菜谱界面
用户查询菜谱信息。
Android端代码:
protected void dialog() {
Builder builder = new Builder(InforViewActivity.this);
builder.setMessage("价格为:"+gprice+" 确认订阅吗?");
builder.setTitle("提示");
builder.setPositiveButton("确认", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Declare declare = (Declare) getApplicationContext();
int myid = declare.getId();
try {
String url = HttpUtil.BASE_URL
+ "QAddDyServlet?gid="+gid+"&myid="+myid+"&price="+gprice;
// 查询返回结果
String result = HttpUtil.queryStringForPost(url);
if(result.equals("1")){
Toast.makeText(getApplicationContext(), "订阅成功", 1).show();
}else{
Toast.makeText(getApplicationContext(), "订阅失败", 1).show();
}
} catch (Exception e) {
// TODO: handle exception
}
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
服务端代码:
//接受参数 百科 包括 包括id 用户id 等
String myid = request.getParameter("myid");
String gid = request.getParameter("gid");
String price = request.getParameter("price");
//插入数据库
String sql = "insert into dy(gid,myid,times,price) values("
+ gid+","+myid+",now(),"+price+")";
6 系统测试
6.1 测试概述
6.1.1软件测试的目的
软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情,另一方面是确认软件以正确的方式来做了这个事件。
第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息。
第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个目的是保证整个软件开发过程是高质量的。
软件质量是由几个方面来衡量的:一、在正确的时间用正确的的方法把一个工作做正确。二、符合一些应用标准的要求,比如不同国家的用户不同的操作习惯和要求,项目工程中的可维护性、可测试性等要求。三、质量本身就是软件达到了最开始所设定的要求,而代码的优美或精巧的技巧并不代表软件的高质量。四、质量也代表着它符合客户的需要。作为软件测试这个行业,最重要的一件事就是从客户的需求出发,从客户的角度去看产品,客户会怎么去使用这个产品,使用过程中会遇到什么样的问题。
6.1.2软件测试的任务
1、寻找Bug;
2、避免软件开发过程中的缺陷;
3、衡量软件的品质;
4、关注用户的需求。
总的目标是:确保软件的质量
6.1.3测试环境
Apache提供的Web服务器Tomcat 6.0使得用户可以在Windows 2000以上操作系统下发布自己设计的动态网页。因此对答疑的调试工作主要是利用Tomcat 6.0的强大功能在本机下完成的。为了在本机下浏览Web页面,首先在创建该系统的站点上(该系统使用的是Web的默认站点)将IP地址设定为127.0.0.1,它的缺省域名值为localhost。然后向IE浏览器输入本地动态网页的URL,Web服务器在收到浏览器传送的URL之后找到网页文件,并在服务器端执行该文件后将此文件以HTML文件的形式返回该浏览器。
6.2 单元测试
6.2.1黑盒测试
在单元测试中分别对用户信息模块,问题模块和后台管理模块进行分别测试.
首先对各个模块进行黑盒测试,在各种条件下运行模块是否能正常运行,比如在登录时,输入空白用户名等等.
6.2.2白盒测试
此方法把测试对象看做一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。软件人员使用白盒测试方法,主要想对程序模块进行如下的检查;对程序模块的所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性等。
表6.1登陆测试用例
测试用例描述 | 操作过程及数据 | 预期结果 | 用例类型 |
按不同的输入格式输入个人信息,进行注册。 | 进入注册界面,按提示的输入格式输入个人信息,进行注册。 | 注册成功,显示注册成功。居民信息保存到数据库。 | 功能点 |
用户名有重名的 | 进入注册界面,用户名输入,其它按提示的输入格式输入个人信息,进行注册。 | 注册失败,不能注册。 | 功能点 |
输入为空时,进行注册。 | 进入注册界面,输入为空,进行注册。 | 无法注册 | 界 面校 验 |
表6.2发贴测试用例
模块 | 测试用例描述 | 操作过程及数据 | 预期结果 |
发贴 | 按要求输入问题的相关信息 | 进入提问界面,输入问题内容,标题,内容,再提交。 | 提问成功,成功信息转到管理员。 |
没输入标题 | 进入提问界面,没输入标题,再提交 | 提问失败。 | |
输入为空 | 进入提问界面,输入为空,再提交。 | 无法提问。 |
6.2.3模块接口测试
在黑盒测试完成的情况下,进行模块接口测试, 模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试接口正确与否应该考虑的因素:
1 输入的实际参数与形式参数的个数是否相同;
2 输入的实际参数与形式参数的属性是否匹配;
3 输入的实际参数与形式参数的量纲是否一致;
4 调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;
5 调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;
6调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;
7 调用预定义函数时所用参数的个数、属性和次序是否正确;
8 是否存在与当前入口点无关的参数引用;
9 是否修改了只读型参数;
10 对全程变量的定义各模块是否一致;
11是否把某些约束作为参数传递。
6.3 集成测试
每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作。主要原因是,模块相互调用时接口会引入许多新问题。例如,数据经过接口可能丢失;一个模块对另一模块可能造成不应有的影响;几个子功能组合起来不能实现主功能;误差不断积累达到不可接受的程度;全局数据结构出现错误,等等。综合测试是组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行集成测试以便发现与接口有关的各种错误。
6.3.1自顶向下集成
自顶向下集成是构造程序结构的一种增量式方式,它从主控模块开始,按照软件的控制层次结构,以深度优先或广度优先的策略,逐步把各个模块集成在一起。首先将模块用户模块和问题模块集成在一起,再将后台管理模块集成起来。
6.3.2确认测试标准
功能和性能指标满足软件要求和标准的情况下,测试结束。.
7.1工作总结
经过几个月的努力,已经基本完成了答疑的开发和设计.完成了用户模块,问题模块和后台管理模块的开发,并基本实现了前期所制定的功能.
系统在不断的设计更改过程中,逐渐的成熟。在编写的最后阶段中,参考了一些设计模式,在逻辑代码和数据库连接DAO中抽象出了若干接口,并对其进行了对象的依赖注入,大大的减少了模块之间的耦合,使系统具有很高的灵活性和可维护性,这是系统最大的优点.
当然系统也存在很多不足的地方,比如用户的权限判断过于简单,安全性低,希望在今后的学习中,逐步的进行改进.
通过这次的设计, 加深了对android框架,以及面向对象思想的一些理解.对于软件工程方面的设计思想也有了更深一步的理解,只有在不断的实践于学习中,才会得到最丰厚的回报.
7.2展望
随着现在科技的发展,计算机技术的发展,各种新的Web技术就会随之诞生,目前的基于Android的菜谱推荐系统还有很多问题,但是我相信只要我们积极的去学习新的技术,不断的去发现问题解决问题,那么我们的系统肯定会更加完善。我相信随着新技术的诞生,使用更加先进Web技术开发的系统肯定会更加稳定,更加安全,用户的体验也会更好,处理信息的能力也更强,信息会更全面。
致 谢
大学生活在这个时候即将划上一个句号。但是对于我的人生道路来说,这仅仅是一个逗号,我将面对的是又一次征程的开始。
回忆过去,许许多多的事情浮现在脑海:刚上大学时欢乐心情和兴奋的场景还历历在目。一切都是那么新鲜,那么富有吸引力。有快乐也有艰辛,有收获也有失落。衷心感谢信息学院所有支持帮助过我的老师,谢谢你们多年来的关心和爱护。同窗的友情同样难忘,你们与我共同走过了人生中不平凡的道路,给我留下了值得珍藏的美好记忆。
最后,我要特别感谢指导教师XX老师。本论文是在她们的悉心指导和热情帮助下完成的,老师认真负责的工作态度,严谨的治学精神和精深的理论水平都使我受益匪浅。她们无论在理论上还是在实践中,都给予我很大的帮助,使我专业技能的应用水平得到很大提高,这对于我以后的工作和学习都有益处。值此论文完成之际,特别向指导老师表示衷心的感谢和崇高的敬意,谢谢她们细心而又耐心地辅导,使得我得以顺利的完成毕业设计开发工作,同时也要感谢其他帮助过我的老师和同学,他们在我成长过程中给予了我很大的帮助,在此一并表示感谢。
由于本人水平有限,加上时间紧促,本文一定有不少缺点和不足,恳请各位老师给予帮助和指正。
参考文献
[1] 郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010.
[2] 杨文志.Android程序设计指南[M].北京:电子工业出版社,2009.
[3] 吴亚峰.Android核心技术与实例详解[M].北京:电子工业出版社,2010.
[4] 思志学.J2EE整合详解与典型案例[M].北京:电子工业出版社,2008.
[5] 靳岩,姚尚朗.Android开发入门与实战[M].北京:人民邮电出版社,2009.
[6] 张利国.Android移动开发入门与进阶[M].北京:人民邮电出版社,2009.
[7] 埃克尔.Java编程思想[M].北京:机械工业出版社,2007.
[8] 梁超著.J2me应用程序开发[M].北京:清华大学出版社,2004.
[9] 池瑞楠,仵博,张立涓.J2ME无线开发实训教程[M].北京:清华大学出版社,2007.
[10] 林闯单,志广任.计算机网络的服务质量[M].北京:清华大学出版社,2004.
[11] 马国生.MySQL初级教程[M].北京:北京电子工业出版社,2011.
[12] 方爱华.MySQL的优化[M].南京:东南大学出版社,2008.
[13] 李飞.Java的线程[M].重庆:重庆大学出版社,2008.
[14] 张孝祥.struts[M].北京:电子工业出版社,2011.
[15] Merlin.spring的起点[M].北京:机械工业出版社,2004.