Springboot+Vue项目-基于Java+MySQL的网上点餐系统(附源码+演示视频+LW)

news2024/11/20 3:25:30

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。

💞当前专栏:Java毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

🎀 Python毕业设计
🌎微信小程序毕业设计

开发环境

开发语言:Java
框架:Springboot+Vue
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7
数据库工具:Navicat12
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器

演示视频

springboot027网上点餐系统录像

原版高清演示视频:
https://pan.quark.cn/s/5cda95b17ee0

源码下载地址:

https://download.csdn.net/download/2301_76953549/89100275

LW目录

【如需全文请按文末获取联系】
在这里插入图片描述
在这里插入图片描述

目录

  • 开发环境
  • 演示视频
  • 源码下载地址:
  • LW目录
  • 一、项目简介
  • 二、系统设计
    • 2.1软件功能模块设计
    • 2.2数据库设计
  • 三、系统项目部分截图
    • 3.1用户功能模块
    • 3.2管理员功能模块
    • 3.3美食店功能模块
    • 3.4前台首页功能模块
  • 四、部分核心代码
    • 4.1 用户部分
  • 获取源码或论文

一、项目简介

本系统采用的数据库是Mysql,使用SpringBoot框架开发,运行环境使用Tomcat服务器,ECLIPSE 是本系统的开发平台。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

二、系统设计

2.1软件功能模块设计

此系统功能较为全面如下图系统功能结构如图4-3所示。
在这里插入图片描述

2.2数据库设计

用户管理实体E-R图,如图4.5所示。
在这里插入图片描述
美食店管理E-R图,如图4.6所示。
在这里插入图片描述

三、系统项目部分截图

3.1用户功能模块

用户点击进入到系统操作界面,可以对首页、个人中心、美食订单管理、美食评价管理、我的收藏管理等功能模块,个人信息:通过列表可以获取用户账号、用户姓名、性别、年龄、头像、用户手机、配送地址并进行修改操作,如图5-1所示。
在这里插入图片描述
美食评价管理:通过列表可以获取店铺账号、店铺名称、美食名称、用户账号、用户姓名、图片、评分、评价内容、评价时间等信息,进行详情、修改、删除操作,如图5-2所示。
在这里插入图片描述

3.2管理员功能模块

管理员通过用户名和密码、角色填写完成后进行登录,如图5-4所示。管理员登录成功后进入到系统操作界面,可以对首页、个人中心、用户管理、美食店管理、美食分类管理、美食信息管理、美食订单管理、美食评价管理、系统管理等功能模块进行相对应操作。
用户管理:通过列表可以获取用户账号、用户姓名、性别、年龄、头像、用户手机、配送地址等内容,可以进行修改或删除操作,如图5-5所示。
在这里插入图片描述
在这里插入图片描述
美食信息管理:通过列表可以获取美食名称、美食分类、店铺账号、店铺名称、联系电话、图片、口味、特色、价格等信息,进行修改或删除操作,如图5-8所示。
在这里插入图片描述
美食资讯:管理员通过列表可以获取标题、简介、图片等信息,进行修改或删除操作,如图5-10所示。
在这里插入图片描述

3.3美食店功能模块

美食店点击进入到系统操作界面,可以对首页、个人中心、美食信息管理、美食订单管理、美食评价管理等功能模块,个人信息:通过列表可以获取店铺账号、店铺名称、照片、联系电话、店铺介绍、店铺地址、招聘美食、联系人并进行修改操作,如图5-12所示。
在这里插入图片描述
美食评价管理:通过列表可以获取店铺账号、店铺名称、美食名称、用户账号、用户姓名、图片、评分、评价内容、评价时间等信息,进行详情、修改、删除操作,如图5-14所示。
在这里插入图片描述

3.4前台首页功能模块

网上点餐系统,在系统首页可以查看首页、美食店、美食信息、美食评价、美食资讯、个人中心、后台管理等内容,如图5-15所示。
在这里插入图片描述
用户登录,在登录页面通过填写账号、密码等信息完成登录,如图5-17所示。在美食信息页面通过查看美食名称、美食分类、店铺账号、店铺名称、联系电话、图片、口味、特色、价格等信息进行点餐、点我收藏操作,如图5-18所示。
在这里插入图片描述
在这里插入图片描述

四、部分核心代码

4.1 用户部分

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.MeishixinxiEntity;
import com.entity.view.MeishixinxiView;

import com.service.MeishixinxiService;
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-12 15:27:04
 */
@RestController
@RequestMapping("/meishixinxi")
public class MeishixinxiController {
    @Autowired
    private MeishixinxiService meishixinxiService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,MeishixinxiEntity meishixinxi,
		HttpServletRequest request){
		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("meishidian")) {
			meishixinxi.setDianpuzhanghao((String)request.getSession().getAttribute("username"));
		}
        EntityWrapper<MeishixinxiEntity> ew = new EntityWrapper<MeishixinxiEntity>();
		PageUtils page = meishixinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, meishixinxi), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,MeishixinxiEntity meishixinxi, HttpServletRequest request){
        EntityWrapper<MeishixinxiEntity> ew = new EntityWrapper<MeishixinxiEntity>();
		PageUtils page = meishixinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, meishixinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( MeishixinxiEntity meishixinxi){
       	EntityWrapper<MeishixinxiEntity> ew = new EntityWrapper<MeishixinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( meishixinxi, "meishixinxi")); 
        return R.ok().put("data", meishixinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(MeishixinxiEntity meishixinxi){
        EntityWrapper< MeishixinxiEntity> ew = new EntityWrapper< MeishixinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( meishixinxi, "meishixinxi")); 
		MeishixinxiView meishixinxiView =  meishixinxiService.selectView(ew);
		return R.ok("查询美食信息成功").put("data", meishixinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        MeishixinxiEntity meishixinxi = meishixinxiService.selectById(id);
		meishixinxi.setClicknum(meishixinxi.getClicknum()+1);
		meishixinxi.setClicktime(new Date());
		meishixinxiService.updateById(meishixinxi);
        return R.ok().put("data", meishixinxi);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        MeishixinxiEntity meishixinxi = meishixinxiService.selectById(id);
		meishixinxi.setClicknum(meishixinxi.getClicknum()+1);
		meishixinxi.setClicktime(new Date());
		meishixinxiService.updateById(meishixinxi);
        return R.ok().put("data", meishixinxi);
    }
    



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

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody MeishixinxiEntity meishixinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(meishixinxi);
        meishixinxiService.updateById(meishixinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        meishixinxiService.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<MeishixinxiEntity> wrapper = new EntityWrapper<MeishixinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}

		String tableName = request.getSession().getAttribute("tableName").toString();
		if(tableName.equals("meishidian")) {
			wrapper.eq("dianpuzhanghao", (String)request.getSession().getAttribute("username"));
		}

		int count = meishixinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,MeishixinxiEntity meishixinxi, HttpServletRequest request,String pre){
        EntityWrapper<MeishixinxiEntity> ew = new EntityWrapper<MeishixinxiEntity>();
        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 = meishixinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, meishixinxi), params), params));
        return R.ok().put("data", page);
    }


}

获取源码或论文

如需对应的LW或源码,以及其他定制需求,也可以留言或者私信。也可以点我头像查看个人简介联系。

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

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

相关文章

【Python数据库】Redis

文章目录 [toc]数据插入数据查询数据更新数据删除查询存在的所有key 个人主页&#xff1a;丷从心 系列专栏&#xff1a;Python数据库 学习指南&#xff1a;Python学习指南 数据插入 from redis import Redisdef insert_data():redis_cli Redis(hostlocalhost, port6379, db…

软件工程中的耦合和内聚

耦合 在软件工程中&#xff0c;耦合是一个重要的概念&#xff0c;用于描述模块或组件之间的相互依赖程度。 从非直接耦合到内容耦合的耦合性依次升高&#xff0c;所以非直接耦合是我们最想见到的结果&#xff0c;内容耦合是我们最不想见到的结果。 非直接耦合数据耦合标记耦…

车企的数智化“内功”,大模型帮修炼

文&#xff5c;白 鸽 编&#xff5c;王一粟 时隔4年回归的北京车展&#xff0c;遇上了中国智能汽车的热潮。 开年价格战的持续洗礼&#xff0c;不仅让一众中国车企都慌得一批&#xff0c;也让全球巨头特斯拉也面临一季度销量大跌局面。 与此同时&#xff0c;智能汽车还在…

阿斯达年代记下载注册+短信验证教程分享

阿斯达年代记&#xff1a;三强争霸》预计将于4月24日盛大发布&#xff0c;标志着一款新颖的MMORPG游戏面世&#xff0c;它跨越安卓、苹果和PC三大平台&#xff0c;实现数据互通&#xff0c;满足多元化玩家群体的需求。无论是追求移动便捷的手游爱好者&#xff0c;还是偏爱高性能…

Redis系列5:深入分析Cluster 集群模式

1 背景 前面我们学习了Redis高可用的两种架构模式&#xff1a;主从模式、哨兵模式。 解决了我们在Redis实例发生故障时&#xff0c;具备主从自动切换、故障转移的能力&#xff0c;终保证服务的高可用。 但是这些其实远远不够&#xff0c;随着我们业务规模的不断扩展&#xff0…

Golang GMP解读

概念梳理 1. 1 线程 通常语义中的线程&#xff0c;指的是内核级线程&#xff0c;核心点如下&#xff1a; 是操作系统最小调度单元&#xff1b;创建、销毁、调度交由内核完成&#xff0c;cpu 需完成用户态与内核态间的切换&#xff1b;可充分利用多核&#xff0c;实现并行. …

指标+AI:迈向智能化,让指标应用更高效

近日&#xff0c;以“DataAI&#xff0c;构建新质生产力”为主题的袋鼠云春季发布会圆满落幕&#xff0c;大会带来了一系列“AI”的数字化产品与最新行业沉淀&#xff0c;旨在将数据与AI紧密结合&#xff0c;打破传统的生产力边界&#xff0c;赋能企业实现更高质量、更高效率的…

Java集合框架-Collection-List-vector(遗留类)

目录 一、vector层次结构图二、概述三、底层数据结构四、常用方法五、和ArrayList的对比 一、vector层次结构图 二、概述 Vector类是单列集合List接口的一个实现类。与ArrayList类似&#xff0c;Vector也实现了一个可以动态修改的数组&#xff0c;两者最本质的区别在于——Vec…

hertzbeat 源码阅读记录

关于自定义标签的说明 EmailValid.java HostValid PhoneNumValid 枚举值说明&#xff1a;

TCP协议数据传输过程及报文分析

目录 TCP数据的传输过程 建立连接&#xff08;三次握手&#xff09; 第一次握手 第二次握手 第三次握手 总结 数据传输 断开连接&#xff08;四次挥手&#xff09; 第一次挥手 第二次挥手 第三次挥手 第四次挥手 总结 最后 TCP数据的传输过程 TCP&#xff08;Tra…

在python中,对encodeURIComponent的使用避坑指南

随笔记录 某站点对请求参数加密的时候对键值对都进行了encodeURIComponent。那encodeURIComponent的作用是什么呢&#xff1f;如何在python中进行使用呢&#xff1f;使用过程中如何结合实际情况解决问题呢&#xff1f;以下是避坑指南&#xff0c;会让你少走很多弯路。 作用 en…

NVIDIA CUDA Toolkit

NVIDIA CUDA Toolkit CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developer CUDA Toolkit是用于CUDA开发的软件包&#xff0c;主要包括CUDA编译器、运行时库、GPU驱动程序和开发工具等。它允许开发者使用通用编程语言&#xff08;如C、C&#xff09;来利用NVIDIA GPU进行…

mac终端出现bogon原因与解决办法

问题描述 不知道啥原因mac终端的用户名就变成了 xxxbogon &#xff0c;可能是强制关闭终端导致的吧。 问题原因 终端在初始化时&#xff0c;需要确定主机的名字&#xff0c;此时终端会向 DNS 服务器反向查询本机 IP 地址&#xff0c;然后把得到的名字作为自己的主机名。如果…

使用 Rust 后,我​​使用 Python 的方式发生了变化

使用 Rust 后&#xff0c;我​​使用 Python 的方式发生了变化 Using type hints where possible, and sticking to the classic “make illegal state unrepresentable” principle. 尽可能使用类型提示&#xff0c;并坚持经典的“使非法状态不可表示”原则。 近年来&#xff…

LeetCode78:子集

题目描述 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的 子集 &#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 代码 class Solution { public:vector<vector<int>> res;vector<…

xgp怎么取消续费 手把手介绍微软商店xgp关闭自动续费教程

Xbox是美国微软公司创建的电子游戏品牌&#xff0c;随2001年11月第一代Xbox游戏机发布而首次推出。其产品和服务包括家用游戏机、游戏制作与发行、线上游戏服务和内容订阅服务。Xbox已发售的家用游戏机有Xbox、Xbox360、Xbox One、Xbox One S、Xbox One X、Xbox Series X、Xbox…

亚服战网安装卡45%的解决方案

解决方案 先ping cn.patch.battlenet.com.cn这个域名&#xff0c;正常来说是一定会失败的&#xff0c;如果成功就不卡45%了然后ping tw.patch.battle.net 这个域名&#xff0c;这个域名应该是能成功的。 去该网址解析一下这个域名的ip&#xff0c;https://site.ip138.com/tw.p…

漏洞修复优先级考虑-不错的思路

权威说法&#xff1a; 漏洞利用预测评分系统 &#xff08;EPSS&#xff09; 是一项数据驱动的工作&#xff0c;用于估计软件漏洞在野外被利用的可能性&#xff08;概率&#xff09; https://www.first.org/epss/ GitHub - TURROKS/CVE_Prioritizer: Streamline vulnerability…

Kubernetes TDengine 系列|安装 TDengine 的 Grafana 插件|Grafana监控TDengine数据

为了让Grafana 能够监控到TDengine 数据&#xff0c;快速集成搭建数据监测报警系统&#xff0c;所以直接安装TDengine 插件。 目录 一、安装 TDengine 的 Grafana 插件1、下载TDengine grafana插件2、解压到指定目录3、配置未签名插件 二、配置数据源&#xff0c;简单查询TDen…

JDK的安装和配置

目录 1.Java 开发工具包在上方已关联资源下载使用2.JAVA_HOME3.CLASSPATH4.PATH5.安装jdk17情况需要将path变量中删除6.包内含有visualvm7.注意&#xff1a;如果安装JDK17在我们安装的时候可能会自动进行环境变量配置&#xff0c;我们需要在环境变量配置PATH中删除如下信息8.验…