文末获取源码 

开发语言:Java

开发工具:IDEA /​​Eclipse​​

数据库:MYSQL5.7

应用服务:Tomcat7/Tomcat8

使用​​框架​​​​ssm​​+vue

JDK版本:jdk1.8


 前言介绍

本系统从学生的功能要求出发,建立了高校生活服务平台 ,系统中的功能模块主要是实现管理员;首页、个人中心、学生管理、维修师傅管理、宿舍公告管理、自习室管理、预约信息管理、设备报修管理、维修信息管理、维修评价管理、试卷管理、试题管理、论坛管理、系统管理、考试管理,学生;首页、个人中心、预约信息管理、设备报修管理、维修信息管理、维修评价管理,维修师傅;首页、个人中心、设备报修管理、维修信息管理、维修评价管理系统管理,前台首页;首页、宿舍公告、自习室、论坛、试卷列表、校园公告、个人中心、后台管理、在线沟通等功能部分;经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与高校生活服务平台实现的实际需求相结合,讨论了java开发的高校生活服务平台的使用。

系统设计 

高校生活服务平台的设计主要是为了满足学生的实际需求。 因此,它需要通过Internet实现,因此它必须具备硬件和软件基础。该平台最终可以通过科学技术和各种方式达到支持智能化的信息管理的目的。因此,它必须具备网络高校生活服务平台信息所需的环境和各种资料,并保证实现开放性,模块性和实用性三个原则。

高校生活服务平台,主要包括管理员、学生、维修师傅三个权限角色,对于用户角色不同,所使用的功能模块相应不同。如下图

SpringMVC+Vue实现前后端分离的高校生活服务平台_前端

数据库设计

数据库是信息系统的基础和核心。数据库设计的好坏直接影响到信息系统开发的成败。创建数据库表首先确定实体的属性和实体之间的关系。根据关系创建一个数据表。

实体ER图

管理员信息实体属性图如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_ssm_02

 维修师傅信息实体属性图如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_后端_03

 预约信息实体属性图如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_ssm_04

 维修评价信息实体属性图如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_后端_05

数据表

根据系统功能设计的要求和功能模块的划分,高校生活服务平台的设计与实现一共涉及到四个数据表。下面就介绍一下各别主要数据库表的设计结构及其功能建立数据库表:

shebeibaoxiu设备报修


Field



Type



Comment



id



int(11)



主键



addtime



varchar(200)



添加时间



mingcheng



varchar(200)



名称



gonghao






工号



shifuxingming



varchar(200)



师傅姓名



baoxiuneirong



varchar(200)



报修内容



baoxiuriqi



varchar(200)



报修日期



xuehao



varchar(200)



学号



xueshengxingming



varchar(200)



学生姓名



sushe



varchar(200)



宿舍


sushegonggao宿舍公告表


Field



Type



Comment



id



int(11)



主键



addtime



varchar(200)



添加时间



biaoti



varchar(200)



标题



tupian



varchar(200)



图片



gonggaoneirong



varchar(200)



公告内容



fabushijian



varchar(200)



发布时间


weixiupingjia维修评价表


Field



Type



Comment



id



int(11)



主键



addtime



varchar(200)



添加时间



mingcheng



varchar(200)



名称



gonghao



varchar(200)



工号



shifuxingming



varchar(200)



师傅姓名



pingfen



varchar(200)



评分



pingjianeirong



varchar(200)



评价内容



riqi



varchar(200)



日期



xuehao



varchar(200)



学号


weixiushifu维修师傅表


Field



Type



Comment



id



int(11)



主键



addtime



varchar(200)



添加时间



gonghao



varchar(200)



工号



mima



varchar(200)



密码



shifuxingming



varchar(200)



师傅姓名



xingbie



varchar(200)



性别



touxiang



varchar(200)



头像



dianhua



varchar(200)



电话


系统实现

前台首页功能模块

学生登录功能是系统中一个非常重要的功能模块。这个函数模块需要做的第一件事是设计系统的安全性。不能说任何打开登录界面的人都可以进入系统。我们想控制管理。学生的账号和密码,只有拥有权限的学生才能通过这个登录界面进入管理界面,这是非常重要的。学生想要登录和使用系统首先进入登录账户和登录密码,然后我们使用程序来检索,检索数据库中的账户信息一致输入账号密码,如果输入账号信息让学生登录时,如果它不存在,给一个提示,非法登陆,所以这个功能模块是非常重要的。

学生通过网址进入到网站界面,进行填写自己的用户名和密码等信息输入完成后学生登录成功,如图1所示,如果学生没有自己的账户信息,则需要学生进行在线注册,学生注册时根据需求可以通过注册界面提示的文本框信息进行在线填写自己的基本信息内容,信息编辑完成后核对信息无误后进行在线提交,新的学生注册完成,如图2

图1

SpringMVC+Vue实现前后端分离的高校生活服务平台_后端_06

 如图2

SpringMVC+Vue实现前后端分离的高校生活服务平台_vue_07

学生登录进入到前台首页界面,可以进行查看首页、宿舍公告、自习室、论坛、试卷列表、校园公告、个人中心、后台管理、在线沟通等功能模块,进行相对应操作,通过自习室进行填写图书馆名称、自习室号、时间段、容纳人数,进行预约操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_java_08 

宿舍公告 

SpringMVC+Vue实现前后端分离的高校生活服务平台_vue_09

 自习室

SpringMVC+Vue实现前后端分离的高校生活服务平台_前端_10

SpringMVC+Vue实现前后端分离的高校生活服务平台_java_11

 论坛

SpringMVC+Vue实现前后端分离的高校生活服务平台_java_12

 试卷列表

SpringMVC+Vue实现前后端分离的高校生活服务平台_ssm_13

校园公告

SpringMVC+Vue实现前后端分离的高校生活服务平台_后端_14

 个人中心

SpringMVC+Vue实现前后端分离的高校生活服务平台_ssm_15

在线沟通

SpringMVC+Vue实现前后端分离的高校生活服务平台_前端_16

 学生功能模块

学生通过点击后台管理,进入页面可以进行首页、个人中心、预约信息管理、设备报修管理、维修信息管理、维修评价管理等功能模块,进行相对应操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_java_17

设备报修管理:通过设备报修管理可以进行名称、工号、师傅姓名、保修内容、保修日期、学号等信息进行详情,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_后端_18 

维修信息管理:学生通过列表可以获取名称、学号、学生姓名、维修情况、维修内容、费用、维修日期、工号、师傅姓名、是否支付等信息,进行详情操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_vue_19

维修评价管理:学生通过列表可以获取名称、工号、师傅姓名、评分、评价内容、日期、学号等信息,进行详情修改操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_前端_20 

 管理员功能模块

管理员通过后台登录窗口进行输入用户名、密码、角色等信息,进行登录,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_ssm_21

学生管理,管理员通过列表进行填写学号、密码、学生姓名、性别、头像、手机等信息,进行详情、修改或删除操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_java_22 

维修师傅管理,管理员通过维修师傅管理可以在线查看工号、密码、师傅姓名、性别、头像、电话等信息,进行详情或修改、删除操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_后端_23 

 宿舍公告管理,管理员通过宿舍公告管理可以在线查看标题、图片、发布时间等信息,进行查看或修改、删除操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_前端_24

 自习室管理,管理员通过自习室管理可以在线查看图书馆名称、自习室号、图片、时间段、容纳人数等信息,进行查看或添加修改或删除,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_前端_25

轮播图;该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作 ,如图 

 SpringMVC+Vue实现前后端分离的高校生活服务平台_后端_26

预约信息管理:通过列表可以获取图书馆名称、自习室号、人数、预约日期、预约时间、学号、学生姓名等信息,进行查看、详情、修改或删除操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_java_27 

维修评价管理:通过列表可以获取名称、工号、师傅姓名、评分、评价内容、日期、学号等信息,进行查看、详情、修改或删除操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_vue_28 

维修师傅功能模块 

维修师傅通过点击后台管理,进入页面可以进行首页、个人中心、设备报修管理、维修信息管理、维修评价管理 、系统管理等功能模块,进行相对应操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_前端_29

在线沟通:通过在线沟通可以获取新消息、状态等信息进行详情,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_ssm_30 

维修信息管理:通过维修信息管理列表可以获取名称、学号、学生姓名、维修情况、维修内容、费用、维修日期、工号、师傅姓名、是否支付等信息,进行详情操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_前端_31 

维修评价管理:通过维修评价管理列表可以获取名称、工号、师傅姓名、评分、评价内容、日期、学号等信息,进行详情修改操作,如图

SpringMVC+Vue实现前后端分离的高校生活服务平台_后端_32 

部分核心代码:  

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.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.ZixishiEntity;
import com.entity.view.ZixishiView;

import com.service.ZixishiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
* 自习室
* 后端接口
* @author
* @email
* @date 2021-01-25 17:37:50
*/
@RestController
@RequestMapping("/zixishi")
public class ZixishiController {
@Autowired
private ZixishiService zixishiService;



/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,ZixishiEntity zixishi, HttpServletRequest request){

EntityWrapper<ZixishiEntity> ew = new EntityWrapper<ZixishiEntity>();
PageUtils page = zixishiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, zixishi), params), params));
return R.ok().put("data", page);
}

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

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

/**
* 查询
*/
@RequestMapping("/query")
public R query(ZixishiEntity zixishi){
EntityWrapper< ZixishiEntity> ew = new EntityWrapper< ZixishiEntity>();
ew.allEq(MPUtil.allEQMapPre( zixishi, "zixishi"));
ZixishiView zixishiView = zixishiService.selectView(ew);
return R.ok("查询自习室成功").put("data", zixishiView);
}

/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
ZixishiEntity zixishi = zixishiService.selectById(id);
return R.ok().put("data", zixishi);
}

/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
ZixishiEntity zixishi = zixishiService.selectById(id);
return R.ok().put("data", zixishi);
}




/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ZixishiEntity zixishi, HttpServletRequest request){
zixishi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(zixishi);

zixishiService.insert(zixishi);
return R.ok();
}

/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ZixishiEntity zixishi, HttpServletRequest request){
zixishi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(zixishi);

zixishiService.insert(zixishi);
return R.ok();
}

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


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


int count = zixishiService.selectCount(wrapper);
return R.ok().put("count", count);
}



}