热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基于SSM的校园点餐管理系统

项目背景21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性

项目背景

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


功能设计


功能模块图

系统中的核心用户是系统管理员,管理员登录后,通过管理员菜单来管理后台系统。主要功能有:个人中心、用户管理、商家管理、菜系分类管理、菜品信息管理、外卖订单管理、系统管理等功能。
在这里插入图片描述
用户进入系统可以进行个人中心、外卖订单管理、我的收藏管理等。
在这里插入图片描述
校园点餐系统工作原理图
在这里插入图片描述
系统架构图属于系统设计阶段,系统架构图只是这个阶段一个产物,系统的总体架构决定了整个系统的模式,是系统的基础。
在这里插入图片描述
数据库的概念结构设计采用实体—联系(E-R)模型设计方法。E-R模型法的组成元素有:实体、属性、联系,E-R模型用E-R图表示,是提示用户工作环境中所涉及的事物,属性则是对实体特性的描述。在系统设计当中数据库起着决定性的因素。下面设计出这几个关键实体的实体—关系图。
商家信息实体图
在这里插入图片描述
用户信息实体图
在这里插入图片描述
菜品信息实体图
在这里插入图片描述


功能截图

校园点餐系统,在系统首页可以查看首页、菜品信息、外卖订单、新闻资讯、我的、跳转到后台、客服等内容
在这里插入图片描述
用户登录,在登录页面可以填写账号、密码等信息进行登录
在这里插入图片描述
菜品信息,在菜品信息页面通过查看商家编号、商家名、菜系、美食名称、图片、单价、主料、份量、美食介绍等信息进行购买、点我收藏。在个人中心页面通过填写学号、姓名、性别、照片、院系、电话、地址、审核回复等信息进行更新信息、退出登录操作。
在这里插入图片描述
在这里插入图片描述
管理员登录,通过填写用户名、密码进行登录
在这里插入图片描述
管理员登录进入校园点餐系统可以查看个人中心、用户管理、商家管理、菜系分类管理、菜品信息管理、外卖订单管理、系统管理等信息。
用户管理,在用户管理页面中可以通过查看学号、姓名、性别、照片、院系、电话、地址、是否审核、审核回复等内容进行详情、修改、删除。还可以根据需要对商家管理进行详情,修改等详细操作。
在这里插入图片描述
在这里插入图片描述
菜系分类管理,在菜系分类管理页面中可以查看菜系等信息,并可根据需要对已有菜系分类管理进行修改或删除等操作
在这里插入图片描述
菜品信息管理,在菜品信息管理页面中可以查看商家编号、商家名、菜系、美食名称、图片、单价、主料、份量、美食介绍等信息,并可根据需要对已有菜品信息管理进行修改或删除等详细操作
在这里插入图片描述
外卖订单管理,在外卖订单管理页面中可以查看订单编号、商家编号、商家名、美食名称、菜品分类、学号、姓名、电话、地址、价格、份量、金额、下单时间、取餐时间、取餐方式、是否审核、审核回复、是否支付等内容,并且根据需要对已有外卖订单管理进行详情,修改或删除等详细操作。
在这里插入图片描述
轮播图;该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作
在这里插入图片描述
美食资讯管理,在美食资讯管理页面中可以查看标题、简介、图片、内容等信息,并且根据需要对已有美食资讯管理进行详情,修改或删除等详细操作
在这里插入图片描述
商家登录进入校园点餐系统可以查看个人中心、菜系分类管理、菜品信息管理、外卖订单管理等内容。
菜系分类管理,在菜系分类管理页面中通过查看菜系等信息,还可以根据需要对菜系分类管理进行修改。
在这里插入图片描述
菜品信息管理,在菜品信息管理页面中可以查看商家编号、商家名、菜系、美食名称、图片、单价、主料、份量、美食介绍等信息,并且根据需要对已有菜品信息管理进行查看删除等其他详细操作。
在这里插入图片描述
外卖订单管理,在外卖订单管理页面中通过查看订单编号、商家编号、商家名、美食名称、菜品分类、学号、姓名、电话、地址、价格、份量、金额、下单时间、取餐时间、取餐方式、是否审核、审核回复、是否支付等内容进行详情、修改、删除。
在这里插入图片描述


相关代码


数据库配置

# Tomcat
server:tomcat:uri-encoding: UTF-8port: 8080servlet:context-path: /springbootr1tjfspring:datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/springbootr1tjf?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8username: rootpassword: 123456# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootr1tjf
# username: sa
# password: 123456servlet:multipart:max-file-size: 10MBmax-request-size: 10MBresources:static-locations: classpath:static/,file:static/#mybatis
mybatis-plus:mapper-locations: classpath*:mapper/*.xml#实体扫描,多个package用逗号或者分号分隔typeAliasesPackage: com.entityglobal-config:#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";id-type: 1#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"field-strategy: 2#驼峰下划线转换db-column-underline: true#刷新mapper 调试神器refresh-mapper: true#逻辑删除配置logic-delete-value: -1logic-not-delete-value: 0#自定义SQL注入器sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjectorconfiguration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: true#springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)jdbc-type-for-null: 'null'

控制层(controller)

package com.controller;import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;/*** 登录相关*/
@RequestMapping("users")
@RestController
public class UserController{&#64;Autowiredprivate UserService userService;&#64;Autowiredprivate TokenService tokenService;/*** 登录*/&#64;IgnoreAuth&#64;PostMapping(value &#61; "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {UserEntity user &#61; userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));if(user&#61;&#61;null || !user.getPassword().equals(password)) {return R.error("账号或密码不正确");}String token &#61; tokenService.generateToken(user.getId(),username, "users", user.getRole());return R.ok().put("token", token);}/*** 注册*/&#64;IgnoreAuth&#64;PostMapping(value &#61; "/register")public R register(&#64;RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !&#61;null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 退出*/&#64;GetMapping(value &#61; "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 密码重置*/&#64;IgnoreAuth&#64;RequestMapping(value &#61; "/resetPass")public R resetPass(String username, HttpServletRequest request){UserEntity user &#61; userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));if(user&#61;&#61;null) {return R.error("账号不存在");}user.setPassword("123456");userService.update(user,null);return R.ok("密码已重置为&#xff1a;123456");}/*** 列表*/&#64;RequestMapping("/page")public R page(&#64;RequestParam Map<String, Object> params,UserEntity user){EntityWrapper<UserEntity> ew &#61; new EntityWrapper<UserEntity>();PageUtils page &#61; userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));return R.ok().put("data", page);}/*** 列表*/&#64;RequestMapping("/list")public R list( UserEntity user){EntityWrapper<UserEntity> ew &#61; new EntityWrapper<UserEntity>();ew.allEq(MPUtil.allEQMapPre( user, "user")); return R.ok().put("data", userService.selectListView(ew));}/*** 信息*/&#64;RequestMapping("/info/{id}")public R info(&#64;PathVariable("id") String id){UserEntity user &#61; userService.selectById(id);return R.ok().put("data", user);}/*** 获取用户的session用户信息*/&#64;RequestMapping("/session")public R getCurrUser(HttpServletRequest request){Long id &#61; (Long)request.getSession().getAttribute("userId");UserEntity user &#61; userService.selectById(id);return R.ok().put("data", user);}/*** 保存*/&#64;PostMapping("/save")public R save(&#64;RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !&#61;null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 修改*/&#64;RequestMapping("/update")public R update(&#64;RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);UserEntity u &#61; userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));if(u!&#61;null && u.getId()!&#61;user.getId() && u.getUsername().equals(user.getUsername())) {return R.error("用户名已存在。");}userService.updateById(user);//全部更新return R.ok();}/*** 删除*/&#64;RequestMapping("/delete")public R delete(&#64;RequestBody Long[] ids){userService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
}

业务层&#xff08;Service&#xff09;


package com.service;import java.util.List;
import java.util.Map;import org.apache.ibatis.annotations.Param;import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.entity.UserEntity;
import com.utils.PageUtils;/*** 系统用户*/
public interface UserService extends IService<UserEntity> {PageUtils queryPage(Map<String, Object> params);List<UserEntity> selectListView(Wrapper<UserEntity> wrapper);PageUtils queryPage(Map<String, Object> params,Wrapper<UserEntity> wrapper);}

数据访问层&#xff08;Dao&#xff09;

package com.dao;import java.util.List;import org.apache.ibatis.annotations.Param;import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.entity.UserEntity;/*** 用户*/
public interface UserDao extends BaseMapper<UserEntity> {List<UserEntity> selectListView(&#64;Param("ew") Wrapper<UserEntity> wrapper);List<UserEntity> selectListView(Pagination page,&#64;Param("ew") Wrapper<UserEntity> wrapper);}

推荐阅读
  • kettle 8.3 连接mysql8.0.30 的入坑体验
      写这个东西主要是想吐槽为主,真的无语了。  kettle是java写的java版权是oracle的。mysql是Oracle的。   吐槽:  一般来说,在kettle中新建m ... [详细]
  • Mybatis拦截器实现数据权限的示例代码
    在我们日常开发过程中,通常会涉及到数据权限问题,本文主要介绍了Mybatis拦截器实现数据权限的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • MySQL修改表结构操作命令总结【MySQL】
    数据库|mysql教程MySQL,修改表结构命令数据库-mysql教程表的结构如下:错误页面源码,ubuntu电脑自动休眠,爬虫造景视频,rapapiphp,廊坊seo开发lzwm ... [详细]
  •   《WindowsAzurePlatform系列文章目录》  本文将介绍如何在AzureSQLDatabase创建只读用户。  请先按照笔者之前的文章:AzureSQLDatabas ... [详细]
  • 1.使用通用mapper时实体类的mapper接口(即普通的dao接口)继承了通用mapper接口后,在依赖注入实体类的mapper接口时 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
author-avatar
小东东5201314
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有