【Android开发】旧书交易系统(OBT),安卓购物软件开发,安卓聊天软件开发,数据库应用,安卓直连mysql数据库

一、项目简介

1. 概述

OBT(old book trade)深大旧书交易平台,是专门为深大学生量身定制的二手教科书、二手课外书等书籍的交换平台。同学们用过的教科书、课外书都可以用在本平台上换成需要的教科书或者课外书。旧书交易系统是为师生服务的公益平台项目,旨在实现书籍回收利用、促进学习交流、节省学生开销等宗旨。目前OBT已经完成安卓手机端的开发,未来将对第一版本进行完善,并择机开发ios版本和鸿蒙版本。

2. 意义

OBT旧书交易系统是一个专门为深大学生量身定做的二手书交易平台,其意义总结有以下几点:

1) 实现校内图书的回收利用,为绿色环保、开源节支贡献自己的一己之力;

2) 促进同学之间的交流与联系,切实解决卖书难、买书难的问题。

3) 不经过第三方商家,实现没有中间商赚差价,真正实现压低图书价格,平常在其他旧书店20块钱才买得到的书,在OBT上只需10元就能买到;

4) 探索使用Q点结算,不涉及金钱交易,真正实现图书互换。
经过我们前期的市场调研,目前深大大概有66.3%以上的学生有意愿购入和使用二手书,而他们迫于当前二手书交易的局限,只能从校外的旧书店用较高的价格购买。而OBT的推出,将有望于改变这一现状,实现每年5000册图书的交换,惠及深大3万多人。同时也将助力绿色环境建设,帮助贫困学生以较低价格获得心仪图书。

3. 软件卖点

A.避免资源浪费
很多同学的教材使用完之后,多数选择扔掉或者放着不用,这会造成极大的资源浪费。如果提供OBT这样一个平台,就能让资源循环利用。既能环保,又可以节省同学们的日常开支。

B.使用数据库驱动
鉴于教材的多种多样,我们根据深大的课程体系,按照年级、专业进行分类,并为每一本书贴上标签,分好编号,使得OBT平台更好地为深大学子服务。

C.不止于购书
OBT平台将提供论坛专区,用于同学们在上面分享读书笔记,看书心得,或者是分享考试复习资料,探讨学习问题等,将会是一个校内的专属学习论坛。

4. 软件创新点

A.交易方式不同
与传统交易平台不同,OBT将采用类似于“物物交换”的交易模式,所有交易不涉及金钱,“卖”出去的书籍将根据定价和新旧程度获得一定数量的Q点,后续可以使用Q点“购入”自己需要的书籍。

B.为深大学子量身定做
将二手书在校内流传,一是避免了中间商赚差价,二是由于课程体系和教师差异不大,教材上的笔记等内容都能很好地被再利用。所购入的二手书也更加适合自己。

C.提供互评机制
与现行单方面的评价不同,OBT平台买卖双方都可对对方做出评价,评价包括打分和文字评论(可配上图片),系统将根据评价生成个人信用分,此外,当进行交易的时候,同学们可以根据评价选择适宜的买方或者卖方。

5. 主要功能

A. 非常细节地复现目前主流App的登录注册功能,带有正则表达式判断、随机图片验证码、以及手机验证码等功能。

B. 模拟淘宝、京东首页设计,具备“轮播广告位”,可以引入广告获取收益,从而维系平台的维护,并且利用优质广告丰富同学们的生活。

C. 和现有平台不同,OBT实现买卖一体化,只需要下载一个App就可以完成买、卖、售后相关操作,操作方便,节约手机内存。

D. 和现有平台不同,OBT不涉及金钱交易,单纯地使用Q点作为物与物交换的媒介,所有交易使用Q点进行结算,能够模拟实现书籍交换的机制。

E. 图书管理方面:实现基本的增删查改、以及根据特定条件、复合条件排序。有购物车功能。

F. 用户管理方面:用户可以上传头像、修改更新个人资料,多用户时还可以实现自由的添加、删除、切换等。

G. 订单管理方面:包含未支付、已支付、待收货、确认收货、评价等阶段属性。并根据图书卖家和买家对这些订单进行标标识,从数据库读取时采用嵌套查询的方式。

二、项目架构

本项目共包含五大模块:登录注册模块、首页设计模块、图书管理模块、用户管理模块、订单管理模块,每个模块之间的简单关系如图所示,整个项目的流程请参见中期报告。接下来,我们将逐一对每个模块的内容和功能进行详细的介绍。
在这里插入图片描述

1. 登录注册模块

(1)包含的活动和功能
登录注册模块主要包含三个活动的内容:LoginActivity(登录)、RegisterActivity(注册)、ForgotPasswordActivity(忘记密码)。其中每个活动包含的功能如下:
在这里插入图片描述
(2)流程图
如图所示,从左到右依次是登录、注册、找回密码的逻辑流程图。我们可以看到每一步的操作都非常严谨地保证了系统的安全性,对账号的保护包括但不限于人机,另外对用户的开放度也做到适度并友好,用户可以轻松修改并找回自己的密码,同时还可以更换自己喜欢的头像。
在这里插入图片描述
(2)前后端相关代码
如表2所示,罗列出该模块设计的相关代码文件。
在这里插入图片描述

2. 首页设计模块

(1)包含的活动和功能
首页设计模块主要包括两个活动:HomeFm(首页模块)和SearchActivity(搜索活动)。其中每个活动包含的功能如表3所示。
在这里插入图片描述
(2)流程图
如图所示,从左到右依次是轮播广告位、智能推荐、搜索活动的流程图。可以看到,我们对轮播广告位的嵌入自然而合理,对于搜索功能的实现符合用户平常习惯,并且我们也不断更新用户的喜好,并根据喜好推荐相应内容。
在这里插入图片描述
(3)前后端相关代码
如表4所示,罗列出该模块设计的相关代码文件。
在这里插入图片描述

3. 图书管理模块

(1)包含的活动和功能
图书管理模块主要涉及:HomeFm(首页),CartFm(购物车),ShopFm(我的商店),AddNew(添加新书)四个活动。其中每个活动及其对应的功能如表5所示。
在这里插入图片描述
(2)流程图
如图4-2-4是我的商店(即卖家)图书管理,如图4-2-5是购物车的图书管理,图4-2-6是首页的图书管理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)前后端代码
如表6所示,罗列出该模块设计的相关代码文件。
在这里插入图片描述

4. 用户管理模块

(1)包含的活动和功能
用户管理模块主要涉及MineFm、LoginActivity、RegisterActivity和ForgetPassWordActivity四个活动。其中每个活动对应的功能如表7所示。
在这里插入图片描述
(2)流程图
由于登录注册的流程图前面已经叙述过了,这里只叙述MineFm也即个人中心的流程图。
在这里插入图片描述
(3)前后端代码
如表8所示,罗列出该模块设计的相关代码文件。
在这里插入图片描述

5. 订单管理模块

这一模块由于项目时间有限,还没有实现用户界面,不过其他模块已经预留了相应的API接口,数据库也设计好了,后面会继续将项目做完整。

三、项目关键设计

1. 数据库设计

(1)登录注册模块
这一块的数据库主要分为两张表,一张是存放账号和密码的user表,一张是存放账号和详细信息的userInfo表。
在这里插入图片描述
这里主要要对几点进行说明:

A. 由于手机号、密码、学号这些不需要参与任何的运算,知识一串数字,因此采用varchar存储,这样可以有多少位就存多少位,节省空间。

B. 对于用户头像IMAGE,在java中,我们需要将一张图片先转为bitmap编码,然后再转为byte数组,然后转成String类型,最后使用blob存储。这里不用text,是因为其空间大小不足。

C. 将账号密码和账号信息分开存放,是为了安全起见,因为后面会有很多环节需要访问信息表,如果密码也放在信息里面,就很容易造成信息泄露。

D. 记住密码功能,是将密码保存到手机数据库中(使用SQLite),然后进入登录界面的时候自动填充。
(2)首页设计模块
这个模块主要涉及book表,从book里面选出相应的推荐书籍展示出来,然后点击购买或者加购操作会跳到其他对应的模块进行完成。
在这里插入图片描述
这里需要重点说明几点:

A. 每一本图书都有唯一的序列号BID,索引的时候都是根据BID索引的。

B. 每一本图书都适用SOLD标记是否已经售出,如果售出,其他用户便不能再加购或者购买,也不能展示在商品页。

C. 图书图片还是跟用户头像一样,适用Blob存储,解码和译码过程也大概一致。

D. CLASS主要用于对图书分类,方便后续的智能推荐和排序。

(3) 图书管理模块
图书管理模块会涉及到book表,购物车表,订单表等,分别对应展示、加购等操作,他们之间也存在一定的关系,比如一本书可以被多个购物车(以用户手机号作为索引)收藏,一个购物车也可以收藏多本数,因此他们是多对多的关系;而对于订单而言,因为一个订单只能有一本书,而一本书也只能对应一个订单,因此订单和书籍是一对一的关系。
在这里插入图片描述
这里需要重点说明几点:

A. 关于订单状态的说明:为了更节省空间地表示其状态,这里使用int型,我们规定-1表示未支付状态、1表示已支付未发货状态,2表示已发货未收货状态,3表示已收货状态,4表示订单完成(即卖方收到Q点)。

B. 其余的表在之前也相应介绍过,这里不再重复。注意,这里为了方便,使用账户登录密码作为支付密码。

C. 在用户和订单因为是1对多的关系,所以我们需要将用户的主码(手机号码)作为订单的外码。其余情况也类似。
(4)用户管理模块
这个模块主要涉及用户的一些信息,以及手机自身的SQLite数据库相关表(不同于mysql,不能多台手机共享),其中主要包括user表、userInfo表、userlist表(SQLite)。他们之间存在一些关系,比如user和userInfo是一一对应的,把密码分开其实是为了账号的安全,因为我们在使用app的过程中会经常性的访问数据表,如果密码放在一起,就很有可能会泄露。然后userlist和user是一对多的关系,userlist存放着添加在手机中的用户列表(包括密码),当用户切换时,可以自动取出账号密码去mysql数据库匹配。其数据表和ER图(只画出表之间的关系)如图所示。
在这里插入图片描述
这里需要重点说明几点:

A. 和主流的App一样,我们为了不增担手机的负担,只将用户的账号名和密码存放在userList中,并且为了保证密码的安全,我们在后端代码中实现了对密码的加密。

B. 对于User表,因为账号是惟一的,因此在匹配账号密码的过程中,我们加入条件limit 1,这样当找到一个匹配关系后就结束,不会浪费额外的不必要查询。

C. 对于phone和sid(学号),因为我们并不需要对其进行数据上的运算,而是将其作为一个索引值,所以使用varchar数据类型。考虑到一个学生只有一个学号,但是一个学生可以使用不同手机号码注册不同的账号,因此我们使用手机号码作为账号的主键,但是使用学号作为学生的实名认证。
(5)订单管理模块
这一模块主要涉及的到数据表有订单信息表和交易记录表,其中订单信息表主要包含一些重要的买卖双方的信息,比如交易双方账号、交易状态等,而交易记录表主要是记录相关的交易快照,存储着订单号和交易状态。交易记录和订单信息是一一对应的,交易记录的设置一是方便查询,二是作为订单重要的存根。
在这里插入图片描述
这里需要重点说明几点:

A. 为了节省空间,我们使用一个int型数据来记录不同的订单状态,比如使用0表示订单处于刚创建为付款状态,使用1表示订单已付款为发货状态,使用2表示订单已发货未收货状态,以此类推。

B. 另外,在每次订单创建的同时,我们要更新book,将图书设置为已售出,避免重复出售的情况。

2. 关键功能及代码

(1) 连接mysql
因为我们每次使用jdbc连接,都需要创建一个连接器,所以我们这里干脆将其写成一个Helper类,并且在里面放着我们的ip地址和密码,以及数据库的相关信息。
在这里插入图片描述
(2)正则表达式检查手机号、学号和密码的合法性
以检查密码合法性为例,我们设定密码长度6-16位,并且必须至少两种字符以上组合。首先我们要创建正则表达式,然后使用这个正则规则检查密码,根据检查结果我们给出用户不同的提示信息。
在这里插入图片描述
(3)向mysql数据库写入注册的账号密码和账号信息
这里我们获取用户的相关信息之后,建立数据库连接器,然后开启一个子线程写入,写入成功就是注册成功, 如果写入不成功给用户一定的回馈信息。
在这里插入图片描述
(4)注册和找回密码时,发送手机短信验证码,并检查验证码正确性
这一部分我们使用了第三方的SDK,有一部分免费的资源开放,具体的配置这里不展开细说,主要展示一下使用时的代码,我们通过网络向第三方服务器发送请求之后,该服务器会发送一个验证码到手机端,然后用户填写验证码之后,我们重新想第三方服务器发送请求验证验证码的正确性,通过返回的结果我们执行对应的操作。
在这里插入图片描述
(5)登录时,查看账号和密码是否匹配
这里依然适用mysql语句进行查询,为了查询快速,限制条件limit 1,即找到一个匹配结果后就返回。
在这里插入图片描述
(6)登录时,随机图片验证码的生成与匹配
这里的图片验证码是后台自己生成的,其逻辑也比较简单,就是随机生成四个字符,然后使用安卓自带的绘图工具将这四个字符画出来,加上一些干扰就完成了,为了方便使用,我们写了一个图片验证码的支撑类,其部分代码如图3-2-6所示,使用方法如图3-2-7所示。
在这里插入图片描述
在这里插入图片描述
(7)记住密码功能
主要使用checkbox供用户选择是否记住密码,如果记住密码,那么便将用户的密码存储到SQLite中,在下次进入的时候自动填充即可。
在这里插入图片描述
(8)在mysql中存储图片
将图片转成bitmap格式,再转成byte数组,最后转成String。
在这里插入图片描述
(9)轮播图的实现
在安卓开发当中,轮播图的概念在现行的主流App中时常见到,其主要的实现原理其实也并不复杂。主要的难点集中在几个方面:

A. 将图片设置成可以滑动模式:使用ViewPager可以将图片放入,并实现左右的滑动。
在这里插入图片描述
B. 如何实现自动轮播:使用Java的线程机制,用Thread#sleep设计定时器,定时向主线程发送信息,主线程接到信息后就可以更新UI了。
在这里插入图片描述
C. 如何在用户长按图片时停止自动播放,松开后又继续自动播放:这个主要是依赖安卓系统自带的监听器,监听用户是否长按,如果长按我们先暂停定时器即可。
在这里插入图片描述
(10)前端:设置沉静式标题栏
在这里插入图片描述

四、效果图

1. 登录注册

在这里插入图片描述

2. MainActivity

在这里插入图片描述
在这里插入图片描述

3. 其他界面

在这里插入图片描述

五、项目源码

完整代码请参加GitHub: https://github.com/JacksonKim-1024/Old-Book-Trade-OBT-

猜你喜欢

转载自blog.csdn.net/charenCsdn/article/details/123490631