基于SpringBoot的“食物营养分析与推荐网站”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“食物营养分析与推荐网站”的设计与实现(源码+数据库+文档+PPT)
-
开发语言:Java
-
数据库:MySQL
-
技术:SpringBoot
-
工具:IDEA/Ecilpse、Navicat、Maven
系统展示
系统功能结构图
系统首页界面
系统注册页面
食物营养详细页面
美食资讯详细页面
管理员主界面
摘要
食物营养分析与推荐网站是一个综合性的在线平台,它汇集了各类食材的详细营养数据,为用户提供深入的食物营养分析。通过输入个人需求和健康状况,网站能够智能生成个性化的饮食建议,帮助用户更好地规划日常饮食,实现营养均衡。此外,网站还提供丰富的食物营养和美食资讯,帮助用户提升营养意识,享受更加健康的生活方式。
系统采用基于Java语言网站开发技术设计的,结合Mysql数据库管理系统对食物营养分析相关信息进行管理。按照软件工程学理论完成各阶段设计,经过调试测试达到了管理食物营养分析与推荐的能力。满足了管理员和用户的需要。论文从系统开发过程概述、开发工具简介、系统总体设计、系统开发、软件测试等几个方面进行了介绍。最后总结了系统开发的得失。
课题背景和意义
随着生活水平的提高,人们对食物营养的需求也日益增长。食物营养分析与推荐网站应运而生,其研究背景源于现代人对健康饮食的追求和对个性化营养指导的需求。在信息化时代,借助互联网和大数据技术,能够实现对食物营养成分的科学分析和个性化推荐,帮助用户更好地了解食物营养,指导健康饮食。
此类网站的意义在于,它们不仅提供了丰富的食物营养信息,还通过智能算法为用户推荐符合其营养需求的食谱,有助于改善人们的饮食习惯,提高营养水平。这类网站也有助于推动食品产业的健康发展,促进食品营养知识的普及和传播。食物营养分析与推荐网站的研究具有重要的现实意义和社会价值。
研究现状
在国外,食物营养分析与推荐网站的研究与应用均呈现出蓬勃发展的态势。国外方面,一些知名的健康饮食网站,如MyFitnessPal、Nutritionix等,已经建立了完善的食物数据库和营养分析系统,能够为用户提供个性化的饮食建议。这些网站还结合大数据和人工智能技术,不断优化推荐算法,提高推荐的准确性和用户满意度。
国内方面,虽然起步较晚,但近年来也涌现出了一批优秀的食物营养分析与推荐网站。这些网站在借鉴国外先进经验的基础上,结合中国人的饮食习惯和营养需求,提供了更加贴近实际的服务。随着国内大数据和人工智能技术的快速发展,这些网站在推荐算法的优化和个性化服务方面也有着广阔的提升空间。
研究内容
本文的主体结构如下:
第一章主要对当下的食物营养分析与推荐网站的背景及开发意义、国内外研究方面进行了重点论述。
第二章 重点介绍本系统的相关的开发技术,并对软件的部署环境进行必要的说明。
第三章 重点对系统进行需求分析、流程分析和可行性论述。
第四章 主要对系统整体功能进行设计和对数据库进行设计。
第五章 详细的对各个模块进行阐述,各个模块总体的设计以文字加图表的形式进行说明。
第六章 对系统的测试方法进行说明及测试结果的展示。
部分源码
/**
* 健康资讯
* 后端接口
* @author
* @email
* @date
*/
@RestController
@RequestMapping("/news")
public class NewsController {
@Autowired
private NewsService newsService;
@Autowired
private StoreupService storeupService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,NewsEntity news,
HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,NewsEntity news,
HttpServletRequest request){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( NewsEntity news){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
return R.ok().put("data", newsService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(NewsEntity news){
EntityWrapper< NewsEntity> ew = new EntityWrapper< NewsEntity>();
ew.allEq(MPUtil.allEQMapPre( news, "news"));
NewsView newsView = newsService.selectView(ew);
return R.ok("查询健康资讯成功").put("data", newsView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
news.setClicknum(news.getClicknum()+1);
news.setClicktime(new Date());
newsService.updateById(news);
news = newsService.selectView(new EntityWrapper<NewsEntity>().eq("id", id));
return R.ok().put("data", news);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
NewsEntity news = newsService.selectById(id);
news.setClicknum(news.getClicknum()+1);
news.setClicktime(new Date());
newsService.updateById(news);
news = newsService.selectView(new EntityWrapper<NewsEntity>().eq("id", id));
return R.ok().put("data", news);
}
/**
* 赞或踩
*/
@RequestMapping("/thumbsup/{id}")
public R vote(@PathVariable("id") String id,String type){
NewsEntity news = newsService.selectById(id);
if(type.equals("1")) {
news.setThumbsupnum(news.getThumbsupnum()+1);
} else {
news.setCrazilynum(news.getCrazilynum()+1);
}
newsService.updateById(news);
return R.ok("投票成功");
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.insert(news);
return R.ok();
}
/**
* 获取用户密保
*/
@RequestMapping("/security")
@IgnoreAuth
public R security(@RequestParam String username){
NewsEntity news = newsService.selectOne(new EntityWrapper<NewsEntity>().eq("", username));
return R.ok().put("data", news);
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
@IgnoreAuth
public R update(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.updateById(news);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
newsService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 前端智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request,String pre){
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
Map<String, Object> newMap = new HashMap<String, Object>();
Map<String, Object> param = new HashMap<String, Object>();
Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Object> entry = it.next();
String key = entry.getKey();
String newKey = entry.getKey();
if (pre.endsWith(".")) {
newMap.put(pre + newKey, entry.getValue());
} else if (StringUtils.isEmpty(pre)) {
newMap.put(newKey, entry.getValue());
} else {
newMap.put(pre + "." + newKey, entry.getValue());
}
}
params.put("sort", "clicknum");
params.put("order", "desc");
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
return R.ok().put("data", page);
}
/**
* 协同算法(按收藏推荐)
*/
@RequestMapping("/autoSort2")
public R autoSort2(@RequestParam Map<String, Object> params,NewsEntity news, HttpServletRequest request){
String userId = request.getSession().getAttribute("userId").toString();
String inteltypeColumn = "typename";
List<StoreupEntity> storeups = storeupService.selectList(new EntityWrapper<StoreupEntity>().eq("type", 1).eq("userid", userId).eq("tablename", "news").orderBy("addtime", false));
List<String> inteltypes = new ArrayList<String>();
Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
List<NewsEntity> newsList = new ArrayList<NewsEntity>();
//去重
if(storeups!=null && storeups.size()>0) {
for(StoreupEntity s : storeups) {
newsList.addAll(newsService.selectList(new EntityWrapper<NewsEntity>().eq(inteltypeColumn, s.getInteltype())));
}
}
EntityWrapper<NewsEntity> ew = new EntityWrapper<NewsEntity>();
params.put("sort", "id");
params.put("order", "desc");
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
List<NewsEntity> pageList = (List<NewsEntity>)page.getList();
if(newsList.size()<limit) {
int toAddNum = (limit-newsList.size())<=pageList.size()?(limit-newsList.size()):pageList.size();
for(NewsEntity o1 : pageList) {
boolean addFlag = true;
for(NewsEntity o2 : newsList) {
if(o1.getId().intValue()==o2.getId().intValue()) {
addFlag = false;
break;
}
}
if(addFlag) {
newsList.add(o1);
if(--toAddNum==0) break;
}
}
} else if(newsList.size()>limit) {
newsList = newsList.subList(0, limit);
}
page.setList(newsList);
return R.ok().put("data", page);
}
}
结论
食物营养分析与推荐网站的开发正是满足日益增长的信息管理需要。系统开发过程中涉及到数据库设计、网页设计、逻辑处理代码编写、数据库通信等,具有很大实用价值。系统分为管理员和用户两大子系统,实现了用户管理、食物营养管理、系统管理、我的信息等主要功能。满足了管理人员对信息的管理,方便了用户查看食物营养分析与推荐信息的需要。界面设计美观简洁、功能实用操作简单方便,达到了系统开发的初衷。设计开发过程中将在校所学知识得以实践应用,积累了一定经验。将离散的知识点有机的结合到一起,并在设计开发过程中得以灵活运用。基于Java语言的网站开发技术很多很难全部应用在一个系统中。本系统主要使用了action、bean、springboot、servlet等技术。在密码管理中采用MD5加密算法,提高了系统安全性。
由于本人技术水平有限,目前还存在许多未解决的问题和未添加的功能。例如,界面风格过于生硬,大片空间没有合理利用;对此次食物营养分析与推荐网站与已经非常成熟的管理系统相比还有很大差距,只能算是一个雏形。目前达到的标准仅能让作者勉强满意,未来仍需继续改进和完善上述功能,努力使其成为一个真正可以为大众使用的食物营养分析与推荐网站。