Java项目:125SpringBoot教室预约管理系统

博主主页:Java旅途
简介:分享计算机知识、学习路线、系统源码及教程
文末获取源码

一、项目介绍

教室预约管理系统使用SpringBoot+Mybatis进行开发,系统整体分为前台和后台,后台主要对教室,用户等信息进行管理,前台总共分为学生、教室、辅导员、楼长四种角色,通过预约教室,多层审批完成教室预约功能。系统详细功能如下

后台功能:

  • 用户管理
  • 教学楼管理
  • 教室管理
  • 审批查询
  • 班级管理

前台功能:

  • 学生

    • 教室预约
    • 个人中心
    • 留言
  • 教师

    • 教师预约
    • 个人中心
    • 留言
  • 辅导员

    • 审批
    • 个人中心
  • 楼长

    • 审批
    • 个人中心
    • 留言板

二、技术框架

  • 后端:SpringBoot,Mybatis
  • 前端:jquery

三、安装教程

  1. 用idea打开项目
  2. 在idea中配置jdk环境
  3. 配置maven环境并下载依赖
  4. 新建数据库,导入数据库文件
  5. 在application.yml文件中将数据库账号密码改成自己本地的
  6. 启动运行,进行访问。
后台管理员账号密码: admin/123456
前台学生账号密码:xx/123456
前台教师账号密码:lyc/123456
前台辅导员账号密码:zs/123456
前台楼长账号密码:wm/123456

四、项目截图

image-20230721151012695

image-20230721151025659

image-20230721151043270

image-20230721151127832

image-20230721151150815

image-20230721151216050

五、相关代码

RoomController

package edu.room.manage.controller.console;import com.github.pagehelper.PageInfo;
import edu.room.manage.common.annotation.Operation;
import edu.room.manage.common.controller.BaseController;
import edu.room.manage.common.exception.MessageException;
import edu.room.manage.common.mybatis.condition.MybatisCondition;
import edu.room.manage.common.utils.ReturnUtils;
import edu.room.manage.domain.Room;
import edu.room.manage.dto.RoomDTO;
import edu.room.manage.service.FloorService;
import edu.room.manage.service.RoomService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.validation.Valid;/***/
@Controller
@RequestMapping("/console/room")
public class RoomController extends BaseController {@Autowiredprivate RoomService  roomService;@Autowiredprivate FloorService floorService;@Operation("查看教学楼")@RequestMapping(value = "/index", method = {RequestMethod.GET})public String index(Model model) {return "console/room/index";}@Operation("教学楼详情")@RequestMapping(value = "detail/{id}", method = {RequestMethod.GET})public String from(@PathVariable Integer id, Model model) {Room room;if (id != 0) {room = roomService.selectByPrimaryKey(id);} else {room = new Room();}model.addAttribute("room", room);model.addAttribute("floorList", floorService.selectAll());return "console/room/detail";}@Operation("添加更新教学楼")@RequestMapping(value = "/merge", method = {RequestMethod.POST})public String save(@Valid Room room, BindingResult result, RedirectAttributes attributes) {if (result.hasErrors()) {throw new MessageException(result.getAllErrors().get(0).getDefaultMessage());}roomService.merge(room);return redirect("/console/room/index", "操作成功", attributes);}@Operation("删除教学楼")@RequestMapping(value = "/delete", method = {RequestMethod.GET})@ResponseBodypublic ModelMap delete(Integer id) {roomService.deleteByPrimaryKey(id);return ReturnUtils.success("操作成功", null, null);}@ResponseBody@RequestMapping(value = "/list", method = {RequestMethod.GET})public ModelMap list(RoomDTO room) {ModelMap map = new ModelMap();MybatisCondition condition = new MybatisCondition().like("r.name", room.getName()).like("f.name", room.getFloorName()).like("r.floor", room.getFloor()).page(room);PageInfo<RoomDTO> pageInfo = roomService.selectDtoPage(condition);map.put("pageInfo", pageInfo);return ReturnUtils.success("加载成功", map);}}

HomeController

package edu.room.manage.controller.console;import edu.room.manage.common.annotation.Operation;
import edu.room.manage.common.context.Constant;
import edu.room.manage.common.controller.BaseController;
import edu.room.manage.common.utils.Md5Utils;
import edu.room.manage.domain.Admin;
import edu.room.manage.domain.Floor;
import edu.room.manage.domain.Room;
import edu.room.manage.domain.User;
import edu.room.manage.service.AdminService;
import edu.room.manage.service.FloorService;
import edu.room.manage.service.RoomService;
import edu.room.manage.service.UserService;
import edu.room.manage.valid.ValidUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;/***/
@Controller
@RequestMapping("console")
@Slf4j
public class HomeController extends BaseController {@Autowiredprivate UserService  userService;@Autowiredprivate RoomService  roomService;@Autowiredprivate FloorService floorService;@Autowiredprivate AdminService adminService;/*** 首页** @param model* @return*/@RequestMapping(value = "index", method = {RequestMethod.GET})public String index(Model model) {return "console/index";}/*** 首页展示** @param model* @return*/@RequestMapping(value = "main", method = {RequestMethod.GET})public String right(Model model) {model.addAllAttributes(this.getTotal());return "console/right";}/*** 登录页** @return*/@RequestMapping(value = "login", method = RequestMethod.GET)public String loginForm() {return "console/login";}@Operation("登录")@RequestMapping(value = "login", method = RequestMethod.POST)public String loginPost(@Valid ValidUser validUser, BindingResult bindingResult, RedirectAttributes redirectAttributes) {if (bindingResult.hasErrors()) {redirectAttributes.addFlashAttribute(Constant.ERROR_MESSAGE, bindingResult.getAllErrors().get(0).getDefaultMessage());return "redirect:login";}String username = validUser.getUsername();Admin  admin    = (Admin) userService.login(validUser.getUsername(), validUser.getPassword(), User.UserRoleEnum.ADMIN);if (null == admin) {redirectAttributes.addFlashAttribute(Constant.ERROR_MESSAGE, "用户名或密码不正确");return "redirect:login";} else {logger.info("用户[" + username + "]登录认证通过");session.setAttribute(Constant.SESSION_ADMIN, admin);return "redirect:index";}}/*** 退出登录** @param redirectAttributes* @return*/@RequestMapping(value = "/logout", method = RequestMethod.GET)public String logout(RedirectAttributes redirectAttributes) {log.info("【退出登录】 {}", loginAdmin().getUsername());session.removeAttribute(SESSION_ADMIN);redirectAttributes.addFlashAttribute(Constant.ERROR_MESSAGE, "您已安全退出");return "redirect:login";}/*** 修改密码** @return*/@RequestMapping(value = "/modifyPwd", method = {RequestMethod.GET})public String modifyPwd() {return "console/modify-pwd";}@Operation("修改用户密码")@RequestMapping(value = "/modifyPwd", method = {RequestMethod.POST})public String modifyPwd(String pwd, String password, String password2, RedirectAttributes attributes) {if (!password.equals(password2)) {return redirect("/console/modifyPwd", "两次密码不一样", attributes);}Admin user = adminService.selectByPrimaryKey(loginAdmin().getId());if (null != user) {if (!Md5Utils.encode(pwd).equalsIgnoreCase(user.getPassword())) {return redirect("/console/modifyPwd", "原密码错误", attributes);}String newPassword = Md5Utils.encode(password);user.setPassword(newPassword);adminService.updateByPrimaryKeySelective(user);return redirect("/console/modifyPwd", "修改成功", attributes);} else {return redirect("/console/modifyPwd", "用户不存在,修改失败", attributes);}}/*** 首页展示数据** @return*/private Map<String, Object> getTotal() {Integer             userCount = userService.selectCount(new User());Map<String, Object> mp        = new HashMap<>(4);mp.put("userCount", userCount);mp.put("roomCount", roomService.selectCount(new Room()));mp.put("floorCount", floorService.selectCount(new Floor()));return mp;}}

大家点赞、收藏、关注、评论啦 、👇🏻点开下方卡片👇🏻关注后回复 106

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

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

相关文章

SpringBoot+MyBatis使用pagehelper分页插件及其注意事项(含解决分页不生效问题)

1 前言 近期在做项目的时候&#xff0c;遇到了一个问题&#xff1a;在使用MyBatis的分页插件&#xff08;pagehelper&#xff09;时&#xff0c;发现其分页不生效&#xff0c;找了许多方法才得以解决&#xff0c;故写下这篇文章记录一下&#xff0c;帮助跟我遇到同样问题的同学…

无人机航迹规划(六):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

阿赵UE学习笔记——解决UE资源不能正常显示缩略图的问题

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   这里分享一个虚幻引擎使用小技巧。在使用虚幻引擎的过程中&#xff0c;经常会遇到有些资源在重新打开项目的时候&#xff0c;会看不到缩略图&#xff0c;而是显示默认资源的图标&#xff1a; 这个时候&#xff0c;第一种…

java web mvc-06-play framework intro

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

每日一题——LeetCode1331.数组序号转换

方法一 排序哈希Map 首先用一个数组保存排序完的原数组&#xff0c;然后用一个哈希表保存各元素的序号&#xff0c;最后将原属组的元素替换为序号后返回。 var arrayRankTransform function(arr) {let set new Set(arr)let sortArrArray.from(set).sort((a,b)>a-b)let ma…

对Vue有状态组件和无状态组件的理解及使用场景

目录 一、Vue框架 二、Vue的有状态组件 三、Vue的无状态组件 四、有状态组件和无状态组件的区别 一、Vue框架 Vue是一款流行的JavaScript框架&#xff0c;用于构建用户界面。它被设计为易学易用的&#xff0c;同时也具备强大的功能和灵活性。 Vue具有以下特点&#xff1a…

【AI视野·今日NLP 自然语言处理论文速览 第七十五期】Thu, 11 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 11 Jan 2024 Totally 36 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Leveraging Print Debugging to Improve Code Generation in Large Language Models Authors Xueyu Hu, Kun K…

03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址&#xff1a;portal/findAllTypes 请求方式&#xff1a;get 请求参数&#xff1a;无 响应数据&#xff1a; 成功 {"code":"200","mes…

Linux中Iptables使用

概念&#xff1a;网络中的防火墙&#xff0c;是一种将内部网络和外部网络分开的方法&#xff0c;是一种隔离技术 作用&#xff1a; 防火墙在内网与外网通信时进行访问控制&#xff0c;依据所设置的规则对数据包作出判断&#xff0c;最大限度地阻止网络中的黑客破坏企业网络&…

MYSQL数据库基本操作-DQL-基本查询

一.概念 数据库管理系统一个重要功能就是数据查询。数据查询不应是简单返回数据库中存储的数据&#xff0c;还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。 MySQL提供了功能强大&#xff0c;灵活的语句来实现这些操作。 MySQL数据库使用select语句来查询数据…

【学术论文写作】 鲁棒性实验写作的行文逻辑

文章目录 一、声明二、行文思路三、示例范文一范文二 一、声明 自己总结的&#xff0c;有问题望指正&#xff01; 二、行文思路 为什么要做鲁棒性测试怎么做实验结论对结果的解释 三、示例 PPT 范文一 2022, TIM, “A Robust and Reliable Point Cloud Recognition Netw…

GPT-5不叫GPT-5?下一代模型会有哪些新功能?

OpenAI首席执行官奥特曼在上周三达沃斯论坛接受媒体采访时表示&#xff0c;他现在的首要任务就是推出下一代大模型&#xff0c;这款模型不一定会命名GPT-5。虽然GPT-5的商标早已经注册。 如果GPT-4目前解决了人类任务的10%&#xff0c;GPT-5应该是15%或者20%。 OpenAI从去年开…

【JavaEE进阶】 MyBatis使用XML实现增删改查

文章目录 &#x1f38d;前言&#x1f340;配置连接字符串和MyBatis&#x1f343;写持久层代码&#x1f6a9;添加mapper接⼝&#x1f6a9;添加UserInfoXMLMapper.xml&#x1f6a9;单元测试 &#x1f334;增(Insert&#xff09;&#x1f6a9;返回⾃增id &#x1f38b;删(Delete)&…

【Vue3】组件通信

Vue3组件通信和Vue2的区别&#xff1a; 移出事件总线&#xff0c;使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西&#xff0c;合并到$attrs中了。$children被砍掉了。 1. props 若 父传子&#xff1a;属性值是非函数。若 子传父&…

泡泡玛特旗下IP亮相2024米兰时装周 LABUBU等化身时尚观察员​

2024年1月14日&#xff0c;在意大利米兰时装周上&#xff0c;泡泡玛特旗下IP THE MONSTERS成员LABUBU、ZIMOMO惊艳亮相PRONOUNCE珀琅汐2024秋冬大秀现场&#xff0c;作为时尚观察员的LABUBU和ZIMOMO以其独特的潮玩形象打动了顶级时尚圈。 据了解&#xff0c;泡泡玛特和PRONOUNC…

Qt简介及安装

“这不属于我&#xff0c;因为沉默背后也有冲动” 在互联网当中&#xff0c;最关注的几个比较核心的岗位&#xff1a; &#x1f6f6; 后端开发 &#x1f6f6; 前端开发 &#x1f6f6; 算法工程师 &#x1f6f6; 游戏开发 像后端开发中有认识…

VUE+Vis.js鼠标悬浮title提前显示BUG解决方法

在使用VUEVis.js做拓扑图&#xff0c;利用鼠标悬浮放在图标展示设备信息时&#xff0c;发现鼠标一放在图标上面时&#xff0c;标题表会提前在放置的元素下显示&#xff0c;鼠标再放到图标上去元素才会隐藏变成悬浮状态 解决方法&#xff1a; 添加一个div元素&#xff0c;设置v…

linux修改文件夹下所有文件的权限(常用)

1、 修改文件夹下所有文件的权限 # filename为要修改的文件夹名字。-R应该是表示递归修改filename文件夹下所有文件的权限 sudo chmod -R 777 filename2、linux修改单个文件夹权限 sudo chmod 600 &#xff08;只有所有者有读和写的权限&#xff09; sudo chmod 644 &#…

Java 设计者模式以及与Spring关系(七) 命令和迭代器模式

简介: 本文是个系列一次会出两个设计者模式作用&#xff0c;如果有关联就三个&#xff0c;除此外还会讲解在spring中作用。 23设计者模式以及重点模式 我们都知道设计者模式有3类23种设计模式&#xff0c;标红是特别重要的设计者模式建议都会&#xff0c;而且熟读于心&#…

什么是EJB?

什么是EJB&#xff1f; EJB (Enterprise JavaBeans) 是一种用于开发企业级应用程序的 Java 服务器端组件模型。它是一种分布式对象架构&#xff0c;用于构建可移植、可伸缩和可事务处理的企业级应用。 EJB 提供了一种将业务逻辑组件化、模块化的方式&#xff0c;使开发人员能够…