“健身餐”APP

第 1 章 绪论

1.1 研究的背景

        随着社会发展,人们的生活质量越来越高,对自己身材的要求也越来越高, 健身健美中注重饮食,训练期间的饮食和生活需求较为严格[1]。经调查发现健身人 群的饮食结构非常苛刻,他们若想达到自己的运动目标,就要合理控制自己的饮食 结构和生活习惯,但发现目前大众健身业余爱好者在生活方式也很差的条件下,并 在就餐时没有太多考虑合理的营养比例和食物搭配,渐渐偏离自己的运动目标。

1.2 研究的目的和意义

1.2.1 研究目的

        因各类健身爱好者的饮食结构不够完善,且目前没有太多合适的 APP 能实现 较为完善的饮食搭配方案,健身爱好者能通过此 APP 的帮助,改善自己的饮食结 构,从而达到预期的健身效果。本“健身餐”系统结现有的营养搭配方案,制定了 部分食物搭配套餐,并记录健身者使用此 APP 的饮食记录,做出分析,通过分析 结果为健身者量身定制食物搭配方案,帮助健身爱好者尽早达到运动目标。

第 2 章 相关概念与技术介绍

2.1 相关概念

2.1.1 Android

        安卓(Android)是一种基于 Linux 内核(不包含 GNU 组件)的自由及开放源 代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国 Google 公司和开放手机联盟领导及开发。Android 操作系统最初由安迪·鲁宾开发,主要 支持手机。2005 年 8 月由 Google 收购注资。2007 年 11 月,Google 与 84 家硬件 制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良 Android 系统。 随后 Google 以 Apache 开源许可证的授权方式,发布了 Android 的源代码。第一部 Android 智能手机发布于 2008 年 10 月。Android 逐渐扩展到平板电脑及其他领域 上,如电视、数码相机、游戏机、智能手表等。2011 年第一季度,Android 在全球 的市场份额首次超过塞班系统,跃居全球第一。 2013 年的第四季度,Android 平 台手机的全球市场份额已经达到 78.1%。2013 年 09 月 24 日谷歌开发的操作系统 Android 在迎来了 5 岁生日,全世界采用这款系统的设备数量已经达到 10 亿台[2]。

2.1.2 Android Studio

        Android Studio 是谷歌推出的一个 Android 集成开发工具,基于 IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调 试。在 JetBrains Intellij IDEA 的基础上,Android Studio 提供: (1)基于 Gradle 的构建支持; (2)Android 专属的重构和快速修复; (3)提示工具以捕获性能、可用性、版本兼容性等问题; (4)支持 ProGuard 和应用签名; (5)基于模板的向导来生成常用的 Android 应用设计和组件; (6)功能强大的布局编辑器,可以让你拖拉 UI 控件并进行效果预览[3]。

2.2 相关技术

        下文介绍了本 APP 主要使用的相关技术。

2.2.1 MySQL

        MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用 方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数 据库管理系统) 应用软件之一。 MySQL 是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中, 而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有 成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库[4]。

2.2.2 Niginx

Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供 了IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开发的,公开版本 1.19.6 发布于 2020 年 12 月 15 日[5]。

2.2.3 MVVM 框架

        MVVM 是 Model-View-ViewModel 的简写。它本质上就是 MVC 的改进版。 MVVM 就是将其中的 View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑 分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时 帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的 WPF 带来了新的 技术体验,如 Silverlight、音频、视频、3D、动画……,这导致了软件 UI 层更加 细节化、可定制化。同时,在技术层面,WPF 也带来了 诸如 Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate 等新特性。MVVM(Model-View-ViewModel)框架的由来便是 MVP(Model-View-Presenter) 模式与 WPF 结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有 MVP 框架并且把 WPF 的新特性糅合进去,以应对客户日益复杂的需求变化[6]。

2.2.4 双向绑定

数据的双向绑定技术的核心是采用数据劫持结合发布者订阅者模式,通过 Object.defineProperty()对每个属性的 get 和 set 进行拦截。在数据发生变化的时候发 布消息给订阅者,触发相应的监听回调。 仅仅使用 Object,defineProperty()就能完成一个简单的双向绑定,但是效率比较 低。观察者模式让双向绑定更有效率,它是一对多的模式,一指的是修改的一处数 据,多是凡是用了这个数据的地方都更新。数据劫持就是利用 Object.defineProperty() 读操作数据的 set,get[7]。

第 3 章 系统分析与设计

3.1 需求描述

3.1.1 功能需求

        对于各类健身爱好者,合理额健康饮食结构决定了健身爱好者达到运动目标的 时常和运动效果,因此在本设计中,最大的需求在于饮食搭配。在本 APP 中用户 可以根据自己的健身时间,选择合适的健身餐。其次,用户的选餐数据和时间记也 是本软件的重点模块。通过后台的整理与分析,能直观地表现近期的食物选择和营 养指标变化趋势关系。

3.1.2 安全需求

        在安全性方面,本 APP 属于客户端软件,含有商品购买模块,后端采用加密 技术,保证系统有较高的安全性。在数据库方面个人隐私也会受到加密保护,故个 人隐私数据不会无故泄漏。

3.2 系统界面设计

        本界面采用接近大众化的界面,主要分为主欢迎界面、选套餐界面和个人信息 界面。本 APP 导航栏放在页面底端且一直存在,方便用户切换到相应界面。 界面设计原型见图 1~图 12

图 1 欢迎界面

图 2 主界面

图 3 选套餐界面

图 4 选餐界面

图 5 个人信息界面

图 6 手机号登录界面

图 7 密码登录界面

图 8 个人卡券界面

图 9 个人订单界面

图 10 夜间模式主界面

图 11 夜间模式个人信息界面

图 12 夜间模式购物车界面

3.3 系统功能模块设计

系统分为三大部分,宣传介绍、套餐管理和个人信息,这也是本APP的三大主要界面。在欢迎页面之后用户将会来到主页面,即宣传介绍页面。在此页面中,用户能看到本日推送的套餐个性化详细介绍,点击该页面介绍可以转到选择界面,也就是套餐管理界面,主要的操作为增删改查。

在套餐选购界面,左侧的侧边栏有早餐、中餐、晚餐和水果各类选择。主要操作为增。

在个人信息界面,用户可以看到自己的消费记录、消费卡券、个人信息等相关内容。主要的操作为增删改查。

在用户初次使用APP时,需要根据提示注册相关用户账号信息。

表1显示了本APP各类系统组成部分的功能概述。

表 1 功能模块

系统组成部分

功能概述

服务器

验证码登录接口

密码登录接口

增查收货地址接口

商品展示接口

商品查询接口

静态资源下载

客户端

登陆操作

退出登录

启动页广告

基本的对商品的浏览

商品的查询

购物车查询

查询收货地址

移动信息推送

夜间模式

 本系统数据流向见以下表2:

表 2 数据流向表

数据类型

数据流向

交易商品信息

数据库->客户

商品类别信息

数据库->客户

订单状态及信息

数据库->客户(仅保留于本机)

用户个人信息

数据库->客户

购物车信息

数据库->客户(仅保留于本机)

交易支付情况

数据库->客户

3.4 数据库设计

3.4.1 数据表设计

        在“健身餐”APP的数据库设计上,数据库的表主要集中在用户的选餐记录、用户个人信息、用户订单记录等,详细见表3。

表 3 数据库表

表名

功能

user(用户表)

存储用户的基本信息

user_address(用户地址表)

存储用户的地址信息

orders(订单表)

用于存储订单状态

order_detail(订单详细表)

存储订单的各项数据

good_comment(商品反馈表)

用于存放用户对商品的反馈

goods(单个商品)

用于存放商品

category(菜谱表)

用于存放菜谱的种类

tags(菜品标签表)

用于存储菜品标签

order_comment(订单反馈表)

用于存放用户对订单的反馈

3.4.2 数据表关系图

数据表关系图如图 13 所示。 

第 4 章 系统实现

4.1 本项目使用的技术

本项目使用的技术详见表 4。

表 4 本项目使用的技术

后端使用的技术

SpringBoot框架

阿里云Linux

Nginx

Https技术

接口数据令牌传输

私密数据MD5加密

客户端使用的技术

MVVM框架

RecycleView实现页面滑动列表

运用cardView卡片式布局

运用SQLite实现用户部分信息的存储

SharedPreferences文件存储功能

库Retrofit发送网络请求解析数据

Material Design进行UI界面开发

Glide库进行网络图片读取

网络数据实现双向绑定

腾讯云消息推送机制

腾讯云云短信

Kotlin协程

4.2 后端代码组成说明

        客户端使用了 SpringBoot 框架,主要可分为 Mapper 层,Service 层,Controller 层,Bean 层。 文件目录清单见表 5。

表 5 主要文件清单

文件夹名

主要文件

主要功能

Center

LoginData

用于记录全局变量

Info

.kt文件

\

Logic

logic.dao

本地数据库层

logic.model

接口实体类

logic.network

网络请求层

logic.repository

Repository层

Ui

ui.activity

实现App中各个页面

ui.adapter

定义特定界面的适配器

ui.fragment

定义界面中按钮操作

ui.viewModel

数据绑定ViewModel层

Util

ActivityCollector.kt

Activity管理工具类

ConfigData.kt

白夜间模式控制类

CodeTimeUtil.kt

验证码控件工具类

JilemeApplication.kt

/

项目application

MainActivity.kt

/

主Activity

color

.xml文件

App中颜色合集

drawable

.png文件

App中图片合集

layout

.xml文件

App中页面布局合集

接下来介绍主要代码结构与详细功能,见以下目录树。

健身餐APP\jcs\后端\src\main\java

├─java

│  └─cn

│      └─fishei

│          └─competition

│              │  CompetitionApplication.java

│              │

│              ├─bean // 实体类

│              │      Address.java // 收获地址实体类

│              │      Goods.java // 商品具体信息实体类

│              │      User.java // 用户实体类

│              │

│              ├─config // 配置管理

│              │      ErrorConfiguration.java

│              │      HttpToHttpsConfig.java

│              │      MvcConfig.java

│              │

│              ├─controller // 控制层

│              │      AddressController.java // 地址控制类

│              │      ErrorController.java // 错误控制类

│              │      Index.java // 首页

│              │      MenuController.java // 菜单控制类

│              │      UserController.java //用户控制类

│              │

│              ├─mapper //数据访问接口

│              │      AddressMapper.java // 地址

│              │      MenuMapper.java //用户

│              │      UserMapper.java //菜单

│              │

│              ├─service //service层

│              │  └─impl //代码直接写在了实现类里面,这里处理写入数据库或者处理读取数据后的数据,比如在注册用户时,还必须随机添加密码及头像等

│              │          AddressServiceImpl.java

│              │          MenuServiceImpl.java

│              │          UserServiceImpl.java

│              │

│              └─util //工具类

│                      AddSmsTemplate.java

│                      CommonUtil.java // 发送短信模板,加密工具类等

│                      Difference.java

└─resources

    │  application.yaml

    │  log4j2.xml //日志,配置文件等

    │

    ├─mapper // Mapper写数据库命令

    │      AddressMapper.xml

    │      MenuMapper.xml

    │      UserMapper.xml

    │

    └─static // 此处存放静态文件

4.3 客户端代码组成说明

以下选择了主要的目录结构做讲解:

健身餐APP\app\src\main\java

└─cn

    └─fishei

        └─jsc

            │  JscApplication.kt

            │  MainActivity.kt

            │

            ├─center // 数据中心

            │      LoginData.kt //这里定义了全局变量列入判定登录状态,COOLIE的值,是否为主页等变量

            │

            ├─Info

            │      BagInfo.kt

            │      FoodInfo.kt

            │

            ├─logic //逻辑层

            │  ├─dao

            │  │      GoodsDatabaseHelper.kt // 本地数据库

            │  │

            │  ├─model //定义接收本地数据以及网络接口数据的实体类

            │  │      AddressList.kt

            │  │      Goods.kt

            │  │      LocationBackInfo.kt

            │  │      LocationDetail.kt // 接收地址相关数据

            │  │      MenuResponse.kt // 接收菜单相关数据

            │  │      PasswordLoginArgs.kt

            │  │      PasswordLoginInfo.kt // 密码登录后返回的状态及信息

            │  │      PhoneBackInfo.kt // 手机登录后返回的状态和信息

            │  │      ShopRecourse.kt // 接收购物车相关数据

            │  │      User.kt

            │  │      UserArgs.kt

            │  │      UserResponse.kt // 用户数据相关,包括请求状态,请求后的用户信息

            │  │

            │  ├─network // 网络层,这里封装了相关的网路请求,并运用了数据绑定,协程等技术

            │  │      MenuService.kt

            │  │      ServiceCreator.kt

            │  │      UserNetwork.kt

            │  │      UserService.kt

            │  │

            │  └─repository

            │          Repository.kt

            │

            ├─map

            │      MyLocationListener.kt

            │

            ├─ui // 这里是UI层

            │  ├─activity // activity与显示页面的数据交互并联系viewModel

            │  │      BaseActivity.kt // 所有其他activity继承此activity,便于管理

            │  │      LoginActivity.kt

            │  │      LoginPasswordActivity.kt // 密码登录,验证码登录activity

            │  │      MeAboutActivity.kt

            │  │      MeActivity.kt

            │  │      MeAddressActivity.kt

            │  │      MeAsActivity.kt // 我的页面相关activity

            │  │      MeEvaluateActivity.kt

            │  │      MeMessageActivity.kt

            │  │      MenuActivity.kt // 菜单页面

            │  │      MeOpinionActivity.kt

            │  │      MeOrderActivity.kt

            │  │      MePrivacyActivity.kt

            │  │      MeRedBagActivity.kt

            │  │      MeReviseAddress.java

            │  │      ReviseAddressActivity.java

            │  │      WelcomeActivity.kt // 启动页加载广告

            │  │

            │  ├─adapter // 适配器

            │  │      AddressAdapter.kt // 地址

            │  │      MenuAdapter.kt // 菜单

            │  │      ShopAdapter.kt // 购物车

            │  │

            │  ├─fragment

            │  │      IndexFragment.kt // 首页

            │  │      MeFragment.kt // 我的

            │  │      MenuFragment.kt // 购物车

            │  │

            │  └─viewModel

            │          MenuViewModel.kt

            │          UserViewModel.kt

            │

            └─util // 工具类

                    ActivityCollector.kt // 管理所有的额Activity

                    CodeTimeUtil.kt // 请求短信Button管理

                    ConfigData.kt // 白天夜间模式切换数据

第 5 章 总结和展望

        通过本次课程设计,我在老师的教学和互联网的帮助下,完成了“健身餐”APP的设计,因时间原因和个人能力的欠缺,一些功能并没有完全实现,但在开发的过程中积累了大量的开发经验,这不仅加深了所学知识的印象,还在健身与饮食这方面上扩展了新的知识面,更好的实现了不同领域知识的融合。

        在本次课程设计中,融合了MySQL、Android、Kotlin等作为一体,让“健身餐”APP的功能更加强大。开发前期的界面设计相对后端较为简单,而时间大部分花在了后端的调试上。本次的界面设计运用了完全的卡片式布局、启动页广告、夜间模式等,但实现起来不是很容易,由此保持了我对Android设计的兴趣。

        因教学安排原因结束了本次“健身餐”APP的开发,部分功能尚未完善,但课程结束后定会多加学习,以本次设计的项目为基础,继续完善本学期未完成的短信登录、推荐功能等,将来会增加更多有趣实用的模块,为广大健身爱好者打造一个功能齐全的“健身餐”APP。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29024.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

健身Fitness

前言 加油 原文 健身常用会话 ❶ The school has recently built a new gym. 学校最近新建了一个体育馆。 ❷ Rowing machines provide a good indoor workout. 划船器械提供了一种很好的室内消耗体能的方式。 ❸ He strained and raised the barbell of 205 kilograms. 他…

有哪些既美味又健康的食品适合健身和减肥爱好者?

Ashley Yu ,Eat Fit Love 张常绿、胭脂渗透、夏天聪 等人赞同 自己做健身餐一年了,越来越喜欢这种饮食模式,而且也喜欢研究尝试各种菜谱,把健身餐做的多样而且美味! 早餐系列 - 水果烤燕麦 这个特别快手,…

本地部署 langchain-ChatGLM

本地部署 langchain-ChatGLM 1. 什么是 langchain-ChatGLM2. 什么是 langchain3. Github 地址4. 安装 Miniconda35. 创建虚拟环境6. 部署 langchain-ChatGLM7. 启动 langchain-ChatGLM8. 访问 langchain-ChatGLM9. API部署10. 命令行部署11. 其他,LangChain Documen…

betfair交易平均赔率与即时赔率的比较的思考

概念:betfair交易平均赔率:该赔率是以当前价位的交易量大小进行加权计算而得;betfair即时赔率:该赔率是当前betfair交易的赔率; 思考:对于这两个赔率思考了很久,通过这两个赔率反映了一个市场的…

了解世界杯赔率,让您运气更‘好‘(个人分享)

足球世界杯买球赢面计算 前言理论基础实际计算用例:代码实现真实数据 前言 此文是个人关于世界杯的一些浅显的看法,实际统计结果和计算方法有出入,可能原因:1)数据量不够。2)比赛双方差距够大导致的。但在…

德昂对话ChatGpt:如何做好BI行业的推广

|| 导语 企业级BI软件,一般面向企业内部的IT和专业分析人员,或者专业的服务团队,其营销模式有别于面向个人的软件。 好的营销经理难寻,企业级BI软件产品的营销经理更是凤毛麟角。到底是内部培养,还是外部招聘? 看了…

Chatgpt3.5 在python上的简单应用

# 下面是python_LLM的环境变量,要引用的时候直接复制就行了 import openai import pandas as pd openai.api_key"sk_GbP"#这里填API #定义好询问函数 def get_completion(prompt, model"gpt-3.5-turbo"):messages [{"role": "u…

文本AI3.5的安装和基本用法:轻松掌握

PC端 1、首先打开Edge浏览器,这个浏览器是windows系统自带的 2、打开扩展管理->查找新的扩展 查找新的扩展 3、输入:WeTAb 进行搜索->安装 4、简单的使用 这里需要注意有时候,你询问AI问题的时候会提示你的询问次数已达到上限。解决…

如何防御ChatGPT们滥用同形异义词域名

Identity Digital域名 注册专场部分域名直降120元 点击直达 人工智能(AI)聊天机器人在全球范围内风靡,2023年将成为越来越多人关注的技术。OpenAI于2022年的最后一个季度发布了ChatGPT,这促使许多公司、组织和个人进入这一领域。甚…

Unity虚拟现实插件VRTK3.3使用教程三:VR场景交互-触碰,抓取,使用

vrtk中的交互-触碰,抓取,使用 参考:VRTK - 2.场景物体的交互:触碰,抓取,使用 - 简书 已经能在场景中移动了,接下来肯定想在虚拟场景中与物体互动吧! 虚拟场景互动主要包括触碰,抓取,使用三种方式. Touch 必要条件: 被接触的物体必须有C…

Avatar和虚拟场景如何影响用户VR社交行为

对于VR社交来讲,虚拟场景(社交环境)、Avatar(虚拟化身)是两个重要的元素,一个代表了人们在VR中互动的空间,而另一个则代表他们在这个空间中所扮演的角色。现阶段,Avatar有多种形态&a…

Unity+SteamVR开发——交互

一、前言 本文使用两个工具为Unity2018.4.26和SteamVR2.6.1,SteamVR2.6.1相比之前的版本有了很大的改变,其中在交互上有了很大的提升,SteamVR2.6.1上给出的案例中提供了抛射物体、线性驱动、环形驱动以及复杂的射箭操作等。尽管给出了诸多的交…

Unity-SteamVR物体交互

谈到Unity VR开发,即使是初学者也会听过SteamVR或者HTC VIVE,这款设备是目前在国内能够方便买到且在使用上不错的一款设备。其实SteamVR是集成在Steam里的一个VR插件,而HTC是硬件设备,运行时用到SteamVR这个插件(也是H…

Unity VR游戏开发干货教程:VR中的用户界面

在设计VR应用的用户界面时要考虑很多因素,而这些因素对于传统应用或游戏的界面设计可能都不是事儿。下面我们会看看作为一个VR开发者在设计用户界面时可能会遇到的一些问题,以及跟硬件相关的一些东西。UI分辨率和画质目前DK2的分辨率是1920*1080(单目是9…

【SR Works】使用HTC Vive Pro结合SteamVR在Unity中制作MR内容

HTC Vive Pro有两个前置RGB摄像头,官方出了一套SR Works SDK来借助这两个摄像头实现MR功能。 本篇的目标是,成功运行官方的MR示例,并结合SteamVR和SR Works SDK在Unity中实现MR项目的开发准备 1.下载SRWorks插件 下载地址: Late…

公司普通启动VR/AR软件开发虚拟场景游戏

随着元宇宙技术的不断革新,VR作为一种新兴技术,正在迅速普及。VR软件开发技术将用户沉浸到虚拟世界中,让人们可以身临其境地体验一些事物,如元宇宙游戏、商圈、展会、旅游等。而VR虚拟场景的开发,则是实现这一目标的重…

《SteamVR2.2.0交互系统(Interaction System)》(Yanlz+Unity+XR+VR+AR+MR+Valve+Teleport+Skeleton+立钻哥哥++ok++)

《SteamVR2.2.0快速入门》 《SteamVR2.2.0快速入门》 版本 作者 参与者 完成日期 备注 SteamVR2.2.0_Interaction_V01_1.0 严立钻 2019.04.11 ##《SteamVR2.2.0快速入门》发布说明: “SteamVR2.2.0快速入门”:是对“Stea…

怎么才能把短视频中文配音变成英文配音?

中文视频的类型 首先,将中文视频翻译成改为英文的视频,这是一个比较复杂的过程, 这里面还涉及到几种情况,下面简单罗列下: 第一种:带中文解说和中文字幕的视频; 第二种:只有中文解说…

Go Web下gin框架的模板渲染

〇、前言 Gin框架是一个用于构建Web应用程序的轻量级Web框架,使用Go语言开发。它具有高性能、低内存占用和快速路由匹配的特点,旨在提供简单、快速的方式来开发可扩展的Web应用程序。 Gin框架的设计目标是保持简单和易于使用,同时提供足够的…

【VINS-Fusion】学习笔记

配置文件-config\euroc\euroc_stereo_imu_config.yaml %YAML:1.0#common parameters #support: 1 imu 1 cam; 1 imu 2 cam: 2 cam; #1个mui,双目相机 imu: 1 num_of_cam: 2 imu_topic: "/imu0" image0_topic: "/cam0/image_raw" im…