建站公司排名前十名,什么是网站管理系统,软文案例400字,搭建网站大概需要多少钱作者介绍#xff1a;✌️大厂全栈码农|毕设实战开发#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 #x1f345;获取源码联系方式请查看文末#x1f345; 推荐订阅精彩专栏 #x1f447;#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目… 作者介绍✌️大厂全栈码农|毕设实战开发专注于大学生项目实战开发、讲解和毕业答疑辅导。 获取源码联系方式请查看文末 推荐订阅精彩专栏 避免错过下次更新 Springboot项目精选实战案例 更多项目CSDN主页YAML墨韵 学如逆水行舟不进则退。学习如赶路不能慢一步。 目录
一、项目简介
二、开发技术与环境配置
2.1 SpringBoot框架
2.2 Java语言简介
2.3 Vue的介绍
2.4 mysql数据库介绍
2.5 B/S架构
三、系统功能实现
四、系统项目截图
4.1、前台功能模块
1、首页
2、注册
3、登录
4、菜品信息
5、公告资讯
6、个人中心
4.2、后台功能模块
4.2.1、用户功能模块
1、首页
2、信息管理
4.2.2、骑手功能模块
1、登录
2、首页
3、订单信息管理
4.2.3、商家功能模块
1、登录
2、首页
3、菜品信息管理
4.2.4、管理员功能模块
1、登录
2、首页
3、用户管理
4、骑手管理
5、商家管理
6、菜品信息管理
7、订单信息管理
8、接单信息管理
五、核心代码
5.1、文件上传
5.2、数据库配置
5.3、登录功能实现
5.4、业务层Service
5.5、数据访问层Dao 一、项目简介 在当今数字化时代高校校园生活也在不断向便捷化、智能化方向发展。随着高校学生人数的持续增加以及生活节奏的加快传统的食堂就餐模式逐渐暴露出一些问题。 一方面学生对于餐饮的需求日益多样化和个性化。他们希望能够有更多的菜品选择包括不同口味、菜系和特色美食。同时学生们也期望能够根据自己的课程安排和作息时间灵活地选择就餐时间和地点。然而传统的食堂排队打饭方式不仅浪费时间而且菜品选择相对有限难以满足学生们的多样化需求。 另一方面高校食堂及周边餐饮商家也面临着管理和运营的挑战。他们需要更高效的订单处理系统、准确的库存管理以及及时的反馈机制以提高服务质量和经营效益。同时学校管理部门也希望能够对校园餐饮进行更好的监管确保食品卫生安全和服务质量。 Spring Boot 作为一种强大的后端开发框架具有快速开发、易于维护、可扩展性强等优点。Vue 则是一种流行的前端开发框架能够提供良好的用户交互体验和响应式界面设计。将两者结合起来构建高校网上订餐卓越平台可以实现前后端分离的架构提高系统的开发效率和性能。 这个平台可以为学生提供便捷的网上订餐服务让他们可以随时随地浏览菜品、下单订餐并实时跟踪订单状态。同时也为餐饮商家提供高效的订单管理系统帮助他们更好地处理订单、管理库存和优化服务。此外学校管理部门可以通过该平台进行数据统计和分析加强对校园餐饮的监管为学生创造更加安全、舒适的就餐环境。
二、开发技术与环境配置
以Java语言为开发工具利用了当前先进的springboot框架以IDEA为系统开发工具MySQL为后台数据库vue为后台管理页面开发的一个高校网上订餐系统。
2.1 SpringBoot框架
SpringBoot是一个全新开源的轻量级框架。基于Spring4.0设计其不仅继承了Spring框架原来有的优秀特性而且还通过简化配置文件来进一步简化了Spring应用的整个搭建以及开发过程。另外在原本的Spring中由于随着项目的扩大导入的jar包数量越来越大随之出现了jar包版本之间的兼容性问题而此时SpringBoot通过集成大量的框架使得依赖包的版本冲突以及引用的不稳定性问题得到了很好的解决。
SpringBoot可以看做是Spring的加强版本但实质上都是Spring的相关技术有了这些优秀的开源框架程序员在开发过程中将事半功倍。
2.2 Java语言简介
Java是由SUN公司推出该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的优势和广阔的前景它是面向对象的分布式的动态的具有平台无关性、安全性、健壮性。Java语言的基本语句语法和C一样但是它面向对象的技术更加彻底因为Java要求将所有的内容都必须封装成类把类作为程序的基本单位。由于不允许类外有变量、方法。 Java语言的分布式体现在数据分布和操作分布它是面向网络的语言可以处理TCP/IP协议它也支持客户机/服务器的计算模式。Java语言的动态性是指类在运行时是动态安装的使得Java可以动态的维护程序。Java不支持指针对内存访问的所有操作都是通过对象实例化实现的这样就避免了指针操作中易产生的错误同时也预防了病毒对系统的破坏和威胁。
Java语言的编程风格与C语言非常接近它继承了C面向对象技术的核心它面世之后发展迅速非常流行对高级C语言形成了很大的冲击。业内人士称之为“一次编译、到处执行”。当然java也有缺点在每次执行编译后字节码都需要消耗一定的时间在某些程度上降低了性能。但是这并不影响java成为此次设计语言的选择。Java语言简单易学使用它的编程时间短功能性强开发者学习起来更简便、更快。Java的主要特性有以下几个
面向对象 面向对象有四个特点封装、继承、多态、抽象。抽象是指忽略一个问题中的次要部分关注主要部分。多态是指对同一种消息做出的不同反应。继承是指在原有的父类方法基础上增加自己独有的方法而不改变原来父类。
平台无关性、 Java编译出来的是字节码直接由虚拟机执行。在任何平台上只要有Java虚拟机Java代码都能运行。
可靠性和安全性 Java对内存的访问都必须通过对象的实例变量来实现避免了指针中出现的错误。
多线程 Java提供了多线程功能利用编程实现同一时间同时工作的功能。
2.3 Vue的介绍
Vue.js致力于构建数据驱动的web应用开发框架以简洁化轻量级数据驱动模块友好等优势深受企业以及前端开发者的喜爱成为前端开发人员必备的技能。Vue3.0的出现又带动周边生态的发展奠定了vue在企业级开发的重要地位。
Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层不仅易于上手还便于与第三方库或既有项目整合。另一方面当与现代化的工具链以及各种支持类库结合使用时Vue 也完全能够为复杂的单页应用提供驱动。
渐进式框架做分层设计每层都可选不同层可以灵活接入其他方案。而当你都想用官方的实现时会发现也早已准备好各层之间包括配套工具都能比接入其他方案更便捷地协同工作。 一个个放入,放多少就做多少。
2.4 mysql数据库介绍
利用MYSQL的数据独立性、安全性等特点在软件项目中对数据进行操作可以保证数据准确无误并降低了程序员的应用开发时间。 MYSQL的特点是支持多线程能方便的对系统资源充分利用有效提高速度还提供多种方式途径来对数据库进行连接MYSQL的功能相对弱小、规模也小但本系统要求不高MYSQL完全可以满足本系统使用。 利用MYSQL建立系统数据库不仅有利于数据处理业务的早期整合还能利于发展后两种数据扩展的操作。
2.5 B/S架构
B/S结构是目前使用最多的结构模式它可以使得系统的开发更加的简单好操作而且还可以对其进行维护。使用该结构时只需要在计算机中安装数据库和一些很常用的浏览器就可以了。浏览器就会与数据库进行信息的连接可以实现很多的功能B/S结构是可以直接进行使用的而且B/S结构在使用中极大的减少了工作的维护。基于B/S的软件所有的数据库之间都是相互独立的因此是非常安全的。因为基于B/S结构可以清楚的看到系统正在处理的业务并且能够及时的让管理人员做出决策这样就可以避免企业的损失。B/S结构的基本特点是集中式的管理模式用户使用系统生成数据后这些数据就可以存储到系统的数据库中方便日后能够用到这样就可以满足人们的所有的需求。
三、系统功能实现 四、系统项目截图
4.1、前台功能模块
1、首页
显示首页、菜品信息、公告资讯、留言反馈、后台管理、个人中心 2、注册 3、登录 4、菜品信息
在菜品信息页面的搜索栏输入店铺名称、菜品名称进行查询然后查看店铺名称、菜品名称、菜品分类、图片、口味、价格、数量、联系电话、审核回复、审核状态如有需要可以进行购买、收藏、评论 5、公告资讯
在公告资讯页面查看标题、内容简介、发布时间 6、个人中心
可以输入个人详细信息进行信息更新操作还可以对所需菜品进行收藏 4.2、后台功能模块
4.2.1、用户功能模块
1、首页
用户登录到系统界面可以对系统系统首页、个人中心、订单信息管理、配送信息管理、私聊用户管理 2、信息管理
在订单信息管理页面对订单编号、菜品名称、菜品分类、账号、价格、数量、总价格、下单时间、用户名、姓名、手机、收货地址、状态、是否支付等信息进行查询或者删除订单信息 4.2.2、骑手功能模块
1、登录 2、首页
首页、个人中心、订单信息管理、接单信息管理、配送信息管理、私聊骑手管理 3、订单信息管理
在订单信息管理页面对订单编号、菜品名称、菜品分类、账号、价格、数量、总价格、下单时间、用户名、姓名、手机、收货地址、状态、是否支付等信息进行查询订单信息 4.2.3、商家功能模块
1、登录 2、首页
首页、个人中心、菜品信息管理、订单信息管理、接单信息管理、配送信息管理、私聊商家管理 3、菜品信息管理
在菜品信息管理页面对店铺名称、菜品名称、菜品分类、图片、口味、价格、数量、联系电话、审核回复、审核状态等信息进行查询或删除菜品信息 4.2.4、管理员功能模块
1、登录 2、首页
首页、个人中心、用户管理、商家管理、骑手管理、菜品分类管理、菜品信息管理、订单信息管理、接单信息管理、配送信息管理、私聊用户管理、私聊商家管理、私聊骑手管理、留言反馈、系统管理 3、用户管理
在用户管理页面对用户名、姓名、性别、头像、邮箱、手机等信息进行查询新增或删除用户信息 4、骑手管理
在骑手管理页面对工号、姓名、性别、头像、年龄、邮箱、电话、审核回复、审核状态、审核等信息进行查询新增或删除骑手 5、商家管理
在商家管理页面对账号、姓名、性别、头像、邮箱、联系电话、审核回复、审核状态、审核等信息进行查询新增或删除商家信息 6、菜品信息管理
在菜品信息管理页面对店铺名称、菜品名称、菜品分类、图片、口味、价格、数量、联系电话、审核回复、审核状态等信息进行查询或删除菜品信息 7、订单信息管理
在订单信息管理页面对订单编号、菜品名称、菜品分类、账号、价格、数量、总价格、下单时间、用户名、姓名、手机、收货地址、状态、是否支付等信息进行查询或删除订单信息 8、接单信息管理
在接单信息管理页面对订单编号、菜品名称、菜品分类、账号、数量、总价格、接单时间、用户名、姓名、手机、收货地址、工号、骑手姓名、配送状态等信息进行查询接单信息 五、核心代码
5.1、文件上传
/*** 上传文件映射表*/
RestController
RequestMapping(file)
SuppressWarnings({unchecked,rawtypes})
public class FileController{Autowiredprivate ConfigService configService;/*** 上传文件*/RequestMapping(/upload)public R upload(RequestParam(file) MultipartFile file,String type) throws Exception {if (file.isEmpty()) {throw new EIException(上传文件不能为空);}String fileExt file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(.)1);File path new File(ResourceUtils.getURL(classpath:static).getPath());if(!path.exists()) {path new File();}File upload new File(path.getAbsolutePath(),/upload/);if(!upload.exists()) {upload.mkdirs();}String fileName new Date().getTime().fileExt;File dest new File(upload.getAbsolutePath()/fileName);file.transferTo(dest);/*** 如果使用idea或者eclipse重启项目发现之前上传的图片或者文件丢失将下面一行代码注释打开* 请将以下的D:\\springbootq33sd\\src\\main\\resources\\static\\upload替换成你本地项目的upload路径* 并且项目路径不能存在中文、空格等特殊字符*/
// FileUtils.copyFile(dest, new File(D:\\springbootq33sd\\src\\main\\resources\\static\\upload/fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/if(StringUtils.isNotBlank(type) type.equals(1)) {ConfigEntity configEntity configService.selectOne(new EntityWrapperConfigEntity().eq(name, faceFile));if(configEntitynull) {configEntity new ConfigEntity();configEntity.setName(faceFile);configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put(file, fileName);}/*** 下载文件*/IgnoreAuthRequestMapping(/download)public ResponseEntitybyte[] download(RequestParam String fileName) {try {File path new File(ResourceUtils.getURL(classpath:static).getPath());if(!path.exists()) {path new File();}File upload new File(path.getAbsolutePath(),/upload/);if(!upload.exists()) {upload.mkdirs();}File file new File(upload.getAbsolutePath()/fileName);if(file.exists()){HttpHeaders headers new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData(attachment, fileName); return new ResponseEntitybyte[](FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);}} catch (IOException e) {e.printStackTrace();}return new ResponseEntitybyte[](HttpStatus.INTERNAL_SERVER_ERROR);}}
5.2、数据库配置
server:tomcat:uri-encoding: UTF-8port: 8080servlet:context-path: /springbootr1tjfspring:datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/springbootr1tjf?useUnicodetruecharacterEncodingutf-8useJDBCCompliantTimezoneShifttrueuseLegacyDatetimeCodefalseserverTimezoneGMT%2B8username: rootpassword: 123456# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseNamespringbootr1tjf
# 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
5.3、登录功能实现 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{Autowiredprivate UserService userService;Autowiredprivate TokenService tokenService;/*** 登录*/IgnoreAuthPostMapping(value /login)public R login(String username, String password, String captcha, HttpServletRequest request) {UserEntity user userService.selectOne(new EntityWrapperUserEntity().eq(username, username));if(usernull || !user.getPassword().equals(password)) {return R.error(账号或密码不正确);}String token tokenService.generateToken(user.getId(),username, users, user.getRole());return R.ok().put(token, token);}/*** 注册*/IgnoreAuthPostMapping(value /register)public R register(RequestBody UserEntity user){if(userService.selectOne(new EntityWrapperUserEntity().eq(username, user.getUsername())) !null) {return R.error(用户已存在);}userService.insert(user);return R.ok();}/*** 退出*/GetMapping(value logout)public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok(退出成功);}/*** 密码重置*/IgnoreAuthRequestMapping(value /resetPass)public R resetPass(String username, HttpServletRequest request){UserEntity user userService.selectOne(new EntityWrapperUserEntity ().eq(username, username));if(usernull) {return R.error(账号不存在);}user.setPassword(123456);userService.update(user,null);return R.ok(密码已重置为123456);}/*** 列表*/RequestMapping(/page)public R page(RequestParam MapString, Object params,UserEntity user){EntityWrapperUserEntity ew new EntityWrapperUserEntity();PageUtils page userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));return R.ok().put(data, page);}/*** 列表*/RequestMapping(/list)public R list( UserEntity user){EntityWrapperUserEntity ew new EntityWrapperUserEntity();ew.allEq(MPUtil.allEQMapPre( user, user)); return R.ok().put(data, userService.selectListView(ew));}/*** 信息*/RequestMapping(/info/{id})public R info(PathVariable(id) String id){UserEntity user userService.selectById(id);return R.ok().put(data, user);}/*** 获取用户的session用户信息*/RequestMapping(/session)public R getCurrUser(HttpServletRequest request){Long id (Long)request.getSession().getAttribute(userId);UserEntity user userService.selectById(id);return R.ok().put(data, user);}/*** 保存*/PostMapping(/save)public R save(RequestBody UserEntity user){if(userService.selectOne(new EntityWrapperUserEntity().eq(username, user.getUsername())) !null) {return R.error(用户已存在);}userService.insert(user);return R.ok();}/*** 修改*/RequestMapping(/update)public R update(RequestBody UserEntity user){userService.updateById(user);//全部更新return R.ok();}/*** 删除*/RequestMapping(/delete)public R delete(RequestBody Long[] ids){userService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
}
5.4、业务层Service 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 IServiceUserEntity {PageUtils queryPage(MapString, Object params);ListUserEntity selectListView(WrapperUserEntity wrapper);PageUtils queryPage(MapString, Object params,WrapperUserEntity wrapper);}5.5、数据访问层Dao
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 BaseMapperUserEntity {ListUserEntity selectListView(Param(ew) WrapperUserEntity wrapper);ListUserEntity selectListView(Pagination page,Param(ew) WrapperUserEntity wrapper);}