基于SpringBoot+uniapp微信小程序校园点餐平台详细设计和实现

博主介绍全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

目录

一、 前言介绍:

二 、功能设计:

三、功能实现:

用户系统功能模块

管理员功能模块

卖家功能模块

四、库表设计:

五、关键代码:

六、论文参考:

七、其他案例: 

八、源码获取:


一、 前言介绍:

    校园点餐系统小程序采用B/S模式、采用JAVA语言、springboot框架、mysql数据库、小程序框架uniapp等开工具,促进了校园点餐系统小程序的业务发展。与传统线下点餐相比,校园点餐系统小程序不但节省了卖家的线下运营的成本和门店曝光等难题,对学生而言提供了足不出户送餐上门的服务,针对现代校园而言,出门用餐路程远,排队麻烦等问题,特开发校园点餐系统小程序。

    实现校园点餐的计算机化也是顺应时代潮流的举措,现如今餐饮种类正逐渐增加,浩繁的餐饮信息令校园餐饮业迎来管理上的难题。餐饮行业进入高速发展的时代,餐饮业的管理工作变得越来越困难,在这一客观需要的推动下,建立、完善、发展在线校园点餐系统小程序,可以为校园餐饮业管理者带来极大的方便。

本系统即为方便餐饮店管理者和客户而制作的校园校园点餐系统小程序,结合了餐饮店和客户的需求,设计出的一个基于springboot框架、JAVA语言、MySQL数据库等技术的校园点餐系统小程序。

二 、功能设计:

本网站可以分为:注册用户使用的功能、卖家进行管理的功能、管理员进行管理的功能。

管理员管理功能:首页、网站管理(轮播图、公告信息)、人员管理(管理员、注册用户、卖家)、内容管理(美食资讯)、购物管理(餐品信息、分类列表、订单列表)、模块管理(我的好友、订单状态、营业分析、餐品推荐)、个人管理等功能。

用户使用功能:首页、关于我们、餐品信息、餐品推荐、购物车、美食资讯、我的(基本信息、收货地址、收藏、订单、购物车,我的好友、订单状态)等功能。

卖家管理功能:首页、购物管理(餐品信息、订单列表)、模块管理(订单状态、营业分析、餐品推荐)、个人管理等功能。

三、功能实现:

用户系统功能模块

校园点餐系统小程序,在系统注册页面填写用户信息用户名、密码、姓名、性别、邮箱、手机等内容进行注册操作,如图5-1所示。

图5-1用户注册界面图

   在小程序首页页面可以用户功能首页、联系方式、购物车、美食资讯、我的等,如图5-2所示。

图5-2 小程序系统界面图

在我的页面可以查看基本信息、收货地址、收藏、订单、购物车,我的好友、订单状态等功能,如图5-3所示。

图5-3 我的界面图

在美食资讯详情界面,用户可以查看资讯详情,并可进行点赞、收藏、评论等操作,如图5-4所示。

图5-4 美食资讯详情界面图

用户点击产品详情可以查看菜品信息菜品名称、口味、价格、原材料、店铺名称、商品属性等内容,还可在该页面进行菜品收藏、加入购物车、立即购买等操作,如图5-5所示。

图5-5 产品详情界面图

用户在餐品信息页面可以浏览餐品图片、餐品名称、价格等信息,并可以选中感兴趣的餐品加入购物车,如图5-6所示。

图5-6 餐品信息界面图

在订单详情页面中可以查看已付款、未付款订单、需付款、订单编号、下单时间等信息,如图5-7所示。

图5-7 订单详情界面图

管理员功能模块

在管理员登录页面添加登录信息用户名、密码、角色等进行登录,如图5-8所示。

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

在管理员功能页面中可以查看功能分为:首页、网站管理(轮播图、公告信息)、人员管理(管理员、注册用户、卖家)、内容管理(美食资讯)、购物管理(餐品信息、分类列表、订单列表)、模块管理(我的好友、订单状态、营业分析、餐品推荐)、个人管理等功能,并可进行相应操作,如图5-9所示。

图5-9 管理员功能界面图

在用户管理页面中可以查看昵称、用户名、商家编号、店铺名称、负责人、创建时间、更新时间等信息进行详情、添加、修改或删除等操作,如图5-10所示。

图5-10用户管理界面图

在美食资讯管理页面中可以对标题、封面图、文章分类、标签等信息进行添加、修改或删除等操作,如图5-11所示。

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

在订单状态管理页面可以查看订单情号、商品名称、商品编号、用户编号、姓名、联系电话、收货地址、记录时间等内容,还可进行详情、修改、添加或删除等操作,如图5-12所示。

图5-12 订单状态管理界面图

卖家功能模块

在餐品推荐页面可以添加餐品名称、图片、类型、口味、原材料、商家编号、店铺名称、创建时间等内容,还可进行详情、修改、添加或删除等操作,如图5-13所示。

图5-13 餐品推荐界面图

在营业分析页面可以添加标题、商家编号、店铺名称、绒计时间、收入总额、备注、创建时间等内容,还可进行详情、修改、添加或删除等操作,如图5-14所示。

图5-14 营业分析界面图

四、库表设计:

一个好的系统它的后台数据库一定要考虑的全面,这和我们建造房子一个概念,房子不是随心所欲建起来的,一切都是在合理设计的基础是实现的,地基打牢固了房子才能建的更高。数据库如果设计的很合理,而且每个方面都能考虑到了那么这个系统才能不会出现大的问题。

学习编程,我们都知道数据库设计是基于需要设计的系统功能,我们需要建立一个数据库关系模型,用于存储数据信息,这样当我们在程序中时,就没有必要为程序页面添加数据,从而提高系统的效率。数据库存储了很多信息,可以说是信息管理系统的核心和基础,数据库还为系统提供了添加、删除、修改和检查等操作模块,使系统能够快速找到自己想要的信息,而不是在程序代码中找到。数据库中信息表的每个部分根据一定的关系精确地组合,排列和组合成数据表系统ER图如下图所示

五、关键代码:

 

/*** 用户账户:用于保存用户登录信息(User)表控制层*/
@Slf4j
@RestController
@RequestMapping("user")
public class UserController extends BaseController<User, UserService> {/*** 服务对象*/@Autowiredpublic UserController(UserService service) {setService(service);}/*** Token服务*/@Autowiredprivate AccessTokenService tokenService;@Autowiredprivate UserGroupService userGroupService;/*** 注册* @param user* @return*/@PostMapping("register")public Map<String, Object> signUp(@RequestBody User user) {// 查询用户Map<String, String> query = new HashMap<>();query.put("username",user.getUsername());List list = service.select(query, new HashMap<>()).getResultList();if (list.size()>0){return error(30000, "用户已存在");}user.setUserId(null);user.setPassword(service.encryption(user.getPassword()));service.save(user);return success(1);}/*** 找回密码* @param form* @return*/@PostMapping("forget_password")public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {JSONObject ret = new JSONObject();String username = form.getUsername();String code = form.getCode();String password = form.getPassword();// 判断条件if(code == null || code.length() == 0){return error(30000, "验证码不能为空");}if(username == null || username.length() == 0){return error(30000, "用户名不能为空");}if(password == null || password.length() == 0){return error(30000, "密码不能为空");}// 查询用户Map<String, String> query = new HashMap<>();query.put("username",username);Query select = service.select(query, service.readConfig(request));List list = select.getResultList();if (list.size() > 0) {User o = (User) list.get(0);JSONObject query2 = new JSONObject();JSONObject form2 = new JSONObject();// 修改用户密码query2.put("user_id",o.getUserId());form2.put("password",service.encryption(password));service.update(query, service.readConfig(request), form2);return success(1);}return error(70000,"用户不存在");}/*** 登录* @param data* @param httpServletRequest* @return*/@PostMapping("login")public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {log.info("[执行登录接口]");String username = data.get("username");String email = data.get("email");String phone = data.get("phone");String password = data.get("password");List resultList = null;Map<String, String> map = new HashMap<>();if(username != null && "".equals(username) == false){map.put("username", username);resultList = service.select(map, new HashMap<>()).getResultList();}else if(email != null && "".equals(email) == false){map.put("email", email);resultList = service.select(map, new HashMap<>()).getResultList();}else if(phone != null && "".equals(phone) == false){map.put("phone", phone);resultList = service.select(map, new HashMap<>()).getResultList();}else{return error(30000, "账号或密码不能为空");}if (resultList == null || password == null) {return error(30000, "账号或密码不能为空");}//判断是否有这个用户if (resultList.size()<=0){return error(30000,"用户不存在");}User byUsername = (User) resultList.get(0);Map<String, String> groupMap = new HashMap<>();groupMap.put("name",byUsername.getUserGroup());List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();if (groupList.size()<1){return error(30000,"用户组不存在");}UserGroup userGroup = (UserGroup) groupList.get(0);//查询用户审核状态if (!StringUtils.isEmpty(userGroup.getSourceTable())){String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();String res = String.valueOf(service.runCountSql(sql).getSingleResult());if (res==null){return error(30000,"用户不存在");}if (!res.equals("已通过")){return error(30000,"该用户审核未通过");}}//查询用户状态if (byUsername.getState()!=1){return error(30000,"用户非可用状态,不能登录");}String md5password = service.encryption(password);if (byUsername.getPassword().equals(md5password)) {// 存储Token到数据库AccessToken accessToken = new AccessToken();accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));accessToken.setUser_id(byUsername.getUserId());tokenService.save(accessToken);// 返回用户信息JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));user.put("token", accessToken.getToken());JSONObject ret = new JSONObject();ret.put("obj",user);return success(ret);} else {return error(30000, "账号或密码不正确");}}/*** 修改密码* @param data* @param request* @return*/@PostMapping("change_password")public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){// 根据Token获取UserIdString token = request.getHeader("x-auth-token");Integer userId = tokenGetUserId(token);// 根据UserId和旧密码获取用户Map<String, String> query = new HashMap<>();String o_password = data.get("o_password");query.put("user_id" ,String.valueOf(userId));query.put("password" ,service.encryption(o_password));Query ret = service.count(query, service.readConfig(request));List list = ret.getResultList();Object s = list.get(0);int count = Integer.parseInt(list.get(0).toString());if(count > 0){// 修改密码Map<String,Object> form = new HashMap<>();form.put("password",service.encryption(data.get("password")));service.update(query,service.readConfig(request),form);return success(1);}return error(10000,"密码修改失败!");}/*** 登录态* @param request* @return*/@GetMapping("state")public Map<String, Object> state(HttpServletRequest request) {JSONObject ret = new JSONObject();// 获取状态String token = request.getHeader("x-auth-token");// 根据登录态获取用户IDInteger userId = tokenGetUserId(token);log.info("[返回userId] {}",userId);if(userId == null || userId == 0){return error(10000,"用户未登录!");}// 根据用户ID获取用户Map<String,String> query = new HashMap<>();query.put("user_id" ,String.valueOf(userId));// 根据用户ID获取Query select = service.select(query,service.readConfig(request));List resultList = select.getResultList();if (resultList.size() > 0) {JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(resultList.get(0)));user.put("token",token);ret.put("obj",user);return success(ret);} else {return error(10000,"用户未登录!");}}/*** 登录态* @param request* @return*/@GetMapping("quit")public Map<String, Object> quit(HttpServletRequest request) {String token = request.getHeader("x-auth-token");JSONObject ret = new JSONObject();Map<String, String> query = new HashMap<>(16);query.put("token", token);try{tokenService.delete(query,service.readConfig(request));}catch (Exception e){e.printStackTrace();}return success("退出登录成功!");}/*** 获取登录用户ID* @param token* @return*/public Integer tokenGetUserId(String token) {log.info("[获取的token] {}",token);// 根据登录态获取用户IDif(token == null || "".equals(token)){return 0;}Map<String, String> query = new HashMap<>(16);query.put("token", token);AccessToken byToken = tokenService.findOne(query);if(byToken == null){return 0;}return byToken.getUser_id();}/*** 重写add* @return*/@PostMapping("/add")@Transactionalpublic Map<String, Object> add(HttpServletRequest request) throws IOException {Map<String,Object> map = service.readBody(request.getReader());map.put("password",service.encryption(String.valueOf(map.get("password"))));service.insert(map);return success(1);}}

六、论文参考:

第1章 绪论

1.1.1  课题背景

1.1.2  研究意义

第2章 关键技术的研究

2.1微信开发者工具

2.2小程序框架以及目录结构介绍

2.3 JAVA技术

2.4 Spring Boot框架

2.5 MYSQL数据库

2.6 B/S结构

2.7 ECLIPSE开发环境

2.8 Tomcat服务器

第3章 需求分析与可行性分析

3.1 功能需求分析

3.2 可行性分析

3.2.1技术可行性:

3.2.2经济可行性

3.2.3操作可行性:

3.3 系统性能分析

第4章 系统总体设计

4.1  系统的结构划分

4.2  系统的流程分析

4.2.1操作流程

4.2.2添加信息流程

4.2.3删除信息流程

4.3. 数据库设计

4.3.1数据库E-R图设计

4.3.2数据表

第5章 系统实现过程

5.1  运行环境

5.1.1  硬件环境

5.1.2  软件环境

5.2  系统实现

5.2.1用户系统功能模块

5.2.2管理员功能模块

5.2.3卖家功能模块

第6章 系统测试

6.1系统测试的目的

6.2系统测试方法

6.3功能测试

第7章 总结

参考文献

致谢

 

七、其他案例: 

 

 

 

八、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

 精彩专栏推荐订阅下方专栏👇🏻

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 setup语法糖 多条件搜索(带时间范围)

目录 前言&#xff1a; setup介绍&#xff1a; setup用法&#xff1a; 介绍&#xff1a; 前言&#xff1a; 不管哪个后台管理中都会用到对条件搜索带有时间范围的也不少见接下来就跟着我步入vue的多条件搜索&#xff08;带时间范围&#xff09; 在 Vue 3 中&#xff0c;你…

3接上篇 我的自定义GPTs的改进优化 与物理世界连接成功 GPTs的创建与使用定义和执行特定任务的功能模块 通过API与外部系统或服务的交互

https://blog.csdn.net/chenhao0568/article/details/134875067?spm1001.2014.3001.5502 从服务器日志里看到请求多了一个“location” 23.102.140.123 - - [08/Dec/2023:14:02:20 0800] "GET /getWeather.php?location&locationNewYork HTTP/1.1" 200 337 &…

【基于ESP32无线蓝牙上传电脑Excel透传数据】

【基于ESP32无线蓝牙上传电脑透传数据】 1. 引言2. 环境搭建2.1 硬件准备:2.2 软件准备:2.3. 配置Excel端口接收功能3. 测试代码4. 连接电脑和 ESP324.1 烧录程序4.2 启动蓝牙服务4.3 测试数据透传5. 总结1. 引言 随着物联网技术的发展,越来越多的设备开始支持无线通信,其…

八路达林顿晶体管-ULN2803和ULN2804-笔记

八路达林顿晶体管的介绍 ULN2803示例 BULN2803LV 是专为低压系统设计的大电流达林顿管阵列&#xff0c;电路由八个独立的达林顿管组成&#xff0c;每个达林顿管带有续流二极管&#xff0c;可用于驱动继电器、步进电机等感性负载。单个达林顿管在输入电压低至 1.8V 状态下支持电…

京东数据运营(京东API接口):10月投影仪店铺数据分析

鲸参谋监测的京东平台10月份投影仪市场销售数据已出炉&#xff01; 10月份&#xff0c;环同比来看&#xff0c;投影仪市场销售均上涨。鲸参谋数据显示&#xff0c;今年10月&#xff0c;京东平台投影仪的销量为16万&#xff0c;环比增长约22%&#xff0c;同比增长约8%&#xff1…

2022年第十一届数学建模国际赛小美赛D题野生动物贸易是否应长期禁止解题全过程文档及程序

2022年第十一届数学建模国际赛小美赛 D题 野生动物贸易是否应长期禁止 原题再现&#xff1a; 野生动物市场被怀疑是此次疫情和2002年SARS疫情的源头&#xff0c;食用野生肉类被认为是非洲埃博拉病毒的一个来源。在冠状病毒爆发后&#xff0c;中国最高立法机构永久性地加强了野…

Linux内核上游提交完整流程及示例

参考博客文章&#xff1a; 向linux内核提交代码 - 知乎 一、下载Linux内核源码 通过git下载Linux内核源码&#xff0c;具体命令如下&#xff1a; git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 实际命令及结果如下&#xff1a; penghaoDin…

【linux系统编程】编辑器gcc/g++

目录 Linux下的编辑器 介绍&#xff1a; 1&#xff0c;编辑器gcc/g 1-1&#xff0c;系统的编译过程 1-2&#xff0c;预处理过程 1-3&#xff0c;编译过程 1-4&#xff0c;汇编过程 1-5&#xff0c;链接过程 Linux下的编辑器 介绍&#xff1a; Linux系统下可支持很多高…

生成式AI赋能千行百业加速创新,2023亚马逊云科技re:Invent行业盘点

2023亚马逊云科技re:Invent全球大会已于上周圆满闭幕&#xff0c;在本次大会中&#xff0c;亚马逊云科技又为大家带来了很多功能/项目迭代更新&#xff0c;也重磅发布了很多全新的功能。今天从行业视角来盘点回顾哪些重磅发布适用于垂直行业客户&#xff0c;以及面向汽车、制造…

MySQL 数据库如何实现 XA 规范?

本文我们来讨论 MySQL 的 XA 规范有哪些应用相关的内容。 MySQL 为我们提供了分布式事务解决方案&#xff0c;在前面的内容中提到过 binlog 的同步&#xff0c;其实是 MySQL XA 规范的一个应用&#xff0c;那么 XA 规范是如何定义的&#xff0c;具体又是如何应用的呢&#xff…

Si24R03—低功耗 SOC 芯片(集成RISC-V内核+2.4GHz无线收发器)

Si24R03是一款高度集成的低功耗SOC芯片&#xff0c;其集成了基于RISC-V核的低功耗MCU和工作在2.4GHz ISM频段的无线收发器模块。 MCU模块具有低功耗、Low Pin Count、宽电压工作范围&#xff0c;集成了13/14/15/16位精度的ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC等丰…

Linux:进程优先级与命令行参数

目录 1.进程优先级 1.1 基本概念 1.2 查看系统进程 1.3 修改进程优先级的命令 2.进程间切换 2.1 相关概念 2.2 Linux2.6内核进程调度队列&#xff08;了解即可&#xff09; 3.命令行参数 1.进程优先级 1.1 基本概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优…

MySql复习笔记03(小滴课堂) 事务,视图,触发器,存储过程

mysql 必备核心知识之事务的详细解析&#xff1a; 创建一个数据库表&#xff1a; 添加数据并开启事务。 添加数据并查询。 登录另一台服务器发现查不到这个表中的数据。 这是因为事务开启了&#xff0c;但是没有提交&#xff0c;只是把数据存到了内存中&#xff0c;还没有写入…

海外地区开启IPV6无法访问服务器问题

前言 最近有海外地区的用户反馈无法访问公司的网络&#xff0c;无法下载应用和系统进行升级。了解到浏览器可以正常访问公司域名&#xff0c;谷歌&#xff0c;油管等都能正常使用。日志分析GET请求服务器数据时没有得到应答&#xff0c;最终查询网络相关修改确认与网络IPV6有关…

【Jeecg Boot 3 - 保姆级】第1节 docker + redis + nginx + redis一键安装启动

一、前言 ▶ JEECG-BOOT 开源版难以吃透的原因 ▶ 为了针对上面痛点&#xff0c;笔者做了如下安排 ▶ 你能收获什么 二、效果(第一节效果) ▶ 启动后端 &#xff1e; 日志 &#xff1e; 接口文档 ▶ 启动前端 三、准备工作 四、实战 ▶ 1、服务器安装 Stag…

C#注册表技术及操作

目录 一、注册表基础 1.Registry和RegistryKey类 &#xff08;1&#xff09;Registry类 &#xff08;2&#xff09;RegistryKey类 二、在C#中操作注册表 1.读取注册表中的信息 &#xff08;1&#xff09;OpenSubKey()方法 &#xff08;2&#xff09;GetSubKeyNames()…

天池SQL训练营(三)-复杂查询方法-视图、子查询、函数等

-天池龙珠计划SQL训练营 SQL训练营页面地址&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicampsql 3.1 视图 我们先来看一个查询语句&#xff08;仅做示例&#xff0c;未提供相关数据&#xff09; SELECT stu_name FROM view_students_info;单从表面上看起来…

unity 2d 入门 飞翔小鸟 死亡闪烁特效(十三)

一、c#脚本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Bling : MonoBehaviour {public Texture img;public float speed;public static bool changeWhite false;private float alpha0f;// Start is called before the fi…

shell基本知识

Linux 系统中 shell 的基本知识 1 什么是 shell Shell 是一种命令行解释器&#xff0c;它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序。用户可以用 shell 来启动、挂起、停止甚至是编写一些程序。 2 Linux 启动过程 Linux 系统的启动过程可以概括为…

【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Counter篇)

目录 前提概要监控工作可以分为四个部分 监控开发任务Metrics中的基础数据类型计数器&#xff08;Counter&#xff09;统计 API 访问中异常&#xff08;1000/1500&#xff09;的次数统计 API 的调用量统计特定事件发生的次数Counter的底层原理基础 (Base) 计数器单元 (Cell) 数…