• 健康先行微信小程序设计与实现


    目 录
    摘 要 I
    Abstract II
    1 绪论 1
    1.1 选题背景及意义 1
    1.2 国内外研究现状 1
    1.3 研究主要内容 2
    2 关键技术和开发环境 4
    2.1健身指标 4
    2.2 JSP开发技术 5
    2.3 MySQL数据库 7
    2.4 小程序 8
    2.5 个性化推荐技术 9
    2.6 开发环境及工具 10
    3 健康先行微信小程序系统分析 12
    3.1 需求分析 12
    3.1.1 会员帐户系统需求分析 13
    3.1.2 计划系统 15
    3.1.3摄入支出系统 16
    3.2 可行性分析 17
    3.2.1 经济可行性 17
    3.2.2技术可行性 17
    3.2.3 法律可行性 18
    3.2.4 时间可行性 18
    4 健康先行微信小程序系统设计 19
    4.1 总体设计 19
    4.2详细设计 19
    4.2.1服务端设计 19
    4.2.2 客户端设计 21
    4.2.3 数据库设计 21
    5 健康先行微信小程序系统实现 25
    5.1生成计划功能 25
    5.2身材管理 25
    5.3 摄入支出平衡管理 26
    5.4 健康管理 27
    6 健康先行微信小程序系统测试 28
    6.1系统兼容性测试 28
    6.2系统功能性测试 28
    6.3 系统性能测试 29
    7 总结 30
    参考文献 31
    致 谢 33

    5 健康先行微信小程序系统实现
    5.1生成计划功能
    通过自适应计划,让每个用户找到适合自己的计划,树立明确的运动目标。用户通过点击想要的达成的效果或者部位,如图5-1所示,进入计划详细页面进行计划的细微调整如图5-2所示。
    5.2身材管理
    通过身材管理直观的看到身材变化趋势,梳理运动信心。用户通过测量身材数据,并在小程序上记录身材变化如图5-3,添加成功后便可以直观的看到变化趋势,如图5-4所示。

    5.3 摄入支出平衡管理
    通过摄入支出平衡体系用户可以方便的查询到食物热量等信息,科学健康饮食健身。用户在搜索栏中搜索想要查询的食物/运动并根据找到的食物选择摄入的时间与份量,如图5-5。选择完成后成功添加到当日摄入食物列表中,如图5-6。
    5.4 健康管理
    通过基础数据帮助用户计算出个人健康状况表,用户通过修改个人资料,身高,体重等参数,如图5-7。本文转载自http://www.biyezuopin.vip/onews.asp?id=14129根据用户身体数据得到自身身体状况,如图5-8。

    6 健康先行微信小程序系统测试
    系统测试为系统开发的最后一道工序,只有经过缜密的系统测试,才能保证系统性能与功能的可靠性。通过测试用例反复测试,能将系统内一些隐藏的错误挖掘出来,从而让系统 及时得到修复与改善。

    package com.zszdevelop.planman.view;
    
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    import android.view.ViewGroup;
    
    import com.zszdevelop.planman.base.BaseBean;
    import com.zszdevelop.planman.utils.LogUtils;
    
    import java.util.List;
    
    import butterknife.ButterKnife;
    
    /**
     * Created by jimmy on 15/12/29.
     */
    public abstract class BaseSectionAdapter extends RecyclerView.Adapter {
    
        private final static int ITEM_TYPE_HEAD = Integer.MIN_VALUE;
        private final static int ITEM_ADAPTER_OFFSET = 1;
    
        private Context context;
        private int layoutRes;
        private List data;
    
        public BaseSectionAdapter(Context context, int layoutRes, List data) {
            this.context = context;
            this.layoutRes = layoutRes;
            this.data = data;
        }
    
        public T getItem(int position) {
            if (data.size() <= 0) {
                return null;
            }
            return data.get(position);
        }
    
        @Override
        public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            if (viewType == ITEM_TYPE_HEAD) {
                return onCreateHeadViewHolder(parent, ITEM_TYPE_HEAD);
            } else {
                return onCreateItemViewHolder(parent, viewType - ITEM_ADAPTER_OFFSET);
            }
        }
    
        @Override
        public final void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            int type = holder.getItemViewType();
    
            if (type == ITEM_TYPE_HEAD && position == 0) {
                //head的相关逻辑写在这里
                LogUtils.e("处理头部的逻辑");
                onBindHeadView(holder, position);
            } else {
                //这个是处理常规ITEM的操作
                onBindItemView(holder, position - (hasHeader() ? 1 : 0) );
            }
    
        }
    
        @Override
        public int getItemViewType(int position) {
            if (position == 0 & hasHeader()) {
                return ITEM_TYPE_HEAD;
            } else {
                return super.getItemViewType(position) + ITEM_ADAPTER_OFFSET;
            }
        }
    
        @Override
        public int getItemCount() {
            int itemCount = getBasicItemCount();
            if (hasHeader()) {
                itemCount += 1;
            }
    
            return itemCount;
        }
    
        public void appendData(List list) {
            if (list == null) {
                return;
            }
            data.addAll(list);
        }
    
        public void clear() {
            LogUtils.e(data.size()+"前");
            data.clear();
            LogUtils.e(data.size() + "后");
            notifyDataSetChanged();
        }
    
    
        private int getBasicItemCount() {
            return data.size();
        }
    
        public abstract boolean hasHeader();
    
    
        public abstract RecyclerView.ViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType);
    
        public abstract RecyclerView.ViewHolder onCreateHeadViewHolder(ViewGroup parent, int viewType);
    
    
        public abstract void onBindItemView(RecyclerView.ViewHolder holder, int position);
    
        public abstract void onBindHeadView(RecyclerView.ViewHolder holder, int position);
    
        protected class OtherViewHolder extends RecyclerView.ViewHolder {
    
    
            public OtherViewHolder(View itemView) {
                super(itemView);
                ButterKnife.bind(this, itemView);
            }
        }
    
        static class ViewHolder extends RecyclerView.ViewHolder {
    
            public ViewHolder(View itemView) {
                super(itemView);
                ButterKnife.bind(this, itemView);
            }
        }
    
    
    }
    
    

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

  • 相关阅读:
    linux远程桌面管理工具xrdp
    基于GPT搭建私有知识库聊天机器人(六)仿chatGPT打字机效果
    自己动手从零写桌面操作系统GrapeOS系列教程——4.1 在VirtualBox中安装CentOS
    MySQL-基础篇
    HTML+CSS实现按钮手风琴效果 | 青训营笔记
    将二维整型数组以二进制输出到文件与二进制文件读入到数组
    SSM+人才交流平台 毕业设计-附源码221022
    【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(十五)
    封装系统之新手操作版
    功能上新 | Magic Data Annotator智能出行舱内舱外全场景标注
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/127040014