当前位置: 首页 > news >正文

SpringBoot+Vue 校园周边美食分享平台 | 毕业设计完整源码 | 前后端分离

🧑‍💻博主介绍 & 诚邀关注

作者:专注于 Java、Python、前端开发的技术博主 | 全网粉丝 30 万 +
在校期间协助导师完成毕业设计课题分类、论文格式初审及代码整理工作;工作后持续分享毕设思路,助力毕业生顺利完成课题。

== 🔥欢迎订阅我的专栏,获取完整源码、论文框架和部署文档,一起学习,共同进步!==


📌精品项目推荐 需要源码,文末有作者联系方式

以下是精选毕业设计题目,后续会逐步更新对应项目的源码和论文框架:

# SpringBoot+Vue 校园周边美食分享平台 | 毕业设计完整源码 | 前后端分离

摘要

校园周边美食分享平台是一个面向在校大学生的轻量级社区项目,主要解决“今天吃什么”这个世纪难题。学生可以发布食堂、后街、外卖的各种美食探店笔记,给菜品打分、写评价、晒照片,其他人可以浏览、点赞、收藏、评论。管理员在后端管理用户、审核内容、统计数据。项目基于SpringBoot + Vue前后端分离架构,适合作为计算机专业的毕业设计选题。

一、项目介绍

这个项目的名字叫“校园周边美食分享平台”,说白了就是一个校园版的大众点评。学生登录后,可以发布自己吃过的美食,配上图片、价格、位置、评分,其他同学看到后可以互动。平台分为前台(学生用)和后台(管理员用)。

前台主要有:首页推荐美食、按分类浏览、搜索美食、查看店铺详情、发表评价、个人中心(管理自己的收藏和发布记录)。后台主要有:用户管理、美食审核、分类管理、数据统计。

项目亮点在于贴合校园场景,学生只关注自己学校周边的美食,信息更有针对性,比看全网的大众点评更实用。代码结构清晰,接口文档规范,适合二次开发。

二、技术栈

技术版本用途
SpringBoot2.7.x后端框架,处理业务逻辑
MyBatis-Plus3.5.xORM框架,操作数据库
MySQL8.0数据存储
Vue2.x前端框架,构建页面
Element UI2.x前端UI组件库
Axios0.x前端HTTP请求
JWT0.9.x用户身份认证
Maven3.x项目构建

三、功能展示

3.1 前台模块

用户注册登录

  • 页面:注册页、登录页
  • 操作:注册时填写用户名、密码、邮箱、手机号,登录时输入账号密码,支持角色选择(学生/管理员)

首页推荐

  • 页面:首页瀑布流展示美食卡片
  • 操作:展示热门美食、最新发布、随机推荐三类内容,每张卡片显示美食名称、店铺名、评分、图片缩略图,点击进入详情

美食分类浏览

  • 页面:分类列表页
  • 操作:左侧分类导航(中餐、西餐、小吃、饮品等),右侧展示对应分类下的美食列表,支持按评分、发布时间排序

美食搜索

  • 页面:搜索页
  • 操作:输入关键词(美食名、店铺名),实时搜索匹配结果,支持模糊查询

美食详情

  • 页面:详情页
  • 操作:展示美食名称、店铺地址、价格、评分、用户评价、图片轮播,下方显示评论区,已登录用户可以发表评论、点赞、收藏

个人中心

  • 页面:个人主页
  • 操作:显示用户头像、昵称、发布数、收藏数,下方tab切换“我的发布”、“我的收藏”、“我的评论”,可以编辑个人信息

3.2 后台模块

用户管理

  • 页面:用户列表页
  • 操作:表格展示所有用户(ID、用户名、邮箱、注册时间、状态),支持搜索、禁用/启用用户、重置密码

美食管理

  • 页面:美食列表页
  • 操作:表格展示所有美食(ID、名称、分类、发布者、审核状态、发布时间),支持搜索、批量审核通过/驳回、编辑、删除

分类管理

  • 页面:分类列表页
  • 操作:展示所有美食分类(ID、分类名、排序、状态),支持新增、编辑、删除分类

数据统计

  • 页面:统计面板
  • 操作:展示用户总数、美食总数、评论总数、今日新增数,用柱状图显示近7天发布趋势

四、数据库设计

核心表共5张:

user(用户表)

字段名类型说明
idbigint主键
usernamevarchar(50)用户名
passwordvarchar(255)密码(加密)
emailvarchar(100)邮箱
phonevarchar(20)手机号
avatarvarchar(255)头像URL
rolevarchar(20)角色(user/admin)
statusint状态(0禁用 1启用)
create_timedatetime注册时间

food(美食表)

字段名类型说明
idbigint主键
namevarchar(100)美食名称
shop_namevarchar(100)店铺名
addressvarchar(255)店铺地址
pricedecimal(10,2)价格
descriptiontext描述
category_idbigint分类ID
user_idbigint发布者ID
scoreint评分(1-5)
imagesvarchar(1000)图片(逗号分隔)
statusint审核状态(0待审核 1通过 2驳回)
create_timedatetime发布时间

category(分类表)

字段名类型说明
idbigint主键
namevarchar(50)分类名
sortint排序
statusint状态

comment(评论表)

字段名类型说明
idbigint主键
food_idbigint美食ID
user_idbigint评论者ID
contenttext评论内容
create_timedatetime评论时间

favorite(收藏表)

字段名类型说明
idbigint主键
user_idbigint用户ID
food_idbigint美食ID
create_timedatetime收藏时间

五、核心代码展示

5.1 后端Controller示例(美食模块)

@RestController@RequestMapping("/api/food")publicclassFoodController{@AutowiredprivateFoodServicefoodService;// 获取美食列表(分页+条件查询)@GetMapping("/list")publicResultlist(@RequestParam(defaultValue="1")Integerpage,@RequestParam(defaultValue="10")Integersize,Stringkeyword,LongcategoryId){Page<Food>pageObj=newPage<>(page,size);LambdaQueryWrapper<Food>wrapper=newLambdaQueryWrapper<>();if(StringUtils.isNotBlank(keyword)){wrapper.like(Food::getName,keyword).or().like(Food::getShopName,keyword);}if(categoryId!=null){wrapper.eq(Food::getCategoryId,categoryId);}wrapper.eq(Food::getStatus,1);// 只展示已审核wrapper.orderByDesc(Food::getCreateTime);Page<Food>result=foodService.page(pageObj,wrapper);returnResult.success(result);}// 新增美食@PostMapping("/add")publicResultadd(@RequestBodyFoodfood,@RequestHeader("Authorization")Stringtoken){LonguserId=JwtUtil.getUserId(token);food.setUserId(userId);food.setStatus(0);// 待审核foodService.save(food);returnResult.success("发布成功,等待审核");}// 点赞(这里用评论数模拟点赞,实际可单独设计点赞表)@PostMapping("/like/{id}")publicResultlike(@PathVariableLongid){Foodfood=foodService.getById(id);if(food!=null){food.setLikeCount(food.getLikeCount()+1);foodService.updateById(food);returnResult.success();}returnResult.error("美食不存在");}}

5.2 前端Vue示例(美食列表页)

<template> <div class="food-list"> <!-- 搜索栏 --> <el-form :inline="true" class="search-form"> <el-form-item> <el-input v-model="keyword" placeholder="搜索美食或店铺" clearable @keyup.enter="search"></el-input> </el-form-item> <el-form-item> <el-select v-model="categoryId" placeholder="选择分类" clearable> <el-option v-for="item in categories" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </el-form-item> <el-form-item> <el-button type="primary" @click="search">搜索</el-button> </el-form-item> </el-form> <!-- 美食卡片列表 --> <el-row :gutter="20"> <el-col :span="6" v-for="food in foodList" :key="food.id"> <el-card :body-style="{ padding: '0px' }" class="food-card" @click="goDetail(food.id)"> <img :src="food.images ? food.images.split(',')[0] : defaultImg" class="food-img"> <div class="food-info"> <h4>{{ food.name }}</h4> <p class="shop-name">{{ food.shopName }}</p> <div class="bottom"> <span class="price">¥{{ food.price }}</span> <el-rate v-model="food.score" disabled show-score text-color="#ff9900" score-template="{value}分"> </el-rate> </div> </div> </el-card> </el-col> </el-row> <!-- 分页 --> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[8, 16, 24]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </div> </template> <script> export default { data() { return { keyword: '', categoryId: null, foodList: [], categories: [], currentPage: 1, pageSize: 8, total: 0, defaultImg: require('@/assets/default-food.png') } }, mounted() { this.getCategories(); this.getFoodList(); }, methods: { getFoodList() { this.$http.get('/api/food/list', { params: { page: this.currentPage, size: this.pageSize, keyword: this.keyword, categoryId: this.categoryId } }).then(res => { this.foodList = res.data.records; this.total = res.data.total; }); }, search() { this.currentPage = 1; this.getFoodList(); }, goDetail(id) { this.$router.push({ path: '/food/detail', query: { id } }); }, handleSizeChange(val) { this.pageSize = val; this.getFoodList(); }, handleCurrentChange(val) { this.currentPage = val; this.getFoodList(); }, getCategories() { this.$http.get('/api/category/list').then(res => { this.categories = res.data; }); } } } </script>

六、运行效果

登录页:页面中央是登录表单,包含用户名输入框、密码输入框、角色选择下拉框(学生/管理员)。右上角有“注册”按钮,点击跳转到注册页。

注册页:表单包含用户名、密码、确认密码、邮箱、手机号输入框,底部有“注册”按钮和“返回登录”链接。

首页(学生视角):顶部是导航栏,包含Logo、搜索框、个人中心入口。主区域按“热门推荐”、“最新发布”、“随机发现”三个tab展示美食卡片。每个卡片显示美食图片、名称、店铺名、评分星级、价格。点击卡片跳转到详情页。

美食详情页:顶部是图片轮播组件,下方依次显示美食名称、店铺名、地址、价格、评分。再往下是评价区,已登录用户可以在底部输入框写评论并提交,评论区显示所有用户的评论内容、评论时间。页面右上角有收藏按钮和点赞按钮。

个人中心页:左侧显示用户头像、昵称、发布数、收藏数。右侧主体区域有三个tab:“我的发布”显示用户发布过的美食列表,每条记录有编辑和删除按钮;“我的收藏”显示用户收藏的美食列表,点击可跳转详情;“个人信息”可编辑头像、昵称、邮箱。

后台管理页(管理员视角):左侧是菜单栏,包含用户管理、美食管理、分类管理、数据统计。用户管理页是一个表格,显示用户ID、用户名、邮箱、状态、注册时间,每行有启用/禁用按钮。美食管理页表格显示美食ID、名称、分类、发布者、审核状态、发布时间,每行有审核通过、驳回、删除按钮。分类管理页支持新增、编辑、删除分类。数据统计页用ECharts柱状图显示近7天发布数量,下方显示总用户数、总美食数、总评论数等统计卡片。

七、适合场景

这个项目适合以下情况:

  • 计算机专业毕业设计:技术栈主流,前后端分离,功能完整,文档齐全,答辩时容易讲清楚业务逻辑和实现细节。
  • 课程设计/实训项目:如果学校要求做一个带前台和后台的Web应用,这个项目比较合适,代码量适中,学生可以在两周内跑通并理解。
  • 个人练手项目:想学SpringBoot和Vue的同学,可以拿这个项目来练手,看看完整的用户登录、CRUD、文件上传、分页查询是怎么实现的。
  • 二次开发基础:如果你对美食分享感兴趣,可以在本项目基础上增加地图功能、消息通知、积分系统等,作为自己的创新点。

八、获取方式

有同学问怎么跑起来,文末有联系方式。项目提供完整的数据库SQL脚本、前后端源码、接口文档,支持远程部署、代码讲解。如果你对某个模块的实现细节有疑问,或者想改造成自己学校的美食平台,也可以直接联系咨询。
其他定制服务、商务合作可通过下方联系卡片或私信作者。

http://www.zskr.cn/news/1501316.html

相关文章:

  • VisionPro九点标定实战:手把手教你搞定机械手与相机的‘对齐’(附完整C#补偿值计算代码)
  • 别再只会用Matlab仿真了!手把手教你用FPGA实现FSK解调(附AFC环完整代码)
  • Windows虚拟桌面命令行管理工具VDesk技术深度解析
  • 从真人舞步到虚拟偶像:OpenMMD如何用AI技术重塑3D动画创作
  • 功夫量化:10个技巧让您的量化交易系统从入门到精通
  • Transformer位置编码:RoPE与Sinusoidal PE的相位转换对比
  • 发电机故障暂态仿真模型, 仿真分析发电机产生故障时,电压电流的变化情况研究(Simulink仿真实现)
  • 微信小程序壁纸源码:纯前端调用小米官方API,免服务器一键运行
  • DAPLink嵌入式开发环境配置指南:从零搭建到高效调试的完整方案
  • LangGraph多Agent协作架构实战:Network与Supervisor双模式详解
  • 郑州大学校内步行导航工具:纯Python实现的轻量级路径规划系统
  • WinBoat容器化Windows应用集成方案:Linux环境下的无缝跨平台技术实现
  • Python开发者常忽略的5个关键工程实践
  • Go 泛型与类型系统:从接口到泛型的工程化实践
  • AIri容器化部署:从单机到生产环境的完整指南
  • FanControl终极指南:如何在Windows上实现风扇精准控制与智能散热
  • 免费开源项目管理工具GanttProject:让复杂项目变得简单可控
  • GetQzonehistory:你的数字青春档案馆,一键永久保存QQ空间记忆
  • MATLAB版二维多孔介质流场LBM仿真工具包(含数据导出与参数说明)
  • [智能体-354]:有哪些常见的AI Skill
  • 2026年当下,佛山收购茅台如何联系?专业服务商甄选与决策指南 - 品牌鉴赏官2026
  • 戴森球计划终极蓝图库:3000+工厂设计让你的太空帝国建设效率提升3倍
  • 数据的加密与解密(02:38)
  • 用RPR220光电管DIY一个Arduino避障小车,手把手教你从电路到代码(附完整物料清单)
  • 用Python和TensorFlow训练AI玩贪吃蛇:从游戏逻辑到DQN算法实战(附完整代码)
  • 2026年新乡自动送料机厂家推荐榜单:化工厂/医药厂/新能源材料及锂电池行业精准投料设备优选 - 品牌发掘
  • GetQzonehistory:5分钟实现QQ空间历史数据完整备份的终极解决方案
  • 3.1.5 平衡二叉树
  • 用Python+NetworkX模拟社交网络中的‘跟风’行为:一个演化博弈的实战案例
  • 手把手教你用Python复现STARFM时空融合算法:从Github代码到实战避坑