分享一套基于SSM的美食推荐管理系统(源码+文档+部署)

news2024/11/19 10:38:11

大家好,今天给大家分享一套基于SSM的美食推荐管理系统

开发语言:Java
数据库:MySQL
技术:Spring+SpringMvc+MyBatis
工具:IDEA/Ecilpse、Navicat、Maven

博主介绍: 一名Java全栈工程师,专注于Java全栈技术!
主要技术: SpringCloud Alibaba、SpringBoot、SSM、Html、Css、Vue、小程序、uni-app等设计与开发。
获取源码: @

目录

  • 基于SSM的美食推荐管理系统
    • 一、演示效果
    • 二、前言
    • 三、系统关键技术
    • 四、系统设计
    • 五、系统功能设计
    • 六、部分代码
    • 七、文档参考
  • 热门推荐

基于SSM的美食推荐管理系统

一、演示效果

在这里插入图片描述

二、前言

21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。
论文主要是对美食推荐管理系统进行了介绍,包括研究的现状,还有涉及的开发背景,然后还对系统的设计目标进行了论述,还有系统的需求,以及整个的设计方案,对系统的设计以及实现,也都论述的比较细致,最后对美食推荐管理系统进行了一些具体测试。
本文以JSP为开发技术,实现了一个美食推荐管理系统。美食推荐管理系统的主要使用者分为管理员;个人中心、用户管理、美食分类管理、热门美食管理、美食教程管理、美食店铺管理、美食社区、系统管理,前台首页;首页、热门美食、美食教程、美食店铺、美食社区、美食资讯、我的、跳转到后台,用户;个人中心、美食教程管理、我的收藏管理等功能。通过这些功能模块的设计,基本上实现了整个美食推荐管理系统的过程。
具体在系统设计上,采用了B/S的结构,同时,也使用JSP技术在动态页面上进行了设计,后台上采用Mysql数据库,是一个非常优秀的美食推荐管理系统。

关键词 :美食推荐管理系统;JSP技术;Mysql数据库;B/S结构

三、系统关键技术

JSP技术、JAVA、MYSQL、B/S结构、SSM等等

四、系统设计

系统结构设计
在这里插入图片描述

五、系统功能设计

5.1前台首页功能模块
美食推荐管理系统,在系统首页可以查看首页、热门美食、美食教程、美食店铺、美食社区、美食资讯、我的、跳转到后台等内容,如图5-1所示。
在这里插入图片描述

图5-1前台首页功能界面图

用户注册,在注册页面可以填写用户名、密码、姓名、联系电话等信息进行注册,如图5-2所示。
在这里插入图片描述

图5-2用户注册界面图

用户登录,在登录页面通过填写账号、密码等信息完成登录,如图5-3所示。在热门美食页面通过查看美食名称、分类、图片、材料、美食特色等信息进行点我收藏操作,如图5-4所示。
在这里插入图片描述

图5-3用户登录界面图

在这里插入图片描述

图5-4热门美食界面图

个人中心,在个人中心页面通过填写用户名、密码、姓名、头像、性别、联系电话等信息更新信息、退出登录,如图5-5所示。在美食店铺页面通过查看店铺名称、图片、营业时间、联系人、联系电话、店铺地址、店铺介绍、经典菜品等信息进行点我收藏操作,如图5-6所示。
在这里插入图片描述

图5-5个人中心界面图

在这里插入图片描述

图5-6美食店铺界面图

5.2管理员功能模块
管理员登录,通过填写用户名、密码进行登录,如图5-7所示。
在这里插入图片描述

图5-7管理员登录界面图

管理员登录进入美食推荐管理系统可以查看个人中心、用户管理、美食分类管理、热门美食管理、美食教程管理、美食店铺管理、美食社区、系统管理等信息。
用户管理,在用户管理页面中可以通过查看用户名、姓名、头像、性别、联系电话等内容进行修改、删除,如图5-8所示。还可以根据需要对美食分类管理进行详情,修改等详细操作,如图5-9所示。
在这里插入图片描述

图5-8用户管理界面图

在这里插入图片描述

图5-9美食分类管理界面图

热门美食管理,在热门美食管理页面中可以查看美食名称、分类、图片、材料、美食特色等信息,并可根据需要对已有热门美食管理进行修改或删除等操作,如图5-10所示。
在这里插入图片描述

图5-10热门美食管理界面图

美食店铺管理,在美食店铺管理页面中可以查看店铺名称、图片、营业时间、联系人、联系电话、店铺地址、店铺介绍、经典菜品等信息,并可根据需要对已有美食店铺管理进行修改或删除等详细操作,如图5-11所示。
在这里插入图片描述

图5-11美食店铺管理界面图

美食资讯管理,在美食资讯管理页面中可以查看标题、简介、图片、内容等内容,并且根据需要对已有美食资讯管理进行详情,修改或删除等详细操作,如图5-12所示。
在这里插入图片描述

图5-12美食资讯管理界面图

轮播图;该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作,如图5-13所示。
在这里插入图片描述

图5-13轮播图管理界面图

5.3用户功能模块
用户登录进入美食推荐管理系统可以查看个人中心、美食教程管理、我的收藏管理等内容。
个人信息,在个人信息页面中通过查看用户名、密码、姓名、头像、性别、联系电话等信息,还可以根据需要对个人信息进行修改,如图5-14所示。
在这里插入图片描述

图5-14个人信息界面图

美食教程管理,在美食教程管理页面中可以查看美食名称、分类、图片、用料、烹饪方法、烹饪时长、美食特色、制作方法、小贴士、发布日期、用户名等信息,并且根据需要对已有美食教程管理进行查看删除等其他详细操作,如图5-15所示。
在这里插入图片描述

图5-15美食教程管理界面图

我的收藏管理,在我的收藏管理页面中可以查看用户id、收藏id、表名、收藏名称、收藏图片等信息,并且根据需要对已有我的收藏管理进行查看删除等其他详细操作,如图5-16所示。
在这里插入图片描述

图5-16我的收藏管理界面图

六、部分代码


package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.NewsEntity;
import com.entity.view.NewsView;

import com.service.NewsService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 美食资讯
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-22 10:16:10
 */
@RestController
@RequestMapping("/news")
public class NewsController {
    @Autowired
    private NewsService newsService;
    


    /**
     * 后端列表
     */
    @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));
		request.setAttribute("data", page);
        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));
		request.setAttribute("data", page);
        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);
        return R.ok().put("data", news);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        NewsEntity news = newsService.selectById(id);
        return R.ok().put("data", news);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody NewsEntity news, HttpServletRequest request){
    	news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(news);

        newsService.insert(news);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody NewsEntity news, HttpServletRequest request){
    	news.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(news);

        newsService.insert(news);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    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();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<NewsEntity> wrapper = new EntityWrapper<NewsEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = newsService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	


}



七、文档参考

在这里插入图片描述

热门推荐

分享一套基于SSM的KTV点歌系统(源码+文档+部署)

分享一套基于SSM的高校二手交易平台系统(源码+文档+部署)

分享一套基于SSM的高校四六级报名管理系统(源码+文档+部署)

分享一套基于SSM的九宫格日志网站(源码+文档+部署)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高质量数据不够用,合成数据是打开 AGI 大门的金钥匙吗?

编者按&#xff1a; 人工智能技术的发展离不开高质量数据的支持。然而&#xff0c;现有可用的高质量数据资源已日渐接近枯竭边缘。如何解决训练数据短缺的问题&#xff0c;是当前人工智能领域亟待解决的一个较为棘手的问题。 本期文章探讨了一种经实践可行的解决方案 —— 合成…

EE trade:利弗莫尔三步建仓法

在股市投资领域&#xff0c;利弗莫尔这个名字代表着无数的智慧和经历。他的三步建仓法成为了投资者们趋之若鹜的学习对象。本文将详细解析利弗莫尔的著名买入法&#xff0c;通过分步进攻方式&#xff0c;有效掌控市场并实现盈利。 一、利弗莫尔的三步建仓法详解 利弗莫尔三步…

(9)农作物喷雾器

文章目录 前言 1 必要的硬件 2 启用喷雾器 3 配置水泵 4 参数说明 前言 Copter 包括对农作物喷雾器的支持。该功能允许自动驾驶仪连接到一个 PWM 操作的泵和&#xff08;可选&#xff09;旋转器&#xff0c;根据飞行器速度控制液体肥料的流动速度。 稍微过时的视频显示了…

MYSQL 将某个字段赋值当前时间

如 我们需要将use_time 赋值为当前时间&#xff1a; 准备三条数据 &#xff1a; 执行sql &#xff0c;2种当前时间赋值函数&#xff0c;1种关键字赋值 &#xff1a; update test_info SET use_timeNOW() WHERE id 1; update test_info SET use_timeCURRENT_TIMESTAMP() …

Flink 反压

反压 Flink反压是一个在实时计算应用中常见的问题&#xff0c;特别是在流式计算场景中。以下是对Flink反压的详细解释&#xff1a; 一、反压释义 反压&#xff08;backpressure&#xff09;意味着数据管道中某个节点成为瓶颈&#xff0c;其处理速率跟不上上游发送数据的速率…

基于昇腾AI | Yolov7模型迁移到昇腾平台EA500I边缘计算盒子的实操指南

近年来&#xff0c;国产化替代的进程正在加快。在众多国产平台中&#xff0c;昇腾平台具有高性能、低功耗、易扩展、软件栈全面成熟等优势&#xff0c;其产品和技术在国内众多领域实现了广泛应用&#xff1b;作为昇腾的APN伙伴和IHV合作伙伴&#xff0c;英码科技携手昇腾推出了…

数据安全如何防护?迅软加密软件保护企业数据资产

前言&#xff1a;加密软件是一种重要的工具&#xff0c;可以帮助企业保护其数据资产的安全。通过使用加密算法&#xff0c;加密软件可以将敏感数据转化为无法理解的密文&#xff0c;只有授权的用户才能解密并访问这些数据。 一、迅软加密软件保护企业数据资产的关键方面 1、数…

小迪安全v2023笔记 1-18

小迪安全v2023笔记 1-18 棱角社区 文章目录 1. 基础入门1. 正向shell与反向shell2. web应用3. 抓包&#xff0c;封包&#xff0c;协议&#xff0c;app&#xff0c;小程序&#xff0c;pc应用&#xff0c;web应用 2. 信息打点1. 常见信息获取2. 文件泄露3. 常见阻碍4. CDN绕过&a…

硕思LOGO设计师软件下载附加详细安装教程

​根据行业数据显示硕思logo设计者中有图片渐变、文本效果、阴影、发光、斜角、倒影等多种多样的logo图形样子和款式&#xff0c;能够导出或打印logo来满足不同的使用要求&#xff0c;所见即所得的软件界面&#xff0c;在预览窗口中实时查看logo图形&#xff0c;对于设计和制作…

深度测试中的隐藏面消除技术

by STANCH 标签&#xff1a;#计算机图形学 #深度测试 #深度测试 #隐藏面消除 1.概述 根据我们的日常经验&#xff0c;近处的物体会挡住后面的物体&#xff0c;在三维场景中通常通过深度缓冲来实现这样的效果。深度缓冲记录着屏幕对应的每个像素的深度值。模型一开始所在的局部…

Linux的shell语法

Linux的shell脚本 1.概述 shell解释器&#xff0c;介于操作系统内核与用户之间&#xff0c;充当了一个“命令解释器”的角色&#xff0c;负责接收用户输入的操作指令&#xff08;命令&#xff09;并进行解释&#xff0c;将需要执行的操作传递给内核执行&#xff0c;并输出执行…

从零开始做题:老照片中的密码

老照片中的密码 1.题目 1.1 给出图片如下 1.2 给出如下提示 这张老照片中的人使用的是莫尔斯电报机&#xff0c;莫尔斯电报机分为莫尔斯人工电报机和莫尔斯自动电报机&#xff08;简称莫尔斯快机&#xff09;。莫尔斯人工电报机是一种最简单的电报机&#xff0c;由三个部分组…

计算机毕业设计Thinkphp/Laravel学生考勤管理系统zyoqy

管理员登录学生考勤管理系统后&#xff0c;可以对首页、个人中心、公告信息管理、年级管理、专业管理、班级管理、学生管理、教师管理、课程信息管理、学生选课管理、课程签到管理、请假申请管理、销假申请管理等功能进行相应操作&#xff0c;如图5-2所示。学生登录进入学生考勤…

玄子Share-本地部署 AI 大模型与构建知识库

玄子Share-本地部署 AI 大模型与构建知识库 部署环境概述 警告&#xff01;OpenAI 宣布全面封锁中国 API 接入 昨天&#xff0c;许多开发者从 OpenAI 那收到了一份警告信 您好&#xff0c; 据我们的数据监测&#xff0c;贵组织正从 OpenAl 当前未支持的区域产生 API 访问流量…

python基础篇(6):global关键字

使用 global关键字 可以在函数内部声明变量为全局变量 未使用global关键字的代码&#xff1a; # global关键字&#xff0c;在函数内声明变量为全局变量 num 200def test_a():print(f"test_a: {num}")def test_b():num 500print(f"test_b: {num}")test_…

护眼大路灯十大品牌有必要买很贵的吗?护眼落地灯十大品牌分享

护眼大路灯十大品牌有必要买很贵的吗&#xff1f;由于学习需要&#xff0c;很多小孩回家以后都会挑灯夜读&#xff0c;而夜间读写时的普通照明灯不够亮看书写字有阴影&#xff0c;再加上蓝光频闪严重&#xff0c;长期处于这种低质照明环境会加剧孩子用眼疲劳&#xff0c;睫状肌…

ChatGPT 论文助手:如何用 AI 技术加速学术写作过程

ChatGPT在论文写作中的应用 ChatGPT作为一个先进的语言模型&#xff0c;在学术论文创作领域提供显著帮助。它不仅提升学生与研究者的写作效率&#xff0c;还优化论文质量并引入创新观点。以下是ChatGPT在论文写作中的几种具体应用&#xff1a; 提升写作效率 生成写作构思&…

基于Flask开发的前后端交互项目(可用于期末大作业) MySQL数据库 文件上传 Spider爬虫 Echarts可视化展示 JS动态

项目描述&#xff1a; 开发一个基于Flask框架开发的前后端交互项目&#xff0c;项目内容为 东京奥运会 。对各个需要填写的字段做了数据验证&#xff0c;非法信息会被JS拦截提醒不合法&#xff1b;还对未登录就访问做了拦截&#xff0c;阻止未登录就访问。 前端&#xff1a;HT…

web前端大作业--美团外卖1

文章目录 概述代码截图代码链接 概述 web美团 登录和注册功能、页面展示。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><link rel"stylesheet" href&quo…

低成本的PS5存储扩容方案,铠侠SD10 PCle4.0固态硬盘扩容报告

低成本的PS5存储扩容方案&#xff0c;铠侠SD10 PCle4.0固态硬盘扩容报告 哈喽小伙伴们好&#xff0c;我是Stark-C~ 对于入手PS5的游戏玩家来说&#xff0c;机器到手第一步&#xff0c;那就是订阅索尼PlayStation Plus会员&#xff0c;可以尽情的玩耍上百款游戏3A大作&#xf…