springboot沈阳工学院体质测试系统(代码+数据库+LW)
摘 要为解决传统体质测试管理流程冗长、数据整理繁琐、服务局限等问题,开发了一套信息化体质测试系统,旨在实现高效智能的体质健康管理。该系统采用前后端分离架构,划分管理员与用户两类使用角色。用户端支持在线更新个人资料,浏览测试项目后可直接完成报名;通过筛选功能,能快速定位历史测试报告,报告内附带综合评分及健康建议。健康评估模块依据多项指标生成分析报告,帮助用户清晰了解自身身体状况。健康科普板块整合运动
摘 要
为解决传统体质测试管理流程冗长、数据整理繁琐、服务局限等问题,开发了一套信息化体质测试系统,旨在实现高效智能的体质健康管理。
该系统采用前后端分离架构,划分管理员与用户两类使用角色。用户端支持在线更新个人资料,浏览测试项目后可直接完成报名;通过筛选功能,能快速定位历史测试报告,报告内附带综合评分及健康建议。健康评估模块依据多项指标生成分析报告,帮助用户清晰了解自身身体状况。健康科普板块整合运动、饮食等知识,既支持关键词检索,也提供分类浏览;当用户存在体测相关疑问时,AI 助手实时响应,输出个性化健康建议。此外,论坛功能为用户搭建起健康管理经验交流分享的平台。管理员端承担系统全流程管理职责,涵盖用户信息管理、测试项目设置、健康评估数据录入、论坛内容审核及系统权限分配等工作。同时,通过数据加密技术与标准化操作规范,确保数据安全与流程合规。
系统基于模块化设计理念,各功能模块相互独立,便于后续升级维护,且测试数据可在多设备间实现同步处理。经实际验证,系统界面设计符合人体工程学,操作逻辑简洁直观,可满足学校、社会机构等多场景下体质测试全流程管理与健康知识获取需求。后续规划中,将引入智能算法对健康评估模型进行深度优化,基于个体数据特征,输出更为精准的运动建议方案。
关键词:双角色管理;模块化设计;健康评估;数据可视化
目 录
需求分析
现在大家越来越想方便、智能地管理自己的体质健康,但以前那套管理方法跟不上需求了。所以做这个系统,得分别搞清楚普通用户和管理员的不同需求。普通用户需要能方便地修改自己的信息,像学号、姓名、电话这些,在手机上就能随时改,保证健康档案不出错。测体质的时候,打开系统就能看到各个测试项目的介绍,想报名点一下就行,系统还会自动填好个人信息,不用反复输入。要是想看以前的测试报告,按项目名字或者报名ID一搜就出来,报告里有综合评分和健康建议,能清楚知道自己身体啥情况。
管理员主要干的就是把系统维护好。管用户信息时,能按姓名、性别查找,还能添加新用户、修改错误资料或者删掉不用的信息,保证数据不出错。测试项目管理这块也关键。管理员可以新建项目、修改内容或者删掉不用的项目。填写项目分数、检测时间这些信息时,系统会自动把关,比如删除项目前,会先看看有没有人报了这个项目,避免信息混乱。处理报名和报告时,管理员要审核报名数据,给用户打分时系统会检查分数是不是合理,同时还要保证报告完整,方便以后查数据。录入健康评估数据能批量操作,系统也会检查数据对不对,确保和对应学生关联上。论坛管理方面,管理员得审核帖子,把违规内容删掉,还要维护好各个板块分类。此外,还要给不同人分配不同的系统使用权限,定期备份数据库,通过数据加密和规范操作,保证系统稳定运行,数据不会泄露出去。
系统设计聚焦于双角色的核心需求,旨在通过用户端和管理员端的功能协同,提升体质健康管理的效率和便捷性。在用户端,系统致力于实现健康管理的便捷化和个性化。用户可以轻松在线更新个人资料,浏览和选择测试项目,报名参加体质测试,查看历史测试报告,并获得个性化的健康评估与建议。此外,用户还可以访问丰富的健康科普文章,使用AI助手获取实时健康建议,从而增强对自身健康的关注和管理能力。这种便捷的体验不仅提升了用户的参与感,也促进了科学健康观念的形成。
在管理员端,系统则实现了数据管控的高效化和规范化。管理员可以全面管理用户信息、设置测试项目、录入健康评估数据,并审核论坛内容及分配权限。这种集中化的管理方式确保了数据的准确性和安全性,同时提高了工作效率,减少了人工操作的错误风险。
通过这两端的功能协同,系统为校园及社会的体质健康管理提供了一种实用的信息化解决方案。它不仅满足了个体用户的健康需求,也为管理者提供了强有力的工具,以便于进行全面的数据分析与决策支持。未来,系统可进一步扩展至医疗机构和体育教育领域,推动更广泛的健康管理实践。
系统用例图如下图1.1所示。
系统功能结构图如图2.1所示。
物理结构设计
在设计数据库的时候,一开始的概念建模就像打地基。这一步要先搞清楚系统的整体结构和实际需求,确定好有哪些关键对象、每个对象有什么特点,以及它们之间是怎么联系的,为后面的设计打好基础。
到了表设计阶段,就要把前面抽象的概念变成实实在在能用的数据库结构。这时候得创建具体的数据库表,定义每个表有哪些字段,还要给每个字段选合适的数据类型。简单来说,之前确定的关键对象就变成数据库里的表,对象的特点就对应表中的字段。通过这样的设计,数据存起来和用起来都更高效。下面就详细说说系统里数据库表都是怎么设计的。
就说轮播图表,它就是用来存轮播图各种信息的。在这个表里,slides_id相当于每条记录的身份证号,用来唯一确定一条信息;create_time记着这条信息是什么时候创建的;update_time记着信息最后一次修改的时间;title是轮播图的名字;content是对轮播图的介绍;url是点了轮播图之后会跳转到的网页链接;img存的是轮播图存在哪里,或者它的网络地址;hits统计的是轮播图总共被点了多少次。轮播图表如表2.1所示。
表2.1 轮播图表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
slides_id |
int |
10 |
轮播图ID |
是 |
title |
varchar |
64 |
标题 |
否 |
content |
varchar |
255 |
内容描述 |
否 |
url |
varchar |
255 |
跳转链接地址 |
否 |
img |
varchar |
255 |
轮播图存储路径或URL |
否 |
hits |
int |
10 |
点击量统计 |
否 |
create_time |
timestamp |
- |
记录创建时间 |
否 |
update_time |
timestamp |
- |
记录更新时间 |
否 |
文章表是用来存文章各种信息的。在这个表里,article_id和title就像文章信息记录的“门牌号”,通过这两个信息能唯一确定一条文章记录,create_time是文章信息创建的时间,update_time是文章信息最后修改的时间。剩下的字段里,type表示文章属于哪个类别,hits记录文章被点击了多少次,praise_len是文章收获的点赞数量,source是文章的出处,url是文章来源的网页地址,tag是给文章贴的标签,content是文章的具体内容,img存的是文章封面图片的信息,description是对文章的简要说明。文章表如表2.2所示。
表2.2 文章表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
article_id |
mediumint unsigned |
8 |
文章ID |
是 |
title |
varchar |
125 |
标题 |
是 |
type |
varchar |
64 |
文章分类 |
否 |
hits |
int unsigned |
10 |
点击数 |
否 |
praise_len |
int |
11 |
点赞数 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
续表2.2
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
source |
varchar |
255 |
来源 |
否 |
url |
Varchar |
255 |
来源地址 |
否 |
tag |
varchar |
255 |
标签 |
否 |
content |
longtext |
- |
正文 |
否 |
img |
varchar |
255 |
封面图 |
否 |
description |
text |
- |
文章描述 |
否 |
收藏表就是专门存用户收藏东西的信息。在这个表里,collect_id就像每个收藏记录的专属ID,靠它能区分开不同的收藏信息;create_time是收藏这条信息的时间,update_time是最后一次修改这条收藏信息的时间。剩下的字段里,user_id记的是收藏东西的用户ID,source_table是收藏内容原来所在表的名字,source_field是收藏内容在原来表的字段,source_id是收藏内容在原来表的ID,title是收藏内容的标题,img存的是收藏内容封面图片的存放位置。收藏表如表2.3所示。
表2.3 收藏表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
collect_id |
int unsigned |
10 |
收藏ID |
是 |
user_id |
int unsigned |
10 |
收藏人ID |
否 |
source_table |
varchar |
255 |
来源表 |
否 |
source_field |
varchar |
255 |
来源字段 |
否 |
source_id |
int unsigned |
10 |
来源ID |
否 |
title |
varchar |
255 |
标题 |
否 |
img |
varchar |
255 |
封面 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
论坛分类表是用来存放论坛各类别信息的。在这个表里,type_id就像是每个分类记录独一无二的“身份证号”,用来区分不同分类;create_time记录着分类创建的时间,update_time则是分类最后更新的时间。剩下的字段里,name是分类的名字,description是对分类的说明,url是链接到外部的地址,father_id是这个分类所属上级分类的ID,icon存的是分类对应的图标。论坛分类表如表2.4所示。
表2.4 论坛分类表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
type_id |
smallint unsigned |
5 |
分类ID |
是 |
name |
varchar |
16 |
分类名称 |
否 |
description |
varchar |
255 |
描述 |
否 |
url |
varchar |
255 |
外链地址 |
否 |
father_id |
smallint unsigned |
5 |
上级分类ID |
否xxxxxxxxx |
icon |
varchar |
255 |
分类图标 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
公告表就是用来存公告内容的。表里的notice_id是每条公告的唯一ID,就像身份证号一样,能区分开不同公告;create_time是公告写好的时间,update_time是公告最后修改的时间;title是公告的标题,content就是公告具体说的内容。公告表如表2.5所示。
表2.5 公告表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
notice_id |
mediumint unsigned |
8 |
公告ID |
是 |
title |
varchar |
125 |
标题 |
否 |
content |
longtext |
- |
正文 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
文章分类表是专门用来记录文章分类信息的。在这个表里,type_id是每条分类记录的唯一标识,就像每个人的身份证号,能把不同分类区分开;create_time是分类创建的时间,update_time是分类最后一次修改的时间。剩下的字段里,display决定了分类展示的先后顺序,name是分类的名字,father_id是这个分类所属上级分类的ID,description是对分类的详细说明,icon存的是分类对应的图标,url是链接到外部的地址。文章分类表如表2.6所示。
表2.6 文章分类表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
type_id |
smallint unsigned |
5 |
分类ID |
是 |
name |
varchar |
16 |
分类名称 |
否 |
续表2.6
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
name |
varchar |
16 |
分类名称 |
否 |
father_id |
smallint unsigned |
5 |
上级分类ID |
否 |
description |
varchar |
255 |
描述 |
否 |
icon |
text |
- |
分类图标 |
否 |
url |
varchar |
255 |
外链地址 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
点赞表就是用来记点赞情况的。在这个表里,praise_id是每条点赞记录的专属ID,能区分不同的点赞信息;create_time是点赞记录创建的时间,update_time是记录最后修改的时间。剩下的字段里,user_id是点赞的人的ID,source_table是被点赞内容所在表的名字,source_field是被点赞内容在表中的字段,source_id是被点赞内容的ID,status用来标着点赞状态,1代表点了赞,0代表取消了点赞。点赞表如表2.7所示。
表2.7 点赞表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
praise_id |
int unsigned |
10 |
点赞ID |
是 |
user_id |
int unsigned |
11 |
点赞人 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
source_table |
varchar |
255 |
来源表 |
否 |
source_field |
varchar |
255 |
来源字段 |
否 |
source_id |
int unsigned |
10 |
来源ID |
否 |
status |
tinyint |
1 |
点赞状态 |
否 |
论坛表是专门存论坛帖子各种信息的。这个表里,forum_id是每条帖子记录的唯一ID,就像身份证号,能区分不同帖子;create_time是帖子发出来的时间,update_time是帖子最后一次修改的时间。
剩下这些字段,display决定帖子展示的先后顺序,user_id是发帖人的账号ID,nickname是发帖人的昵称,praise_len记录帖子收获了多少点赞,hits是帖子被看了多少次,title是帖子标题,keywords是帖子的关键词,description是帖子简要介绍,url是帖子来源网址,tag是帖子标签,img是帖子封面图,content是帖子具体内容,avatar是发帖人的头像照片,type是帖子所属的分类,istop用来标记帖子是不是被置顶了。论坛表如表2.8所示。
表2.8 论坛表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
forum_id |
mediumint unsigned |
8 |
论坛ID |
是 |
display |
smallint unsigned |
5 |
排序 |
否 |
user_id |
mediumint unsigned |
8 |
用户ID |
否 |
nickname |
varchar |
16 |
昵称 |
否 |
praise_len |
int |
10 |
点赞数 |
否 |
hits |
int unsigned |
10 |
访问数 |
否 |
title |
varchar |
125 |
标题 |
否 |
keywords |
varchar |
125 |
关键词 |
否 |
description |
varchar |
255 |
描述 |
否 |
url |
varchar |
255 |
来源地址 |
否 |
tag |
varchar |
255 |
标签 |
否 |
img |
text |
- |
封面图 |
否 |
content |
longtext |
- |
正文 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
avatar |
varchar |
255 |
发帖人头像 |
否 |
type |
varchar |
64 |
论坛分类 |
否 |
istop |
int |
10 |
是否置顶 |
否 |
用户点击表是用来记录用户点击操作信息的。在这个表里,hits_id是每条点击记录的唯一ID,就像给每条记录发了个专属“门牌号”,能把不同的点击记录区分开;create_time是记录这条点击信息是什么时候产生的,update_time是记录最后一次修改这条点击信息的时间。
剩下的字段里,user_id是点了某个东西的用户ID,source_table是用户点击内容所在表的名字,source_field是点击内容在对应表里的字段,source_id是点击内容在表中的ID。用户点击表如表2.9所示。
表2.9 用户点击表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
hits_id |
int unsigned |
10 |
点击ID |
是 |
user_id |
int unsigned |
11 |
点击人 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
source_table |
varchar |
255 |
来源表 |
否 |
source_field |
varchar |
255 |
来源字段 |
否 |
source_id |
int unsigned |
10 |
来源ID |
否 |
评论表是用来存评论相关内容的。在这个表里,comment_id就像是每条评论的专属ID,能把不同评论区分开来;create_time是评论写出来的时间,update_time是评论最后一次修改的时间。剩下的字段里,user_id是写评论的人的账号ID,reply_to_id用来记这条评论回复的是哪条评论,content是评论具体说的话,nickname是评论人的网名,avatar是评论人头像的存放位置,source_table是评论对应内容所在表的名字,source_field是对应内容在表中的字段,source_id是对应内容在表中的ID。评论表如表2.10所示。
表2.10 评论表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
comment_id |
int unsigned |
11 |
评论ID |
是 |
user_id |
int unsigned |
11 |
评论人ID |
否 |
reply_to_id |
int unsigned |
11 |
回复评论ID |
否 |
content |
longtext |
- |
内容 |
否 |
nickname |
varchar |
255 |
昵称 |
否 |
avatar |
varchar |
255 |
头像地址 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
source_table |
varchar |
255 |
来源表 |
否 |
source_field |
varchar |
255 |
来源字段 |
否 |
source_id |
int unsigned |
10 |
来源ID |
否 |
用户账户表就是专门用来存用户账号信息的地方。在这个表里,user_id是每个用户账号的唯一ID,就像每个人的身份证号,能区分不同用户;create_time是账号注册的时间,login_time是用户上次登录的时间。state用来标记账号状态,1表示能用,2表示有问题,3表示被冻结了,4表示已经注销。user_group记录用户属于哪个用户组。phone存的是用户手机号,email存的是邮箱地址;phone_state和email_state分别表示手机号和邮箱的认证情况,0是没认证,1是正在审核,2是认证通过了。username是用户注册的账号名,nickname是用户的网名,password是登录用的密码,avatar是用户头像存放的位置。open_id用来获取用户的相关信息。vip_level是会员等级,vip_discount是会员能享受的折扣,integral是用户攒的积分,balance是用户账户里的余额。用户账户表如表2.11所示。
表2.11 用户账号表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
user_id |
int unsigned |
8 |
用户ID |
是 |
state |
smallint unsigned |
1 |
账户状态 |
否 |
user_group |
varchar |
32 |
所在用户组 |
否 |
login_time |
timestamp |
- |
上次登录时间 |
否 |
phone |
varchar |
11 |
手机号码 |
否 |
phone_state |
smallint unsigned |
1 |
手机认证 |
否 |
username |
varchar |
16 |
用户名 |
否 |
nickname |
varchar |
16 |
昵称 |
否 |
password |
varchar |
64 |
密码 |
否 |
|
varchar |
64 |
邮箱 |
否 |
email_state |
smallint unsigned |
1 |
邮箱认证 |
否 |
avatar |
varchar |
255 |
头像地址 |
否 |
open_id |
varchar |
255 |
针对获取用户信息字段 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
vip_level |
varchar |
255 |
会员等级 |
否 |
vip_discount |
double |
10,2 |
会员折扣 |
否 |
integral |
int |
11 |
积分 |
否 |
balance |
double |
10,2 |
余额 |
否 |
学生用户表是专门存学生账号信息的地方。在这个表里,student_users_id是每个学生账号的唯一ID,就像身份证号,能区分不同学生;create_time是账号信息创建的时间,update_time是最后一次修改的时间。student_number是学生学号,每个学生的学号都不一样;student_name是学生的真实姓名;student_gender记录学生的性别。examine_state用来标记账号审核情况,一创建默认就是审核通过了。user_id是和通用用户账号关联的ID,方便统一管理。学生用户表如表2.12所示。
表2.12 学生用户表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
student_users_id |
int |
11 |
学生用户ID |
是 |
student_number |
varchar |
64 |
学生学号 |
否 |
student_name |
varchar |
64 |
学生姓名 |
否 |
student_gender |
varchar |
64 |
学生性别 |
否 |
examine_state |
varchar |
16 |
审核状态 |
否 |
user_id |
int |
11 |
用户ID |
否 |
create_time |
datetime |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
测试信息表是专门用来存各种测试项目信息的。在这个表里,test_information_id是每条测试信息的唯一ID,就像身份证号,能把不同测试项目区分开;create_time是记录这条测试信息是什么时候建的,update_time是最后一次修改的时间。
entry_name是测试项目的名字,每个项目名字都不一样;project_type是项目类别;cover是项目的封面图;score_setting是打分标准,刚开始设置成0;detection_time是测试时间;test_location是测试地点;project_introduction是对项目的介绍。hits记录项目被点击了多少次,一开始是0;collect_len记录有多少人收藏了项目,初始值是0;comment_len记录项目有多少条评论,刚开始也是0;test_registration_limit_times是限制报名的次数,默认不限制,数值为0。测试信息表如表2.13所示
表2.13 测试信息表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
test_information_id |
int |
11 |
测试信息ID |
是 |
entry_name |
varchar |
64 |
项目名称 |
否 |
project_type |
varchar |
64 |
项目类型 |
否 |
cover |
varchar |
255 |
封面 |
否 |
score_setting |
double |
8,2 |
分数设置 |
否 |
detection_time |
varchar |
64 |
检测时间 |
否 |
续表2.13
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
test_location |
varchar |
64 |
检测地点 |
否 |
project_introduction |
text |
- |
项目介绍 |
否 |
hits |
int |
11 |
点击数 |
否 |
collect_len |
int |
11 |
收藏数 |
否 |
comment_len |
int |
11 |
评论数 |
否 |
test_registration_limit_times |
int |
8 |
报名限制次数 |
否 |
create_time |
datetime |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
项目类型表就是用来记录各种项目类别的。在这个表里,project_type_id是每条记录的唯一ID,就像给每个项目类型发了专属身份证,能区分不同类别;create_time是记录这个项目类型信息是什么时候创建的,update_time是最后一次修改时间。project_type则实实在在记录着具体的项目类别。项目类型表如表2.14所示。
表2.14 项目类型表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
project_type_id |
int |
11 |
项目类型ID |
是 |
project_type |
varchar |
64 |
项目类型 |
否 |
create_time |
datetime |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
测试报名表用于存储测试报名相关信息,表中字段test_registration_id为主键,create_time为记录创建时间,update_time为记录更新时间。enrollment_number是报名ID,entry_name为项目名称,project_type是项目类型,score_setting为分数设置且默认值为0,detection_time是检测时间,test_location为检测地点,student_users关联学生用户ID且默认值为0,student_number是学生学号,student_name为学生姓名,student_gender是学生性别,remarks用于记录备注信息,examine_state表示审核状态且默认值为未审核,examine_reply是审核回复内容且默认值为空,test_report_limit_times为成绩报告限制次数且默认值为1。测试报名表如表2.15所示。
表2.15 测试报名表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
test_registration_id |
int |
11 |
测试报名ID |
是 |
enrollment_number |
varchar |
64 |
报名ID |
否 |
entry_name |
varchar |
64 |
项目名称 |
否 |
project_type |
varchar |
64 |
项目类型 |
否 |
score_setting |
double |
8,2 |
分数设置 |
否 |
detection_time |
Varchar |
64 |
检测时间 |
否 |
test_location |
varchar |
64 |
检测地点 |
否 |
student_users |
int |
11 |
学生用户 |
否 |
student_number |
varchar |
64 |
学生学号 |
否 |
student_name |
varchar |
64 |
学生姓名 |
否 |
student_gender |
varchar |
64 |
学生性别 |
否 |
remarks |
text |
- |
备注 |
否 |
examine_state |
varchar |
16 |
审核状态 |
否 |
examine_reply |
varchar |
255 |
审核回复 |
否 |
test_report_limit_times |
int |
8 |
成绩报告限制次数 |
否 |
create_time |
datetime |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
测试报告表用于存储测试报告的相关信息,表中字段test_report_id为主键,create_time为记录创建时间,update_time为记录更新时间enrollment_number为报名ID,entry_name是项目名称,project_type表示项目类型,score_setting为分数设置,默认值为0,detection_time是检测时间,test_location为检测地点,student_users关联学生用户,默认值为0,student_number是学生学号,student_name为学生姓名,student_gender是学生性别,comprehensive_score为综合评分,默认值为0,report_chart记录报告图的相关信息,health_assessment是健康评估内容。
测试报告表如表2.16所示。
表2.16 测试报告表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
test_report_id |
int |
11 |
测试报告ID |
是 |
enrollment_number |
varchar |
64 |
报名ID |
否 |
entry_name |
varchar |
64 |
项目名称 |
否 |
project_type |
varchar |
64 |
项目类型 |
否 |
score_setting |
double |
8,2 |
分数设置 |
否 |
detection_time |
varchar |
64 |
检测时间 |
否 |
test_location |
varchar |
64 |
检测地点 |
否 |
student_users |
int |
11 |
学生用户 |
否 |
student_number |
varchar |
64 |
学生学号 |
否 |
student_name |
varchar |
64 |
学生姓名 |
否 |
student_gender |
varchar |
64 |
学生性别 |
否 |
comprehensive_score |
double |
8,2 |
综合评分 |
否 |
report_chart |
varchar |
255 |
报告图 |
否 |
health_assessment |
text |
- |
健康评估 |
否 |
create_time |
datetime |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
健康评估表用于存储健康评估相关信息,表中字段health_assessment_id为主键,create_time为记录创建时间,update_time为记录更新时间。evaluation_object表示评估对象,默认值为0;assessment_date是评估日期;comprehensive_quality_points为综合素质分,默认值为0;body_function_score是身体机能分,默认值为0;physical_quality_score为身体素质分,默认值为0;assessment_content用于记录评估内容。健康评估表如表2.17所示。
表2.17 健康评估表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
health_assessment_id |
int |
11 |
健康评估ID |
是 |
evaluation_object |
int |
11 |
评估对象 |
否 |
续表2.17
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
assessment_date |
date |
- |
评估日期 |
否 |
comprehensive_quality_points |
double |
8,2 |
综合素质分 |
否 |
body_function_score |
double |
8,2 |
身体机能分 |
否 |
physical_quality_score |
double |
8,2 |
身体素质分 |
否 |
assessment_content |
text |
- |
评估内容 |
否 |
create_time |
datetime |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
用户权限管理表是专门用来记用户权限的。在这个表里,auth_id是每条权限记录的唯一ID,用来区分不同的权限信息;create_time是权限记录创建的时间,update_time是最后修改的时间。user_group记着用户属于哪个用户组;mod_name是功能模块的名字,table_name是对应的表名称;page_title是页面显示的标题,path是打开页面的网址路径;parent是指所属的上级菜单,parent_sort给上级菜单排顺序,一开始都设成0;position表示在菜单里的位置,mode是点击后跳转页面的方式,默认是在新窗口打开。add、del、set、get分别表示能不能添加、删除、修改、查看内容,刚开始都设成能操作,也就是值为1;field_add、field_set、field_get存着添加、修改、查询时要用的字段信息;table_nav_name是跨表导航的名字,table_nav是跨表导航的具体设置,option则用来存权限相关的各种配置信息。用户权限管理表如表2.18所示。
表2.18 用户权限管理表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
auth_id |
int unsigned |
11 |
授权ID |
是 |
user_group |
varchar |
64 |
用户组 |
否 |
mod_name |
varchar |
64 |
模块名 |
否 |
table_name |
varchar |
64 |
表名 |
否 |
page_title |
varchar |
255 |
页面标题 |
否 |
path |
varchar |
255 |
路由路径 |
否 |
续表2.18
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
parent |
varchar |
64 |
父级菜单 |
否 |
parent_sort |
int |
10 |
父级菜单排序 |
否 |
position |
varchar |
32 |
位置 |
否 |
mode |
varchar |
32 |
跳转方式 |
否 |
add |
tinyint unsigned |
1 |
是否可增加 |
否 |
del |
tinyint unsigned |
1 |
是否可删除 |
否 |
set |
tinyint unsigned |
1 |
是否可修改 |
否 |
get |
tinyint unsigned |
1 |
是否可查看 |
否 |
field_add |
text |
- |
添加字段 |
否 |
field_set |
text |
- |
修改字段 |
否 |
field_get |
text |
- |
查询字段 |
否 |
table_nav_name |
varchar |
500 |
跨表导航名称 |
否 |
table_nav |
varchar |
500 |
跨表导航 |
否 |
option |
text |
- |
配置 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
文件上传表是用来记录上传文件信息的地方。在这个表里,upload_id是每条文件记录的唯一ID,就像文件的身份证号,能区分不同文件记录。
name记着文件的名字,path是访问文件的路径,file存着文件实际保存的位置。display决定文件展示的先后顺序,father_id是所属上级的ID,刚开始都设成0。dir是文件所在文件夹的名字,type则标明文件的类型。文件上传表如表2.19所示。
表2.19 文件上传表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
upload_id |
int |
11 |
上传ID |
是 |
name |
varchar |
64 |
文件名 |
否 |
path |
varchar |
255 |
访问路径 |
否 |
file |
varchar |
255 |
文件路径 |
否 |
display |
varchar |
255 |
显示顺序 |
否 |
father_id |
int |
11 |
父级ID |
否 |
续表2.19
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
dir |
varchar |
255 |
文件夹 |
否 |
type |
varchar |
32 |
文件类型 |
否 |
用户组表就是专门用来存用户分组信息的。在这个表里,group_id是每个用户组记录的唯一ID,就像身份证号,能区分不同的用户组;create_time是用户组信息创建的时间,update_time是最后修改的时间。
display决定用户组展示的先后顺序,一开始都设成100;name是用户组的名字;description是对用户组的说明;source_table记着用户组信息来自哪个表;source_field是来源表中的字段;source_id是来源数据的ID,刚开始都设成0;register表示用户组注册的位置,默认也是0。用户组表如表2.20所示。
表2.20 用户组表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
group_id |
mediumint unsigned |
8 |
用户组ID |
是 |
display |
smallint unsigned |
4 |
显示顺序 |
否 |
name |
varchar |
16 |
名称 |
否 |
description |
varchar |
255 |
描述 |
否 |
source_table |
varchar |
255 |
来源表 |
否 |
source_field |
varchar |
255 |
来源字段 |
否 |
source_id |
int unsigned |
10 |
来源ID |
否 |
register |
smallint unsigned |
1 |
注册位置 |
否 |
create_time |
timestamp |
- |
创建时间 |
否 |
update_time |
timestamp |
- |
更新时间 |
否 |
管理员功能实现
3.3.1 登录页面
登录界面界面包含账号输入框、密码输入框、验证码输入框及登录按钮,设计简洁直观,便于管理员快速完成登录操作。管理员在登录界面输入用户名、密码和验证码。系统对输入的账号、密码和验证码进行格式校验,例如检查账号是否为空、密码长度是否符合要求等,若格式不符合要求,会及时提示管理员重新输入。校验通过后,返回验证结果:若验证成功,后端记录管理员的登录时间等信息。若验证失败,后端返回相应的错误信息,如 “用户名或密码错误”“验证码失效” 等,前端接收到错误信息后,在登录界面显示提示内容,提醒管理员重新输入正确的登录信息。此外,登录页面还提供 “忘记密码” 功能链接,当管理员忘记登录密码时,可点击该链接进入密码找回流程,通过绑定的手机号或邮箱验证身份后,重置登录密码,确保管理员能够正常访问系统。整个登录过程严格遵循安全规范,对密码进行加密传输和存储,防止信息泄露,保障系统的安全性和稳定性。管理员登录界面如图3.2所示。
管理员成功登录后,就会进入系统后台。页面最上面写着“欢迎使用沈阳工学院体质测试系统”。左边是功能菜单,有系统用户管理、测试信息管理、项目类型管理、测试报名管理、测试报告管理、健康评估管理、系统设置、公告信息管理、资源管理、交流管理这些模块。页面中间有两张图表,“测试报告统计”柱状图能让人一眼看清各个测试项目的综合评分,“健康评估统计”图表用不同颜色区分不同的评估结果类型,管理员通过这些图表,能快速了解体质测试的数据情况,方便做出管理决策。管理员系统界面如图3.3所示。
系统用户管理
学生信息管理界面采用简洁直观的布局,上方设有学生姓名输入框和性别选择框,方便管理员根据具体条件快速筛选学生信息。姓名输入框支持模糊搜索,性别选择框提供“男”、“女”以及“全部”选项,满足不同筛选需求。界面右侧配备查询、添加和删除三个操作按钮,点击查询按钮后,系统会根据输入的条件实时筛选并显示符合条件的学生信息;添加按钮则弹出填写表单,方便管理员录入新学生信息;删除按钮则用于删除选中的学生记录,确保数据的及时更新和准确性。下方的数据显示区域以表格形式呈现学生的详细信息,包括昵称、用户名、学号、姓名、性别、创建时间和更新时间等重要字段,信息排列整齐,便于快速浏览与比对。每一行的操作列设有“详情”按钮,管理员点击后可以查看学生的详细档案或进行进一步操作,如编辑或查看历史记录。学生管理界面如图3.4所示。
测试信息管理
在测试信息管理页面,最上面有个输入框和一个下拉菜单。输入框用来填项目名字,下拉菜单能选项目类型,通过这两个工具可以筛选出想要查看的项目信息。右边有两个按钮,一个能查信息,另一个能添加新项目。
页面下方是个表格,把项目的详细信息都列出来了,像项目名称、类型、封面图、打分标准、检测时间和地点,还有项目介绍等。在表格最右边的操作栏里,有两个按钮,一个能查看项目详细内容,另一个可以看大家对这个项目的评论。测试信息管理界面如图3.5所示。
项目类型管理
项目类型管理页面,可录入项目相关信息。页面有项目名称、项目类型、封面、分数设置、检测时间、检测地点、项目介绍等输入区域,底部提交用于确认录入信息,取消用于取消录入。项目类型添加界面如图3.6、项目类型添加成功界面如图3.7所示。
结 论
本毕业设计旨在解决传统体质测试管理中的冗长流程、繁琐数据整理及服务局限问题,设计并实现了一套基于Android的沈阳工学院体质测试系统。系统采用前后端分离架构,划分为管理员与用户两类角色,实现高效智能的健康管理。用户端功能包括在线更新资料、浏览测试项目、报名、查看历史报告、获取健康评估与建议、浏览健康科普文章及使用AI助手等。管理员端负责用户信息管理、测试项目设置、数据录入、内容审核及权限分配等。系统使用Java开发,前端通过uni-app实现多平台兼容,后端基于Spring Boot,数据存储采用MySQL,AI助手提供实时健康建议,提升用户体验。
尽管系统在功能和架构上有显著改进,但仍存在不足之处。首先,用户界面可能不够直观,需优化设计以提升使用体验。其次,AI助手的建议依赖于数据的准确性,需不断更新算法,以提供更精准的健康建议。此外,系统的安全性需要加强,确保用户数据在存储和传输过程中的安全性。最后,系统推广和用户培训同样重要,提高用户的使用意识和技能,才能充分发挥系统的效益。这些改进措施将有助于提升系统的整体性能和用户满意度。
更多推荐
所有评论(0)