🧑💻博主介绍🧑💻
全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发、文档编写、答疑辅导等。
👇🏻 精彩专栏 推荐订阅👇🏻计算机毕业设计精品项目案例(持续更新)
📃文末获取源码+数据库+文档📃
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以和学长沟通,希望帮助更多的人
一. 前言
互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用美食推荐系统可以有效管理,使信息管理能够更加科学和规范。
美食推荐系统使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理美食推荐系统信息,查看美食推荐系统信息,管理美食推荐系统。
总之,美食推荐系统集中管理信息,有着保密性强,效率高,存储空间大,成本低等诸多优点。它可以降低信息管理成本,实现信息管理计算机化。
二.技术环境
开发语言:Java
框架:后端SpringBoot、前端vue、微信小程序
JDK版本:JDK1.8
服务器:tomcat9.0.36
数据库:mysql 5.7(一定要5.7版本)
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.6.3
浏览器:谷歌浏览器
小程序框架:uniapp
小程序开发软件:HBuilder X
小程序运行软件:微信开发者
后端IDE:Idea
三. 功能设计
本系统在设计过程中需要依照一定的设计原则进行,目的就是为了让开发的系统具备高质量,齐全完备的功能,方便简单的操作,如此才可以最大限度的满足使用者的要求。系统设计原则除了基本的易操作原则,安全性原则外,还有准确性原则,实用性原则,可维护性原则。
一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专业。
本美食推荐系统的功能设计图如下所示:
四. 数据库设计
开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合,存储在一起的这些数据也是按照一定的组织方式进行的。目前,数据库能够服务于多种应用程序,则是源于它存储方式最佳,具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务,但它与程序之间也可以保持较高的独立性。总而言之,数据库经历了很长一段时间的发展,从最初的不为人知,到现在的人尽皆知,其相关技术也越发成熟,同时也拥有着坚实的理论基础。
(1)下图是用户实体和其具备的属性。
用户实体属性图
(2)下图是反馈与建议实体和其具备的属性。
反馈与建议实体属性图
(3)下图是公告信息实体和其具备的属性。
公告信息实体属性图
(4)下图是购物车实体和其具备的属性。
购物车实体属性图
(5)下图是商品实体和其具备的属性。
商品实体属性图
(6)下图是商品订单实体和其具备的属性。
商品订单实体属性图
五. 项目效果展示
进入到这个环节,也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中,是会帮助系统编制人员节省时间,并提升开发效率的。所以在系统的编程阶段,也就是系统实现阶段,对于一些不合理的设计需求,也是可以及时发现。因为设计的方案是完全指导系统的编码过程的。
1.用户信息管理
如图显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询的条件。
2. 水果信息管理
如图显示的就是水果信息管理页面,此页面提供给管理员的功能有:查看已发布的水果信息数据,修改水果信息,水果信息作废,即可删除,还进行了对水果信息名称的模糊查询 水果信息信息的类型查询等等一些条件。
3.水果类型管理
如图显示的就是水果类型管理页面,此页面提供给管理员的功能有:根据水果类型进行条件查询,还可以对水果类型进行新增、修改、查询操作等等。
4.论坛信息管理
如图显示的就是论坛信息管理页面,此页面提供给管理员的功能有:根据论坛信息进行新增、修改、查询操作等等。
六. 功能源码
package com.controller;
import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;
import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;
/**
* 商品
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/meishi")
public class MeishiController {
private static final Logger logger = LoggerFactory.getLogger(MeishiController.class);
private static final String TABLE_NAME = "meishi";
@Autowired
private MeishiService meishiService;
@Autowired
private TokenService tokenService;
@Autowired
private AddressService addressService;//收货地址
@Autowired
private CartService cartService;//购物车
@Autowired
private ChatService chatService;//反馈与建议
@Autowired
private DictionaryService dictionaryService;//字典
@Autowired
private ForumService forumService;//论坛
@Autowired
private MeishiCollectionService meishiCollectionService;//商品收藏
@Autowired
private MeishiCommentbackService meishiCommentbackService;//商品评价
@Autowired
private MeishiOrderService meishiOrderService;//商品订单
@Autowired
private NewsService newsService;//公告信息
@Autowired
private ShangjiaService shangjiaService;//餐厅
@Autowired
private YonghuService yonghuService;//用户
@Autowired
private UsersService usersService;//管理员
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("用户".equals(role))
params.put("yonghuId",request.getSession().getAttribute("userId"));
else if("餐厅".equals(role))
params.put("shangjiaId",request.getSession().getAttribute("userId"));
params.put("meishiDeleteStart",1);params.put("meishiDeleteEnd",1);
CommonUtil.checkMap(params);
PageUtils page = meishiService.queryPage(params);
//字典表数据转换
List<MeishiView> list =(List<MeishiView>)page.getList();
for(MeishiView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
MeishiEntity meishi = meishiService.selectById(id);
if(meishi !=null){
//entity转view
MeishiView view = new MeishiView();
BeanUtils.copyProperties( meishi , view );//把实体数据重构到view中
//级联表 餐厅
//级联表
ShangjiaEntity shangjia = shangjiaService.selectById(meishi.getShangjiaId());
if(shangjia != null){
BeanUtils.copyProperties( shangjia , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "username", "password", "newMoney", "shangjiaId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
view.setShangjiaId(shangjia.getId());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody MeishiEntity meishi, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,meishi:{}",this.getClass().getName(),meishi.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("餐厅".equals(role))
meishi.setShangjiaId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper<MeishiEntity> queryWrapper = new EntityWrapper<MeishiEntity>()
.eq("shangjia_id", meishi.getShangjiaId())
.eq("meishi_name", meishi.getMeishiName())
.eq("meishi_types", meishi.getMeishiTypes())
.eq("meishi_kucun_number", meishi.getMeishiKucunNumber())
.eq("shangxia_types", meishi.getShangxiaTypes())
.eq("meishi_delete", 1)
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
MeishiEntity meishiEntity = meishiService.selectOne(queryWrapper);
if(meishiEntity==null){
meishi.setMeishiClicknum(1);
meishi.setShangxiaTypes(1);
meishi.setMeishiDelete(1);
meishi.setInsertTime(new Date());
meishi.setCreateTime(new Date());
meishiService.insert(meishi);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
源码及文档获取
文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻