移动购物APP设计与实现

来源:互联网 发布:关于les的歌网络歌手 编辑:程序博客网 时间:2024/06/10 01:19

目  录

摘要.I

关键词.I

AbstractII

Key wordsII

前言.1

1 绪论.2

1.1  设计背景.2

1.2  设计目标和意义.2

2 系统概述.3

2.1  开发工具.3

2.2  开发环境.4

2.3  相关技术.4

3 系统需求分析.8

3.1  功能性需求分析.8

3.2  非功能性需求分析.9

3.3  购物流程需求分析.10

3.4  APP时序需求分析.11

4 系统总体设计.12

4.1  UML图设计.12

4.2  数据库设计.12

4.3  逻辑结构设计.18

4.4  服务器架构设计.20

4.5  客户端设计.22

5 系统实现.25

5.1  开发环境搭建.25

5.2  APP模块实现.25

5.2.1  系统注册模块.25

5.2.2  系统登陆模块.26

5.2.3  物品搜索模块.26

5.2.4  购物车模块.27

5.2.5  提交订单模块.29

5.2.6  查看订单模块.30

5.2.7  地址管理模块.31

5.2.8  物品分类模块.32

5.2.9  物品分享模块.32

5.2.10  我的足迹模块.33

5.2.11  我的分享模块.34

6 系统测试.35

6.1  系统测试目标.35

6.2  APP功能测试.35

6.3  APP性能测试.35

结束语.36

参考文献.37

致谢.38

 


移动购物APP的设计与实现

banwxf

农业大学信息科学技术学院计算机科学与技术专业)

摘要:移动互联网的迅猛发展改变着人们的生活方式,成为我们生活中不可或缺的一部分,同时移动购物APP也走进更多人的生活。本移动购物APP系统采用MVC的设计模式进行设计,主要使用Retrofit2、ButterKnife、Gson、Okhttp等开源框架进行开发,软件开发过程严格按照软件工程理论进行设计、指导和管理,编码结构清晰、易扩展。APP主要实现了商品展示、商品分类、商品搜索、购买、购物车、商品推荐、商品分享、查看订单等功能。另外,传统线下实体店交易模式已经不能满足和适应21世纪商品交易市场的需求,商家应该转型线上线下相结合的交易模式,来扩大商品交易范围,创造更加方便、快捷、个性化的互联网购物模式,使得放心、安全的移动APP购物更快的进入消费者的生活。

关键词:Android;软件;移动设备;电子商务


Design andimplementation of mobile shopping APP

CHEN banwxf

(Majorin School of information science and technology in the College of Computer science and technology of Gansu Agriculture University)

Abstract:Therapid development of mobile Internet has changed people's way of life, becomean indispensable part of our lives, while mobile APP also entered the lives ofmore people. The mobile shopping APP system uses MVC design pattern to design,mainly uses Retrofit2, ButterKnife, Gson, Okhttp and other open sourceframework for development, software development process in strict accordancewith the theory of software engineering design, guidance and management, codingstructure is clear and easy to expand. APP mainly to achieve the merchandisedisplay, commodity classification, merchandise search, purchase, shopping cart,commodity recommendation, product sharing, view orders and other functions. Inaddition, the traditional line of physical store trading model has been unableto meet and meet the needs of the 21st century commodity trading market,businesses should transform online and offline combination of trading patterns,to expand the scope of commodity transactions, to create more convenient, fast,personalized Internet Shopping mode, making it safe to move the APP faster toenter the consumer's life.

Key words: Android;software;mobile devices;ElectronicCommerce


前言

所谓电商购物平台,就是通过互联网进行商品展示、交易的平台,这个模式极大的提高了商品的销售范围,相比传统的实体店购物更加便宜,对用户来说有更多的选择,对商家来说拥有了更多的客户。网上购物这是一个当下热门的词汇,自从双十一购物节的记录不断地被打破,这和APP购物平台是密不可分的。自从2007年10月Android智能操作系统被开源,智能手机就迅速占领移动智能市场,这也为移动购物的发展提供了一个很好的机会。伴随着信息技术的不断进步和因特网各项技术的不断完善,电子商务逐渐成为了互联网时代的一种全新的网络商品交易方式,大家也不在陌生。作为领先的新型产业,电子商务在中国的发展速度有目共睹。但是随着每秒订单的数量,对后台服务器的稳定性、系统可扩展性和每秒高并发的下单要求也越来越高。

通过对电子商务平台的研究,我认为现在的电子商务正在经历着以下几点难题:

(1)如何实现高并发,并且保证系统的稳定运行。就此,我们需要集群以及大数据平台的支撑,以及出现系统问题时如何保证消费者和商家的权益。

(2)如何有效的监管平台物品的真实性。对于这个问题我相信在未来将更加完善,随着虚拟现实技术的出现,平台能最大限度地展示物品。另外,需要平台方配合国家物品监管加大防伪,打假的力度,给消费者普及防骗的相关知识和案例,以确保消费者的权益。

(3)支付安全,这个问题是每个消费者和商家关心的问题。目前,在Android平台上保证支付安全的主要采取的措施有,数据加密,签名。虽然现在很安全,但是我们也应该加大力度去研究更好、更安全的措施。

(4)如何确保物流不延时,运输过程不损坏物品。这就需要商家,平台方,物流公司共同配合。

我相信,电子商务平台方做好这四点,移动购物将会更加深入人心,使移动购物更上一层楼。另外,这几点也是么个消费者所关心的,因此,我们还需努力完善系统,使得客户,消费者的权益得到保障。


1 绪论

1.1 设计背景

在这个网上购物盛行的今天,作为消费者更应该了解系统是怎么运行的。移动购物APP这个项目,也是致力于研究如何有效的给消费者带来更好的体验,致力于研究如何加强支付安全,以确保消费者权益。这个项目开始与2017年3月,在移动购物盛行的时代,本人想通过这个项目更加深入的学习Android和Java相关技术。而且随着移动智能设备在生活中的使用越来越广,Android操作系统作为搭载最多的手机操作系统。慢慢的在生活中已经随处可见搭载安卓操作系统的设备,例如MP3音乐播放器,智能手机,手持平板,智能电视机,机顶盒等等。并且随着时代、科技和互联网的发展,二十一世纪已经成为了以网络为信息传输纽带,以互联网为主导的信息化社会。移动智能设备、云购物、电子商务、互联网、大数据也成为了21世纪最热门的词汇。随着计算机软件技术和互联网通信技术的不断完善、提高,人工智能也逐渐成为了我们生活中有一道靓丽的风景线。特别是谷歌公司2007年将Android操作系统代码公开后,使得移动智能设备在科技圈掀起了一次智能设备浪潮,让Android操作系统成为了很多移动电子设备制造商的不二之选,同时兴起了很多智能手机制造商。正因为移动智能设备的盛行,网上购物也很快成为了21世纪一种全新的网络购物模式。2014年双十一天猫一天创下571亿元的交易额; 2015年一天就达到了912亿元交易额;再到2016年天猫一天交易额达1300亿元的交易额,已经说明电商平台和网络购物在我们生活中扮演着重要的角色。

1.2  设计目标和意义

了解移动购物的运行流程,正确对待电商购物平台,在使用平台的同时让消费者能够有效的避免损失。通过这个设计,我希望自己能够对移动平台的开发和Java后台的开发技术更上一层楼。另外,就当下购物平台相关知识的普及给消费者,也让消费者了解他们所使用的系统。


2系统概述

2.1  开发工具

整个项目移动端APP使用当下流行的Android开发工具Android Studio开发。服务器采用Eclipse Java集成工具开发后台数据支撑系统,服务器端代码搭建在Tomcat上,使用Oracle数据库存储整个项目所涉及的数据。

2.1.1 Eclipse

Eclipse集成环境是由IBM公司开发的软件开发环境,不同公司自主研发的可扩展软件开发工具集。它是一款具有可扩展、跨平台的软件开发应用,它本身只是一组软件开发平台,由于高扩展性和众多插件的存在、支持,使得Eclipse拥有其他功能固定的软件开发环境没有的灵活性,也是由于众多的插件支持,使得它功能更加强大。很多软件开发公司研发部以Eclipse作为基本环境搭建更适合自己业务的开发工具集,完成所需的软件开发。Eclipse是一款可扩展的Java开发集成环境,是一个开放源代码的软件。就Eclipse本身而言,它只是一组软件开发服务接口和一个普通应用软件,通过插件组件构建最终的开发环境。Eclipse自带了一些固有的插件,Eclipse软件是基于Java平台的可扩展开发工具,包括基本的Java软件开发工具。安装Java Web插件后可以用于开发Web网站,安装Android SDK和ADT后可以开发Android应用,安装J2EE插件后可以开发服务器等等,因此Eclipse也变得更加强大。

2.1.2 Android Studio 2.3

Android Studio是一款全新的Android集成开发工具,有32位和64位两种版本。在2013年Google在Android I/O大会上正式推出,并大力推广。它提供了集成的Android用于开发APP应用的开发环境和调试工具集,它具有强大的功能,例如,Debug,内存分析工具,自动导包功能。强大的布局展示功能,使得Android开发者可以在编写程序界面布局文件的同时就能在软件的预览位置看到自己的UI在不同尺寸屏幕中的样子,它强大的功能、众多插件支持深受Android开发者的喜爱。Android Studio整合了Gradle构架工具,更加智能,更多插件的支持,自带命令行工具,使用更加方便快捷。另外,随着技术的不断提高,某些已存在的APP都在使用Android Studio进行重构目,Android Studio项目目录层次结构更加完善、容易管理。Android Studio强大的功能深受开发人员喜爱,特别是导包,屏幕适配及更加智能的代码提示,使得开发更加快速。

2.1.3  Tomcat 8.0

Tomcat是由Apache、Sun公司软件开发团队共同开发而成。Tomcat服务器是Apache项目的一个核心之一,是一款免费的开源的Web 应用级服务器,是轻量级、易安装的应用服务器,在中小型企业系统和用户并发访问不是很高的公司系统中使用普遍,而且很适合项目前期开发和调试,因此移动购物平台我也采用了该轻量级的服务器作为后台支撑。另外,Tomcat和Windows系统自带的IIS等Web服务器功能一样,都拥有处理HTML、JSP页面的功能,可以搭建Web网站,为小企业和个人用户提供简单服务[1-3]。Tomcat还有其他强大的功能,比如:发布网站,搭建公司内部系统。除此之外,Tomcat作为一个能运行Servlet和JSP的容器,它默认的Servlet是独立的。

2.1.3 Oracle 10g数据库

Oracle 10g关系型数据库管理系统(DMS)是由Oracle公司开发的。Oracle 10g数据库的可移植性好、使用方便、功能强大使得大多数企业内部都在用的关系型数据库管理系统,主要面向两种平台Linux和Windows,适用于各种大型服务器系统,微型系统,小型系统等。它具有很高的数据管理效率,具有很高的可靠性、安全性,能够适应各种高并发的环境,具有很高的吞吐率[4-7]。Oracle 10g在实际开发中应用也很广,特别是大中型企业基本都是Oracle数据库。

2.2  开发环境

系统采用二十一世纪非常流行的Java程序设计语言开发。Java语言很好的解决了跨平台。面向对象的思想,语法简单等特点深受编程者的喜爱。系统服务器主体是基于Java SDK 1.8平台开发的服务器。前端是基于Android 5.0开发的APP,后台搭建在Tomcat8.0服务器上,APP通过网络进行访问服务器获取和提交数据。

2.3  相关技术

2.3.1  Mybatis

Mybatis是一款服务器端操作数据库的框架。Mybatis封装了JDBC能够通过配置XML文件写SQL,使得开发变得简单更加面向业务,而无需编写加载驱动、获取连接、获取执行SQL的对象,执行SQL、结果集处理,关闭数据库连接等繁琐的代码,开发者只需将数据库连接配置到XML配置文件中即可连接数据库,在XML中编写SQL语句即可将所得结果转换成实体Bean类,开发者也不需要关闭连接。Mybatis将结果集处理透明化,通过反射执行相应的SQL,不仅效率高而且容易维护。使用Mybatis只需导入相应数据库JDBC的jar包,编写相应的配置文件即可连接任意数据库,提高了开发者的开发效率。值得注意的是 Mybatis是通过事务操作数据库的,但是Mybatis并不会自动提交事务,因此需要开发人员,对数据更新、删除、插入时要手动提交事务。

2.3.2  Servlet

Servlet是一种与具体网络求协议无关、与平台无关的服务器技术。Servlet是专门在服务器端执行的组件,负责接收来自客户端或者Web的网络请求,并把请求交给服务器进行处理,将服务器的处理结果响应给APP,Servlet是APP和服务器进行连接的桥梁,经常作为大型应用与服务器之间的网络中间件[8-9]

2.3.3  Retrofit2

Retrofit2是一款基于RxJava的异步的Android网络请求框架。Retrofit2默认分装了Okhttp框架,配合Google的Gson框架能自动将服务器获得的Json字符串转成相应的实体对象。异步的请求使得当用户点击了某个服务后,还可以进行其他的操作,而不是必须等待服务器响应结束后才能做其他操作。这样的好处就是当用户点击了某个按钮后,无需等待服务器,而可以直接使用另一个服务,有效的防止了客户端卡死。Retrofit2采用注解的方式拼接请求的URL参数,极大地简化了代码,提高了代码可读性,另外使用接口配置网络请求,使得项目容易管理和维护。通过框架请求网络,开发者无需处理流相关的代码,也减少了代码书写量。

2.3.4   Gson

Gson是一款将Json字符串转实体Bean的框架。Gson封装了Json字符串读取、解析和给对象赋值。使得开发人员无需解析Json字符串,这样提高了开发效率,如果没有Gson框架,那么解析复杂而且比较长的Json字符串将有很大难度,并且解析所占代码比例很大,不容易维护。

2.3.5  ButterKnife

ButterKnife作为一款Android应用开发的注解框架,能够进行findViewById,绑定事件等相关操作。ButterKnife能够通过反射获得每一个布局中的控件ID并绑定给控件对象,另外还能绑定事件,但是由于使用了反射,因此,相对来说,比较浪费资源。在APP中使用ButterKnife注解,在编写代码时将能够很简便、快速的为View控件绑定事件和findViewById,给开发者也节约了很多时间,让开发者能把更多时间花在思考逻辑中去,而不是做一些特别繁琐的事,例如简化findViewById代码。

2.3.6  缓存设计

为了提升用户体验,客户端实现了三级缓存技术。三级缓存有效的为用户节约了流量,当再次进行加载时能很快的展示数据。三级缓存,即就是先从内存中读取数据,其次再从本地SD卡读取数据,如果本地和内存都没有数据,再去请求网络,反之,当网络请求成功后将获得数据,写入内存和SD卡。如图2-1所示:

图 2-1 三级缓存图

客户端采用缓存技术,将从服务器获得的Json数据缓存的SharePerference配置文件中,用请求时间戳作为存储的Key值,获得的Json字符串作为Value值。当再次进入时加载本地缓存数据,另外把时间戳发送到服务器,如果服务器数据变化,服务器就会把新数据返回给客户端,并由APP展示给用户。对于图片这种比较的大数据,由URL作为文件名,存储在APP的缓存目录。另外值得注意的是图片使用三级缓存时,必须先处理Bitmap对象的存储大小,否则采用的三级缓存将不明显,还有可能造成内存溢出。怎样高效的加载Bitmap对象在APP中。其实处理的思想也很简单,那就是通过系统提供的BitmapFactory类中的Options方法来优化加载所需尺寸的图片[10]。即就是把图片按照控件大小进行压缩处理后写入内存或展示。

2.3.7  线程池设计

在APP中为什么要把线程池化?在系统中好处有三点:(1)复用线程池中已存储的Thread对象,能够有效的避免因为创建Thread对象和销毁Thread对象的所带来的手机系统的性能开销[11];(2)使用线程池的设计能够有效控制APP在具体手机上的线程最大并发数,避免系统内因为大量线程之间互相争夺,系统资源而导致的软件线程阻塞现象,能防止系统线程死锁[12];(3)APP内使用线程池设计能够对系统内的Thread对象进行基本的管理,能够提供Thread对象按时执行以及指定Thread对象执行的循环间隔等功能,对于Thread对象的控制起了很好的帮助[13]

为提高软件的流畅性能和用户体验,对于从服务端获取大数据(如图片)的情况都需要异步获取数据,因此需要新开线程的方式和服务器连接获取数据。因为APP内线程的连接、创建需要耗费较多系统资源,而且Android系统占用内存小,是轻量级的操作系统,为每个APP的可用资源有限。另外,Android系统的编码说明文档中也提供了Java语言说明文档中的线程池技术,因此,实现APP时我使用了线程池。专门用于获取服务端数据和向服务器提交数据,线程池的设计能控制APP内手机所能达到的最大线程数,不然容易造成费电,手机发热,一般以具体使用设备的最大线程的的一半为最大线程数[14-16]

2.3.8   自定义View

在APP编写代码实现功能过程中,由于APP功能需求的多样性,Android已存在的控件已经不能满足项目需要。因此,我写了一个ImageView的子类重写父类的方法实现了圆形的CircleImageView作为展示头像的控件,自定义指示实现了各种炫酷的界面。自定义View有三种,第一就是继承已有的非容器组件(TextView),重写父类非私有的方法,自己定义View的功能,第二,就是继承容器类组件(ViewGroup) ,重写父类的方法,按照自己的需求定义控件,第三,自定义组合控件,即就是将项目中用到很多,而且很相似的布局定义为控件使用[17]。这样布局不仅易读,而且会减少代码量,对后期维护和重构也很重要。

2.3.9  屏幕适配

由于Android系统实现代码开源,电子设备生产厂家众多,而且设备屏幕大小不一,这就给开发人员带来了很多麻烦。因此为了匹配每一款手机分辨率,我运用了屏幕适配,比如:在代码中使用dp不适用像素,布局中不适用绝对布局,不将控件尺寸固定,而是通过使用者手机的屏幕分辨率自动适配。


3 系统需求分析

3.1 功能性需求分析

移动购物APP主要为用户提供一个商品搜索、商品分类、商品按条件排序、商品详情、软件升级、首页、分类、注册、登陆等功能;用户注册登陆后还可以进行物品在线下单、使用购物车、记录浏览记录、商品收藏、查看订单、查看已分享商品,个人信息管理等功能,是一个集商品交易管理和互动的商品交易APP。从电子商务的需要出发,以购物、交易、互联网技术等理论为指导,基于现代网络技术和Android技术,设计实现了移动购物APP。本APP是以网络化的交易、管理技术为支撑,实现了商品购买、购物车、查看订单、物品分类等在线购物功能。

(1)商品搜索

在移动购物APP设计中,用户需要快速查找自己想要的商品。用户将搜索信息通过APP提交后,服务器会根据用户输入的搜索关键词分析做出响应,发送到UI上展示搜索商品。用户还可以按照价格、销量等进行快速的排序,使得搜索更加细化和准确。

(2)物品分类

APP对商品进行了分类,用户可以直接在分类中按照系统分类快速检索商品,然后进行购买。分类中用户可以看到商品基本信息,用户可以根据需求快速筛选。

(3)查看订单

查看订单主要记录的是当前用户的所有订单信息。在订单功能中用户可以通过订单状态快速的查看订单,也可以在订单页面对于状态为待支付的订单直接进行支付,这样用户能够很清晰的记录个人购物信息,方便快捷的进行二次支付。

(4)商品分享

商品分享功能主要记录用户分享过的一些商品。在分享页面能方便用户查看自己分享过的喜欢的商品,方便再次快速的查找、分享物品。

(5)商品收藏

用户可以浏览商品详细信息并将喜欢的物品加入收藏,当用户想再次查看时,就可以直接在商品收藏页面找到该物品,商品收藏页面通过时间进行了排序,方便用户浏览个人收藏信息。

(6)浏览足迹

浏览足迹是系统自动记录用户查看详情的物品,系统会抓取用户浏览商品的关键词进行基本的大数据分析,然后向用户推送商品。如果用户希望再次浏览该物品,那么用户就无需再次查找,可以直接查看浏览足迹。

(7)个人信息管理

个人信息管理主要展示用户选用的是那个收件人信息,用户也可以添加、删除收件人信息,该功能选用信息将会成为后续下单的收件人,就无需每次购买商品都添加收件人信息。

具体根据功能需求,整理APP用例图如3-1所示


图3-1 系统用例图

3.2  非功能性需求分析

整理APP的非功能性能的需求包括以下6个方面:

(1)APP交互性强,界面友好美观易于使用,信息查询方便、快捷、准确、数据存储安全可靠。

(2)用户的软件专业知识普遍偏低,要求APP具有良好的人机互动界面。

(3)全面、分类显示用户的所有信息。

(4)APP易于扩展。

(5)APP图片较多,需要能够快速的加载图片信息。

(6)系统应该易维护,稳定的运行。

3.3  购物流程需求分析

根据需求和技术建模,最终所得购物流程。用户通过APP搜索物品,查看物品详情,在详情页面,用户可以选择物品属性,把喜欢的物品选择加入购物车或者立即购买进行下单,在这之前系统会判断用户是否登录,只有登录后才能使用购物车和下单功能,当用户进入支付页面后,APP将自动提交订单数据到服务器并作入库操作,默认状态为待付款,当用户点击支付,调用第三方支付平台,支付成功后服务器更新订单状态并将结果反馈到客户端,另外服务器还会通知商家订单信息,商家根据订单进行发货。如果在支付页面,用户选择放弃订单,数据库将不会删除该条订单,并保持待付款状态。系统具体流程如图 3-2所示:


图 3-2 购物流程图

3.4  APP时序需求分析

根据用户操作和APP和服务器交互过程,整理APP请求和系统响应的时序图,系统时序图如3-3所示:


图 3-3时序图

4 系统总体设计

4.1  UML图设计

根据系统实体模型,经分析设计相关实体类图如图4-1所示:


图 4-1 类图

4.2  数据库设计

系统用E-R(实体-关系)图来描述实体的关系模型,抽象成建立数据库的关系模型。本系统主要有13个实体,主体模型关系如图4-2所示:

图 4-2 主体E-R图

4.1.1 用户

用户实体信息包括:用户ID,密码,用户名,用户积分,用户等级,用户头像6个属性,如图4-3所示:

图4-3 用户实体图

4.1.2  商店

商店实体信息包括:商店ID,商店名字,关注人数,商店描述,商店地址,商店商品数量,商店促销信息,商店类型,共8个属性,如图4-4所示:

图 4-4 商店实体图

4.1.3  商品

商品实体信息包括:商品ID,商品名称,商品价格,商店ID,促销价格,额外费用,是否新品,是否免费,库存量,详情,尺寸,颜色,促销信息,销量,限购数量,图片,类型共17个属性,如图4-5所示:

图 4-5 商品实体图

4.1.4  订单

订单实体主要包括:订单ID,用户ID,支付信息,电话号,地址,订单时间,额外费用,订单总价格,订单状态,商店ID共10个属性,如图4-6所示:

图4-6 订单实体图

4.1.5  购物车

购物车实体信息包括:用户ID,商店ID,物品ID,物品名字,物品图片,物品属性,商店名字,物品价格,物品数量,额外费用共10个属性,如图4-7 所示:

图4-7 购物车实体图

4.1.6  收货人

收件人实体信息包括:电话号码,名字,ID,状态,地址,用户ID等6个属性,如图4-8所示:


图 4-8 收件人实体图

4.1.6  其他相关实体

用户浏览,用户收藏,用户分享实体信息包括:用户ID,商店ID,商品ID,时间共四个属性,如图4-9所示:

图4-9 足迹、浏览实体图

4.1.7  商店与商品关系

根据现实生活,商店与商品为一对多关系。每个商店有很多商品,但一个商品只能属于一个商店,因此将物理模型转化成逻辑模型,如图4-10所示:

图4-10 商店与商品关系

4.1.8  用户与订单关系

最终整理用户关系如图4-11所示:每个用户只有一个购物车,有很多浏览记录,也可以分享很多物品,另外一个用户可以在线下多个订单和添加多个收件人信息,因此形成了很复杂的关系,经过逻辑转换,最终将物理模型抽象成逻辑模型,虽然现实中关系复杂,但是在抽象过程中忽略了很多不符合逻辑的关系,最终生成了系统所需要的模型。

图4-11 用户关系

4.3  逻辑结构设计

4.3.1  数据库表及其结构

用户信息逻辑存储如表4-1所示:


表4-1 用户信息表

字段 

中文名

类型

含义

user_id

用户账号

varchar2(30)

唯一标识用户,用于登录

user_name

用户名

varchar2(50)

用户昵称

user_score

用户积分

varchar2(20)

标识用户购买比例

user_grade

用户等级

varchar2(10)

等级

is_vip

是否vip

varchar2(10)

标识用户类型

head_image

用户头像

varchar2(100)

用户头像url

用户收藏、分享、浏览足迹逻辑存储如表4-2所示:

表4-2 收藏分享浏览记录表

字段 

中文名

类型

含义

user_id

用户账号

varchar2(30)

唯一标识用户,用于登录

product_id

商品标识

varchar2(30)

商品唯一标识

shop_id

商店标识

varchar2(30)

商店唯一标识

date

时间

varchar2(50)

收藏时间

type

类型

varchar2(10)

数据类型

商店信息逻辑存储模型如表4-3所示:

表4-3 商店信息表

字段 

中文名

类型

含义

shop_id

商店标识

varchar2(30)

商店唯一标识

shop_name

商店名称

varchar2(50)

商店展示名称

shop_desc

商店描述

varchar2(200)

商店描述

fav_info

促销信息

varchar2(500)

商店促销信息

pro_num

物品数量

varchar2(10)

商店物品类型总数

address

地址

varchar2(100)

商店地址

商品信息逻辑存储模型如表4-4所示:

表4-4 商品信息表

字段 

中文名

类型

含义

product_id

商品标识

varchar2(30)

物品唯一标识

shop_id

商店标识

varchar2(30)

商店唯一标识

pro_name

商品名称

varcahr2(50)

商品展示名称

pro_price

价格

varcahr2(10)

商品价格

pro_favl

促销价格

varcahr2(10)

商品促销价格

pro_num

库存量

varcahr2(10)

商品剩余量

pro_limit

限购数量

varcahr2(10)

商品限购数量

type

分类

varcahr2(10)

商品类型

pro_sale

销量

varcahr2(10)

总销量

pro_image1

图片1

varchar2(100)

展示图片

pro_image2

图片2

varchar2(100)

展示图片

pro_image3

图片3

varchar2(100)

展示图片

pro_image4

图片4

varchar2(100)

展示图片

pro_image5

图片5

varchar2(100)

展示图片

promotion

促销

varchar2(200)

商品促销信息

color

颜色

varchar2(100)

商品颜色

size

尺寸

varchar2(100)

商品尺寸

pro_desc

商品描述

varchar2(100)

商品描述

is_new

是否新品

varchar2(10)

标识物品是否新品

extra_mon

运费

varchar2(10)

是否有运费

detail_url

详情

varchar2(100)

详情url

is_fee

是否免费

varchar2(10)

标识物品是否免费试用

购物车信息逻辑存储模型如表4-5所示:

表4-5 商品信息表

字段

中文名

类型

含义

user_id

用户账号

varchar2(30)

唯一标识用户

product_id

商品标识

varchar2(30)

物品唯一标识

shop_name

商店名称

varchar2(50)

商店展示名称

pro_attr

属性

varchar2(100)

已选择商品属性

pro_price

价格

varchar2(10)

商品促销价格

pro_num

数量

varchar2(10)

购买数量

pro_name

商品名称

varchar2(50)

商品展示名称

extra_mon

运费

varchar2(10)

额外费用

add_date

时间

varchar2(50)

添加时间

订单信息表存储逻辑模型如表4-6所示:

表4-6 订单表

字段

中文名

类型

                  含义

order_id

订单标识

varchar2(30)

唯一标识订单

user_id

用户账号

varchar2(30)

唯一标识用户

all_mon

订单总费用

varchar2(20)

订单总费用

date

订单时间

varchar2(30)

订单时间

phone

电话号

varchar2(20)

电话号

user_name

收件人

varchar2(30)

收件人

pay_info

支付信息

varchar2(30)

支付信息

address

地址

varchar2(100)

地址

extra

运费

varchar2(20)

额外费用

shop_id

商店标识

varchar2(30)

商店唯一标识

state

订单状态

varchar2(10)

订单状态

订单扩展表逻辑存储模型如表4-7所示:

表4-7 订单扩展表

字段

中文名

类型

含义

order_id

订单标识

varchar2(30)

唯一标识订单

product_id

商品标识

varchar2(30)

物品唯一标识

shop_id

商店标识

varchar2(30)

商店唯一标识

pro_attr

属性

varchar2(10)

已选择商品属性

pro_price

价格

varchar2(10)

商品促销价格

pro_num

数量

varchar2(10)

购买数量

pro_name

商品名称

varcahr2(50)

商品展示名称

pro_image

图片1

varchar2(100)

展示图片

extra_mon

运费

varchar2(10)

额外费用

收件人信息表逻辑存储模型如表4-8所示:

表4-8 收件人信息表

字段

中文名

类型

含义

user_id

用户账号

varchar2(30)

唯一标识用户

phone

电话号

varchar2(20)

电话号

user_name

收件人

varchar2(30)

收件人

address

地址

varchar2(100)

地址

addres_id

地址编号

varchar2(30)

唯一标识

state

地址状态

varchar2(10)

启用地址标识

分类维表如表4-9所示:

表4-9 分类维表

字段

中文名

类型

含义

type_id

分类标识

varchar2(10)

分类的唯一标识

type

类型

varchar2(50)

分类

订单状态维表如表4-10所示:

表4-10 订单状态维表

字段

中文名

类型

含义

state_id

状态标识

varchar2(10)

状态的唯一标识

state

状态

varchar2(20)

状态

物品状态维表如表4-11所示:

表4-11 商品状态维表

字段

中文名

类型

含义

dim_id

维表id

varchar2(10)

唯一标识维表信息

is_new

是否新品

varchar2(20)

标识物品是否新品

is_fee

是否免费

varchar2(20)

是否免费标识

share_foot

分享或足迹

varchar2(20)

是分享或者足迹

4.4 服务器架构设计

系统服务器采用三层架构的模式编写代码,将业务处理的逻辑代码全部放在Service层,这样能更好的维护代码,也能调高代码的可读性,如图4-12所示:

图4-12 系统架构图

服务器一般有三种模式BIO、NIO和AIO。而我的服务器为了支持高并发的访问,系统采用BIO的设计模式实现系统的并发访问。 BIO就是单词Blocking IO的简写,即就是采用线程阻塞的方式实现多并发的访问,即就是一个每一个用户链接使用系统资源时都需要单独开辟一个线程来进行处理用户请求。NIO就是单词Nonblocking IO的简写,NIO是基于事件驱动的思想为理念的一种新的服务器端支持高并发的设计模式,该模式主要利用的是Reactor设计模式[18]。相对与BIO的模式,NIO的模式一个明显好处就是不需要为每一个用户的链接和请求分配单独的线程,而是可以在服务器中一个线程内处理多个不同用户的连接和请求信息等相关任务。AIO是单词Asynchronous IO的简写,就是异步的IO模式,也是服务器采用较多的高并发设计模式 [19]

相对于BIO,现在服务器端更多使用的是NIO的模式,因为考虑到机器的发热与处理速度,以及手机稳定运行能够承受的最大线程数。NIO在高并发的方面做得更好,避免了这些瓶颈。BIO是针对每一个用户开一个线程,去分别处理用户请求,每一个用户单独使用每一个处理请求的方法。这样的方法简单,不容易造成错误数据处理,具体模式图4-13所示:

图4-13 中间件图

NIO虽然能较好支持高并发,但是相对于技术要求会很高,要控制数据的真确性,确保响应的真正确性。

服务器端使用Mybatis作为数据库操作框架,它是底层利用了JDBC原理来操作关系型的数据库,利用XML封装SQL语句的数据库操作框架。Mybatis封装了JDBC后,开发人员只需要通过编写相应的xml配置文件就你能很快的连接、操作数据库,通过编写SQL和Java Bean就能查询出想要的结果对象,这样大大的减少了非业务的代码,开发者只需面向业务而无需管理具体该怎么做,很适合快速开发,而且能改善APP代码维护性、阅读性,有利于软件功能的可扩展性和软件源码可读性,当需求变化时开发者只需修改Bean和XML配置文件。

服务端还采用DAO,SERVICE的三层架构模式,将处理业务的逻辑代码全部都写在Service层,这样当业务变化时,无需重构整个项目,只需要修改、重构Service层。这种设计模式很好的将业务、数据库和前台UI分离,之间通过模型传递数据,只要模型不变,系统维护就能花很少的人力。在开发中,我们提倡尽量将每个模块都分开,因此我也是这么做的。DAO层因为数据库连接时线程安全的,而数据库操作上线程不安全的,因此我通过单例设计模式获取数据库连接,这样充分利用了服务器数据库连接,有效的防止了APP内存泄露[20]

4.5 客户端设计

客户端采用Retrofit2+Okhttp+ButterKnife+MVC的模式设计并实现,主要分为三层:网络层,业务层,UI层。

4.7.1  网络层

移动端用Retrofit2+Okhttp网络框架利用GET请求从服务器获取Json数据,APP利用POST网络请求给服务器提交数据。

Retrofit2是基于Rxjava的异步网络请求框架,默认使用Okhttp网络框架进行网络请求,是Android平台使用很多的网络请求方式。异步请求网络有助于改善用户体验,减少用户等待的时间,防止了界面卡死。相对于同步网络请求来说,异步执行耗时的操作不需要等待服务器响应,而是等服务器响应后会通知UI线程,即就是说,当用户请求网络获取数据时,还可以点击UI上其他功能按钮。

其次,Retrofit2配合Google的Json转化对象框架Gson,能很方便的将从服务器获得的字符串转换中Java Bean对象,减少了很多繁琐的代码,是开发人员能尽量面向业务开发,提高了开发效率。

4.7.2  业务层

业务层主要负责,生成订单数据并提交给服务器。

为了改善用户体验,移动端使用了三级缓存的设计,很好的为用户节约了流量、改善了数据的加载速度。

内存缓存:即就是当网络请求成功后,先把获得的Json数据写入内存,把图片数据处理后再写入内存,为了防止内存溢出,内存缓存设置为每个APP分配内存的八分之一。内存缓存使用的是LruCacHe,这个类里面定义了一个MAP集合,可以通过键值对来存储数据,并且他能够根据最近最少使用的算法进行排序,将用到最少的数据移除。这样既保证了数据能很快的展示到UI上,也防止了内存溢出,明显提升了用户对APP的使用体验。

本地缓存:本地缓存就是当第一次网络请求成功后,将获得的Json数据利用SharePerference存储到文件,将获得的图片资源写入本地SD卡的缓存目录,用URL的MD5值作为文件名存储成png格式图片。当第二次进入之后系统会先读取本地数据,这样为用户不仅节约了流量,而且提高了加载速度。如果没网APP也能显示缓存数据,这样用户就不用面对默认图片,也无需等待服务器响应。

网络缓存:即就是当内存和本地都没有相关数据时,才从服务器获取数据,众所周知,从服务器获取数据时比较慢的。所以大多数的APP一般都会用三级缓存来改善用户体验。

4.7.3  UI层

App采用Fragment搭建UI框架,采用工厂模式生成对应的子页面,从外至内,逐层嵌套。每个页面都要加载布局、初始化数据和请求网络,所以我向上抽取BasePager,然后让每个页面继承BasePager并实现父类的方法,这是一款典型利用多态搭建的框架。

工厂设计模式,是一种创建型设计模式,只需定义一个用于创建对象的接口,让子类决定实例化那个类。在任何一中复杂的物理模型中需要复杂对象,都可以用工厂设计模式进行设计开发。

APP使用自定义View,实现了圆形ImageView,通过自定义对话框,实现了不规则更新提醒对话框。由于项目多处用到ListView,因此我自己封装了适配器,通过封装旨在减少代码书写,增强了APP代码的可阅读性和后期二次开发、扩展的可维护性。通过抽取,只需要加载布局和绑定数据,其他都交给父类去做。

4.7.4  APP优化

项目代码也做了优化,很少使用内部类嵌套,并且使用了第三方优秀框架,使得代码清晰易懂,模块清晰,容易维护。布局中多处使用<incloud>和<merge>标签,使得布局嵌套不超过三层,使应用UI加载速度更快。使用单例模式,线程池访问网络,有效的防止了内存泄露,对图片进行处理,降低了内存溢出的风险,使内存也更加优化[21-22]


5系统实现

5.1  开发环境搭建

任何软件要运行、开发,都要有它的基本环境。Android开发也有它的环境才能够开发,有了开发环境才能很快很好的开发软件。因此需要安装开发工具和支撑平台。

搭建开发环境需要的软件:

(1)操作系统:Windows 10

(2)软件包:Android SDK(Software Development kit Java Development kit) 、AndroidStudio、Eclipse

(3)IDE环境:Androidstudio 2.3 + Android SDK5.0+Eclipse以上

(4)JDK:JavaRuntime Environment 1.8虚拟机 、(JDK)Java Developmentkit 1.8

5.2  APP模块实现

最终移动购物APP主要实现了注册,登录,搜索商品,购物车,在线提交订单,查看所有订单,系统注册,地址管理,物品分享,查看浏览记录,查看分享等功能,下面将详细介绍。

5.2.1  系统注册模块

注册页面如图5-1 所示:由三个EditText和一个注册按钮(Button)组成。EditText负责获取用户要登陆账号和登陆密码,当用户输完信息后点击注册按钮后,APP将会获取EditText输入的内容,判断是否为空后,将数据利用post请求将注册信息发送倒服务器端,服务器判断用户不存在,并且成功插入数据库后通知客户端注册成功。

图5-1 注册UI图

5.2.2  系统登陆模块

登陆界面如图5-2所示:由二个EditText、一个CheckBox和一个注册按钮(Button)组成。EditText用于输入账号和密码,CheckBox用于显示密码,默认情况下密码用星号(*)显示,当选中后将正常显示密码。按钮点击后将把获得的密码采用DES加密后提交到服务器,服务器通过账号获得对应密码,将获得加密后的密码与客户端提交数据进行验证,最后将结果返回给客户端,如果是成功切换UI,如果密码错误就弹Toast提示用户密码错误,让用户重新输入密码。

图5-2 登陆UI图

5.2.3  物品搜索模块

物品搜索是首页和分类页面的一个快速查找功能,用户可以通过该功能查找自己想要的物品。如图5-3所示,当用户在输入框中输入关键词,点击搜索按钮,APP会通过网络将用户的查询关键词发送到服务器,然后获得相关物品,用户可以把获得的物品按照销售数量,物品价格进行排序,实现快速查找物品的作用。该页面会展示商品的基本数据,包括:商品名字,商品促销价格和原价等信息。除此之外,APP会记录用户搜索的关键词,当用户第二次搜索时,展示给用户,帮助用户快速输入。该页面还集成了讯飞语音输入,可以把用户语音快速识别成搜索关键字并输入搜索框,帮助用户搜索。

图5-3 搜索UI图

5.2.4  购物车模块

购物车是存储用户想要购买但没有下单的商品的展示功能,用户可以把自己喜欢的、想购买的商品加入购物车,当想要购买时直接从购物车下单,不仅速度快,而且省去了搜索,浏览等繁琐的步骤,用户可以在商品详情页面加入购物车,也可以在购物车界面进行编辑。购物车可以根据物品的商店进行分组展示,从购物车也可以跳转到详情页面。购物车采用了观察者模式,通过观察者模式实现了物品选中和选中金额变化。购物车是本项目的核心,也是移动购物平台中最难的UI,为了实现容器连动,采用了多个观察者。但是用户要使用购物车必须先登录,如图5-4所示:

图5-4 购物车UI图

核心观察者代码实现如下:

public class ItemObserver {

   
private Map<String, ItemInterObserver>map;
   
private Map<String, ArrayList<Cart.CartBean.ProductlistBean.ShopProductListBean>>obs;


   
private static ItemObservermObserver;

   
private ItemObserver() {
       
map =newHashMap<>();
       
obs =newHashMap<>();
   
}

    public static ItemObserver getInstance() {
       
if (mObserver==null) {
           
mObserver =newItemObserver();
       
}
        return mObserver;
   
}

   
public void registerObserver(String shopName, ItemInterObserver ob) {
       
if (!map.containsKey(shopName)) {
           
map.put(shopName, ob);
           
ArrayList<Cart.CartBean.ProductlistBean.ShopProductListBean> pros =newArrayList<>();
           
obs.put(shopName, pros);
       
}
    }

    public void registerObserverData(Cart.CartBean.ProductlistBean.ShopProductListBean product, String shopName) {
       
ArrayList<Cart.CartBean.ProductlistBean.ShopProductListBean> list =obs.get(shopName);
       
if (product !=null&& !list.contains(product)) {
           
list.add(product);
            obs.put(shopName, list);
           
notifyAllAddObserver(shopName,list.size());
        }
    }

    public void removeObserverData(Cart.CartBean.ProductlistBean.ShopProductListBean product, String shopName) {
       
ArrayList<Cart.CartBean.ProductlistBean.ShopProductListBean> list =obs.get(shopName);
       
if (product !=null&& list.contains(product)) {
           
list.remove(product);
            obs.put(shopName, list);
           
notifyAllRemoveObserver(shopName,list.size());
        }
    }

    private void notifyAllAddObserver(String shopName,intsize) {
       
ItemInterObserver observer = map.get(shopName);
       
observer.notifyAllChange(size);
    }

    private void notifyAllRemoveObserver(String shopName,intsize) {
       
ItemInterObserver observer = map.get(shopName);
       
observer.notifyAllChange(size);
    }

    public interface ItemInterObserver {
       
public void notifyAllChange(intsize);
   
}
}

5.2.5  提交订单模块

当用户选择立即支付后,APP会跳转的支付页面,而APP也会开启一个线程向服务器提交订单数据,默认状态为待支付,当用户确认订单信息无误后,选择支付,APP将会调用第三方支付平台支付宝、微信、或者银行的支付通道。当用户最终通过支付通道支付成功后,支付平台会通知服务器支付成功,服务器更新订单状态,服务器返回APP支付成功的信息并在前端展示给用户,一次支付完成。当然用户可以放弃订单,当用户选择不知付时,订单会保持待支付的状态,以备用户支付订单。当用户想支付时,可以直接去待支付订单中直接支付。如图5-5所示:

图5-5 支付UI图

5.2.6  查看订单模块

查看订单是为用户提供查看通过该系统所购买物品的订单信息的模块,在该页面用户可以查看所有订单,包括:已完成,待支付,已取消,待评价,待收货,待退货6种状态的订单。并且完成了订单分类展示。服务器会根据订单时间进行排序,最近购买的订单展示在最上面,方便用户查看。在该页面自定义了指示器,用户可以通过点击指示器上分类或者水平滑动屏幕查看不同状态订单,不仅炫酷,操作简单,实用性很高。具体如图5-6所示:

图5-6 我的订单UI图

5.2.7  地址管理模块

每一个账号可能拥有多个收件人信息和地址信息,地址管理就是专门用于添加收件人和添加地址的。地址必须有一条是选中的,购买时必须先选定要使用那个收件人信息,这样才能购买物品。在这个页面可以添加收件人信息,选用地址和删除收件人信息等。如图5-7 所示:

图5-7 个人信息UI图

5.2.8  物品分类模块

服务器会根据物品类型进行分类展示,用户可以在主界面的分类界面中通过分类快速检索物品,如图5-8所示:界面左边是分类,而右边是该分类的物品的建议信息,用户可以点击查看,默认加载的是第一条分类数据,用户可以点击左边分类栏,检索想要的物品,本页面采用了缓存,当没有网络的时候,APP会加载本地缓存数据,这样当第二次进入的时候就可以查看缓存数据,而不是展示默认图片给用户,这样提高了用户体验,另外,左边分类和右边展示栏实现了容器连动。在分类页面用户还可以直接点击喜欢的物品进入物品详情页面,将其加入购物车或者直接下订单。

图5-8 分类UI图

5.2.9  物品分享模块

用户在查看物品详情的页面可以把自己喜欢的物品分享给自己微信、QQ、支付宝等社交软件好友或者朋友圈,好友可以通过分享链接找到物品进行购买。软件集成第三方平台ShareMob的产品ShareSDK进行分享。如图5-9 所示:

图5-9 分享UI图

5.2.10  我的足迹模块

如图5-10所示,用户可以在我的页面,点击我的足迹查看最近浏览过的所有物品,系统会根据用户浏览时间进行排序,这样用户如果突然想购买曾经浏览物品,可以直接去我的足迹中查看,不仅方便,而且能很快找到曾经浏览的物品。

图5-10 我的足迹UI图

5.2.11  我的分享模块

如图5-11所示,用户在我的页面点击我的分享,就可以查看自己分享过的所有物品,系统会根据用户分享时间进行排序,能够很好的方便用户查找自己分享的喜欢的物品,另外服务器会根据大数据进行分析为用户推荐商品。

图5-11 我的分享UI图


 

6 系统测试

6.1 系统测试目标

通过对最终软件的功能和性能测试,希望所开发软件能够正常运行,能完成期望的所有功能,通过测试发现系统问题,不断地解决。

6.2 APP功能测试

根据对系统的使用和测试,并对主要功能设计测试用例如表6-1所示:

表6-1 系统测试用例表

测试功能

测试用例

测试结果

注册

账号:1889431 密码:banwxf

成功注册

登陆

账号:1889431 密码:banwxf

成功登陆

搜索

iphone

搜索成功

加入购物车

iphone7

加入成功

订单提交

iphone7

下订单成功

足迹浏览

潮流女装

正常

分享统计

华为p10

记录分享成功

状态测试

关闭有效网络

提示无网络,UI显示没有网络

订单查看

iphone7

显示iphone7

不登录

第一次进入购物车

UI显示请先登陆

6.3  APP性能测试

通过对UI界面、图片加载进行测试,系统并没有出现卡顿,不能运行的情况。并且APP很流畅,能够很快加载界面和图片,和期望的一致,并且系统运行比较稳定。


结束语

通过对移动购物APP的开发与设计,让我对于Android平台的整体设计和软件开发有了更深入的理解和认识,让我对Android系统的整体架构更加的了解。对于发现的问题,寻找解决方案,不断的解决问题有了一些实际经验和解决问题的思路,也对整个APP设计的流程有了一个更清晰的认识和实践机会。通过开发移动购物APP,让我明白了前期开发中需求分析在整个软件开发过程中是非常重要,好的需求分析对软件开发起指导作用。由于对前期的需求分析和数据库的设计做的不够好、不完善,导致最终成型的APP的用户体验和可用性比预期的差。如果刚开始努力将自己项目的需求分析和数据库表结构设计做的更完善,我相信会让APP的开发过程变得更轻松,开发思路会更加清晰,APP的可用性也会大大的提高。在软件开发过程中,只有不断的完善需求分析才能开发出受欢迎、功能更完善、功能强大的软件。另外,从团队合作、和人交流方面来说,我学会了怎样和同学、老师沟通交流来解决开发过程中遇到的各种问题。学会这些,让我在以后的工作中或学习中将能很快,很容易的融入工作团队

这次毕业设计是对我在大学四年学习成果的一次检验和提升,也是我第一次独立的进行APP开发的一次实践。四年中做过很多的课程设计,每次完成都会有不同的收获和成就感,所以我在毕业设计准备的阶段就非常重视这次毕业设计的开发与设计,我想用这个设计为自己的校园生活和学习生活画上一个完美的句号,勇敢的步入社会。然而事实并没有像我想象的那么顺利,在这个过程中有过放弃的想法,也有过换题的冲动,但最终我还是坚持了下来。通过这次设计,我巩固了Java程序设计语言,复习了很多程序设计的实现方法,加深了对软件工程的认识与体验,对自己专业知识有了一定程度检验,认识到了自己的不足。特别是在开发设计期间接触了很多不懂的知识,刚开始做的很慢,不知道如何下手,但是通过查阅一些相关的资料,慢慢系统功能逐渐完善的时候,自己就感觉自己的付出是值得的,另外,我也学会了怎么去查找资料,慢慢的在遇到新问题时我能有自己的解决思路,通过一遍一遍的梳理思路和询问老师同学,最终一步步解决遇到的问题。

这个系统涵盖了之前学习的大多数知识,比如:软件设计、软件工程、数据库设计等等都融入了进去。本系统让我对软件开发过程更加熟悉,编程思想也有了进一步提升。由于这个APP在各个模块上做得都不是很完美,但是我会在接下来的工作中努力学习将各方面的能力提高,做出可用性更高,用户体验更好的软件。


参考文献

[1]曾宪杰.大型网站系统与Java中间件实践[M]. 电子工业出版社,2014.5,15-17.

[2]任玉刚.Android开发艺术探索[M].电子工业出版社,2015.9,429-421.

[3]何红辉.Android源码设计模式解析与实战[M]. 人民邮电出版社,2015.11,100.

[3]Android系统的内存管理研究[J]. 魏栋.单片机与嵌入式系统应用.2012(04).

[4]O2O电子商务商业新模式分析[J]. 苏涛.全国商情(理论研究). 2012(01).

[5]Android移动开发优化策略[J]. 徐尤华,熊传玉.计算机时代. 2011(12).

[6]基于XMPP协议的Android即时通信系统设计[J]. 黄伟敏.电子设计工程. 2011(08).

[7]基于MVC模式的网上购物系统的设计与实现[J]. 冯晓强.现代计算机. 2009(07).

[8]Android的架构与应用开发研究[J]. 姚昱旻,刘卫国.计算机系统应用. 2008(11).

[9]陈昊鹏.Java编程思想(中文版 第4版)[M]. 机械工业出版社. 2007.6,200-203.

[10]Android数据库SQLite性能优化[J]. 林培杰,朱安南,程树英.计算机系统应用.2014(04).

[11]需求分析在软件工程中的重要作用解析[J]. 张利明.电子制作.2013(18).

[12]Android移动应用测试[J]. 张立芬,周悦,郭振东.中国新通信. 2013(03).

[13]乔治.面向对象的系统分析与设计[M]. 清华大学出版社, 2009.1,200.

[14]熊节.设计模式精解[M]. 清华大学出版社 ,2004.12, 89.

[15]邵维忠、杨芙清.面向对象的分析与设计[M]. 机械工业出版社, 2013.1, 94.

[16]谢萍.需求分析与系统设计[M]. 机械工业出版社, 2009.9, 156.

[17]IvarJacobson.统一软件开发过程[M]. 机械工业出版社, 2006.1, 365.

[18]邵维忠,UML用户指南[M]. 机械工业出版社, 2001.5, 214.

[19]Meliir Page-Jones,Meliir Page-Jones.UML面向对象设计基础[M]. 人民邮电出版社, 2012.5,156.

[20]刘润东.UML对象设计与编程[M]. 北京希望电子出版社, 2003.12, 97.

[21] The dynamics of local and interactive effects on innovationadoption: The case of electronic commerce[J]. Hsin-Yu Shih. Journal of Engineeringand Technology Management. 2012(3).

[22] Research on Coordination Development between ElectronicCommerce and Modern Service Industry[J]. Xiaoming Meng. Journal ofComputers. 2011(7).

 


致谢

本次毕业设计让我学到了很多东西,虽然做毕业设计的过程中遇到了很多困难,但是我最终还是完成了。从刚开始选题、查找资料、需求分析、UI设计、网络请求设计、服务端开发、app开发这个过程中,我喜悦过,也痛苦过,彷徨过,烦恼过。但当作品完成后,现在复杂的心情烟消云散,自己甚至还有一丝成就感。

首先,我最想感谢我的母校,甘肃农业大学。在这里我度过了四年美好的大学时光,在这四年里我得到了很多的锻炼,获得了很多知识,也收获了友情。


原创粉丝点击