SpringBoot+Vue项目大学校园防疫与服务系统的设计与实现

news2025/7/21 4:30:41

文末获取源码

开发语言:Java

使用框架:spring boot

前端技术:JavaScript、Vue 、css3

开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

数据库:MySQL 5.7/8.0

数据库管理工具:phpstudy/Navicat

JDK版本:jdk1.8

Maven:apache-maven 3.8.1-bin

目录

一、前言介绍 

二、功能需求分析

2.1学生模块

2.2教师模块

2.3管理员模块

三、前台学生功能

3.1学生首页模块

3.2社区互动模块

3.3新闻资讯模块

3.4疫苗信息模块 

3.5学生接种预约模块 

四、学生后台功能模块

4.1出行报备管理模块 

4.2学生接种预约管理模块

4.3请假管理模块 

五、教师后台功能模块

5.1请假管理审核页面 

六、管理员功能模块

6.1轮播图管理模块 

6.2教师管理模块 

6.3新闻资讯管理模块

七、部分核心代码

7.1疫苗信息的关键代码 

7.2接种预约关键代码

7.3出行报备关键代码

7.4学生注册的关键代码 

7.5学生登录的关键代码


一、前言介绍 

系统采用了Java技术,将所有业务模块采用以浏览器交互的模式,选择MySQL作为系统的数据库,开发工具选择IDEA来进行系统的设计。基本实现了大学校园防疫与服务系统 应有的主要功能模块,本系统有管理员、教师、学生。管理员:后台首页、轮播图、公告栏、用户管理、社区互动、新闻资讯、出行报备、疫苗信息、学生接种预约、教师接种预约、请假管理、销假申请。教师;后台首页、社区互动、出行报备、教师接种预约、请假管理、销假申请。学生;后台首页、社区互动、出行报备、教师接种预约、请假管理、销假申请管理等。

对系统进行测试后,改善了程序逻辑和代码。同时确保系统中所有的程序都能正常运行,所有的功能都能操作,并且该系统有很好的操作体验,实现了对于大学校园防疫与服务系统 对学生管理、教师管理、政府部门双赢。

二、功能需求分析

大学校园防疫与服务系统 在对需求做解析后,整个系统主要分为三个部分:管理员、教师和学生,每个模块下的分支功能不一样。对功能做出如下说明:

2.1学生模块

账号登录认证。

管理个人资料信息,修改可修改的信息项。

出行报备,添加和查询已有出行的记录。

2.2教师模块

个人资料管理,修改删除自己的信息。

学生的添加与查询、出行报备的查询、疫苗接种预约的查询、请假管理的查询与审核请假、销假申请的查询及删除、通知公告的查询。

2.3管理员模块

系统用户的管理,管理和添加删除管理员,可以设置登录权限,或者删除所有用户账号。

教师管理,添加教师的具体信息与查询教师同时也具备删除教师。

通知公告管理,添加发布公告查询公告和删除公告的功能。

学生管理,查询学生的信息,也具备修改和删除功能。

出行报备管理,查询学生出行报备的信息,也具备修改和删除功能。

疫苗接种预约管理,查询学生疫苗接种的信息,也具备修改和删除功能。

请假管理,查询学生请假的信息,也具备修改和删除功能。

销假管理,查询学生销假的信息,也具备修改和删除功能。

系统管理,系统的备份功能。

三、前台学生功能

3.1学生首页模块

3.2社区互动模块

3.3新闻资讯模块

3.4疫苗信息模块 

3.5学生接种预约模块 

四、学生后台功能模块

4.1出行报备管理模块 

4.2学生接种预约管理模块

4.3请假管理模块 

五、教师后台功能模块

5.1请假管理审核页面 

六、管理员功能模块

6.1轮播图管理模块 

6.2教师管理模块 

6.3新闻资讯管理模块

七、部分核心代码

7.1疫苗信息的关键代码 

 @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

7.2接种预约关键代码

@RequestMapping("/get_list")

    public Map<String, Object> getList(HttpServletRequest request) {

        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));

        return success(map);

}

7.3出行报备关键代码

@RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        Query select = service.select(service.readQuery(request), service.readConfig(request));

        List resultList = select.getResultList();

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

 public Query select(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("select ");

        sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");

        sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));

        if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){

            sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");

        }

        if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){

            sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");

        }

        if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){

            int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;

            int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;

            sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);

        }

        log.info("[{}] - 查询操作,sql: {}",table,sql);

        return runEntitySql(sql.toString());

    }

7.4学生注册的关键代码 

/**

     * 注册

     * @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);

}

/**

     * 用户ID:[0,8388607]用户获取其他与用户相关的数据

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

     * 所在用户组:[0,32767]决定用户身份和权限

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

     * 手机认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

     * 用户名:[0,16]用户登录时所用的账户名称

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

7.5学生登录的关键代码

/**

     * 登录

     * @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, "账号或密码不正确");

        }

}

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

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

相关文章

C++初阶 Vector模拟实现

q. > 作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客介绍&#xff1a;本篇博客会模拟Vector实现 学习目标 模拟默认函数实现模拟迭代器实现模拟容器大小相关函数模拟修改内容相关函数模拟访问容器相关函数 我…

xss挑战之旅11-19关

文章目录前言第11关&#xff1a;referer第12关&#xff1a;User-Agent第13关&#xff1a;cookie第14关&#xff1a;exif xss第15关&#xff1a;ng-include第16关第17关第18关第19关&#xff1a;flash xss前言 靶场&#xff1a;XSS挑战之旅 1-10关 11-20关 第11关&#xff1a;r…

『LeetCode|每日一题』---->颜色填充

目录 1.每日一句 2.作者简介 『LeetCode|每日一题』颜色填充 1.每日一题 2.解题思路 2.1 思路分析&#xff08;DFS&#xff09; 2.2 核心代码 2.3 完整代码 2.4 运行结果 1.每日一句 我的宇宙为你藏着无数个星球 2.作者简介 &#x1f3e1;个人主页&#xff1a;XiaoXiaoChe…

Git之路

文章目录指南介绍实战任务一&#xff1a;sb项目任务二&#xff1a;idea实战任务三&#xff1a;分支实战(待续)指南 如果你想在简历上写“会常用的Git的命令“&#xff0c;那么这篇文章值得你要看&#xff0c;那我们需要掌握什么呢&#xff1f;其实会简单的操作就行&#xff0c…

Matplotlib绘图-快速上手可视化工具

Matplotlib快速上手一、初识Matplotlib1.1 认识Matplotlib的图像结构1.2 绘制一个折线图二、给图像添加修饰2.1 自定义x的刻度2.2一图多线2.3一图绘制多个坐标系子图三、主流图形的绘制3.1绘制柱状图一、初识Matplotlib 是Python最常见的可视化工具之一 1.1 认识Matplotlib的…

csrf跨站请求伪造

文章目录csrf跨站请求伪造1、前戏2、csrf校验2.1、from表单如何符合校验2.2、ajax如何符合校验3、csrf相关装饰器FBVCBVcsrf跨站请求伪造 1、前戏 """ 钓鱼网站搭建一个跟正规网站一摸一样的界面&#xff08;中国银行&#xff09;用户进入到我们的网站&#x…

HyperLynx(三十)高速串行总线仿真(二)

高速串行总线仿真&#xff08;二&#xff09; 仿真实例 1.探索多层板中的PCI-E串行通道 2.设置叠层以减小损耗 3.分析通道的不同配置对损耗的影响 4.检测驱动端规范 5.检查接收器规范 6.通过仿真得出整个通道的驱动约束限制 1.探索多层板中的PCI-E串行通道 在本节练习中&…

人工智能学习:Microsoft COCO数据集读取(7)

Microsoft COCO&#xff08;Common Objects in Context&#xff09;是微软研发维护的一个大型的数据集。包含了30多万张图片和91个目标分类。可用于目标识别&#xff08;Object Detection&#xff09;、场景感知&#xff08;Penoptic Segmentation&#xff09;、语义分割&#…

【数据结构】——单链表

目录 1.链表 1.1 链表的概念及结构 1.2 链表的分类 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非循环 1.3实现一个单链表&#xff08;无头单项非循环链表增删查改的实现&#xff09; 1.链表结构的创建 2.创建一个节点 3.创建一个链表 4.打印链表 5…

解读JVM级别本地缓存Caffeine青出于蓝的要诀 —— 缘何会更强、如何去上手

大家好&#xff0c;又见面了。 在前面的几篇文章中&#xff0c;我们一起聊了下本地缓存的动手实现、本地缓存相关的规范等&#xff0c;也聊了下Google的Guava Cache的相关原理与使用方式。比较心急的小伙伴已经坐不住了&#xff0c;提到本地缓存&#xff0c;怎么能不提一下“地…

软考 - 程序语言设计

程序设计语言基本概述 程序设计语言是为了书写计算机程序而人为设计的符号语言&#xff0c;用于对计算过程进行 描述、组织和推导。 低级语言&#xff1a;机器语言&#xff08;计算机硬件只能识别0和1的指令序列&#xff09;&#xff0c;汇编语言。 高级语言&#xff1a;功能…

从http请求过程分析为何不同业务的http请求都可以使用默认的缺省端口80,8080等

问题: http上传请求时url地址中一般无显示指定端口号&#xff0c;这时会使用默认的80端口&#xff1b;但是可能不止一个业务需要用到http请求&#xff0c;技术上web服务端那边肯定无法根据业务逻辑的数据格式去分别解析区分它们&#xff1b;因为业务是事先无法预知的&#xff…

【Spring Cloud实战】Consul服务注册与发现

个人博客上有很多干货&#xff0c;欢迎访问&#xff1a;https://javaxiaobear.gitee.io/ 1、简介 https://www.consul.io/docs/intro Consul is a service mesh solution providing a full featured control plane with service discovery, configuration, and segmentation f…

Flink-经典案例WordCount快速上手以及安装部署

2 Flink快速上手 2.1 批处理api 经典案例WordCount public class BatchWordCount {public static void main(String[] args) throws Exception {//1.创建一个执行环境ExecutionEnvironment env ExecutionEnvironment.getExecutionEnvironment();//2.从文件中读取数据//得到…

[附源码]java毕业设计基于Web留学管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux下C++开发笔记--编译静态链接库和动态链接库

目录 1--前言 2--生成静态链接库 3--生成动态链接库 1--前言 承接上一篇Linux下C开发笔记&#xff08;g命令的使用笔记&#xff09;&#xff0c;依据教程记录学习笔记。 2--生成静态链接库 ①回顾项目结构&#xff1a; ​ ②汇编&#xff0c;生成swap.o文件 cd srcg sw…

基于simulink的牛鞭效应模型建模与仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 牛鞭效应&#xff0c;是经济学中的一个术语&#xff0c;它也被称为需求放大效应。牛鞭效应指的是当信息流从最终客户端传输到原始供应商时&…

9.行为建模(Behavioral modeling)

9.1行为模型概述 Verilog行为模型包含控制模拟和操纵先前描述的数据类型变量的过程语句。这些语句包含在程序中。每个过程都有一个与其关联的活动流。活动开始于initial和always语句。每个initial语句和每个always语句都会启动一个单独的活动流。所有活动流都是并发的&…

【机器学习】线性分类【上】广义线性模型

主要参考了B站UP主“shuhuai008”&#xff0c;包含自己的理解。 有任何的书写错误、排版错误、概念错误等&#xff0c;希望大家包含指正。 由于字数限制&#xff0c;分成两篇博客。 【机器学习】线性分类【上】广义线性模型 【机器学习】线性分类【下】经典线性分类算法 1. 线…

C语言实现线索化二叉树(先序、中序、后序)

》》如何用C语言构建一颗二叉树? 第一种方法: ThreadTree A = (ThreadTree)malloc(sizeof(ThreadNode));A->data = { A };A->ltag = 0;A->rtag = 0;A->lchild = NULL;A->rchild = NULL;ThreadTree B = (ThreadTree)malloc(sizeof(ThreadNode));B->data =…